

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 权限管理
<a name="permissions-management"></a>

本节讨论设置用于配置和运营 SageMaker AI Studio 域的常用IAM角色、策略和防护栏的最佳实践。

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

 作为最佳实践，您可能需要首先确定机器学习生命周期中涉及的相关人员和应用程序（即委托人），以及需要向他们授予哪些 AWS 权限。由于 A SageMaker I 是一项托管服务，因此您还需要考虑服务主体，即可以代表用户API拨打电话的 AWS 服务。下图说明了您可能要创建的不同IAM角色，这些角色对应于组织中的不同角色。

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


详细描述了这些角色，并提供了一些IAMpermissions他们需要的具体示例。
+  **机器学习管理员用户角色** — 该负责人通过创建工作室域和用户个人资料 (`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`)。此类精细权限将在后文说明。
+  **数据科学家用户角色** — 该主体是登录 SageMaker AI Studio、浏览数据、创建处理和训练作业和管道等的用户。用户需要的主要权限是启动 SageMaker AI Studio 的权限，其余策略可以由 SageMaker AI 执行服务角色管理。
+  **SageMaker AI 执行服务角色** — 由于 SageMaker AI 是一项托管服务，因此它代表用户启动作业。由于很多客户都选用单个执行角色来运行训练作业、处理作业或模型托管作业，所以就获准权限而言，此角色往往是最常用的角色。虽然这是一种简单的入门方法，但由于客户在旅程中成熟，他们通常会将笔记本执行角色分成不同的角色来执行不同的API操作，尤其是在已部署的环境中运行这些作业时。

  创建角色后，您可以将角色与 SageMaker AI Studio 域相关联。但是，由于客户可能需要灵活地将不同的角色与域中的不同用户配置文件相关联（例如，根据他们的工作职能），因此您也可以将单独的IAM角色与每个用户配置文件相关联。亚马逊建议您将单个物理用户映射到对应的用户配置文件。如果您在创建用户配置文件时没有将角色附加到用户配置文件，则默认行为是将 SageMaker AIStudio域执行角色与用户配置文件关联起来。

   如果多个数据科学家和机器学习工程师共同处理一个项目，并且需要共享权限模型来访问资源，我们建议您创建一个团队级的 SageMaker AI 服务执行角色，以便在团队成员之间共享IAM权限。在需要锁定每个用户级别的权限的情况下，您可以创建单独的用户级 SageMaker AI 服务执行角色；但是，您需要注意自己的服务限制。

## SageMaker AI Studio 笔记本授权工作流程
<a name="sagemaker-studio-notebook-authorization-workflow"></a>

本节讨论 SageMaker AI Studio 笔记本授权如何适用于数据科学家需要执行的各种活动，以便直接从 SageMaker AI Studio Notebook 上构建和训练模型。A SageMaker I 域支持两种授权模式：
+ IAM 联合身份验证 
+ IAM身份中心

下文将介绍每种模式的数据科学家授权工作流。

