

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 許可管理
<a name="permissions-management"></a>

本節討論設定常用IAM角色、政策和護欄以佈建和操作 SageMaker AI Studio 網域的最佳實務。

## IAM 角色和政策
<a name="iam-roles-and-policies"></a>

 最佳實務是，您可能想要先識別相關的人員和應用程式，稱為涉及 ML 生命週期的委託人，以及授予他們所需的 AWS 許可。由於 SageMaker AI 是一項受管服務，因此您也需要考慮服務主體，這些服務主體是可以代表使用者API撥打電話 AWS 的服務。下圖說明您可能想要建立的不同IAM角色，對應至組織中的不同角色。

![\[描述 SageMaker AI IAM角色的圖表。\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/sagemaker-studio-admin-best-practices/images/sagemaker-iam-roles.png)


這些角色會詳細說明，以及IAMpermissions一些需要的特定範例。
+  **ML Admin 使用者角色** — 這是為資料科學家佈建環境的委託人，方法是建立 Studio 網域和使用者設定檔 (`sagemaker:CreateDomain`、`sagemaker:CreateUserProfile`)、為使用者建立 AWS Key Management Service (AWS KMS) 金鑰、為資料科學家建立 S3 儲存貯體，以及建立 Amazon ECR 儲存庫來存放容器。他們也可以為使用者設定預設組態和生命週期指令碼、建置自訂映像並將其連接至 SageMaker AI Studio 網域，以及提供 Service Catalog 產品，例如自訂專案、Amazon EMR 範本。

   例如，由於此委託人不會執行訓練任務，因此不需要啟動 SageMaker AI 訓練或處理任務的許可。如果他們使用基礎設施做為程式碼範本，例如 CloudFormation 或 Terraform 來佈建網域和使用者，則佈建服務會擔任此角色，以代表管理員建立資源。此角色可能具有使用 的 SageMaker AI 唯讀存取權 AWS 管理主控台。

   此使用者角色還需要特定EC2許可，才能在私有 內啟動網域VPC、加密EFS磁碟區的KMS許可，以及為 Studio 建立服務連結角色的許可 (`iam:CreateServiceLinkedRole`)。我們將在文件稍後說明這些精細許可。
+  **Data Scientist 使用者角色** — 此主體是登入 SageMaker AI Studio、探索資料、建立處理和訓練任務和管道的使用者，以此類推。使用者需要的主要許可是啟動 SageMaker AI Studio 的許可，其餘政策可由 SageMaker AI 執行服務角色管理。
+  **SageMaker AI 執行服務角色**：因為 SageMaker AI 是受管服務，所以會代表使用者啟動任務。此角色通常在允許的許可方面最為廣泛，因為許多客戶選擇使用單一執行角色來執行訓練任務、處理任務或模型託管任務。雖然這是開始使用的簡單方法，但由於客戶在其旅程中成熟，他們通常會將筆記本執行角色分割為不同API動作的不同角色，特別是在部署環境中執行這些任務時。

  您在建立角色時將角色與 SageMaker AI Studio 網域建立關聯。不過，由於客戶可能需要與網域中的不同使用者設定檔相關聯的不同角色的彈性 （例如，根據其任務函數），您也可以將個別IAM角色與每個使用者設定檔建立關聯。我們建議您將單一實體使用者映射至單一使用者設定檔。如果您在建立時未將角色連接至使用者設定檔，預設行為也會將網域執行角色與使用者設定檔建立關聯 SageMaker AIStudio。

   如果多個資料科學家和 ML 工程師在專案上合作，且需要共用許可模型來存取資源，我們建議您建立團隊層級 SageMaker AI 服務執行角色，以跨團隊成員共用IAM許可。在您需要在每個使用者層級鎖定許可的執行個體中，您可以建立個別使用者層級 SageMaker AI 服務執行角色；不過，您需要注意您的服務限制。

## SageMaker AI Studio 筆記本授權工作流程
<a name="sagemaker-studio-notebook-authorization-workflow"></a>

本節討論 SageMaker AI Studio Notebook 授權如何用於資料科學家直接從 SageMaker AI Studio Notebook 建置和訓練模型時需要執行的各種活動。 SageMaker AI 網域支援兩種授權模式：
+ IAM 聯合 
+ IAM 身分中心

接下來，本文會逐步引導您完成每個模式的資料科學家授權工作流程。

![\[描述 Studio 使用者的身分驗證和授權工作流程的圖表。\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/sagemaker-studio-admin-best-practices/images/authentication-authorization-workflow.png)


### IAM 聯合： SageMaker Studio Notebook 工作流程
<a name="iam-federation-studio-notebook-workflow"></a>

1. Data Scientist 會向企業身分提供者進行身分驗證，並在 SageMaker AI 主控台中擔任 Data Scientist 使用者角色 （使用者聯合角色）。此聯合角色具有 SageMaker AI 執行角色的`iam:PassRole`API許可，可將角色 Amazon Resource Name (ARN) 傳遞至 SageMaker Studio。

1. Data Scientist 從與 SageMaker AI 執行角色相關聯的 Studio IAM使用者設定檔中選取 **Open Studio** 連結

1. 假設使用者的 SageMaker 執行角色許可，會啟動 SageMaker Studio IDE服務。此角色具有 SageMaker AI 執行角色的`iam:PassRole`API許可，可將角色傳遞ARN給 SageMaker AI 訓練服務。

1. 當 Data Scientist 在遠端運算節點中啟動訓練任務時， SageMaker AI 執行角色ARN會傳遞給 SageMaker AI 訓練服務。這會使用此項目建立新的角色工作階段，ARN並執行訓練任務。如果您需要進一步縮小訓練任務的許可範圍，您可以建立訓練特定角色，並在呼叫訓練 ARN時傳遞該角色API。



#### IAM Identity Center： SageMaker AI Studio 筆記本工作流程
<a name="idc-sagemaker-studio-notebook-sagemaker-workflow"></a>

1. Data Scientist 會向企業身分提供者進行身分驗證，然後按一下AWSIAM身分中心。Data Scientist 會與使用者身分中心入口網站一起顯示。

1. Data Scientist 按一下從其 IdC 使用者設定檔建立的 SageMaker AI Studio 應用程式連結，該設定檔與 SageMaker AI 執行角色相關聯。

1. 假設使用者的 SageMaker AI 執行角色許可，則啟動 SageMaker AI Studio IDE服務。此角色具有 SageMaker AI 執行角色的`iam:PassRole`API許可，可將角色傳遞ARN給 SageMaker AI 訓練服務。

1. 當資料科學家在遠端運算節點中啟動訓練任務時， SageMaker AI 執行角色ARN會傳遞給 SageMaker AI 訓練服務。執行角色會使用此 ARN建立新的角色工作階段ARN，並執行訓練任務。如果您需要進一步縮小訓練任務的許可範圍，您可以建立訓練特定的角色，並在呼叫訓練 ARN時傳遞該角色API。

### 部署環境： SageMaker AI 訓練工作流程
<a name="deployed-environment-sagemaker-training-workflow"></a>

在部署環境中，例如系統測試和生產，任務是透過自動排程器和事件觸發程序執行，而對這些環境的人工存取會受到 SageMaker AI Studio Notebooks 的限制。本節討論IAM角色如何在部署環境中使用 SageMaker AI 訓練管道。

![\[描述受管生產環境中 SageMaker AI 訓練工作流程的圖表。\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/sagemaker-studio-admin-best-practices/images/sagemaker-training-workflow-prod.png)


1. [Amazon EventBridge](https://aws.amazon.com/eventbridge/) 排程器會觸發 SageMaker AI 訓練管道任務。

1.  SageMaker AI 訓練管道任務會擔任 SageMaker AI 訓練管道角色來訓練模型。

1. 訓練過的 SageMaker AI 模型會註冊到 SageMaker AI 模型登錄檔中。

1. ML 工程師擔任 ML 工程師使用者角色來管理訓練管道和 SageMaker AI 模型。

## 資料許可
<a name="data-permissions"></a>

 SageMaker AI Studio 使用者存取任何資料來源的能力受與其 SageMaker AI IAM執行角色相關聯的許可所規範。附加的政策可以授權他們從特定 Amazon S3 儲存貯體或字首讀取、寫入或刪除，並連接至 Amazon RDS 資料庫。



### 存取 AWS Lake Formation 資料
<a name="accessing-aws-lake-formation-data"></a>

許多企業已開始使用 管理的資料湖[AWS Lake Formation](https://aws.amazon.com/lake-formation/)，為其使用者啟用精細的資料存取。作為這類受管資料的範例，管理員可以遮蔽某些使用者的敏感資料欄，同時仍然啟用相同基礎資料表的查詢。

若要使用 SageMaker AI Studio 的 Lake Formation，管理員可以將 SageMaker AI IAM執行角色註冊為 `DataLakePrincipals`。如需詳細資訊，請參閱 [Lake Formation 許可參考](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html)。授權後，有三種主要方法可從 SageMaker AI Studio 存取和寫入受管資料：

1. 從 SageMaker AI Studio 筆記本，使用者可以利用查詢引擎，例如 [Amazon Athena](https://aws.amazon.com/athena/) 或建置在 boto3 上的程式庫，將資料直接提取到筆記本。[AWS SDK for Pandas](https://github.com/aws/aws-sdk-pandas) （先前稱為 awswrangler) 是熱門的程式庫。以下是程式碼範例，示範其無縫程度：

   ```
   transaction_id = wr.lakeformation.start_transaction(read_only=True)
   df = wr.lakeformation.read_sql_query(
       sql=f"SELECT * FROM {table};",
       database=database,
       transaction_id=transaction_id
   )
   ```

1. 使用 SageMaker AI Studio 原生連線至 AmazonEMR，大規模讀取和寫入資料。透過使用 Apache Livy 和 Amazon EMR執行期角色， SageMaker AI Studio 已建置原生連線，可讓您將 SageMaker AI 執行IAM角色 （或其他授權角色） 傳遞至 Amazon EMR叢集以進行資料存取和處理。如需說明[，請參閱從 Studio 連線至 Amazon EMR叢集](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-connect.html)。 up-to-date  
![\[描述從 SageMaker Studio 存取 Lake Formation 所管理資料的架構的圖表。\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/sagemaker-studio-admin-best-practices/images/access-lf-data.png)

1. 使用 SageMaker AI Studio 原生連線進行[AWS Glue 互動式工作階段](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions.html)，以大規模讀取和寫入資料。 SageMaker AI Studio 筆記本具有內建核心，可讓使用者以互動方式在 上執行命令[AWS Glue](https://aws.amazon.com/glue/)。這可實現 Python、Spark 或 Ray 後端的可擴展使用，這些後端可以從受管資料來源大規模無縫讀取和寫入資料。核心允許使用者傳遞其 SageMaker 執行或其他授權IAM角色。如需詳細資訊，請參閱[使用 AWS Glue 互動式工作階段準備資料](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-glue.html)。

## 常見護欄
<a name="common-guardrails"></a>

本節討論使用IAM政策、資源政策、VPC端點政策和服務控制政策 ()，在 ML 資源上套用控管最常用的護欄SCPs。

### 限制筆記本對特定執行個體的存取
<a name="limit-notebook-access-to-specific-instances"></a>

 此服務控制政策可用來限制資料科學家在建立 Studio 筆記本時可存取的執行個體類型。請注意，任何使用者都需要「系統」執行個體，才能建立託管 SageMaker AI Studio 的預設 Jupyter Server 應用程式。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "LimitInstanceTypesforNotebooks",
             "Effect": "Deny",
             "Action": [
                 "sagemaker:CreateApp"
             ],
             "Resource": "*",
             "Condition": {
                 "ForAnyValue:StringNotLike": {
                     "sagemaker:InstanceTypes": [
                         "ml.c5.large",
                         "ml.m5.large",
                         "ml.t3.medium",
                         "system"
                     ]
                 }
             }
         }
     ]
 }
```

### 限制不合規的 SageMaker AI Studio 網域
<a name="limit-non-compliant-sagemaker-studio-domains"></a>

 對於 SageMaker AI Studio 網域，以下服務控制政策可用於強制執行流量來存取客戶資源，使其不會透過公有網際網路，而是透過客戶的 VPC：

```
{
     "Version": "2012-10-17",
     "Statement": [
         {   "Sid": "LockDownStudioDomain",
             "Effect": "Deny",
             "Action": [
                 "sagemaker:CreateDomain"
             ],
             "Resource": "*",
             "Condition": {
                          "StringNotEquals": {"sagemaker:AppNetworkAccessType": "VpcOnly"
                 },
                 "Null": {
                         "sagemaker:VpcSubnets": "true",
                         "sagemaker:VpcSecurityGroupIds": "true"
                 }
             }
         }
     ]
 }
```

### 限制啟動未經授權的 SageMaker AI 映像
<a name="limit-launching-unauthorized-sagemaker-images"></a>

 下列政策可防止使用者在其網域內啟動未經授權的 SageMaker AI 映像：f

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Action": [
                 "sagemaker:CreateApp"
              ],
             "Effect": "Allow",
             "Resource": "*",
             "Condition": {
                 "ForAllValues:StringNotLike": {
                     "sagemaker:ImageArns": 
                         [
                         "arn:aws:sagemaker:*:*:image/{ImageName}"
                         ]
                 }
             }
         }
     ]
 }
```

### 僅透過 SageMaker AI VPC端點啟動筆記本
<a name="launch-notebooks-only-via-sagemaker-vpc-endpoints"></a>

 除了 SageMaker AI 控制平面的VPC端點之外， SageMaker AI 還支援VPC端點讓使用者連線到 [SageMaker AI Studio 筆記本](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-interface-endpoint.html)或 [SageMaker AI 筆記本執行個體](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-interface-endpoint.html)。如果您已經為 SageMaker AI Studio/筆記本執行個體設定VPC端點，則下列IAM條件索引鍵只會允許透過 SageMaker AI Studio VPC端點或 SageMaker AI API端點建立 SageMaker 與 AI Studio 筆記本的連線。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "EnableSageMakerStudioAccessviaVPCEndpoint",
             "Effect": "Allow",
             "Action": [
                 "sagemaker:CreatePresignedDomainUrl",
                 "sagemaker:DescribeUserProfile"
             ],
             "Resource": "*",
             "Condition": {
                 "ForAnyValue:StringEquals": {
                     "aws:sourceVpce": [
                         "vpce-111bbccc",
                         "vpce-111bbddd"
                     ]
                 }
             }
         }
     ]
 }
```

### 限制 SageMaker AI Studio 筆記本存取有限的 IP 範圍
<a name="limit-sagemaker-studio-notebook-access-to-a-limited-ip-range"></a>

 公司通常會將 SageMaker AI Studio 存取限制在特定允許的公司 IP 範圍。下列具有 `SourceIP` 條件索引鍵IAM的政策可以限制這一點。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "EnableSageMakerStudioAccess",
             "Effect": "Allow",
             "Action": [
                 "sagemaker:CreatePresignedDomainUrl",
                 "sagemaker:DescribeUserProfile"
             ],
             "Resource": "*",
             "Condition": {
                 "IpAddress": {
                     "aws:SourceIp": [
                         "192.0.2.0/24",
                         "203.0.113.0/24"
                     ]
                 }
             }
         }
     ]
 }
```

### 防止 SageMaker AI Studio 使用者存取其他使用者設定檔
<a name="prevent-sagemaker-studio-users-from-accessing-other-user-profiles"></a>

身為管理員，當您建立使用者設定檔時，請確定設定檔已使用 SageMaker AI Studio 使用者名稱加上標籤索引鍵 `studiouserid`。委託人 （連接至使用者的使用者或角色） 也應該有具有金鑰的標籤 `studiouserid`（此標籤可以命名為任何項目，且不限於 `studiouserid`)*。*

 接著，將下列政策連接至使用者在啟動 SageMaker AI Studio 時將擔任的角色。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AmazonSageMakerPresignedUrlPolicy",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreatePresignedDomainUrl"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "sagemaker:ResourceTag/studiouserid": "${aws:PrincipalTag/studiouserid}"
                }
            }
        }
    ]
}
```

### 強制標記
<a name="enforce-tagging"></a>

 資料科學家需要使用 SageMaker AI Studio 筆記本來探索資料，以及建置和訓練模型。將標籤套用至筆記本有助於監控用量和控制成本，並確保擁有權和可稽核性。

 對於 SageMaker AI Studio 應用程式，請確保已標記使用者設定檔。標籤會自動從使用者設定檔傳播到應用程式。若要使用標籤強制建立使用者設定檔 （透過 CLI和 支援SDK)，請考慮將此政策新增至 管理員角色：

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceUserProfileTags",
            "Effect": "Allow",
            "Action": "sagemaker:CreateUserProfile",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "studiouserid"
                    ]
                }
            }
        }
    ]
}
```

 對於其他資源，例如訓練任務和處理任務，您可以使用下列政策來強制標記：

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceTagsForJobs",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateProcessingJob",
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "studiouserid"
                    ]
                }
            }
        }
    ]
}
```

### SageMaker AI Studio 中的根存取
<a name="root-access-in-sagemaker-studio"></a>

 在 SageMaker AI Studio 中，筆記本在 Docker 容器中執行，根據預設，該容器沒有主機執行個體的根存取權。同樣地，除了預設執行身分使用者之外，容器內的所有其他使用者 ID 範圍都會在主機執行個體本身上重新映射為非特殊權限使用者IDs。因此，權限提升的威脅僅限於筆記本容器本身。

 建立自訂映像時，您可能想要為使用者提供更嚴格的控制項的非根許可；例如，避免以根目錄執行不理想的程序，或安裝公開可用的套件。在這種情況下，您可以建立映像，以在 Dockerfile 中以非根使用者身分執行。無論您是將使用者建立為根或非根，您都需要確保 UID/GID of the user is identical to the UID/GID中的 [AppImageConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html) 適用於自訂應用程式的 ，這會為 SageMaker AI 建立使用自訂映像執行應用程式的組態。例如，如果您的 Dockerfile 是為非根使用者建置的，例如：

```
ARG NB_UID="1000"
ARG NB_GID="100"
...
USER $NB_UID
```

 `AppImageConfig` 檔案需要在其 GID中提及相同的 UID和 `KernelGatewayConfig`：

```
{
    "KernelGatewayImageConfig": {
        "FileSystemConfig": {
            "DefaultUid": 1000,
            "DefaultGid": 100
        }
    }
}
```

 自訂映像的可接受 UID/GID 值為 Studio 映像的 0/0 和 1000/100。如需建置自訂映像和相關`AppImageConfig`設定的範例，請參閱此 [Github 儲存庫](https://github.com/aws-samples/sagemaker-studio-custom-image-samples)。

 為了避免使用者篡改，請勿將 `CreateAppImageConfig`、 `UpdateAppImageConfig`或 `DeleteAppImageConfig`許可授予 SageMaker AI Studio 筆記本使用者。