

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

# 在启用可信身份传播的情况下，将 Studio JupyterLab 笔记本连接到 Amazon S3 访问授权
<a name="trustedidentitypropagation-s3-access-grants"></a>

您可以使用 [Amazon S3 访问权限管控](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)，灵活地授予对 Amazon S3 位置的基于身份的精细访问控制。这会将 Amazon S3 存储桶访问权限直接授予企业用户和组。以下页面提供了有关如何将 Amazon S3 访问权限授予与 A SageMaker I 的可信身份传播配合使用的信息和说明。

## 先决条件
<a name="s3-access-grants-prerequisites"></a>

要在启用了可信身份传播的情况下将 Studio 连接到 Lake Formation 和 Athena，请确保您已满足以下先决条件：
+  [为 Studio 设置可信身份传播](trustedidentitypropagation-setup.md) 
+ 按照[开始使用 Amazon S3 访问权限管控](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)中的说明操作，为存储桶设置 Amazon S3 访问权限管控。有关更多信息，请参阅[使用 Amazon S3 访问权限管控扩展数据访问权限](https://aws.amazon.com/blogs/storage/scaling-data-access-with-amazon-s3-access-grants/)。
**注意**  
标准 Amazon S3 APIs 不能自动使用亚马逊 S3 访问授权。您必须明确使用 Amazon S3 访问授权 APIs。有关更多信息，请参阅[使用 Amazon S3 访问权限管控管理访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)。

**Topics**
+ [先决条件](#s3-access-grants-prerequisites)
+ [将 Amazon S3 访问授权与 Studio JupyterLab 笔记本连接起来](s3-access-grants-setup.md)
+ [将 Connect Studio JupyterLab 笔记本电脑与包含培训和处理任务的 Amazon S3 访问权限授予](trustedidentitypropagation-s3-access-grants-jobs.md)

# 将 Amazon S3 访问授权与 Studio JupyterLab 笔记本连接起来
<a name="s3-access-grants-setup"></a>

使用以下信息在 Studio JupyterLab 笔记本中授予 Amazon S3 访问权限。

设置 Amazon S3 访问权限管控后，向域或用户[执行角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-get-execution-role)[添加以下权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `us-east-1` 是您的 AWS 区域
+ `111122223333` 是您的 AWS 账户 ID
+ `S3-ACCESS-GRANT-ROLE` 是您的 Amazon S3 访问权限管控角色

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDataAccessAPI",
            "Effect": "Allow",
            "Action": [
                "s3:GetDataAccess"
            ],
            "Resource": [
                "arn:aws:s3:us-east-1:111122223333:access-grants/default"
            ]
        },
        {
            "Sid": "RequiredForTIP",
            "Effect": "Allow",
            "Action": "sts:SetContext",
            "Resource": "arn:aws:iam::111122223333:role/S3-ACCESS-GRANT-ROLE"
        }
    ]
}
```

------

确保您的 Amazon S3 访问权限管控角色的信任策略允许 `sts:SetContext` 和 `sts:AssumeRole` 操作。以下是在[更新角色信任策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)时使用的策略的示例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "access-grants.s3.amazonaws.com"
                ]
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                }
            }
        }
    ]
}
```

------

## 使用 Amazon S3 访问权限管控调用 Amazon S3
<a name="s3-access-grants-python-example"></a>

以下是 Python 脚本示例，说明了如何使用 Amazon S3 访问权限管控调用 Amazon S3。这假设您已经成功使用 SageMaker AI 设置了可信身份传播。

```
import boto3
from botocore.config import Config

def get_access_grant_credentials(account_id: str, target: str, 
                                 permission: str = 'READ'):
    s3control = boto3.client('s3control')
    response = s3control.get_data_access(
        AccountId=account_id,
        Target=target,
        Permission=permission
    )
    return response['Credentials']

def create_s3_client_from_credentials(credentials) -> boto3.client:
    return boto3.client(
        's3',
        aws_access_key_id=credentials['AccessKeyId'],
        aws_secret_access_key=credentials['SecretAccessKey'],
        aws_session_token=credentials['SessionToken']
    )

# Create client
credentials = get_access_grant_credentials('111122223333',
                                        "s3://tip-enabled-bucket/tip-enabled-path/")
s3 = create_s3_client_from_credentials(credentials)

s3.list_objects(Bucket="tip-enabled-bucket", Prefix="tip-enabled-path/")
```

如果使用未启用 Amazon S3 访问权限管控的 Amazon S3 存储桶的路径，则调用将失败。

有关其他编程语言，请参阅[使用 Amazon S3 访问权限管控管理访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)以了解更多信息。

# 将 Connect Studio JupyterLab 笔记本电脑与包含培训和处理任务的 Amazon S3 访问权限授予
<a name="trustedidentitypropagation-s3-access-grants-jobs"></a>

使用以下信息授予 Amazon S3 访问权限，以访问亚马逊 SageMaker培训和处理任务中的数据。

当启用了可信身份传播的用户启动需要访问 Amazon S3 数据的 SageMaker 训练或处理任务时：
+ SageMaker AI 调用 Amazon S3 访问授权，以根据用户的身份获取临时证书
+ 如果此操作成功，这些临时凭证可用于访问 Amazon S3 数据
+ 如果不成功， SageMaker AI 会重新使用 IAM 角色证书

**注意**  
要强制通过 Amazon S3 访问权限管控授予所有权限，您需要移除执行角色的相关 Amazon S3 访问权限，并将其附加到相应的 [Amazon S3 访问权限管控](https://docs.aws.amazon.com/singlesignon/latest/userguide/tip-tutorial-s3.html#tip-tutorial-s3-create-grant)。

**Topics**
+ [注意事项](#s3-access-grants-jobs-considerations)
+ [使用训练和处理作业设置 Amazon S3 访问权限管控](#s3-access-grants-jobs-setup)

## 注意事项
<a name="s3-access-grants-jobs-considerations"></a>

Amazon S3 访问授权不能与 [Pipe 模式](https://docs.aws.amazon.com/sagemaker/latest/dg/augmented-manifest-stream.html)一起使用，用于对 Amazon S3 输入进行 SageMaker 训练和处理。

启用可信身份传播后，您无法启动具有以下功能的 T SageMaker raining Job
+ 远程调试
+ 调试器
+ Profiler

启用可信身份传播后，您无法启动具有以下功能的处理作业
+ DatasetDefinition

## 使用训练和处理作业设置 Amazon S3 访问权限管控
<a name="s3-access-grants-jobs-setup"></a>

设置 Amazon S3 访问权限管控后，向域或用户[执行角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-get-execution-role)[添加以下权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `us-east-1` 是您的 AWS 区域
+ `111122223333` 是您的 AWS 账户 ID
+ `S3-ACCESS-GRANT-ROLE` 是您的 Amazon S3 访问权限管控角色

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDataAccessAPI",
            "Effect": "Allow",
            "Action": [
                "s3:GetDataAccess",
                "s3:GetAccessGrantsInstanceForPrefix"
            ],
            "Resource": [
                "arn:aws:s3:us-east-1:111122223333:access-grants/default"
            ]
        },
        {
            "Sid": "RequiredForIdentificationPropagation",
            "Effect": "Allow",
            "Action": "sts:SetContext",
            "Resource": "arn:aws:iam::111122223333:role/S3-ACCESS-GRANT-ROLE"
        }
    ]
}
```

------