![\[图中描述了适用于 Studio 用户的身份验证和授权工作流。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/sagemaker-studio-admin-best-practices/images/authentication-authorization-workflow.png)


### IAM联合： SageMaker Studio 笔记本工作流程
<a name="iam-federation-studio-notebook-workflow"></a>

1. 数据科学家向其企业身份提供者进行身份验证，并在 SageMaker AI 控制台中担任数据科学家用户角色（用户联合角色）。此联合角色拥有对 SageMaker AI 执行角色的`iam:PassRole`API权限，可以将角色亚马逊资源名称 (ARN) 传递给 SageMaker Studio。

1. 数据科学家从其 **Studio IAM 用户个人资料中选择与 SageMaker AI 执行角色关联的 Open** Studio 链接

1. 假设用户配置文件具有 SageMaker 执行角色权限， SageMaker Studio IDE 服务即会启动。此角色拥有对 SageMaker AI 执行角色的`iam:PassRole`API权限，可以将该角色ARN传递给 SageMaker AI 训练服务。

1. 当数据科学家在远程计算节点中启动训练作业时， SageMaker AI 执行角色ARN将传递给 SageMaker AI 训练服务。这将使用它创建一个新的角色会话ARN并运行训练作业。如果您需要进一步缩小训练作业的权限范围，则可以创建特定于训练的角色并在调用 training ARN 时传递该角色API。



#### IAM身份中心： SageMaker AI Studio 笔记本工作流程
<a name="idc-sagemaker-studio-notebook-sagemaker-workflow"></a>

1. 数据科学家向其企业身份提供商进行身份验证，然后单击 Ident AWS IAM ity Center。数据科学家会看到 Identity Center 用户门户。

1. 数据科学家点击根据其 iDC 用户个人资料创建的 SageMaker AI Studio 应用程序链接，该链接与 SageMaker AI 执行角色相关联。

1. 假设用户配置文件具有 SageMaker AI 执行角色权限，则启动 A SageMaker I 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 Notebook 对这些环境的访问受到限制。本节讨论IAM角色如何在已部署环境中与 SageMaker AI 训练管道配合使用。

![\[描绘托管生产环境中的 A SageMaker I 训练工作流程的示意图。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/sagemaker-studio-admin-best-practices/images/sagemaker-training-workflow-prod.png)


1. [Amazon EventBridge](https://aws.amazon.com/eventbridge/) 计划程序会触发 SageMaker AI 训练管道作业。

1. A SageMaker I 训练管道作业担任 SageMaker AI 训练管道角色来训练模型。

1. 经过训练的 SageMaker AI 模型已注册到 SageMaker AI 模型注册表中。

1. 机器学习工程师扮演机器学习工程师用户角色来管理训练管道和 SageMaker AI 模型。

## 数据权限
<a name="data-permissions"></a>

 SageMaker AI Studio 用户访问任何数据源的能力受与其 SageMaker AI IAM 执行角色关联的权限的约束。所附的策略可以授权他们读取、写入或删除某些 Amazon S3 存储桶或前缀，以及连接到 Ama RDS zon 数据库。



### 访问 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. 在 A SageMaker I Studio 笔记本上，用户可以利用 [Amazon A](https://aws.amazon.com/athena/) thena 等查询引擎或基于 boto3 构建的库将数据直接提取到笔记本中。f [AWSSDKor 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 与亚马逊的原生连接EMR来大规模读取和写入数据。通过使用 Apache Livy 和 Amazon EMR 运行时角色， SageMaker AI Studio 建立了原生连接，允许您将 SageMaker 人工智能执行IAM角色（或其他授权角色）传递给亚马逊EMR集群进行数据访问和处理。有关 up-to-date说明，请参阅[从 Studio 连接到亚马逊EMR集群](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-connect.html)。  
![\[该图描绘了访问由 Lake Formation 从 SageMaker Studio 管理的数据的架构。\]](http://docs.aws.amazon.com/zh_cn/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>

本节讨论使用策略、资源策略、VPC端点策略和服务控制IAM策略（）对机器学习资源进行监管的最常用防护措施。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端点之外，A SageMaker I 还支持用户连接到 AI [Studio 笔记本电脑或 SageMaker A SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-interface-endpoint.html) [I 笔记本实例](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-interface-endpoint.html)的VPC端点。如果您已经为 SageMaker AI Studio/Notebook 实例设置了VPC终端节点，则以下IAM条件键仅允许通过 SageMaker AI Studio VPC 终端节点或 AI 终端节点连接到 SageMaker AI Studio 笔记本电脑。 SageMaker API

```
{
     "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 容器中运行，默认情况下，该容器没有主机实例的根访问权限。同样，除了默认的 run-as user 之外，容器内的所有其他用户 ID 范围都将在主机实例本身IDs上重新映射为非特权用户。这样就只有笔记本容器本身会产生权限升级威胁。

 创建自定义映像时，可能要为用户提供非根权限以加强控制；例如，不以根用户身份运行不良流程或安装公开软件包。在此情况下，您可以在 Dockerfile 中创建以非根用户身份运行的映像。无论您以 root 用户还是非 root 用户身份创建用户，都需要确保自定义应用程序UID/GID of the user is identical to the UID/GID中的，这会为 SageMaker AI 创建使用自定义映像运行应用程序的配置。[AppImageConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html)如果您是为了以下非根用户构建的 Dockerfile：

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

 该`AppImageConfig`文件需要提及同样的内容UID，并在其GID中`KernelGatewayConfig`：

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

 对于自定义图像，Studio 图像的可接受UID/GID值为 0/0 和 1000/100。有关构建自定义映像和 `AppImageConfig` 关联设置的示例，请参阅此 [Github 存储库](https://github.com/aws-samples/sagemaker-studio-custom-image-samples)。

 为避免用户篡改此权限，请勿向 SageMaker AI Studio 笔记本电脑用户授予`CreateAppImageConfig``UpdateAppImageConfig`、或`DeleteAppImageConfig`权限。