本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
授予跨账户 Amazon S3 存储的权限
在设置用户访问 Canvas 的 SageMaker 域名或用户配置文件时,您需要为 SageMaker Canvas 项目指定 Amazon S3 存储位置。这些构件包括输入数据集、模型构件、预测和其他应用程序数据的保存副本。您可以使用默认 SageMaker 创建的 Amazon S3 存储桶,也可以自定义存储位置并指定自己的存储桶来存储 Canvas 应用程序数据。
您可以在另一个 AWS 账户中指定 Amazon S3 存储桶来存储您的 Canvas 数据,但首先必须授予跨账户权限,这样 Canvas 才能访问该存储桶。
以下几节介绍如何向 Canvas 授予通过另一个账户中 Amazon S3 存储桶上传和下载对象的权限。当您的存储桶使用加密时,还有其他权限 AWS KMS。
要求
在开始之前,请查看以下要求:
跨账户 Amazon S3 存储桶(以及任何关联的 AWS KMS 密钥)必须与 Canvas 用户域或用户个人资料位于同一个 AWS 区域。
您的 Canvas 存储位置中训练文件夹的最终 Amazon S3 URI 必须不超过 128 个字符。最终的 S3 URI 由您的存储桶路径
s3://<your-bucket-name>/<folder-name>/
以及 Canvas 添加到存储桶的路径组成:Canvas/<user-profile-name>/Training
. 例如,少于 128 个字符的可接受路径是s3://<amzn-s3-demo-bucket>/<machine-learning>/Canvas/<user-1>/Training
。
跨账户 Amazon S3 存储桶的权限
下一节将概述授予必要权限以便 Canvas 可以在其他账户中访问您的 Amazon S3 存储桶的基本步骤。有关更详细的说明,请参阅《Amazon S3 用户指南》中的示例 2:存储桶拥有者授予跨账户存储桶权限。
-
在账户 A 中创建 Amazon S3 存储桶
bucketA
。 -
Canvas 用户存在于另一个名为账户 B 的账户中。在以下步骤中,我们将 Canvas 用户的IAM角色称为账户 B
roleB
中的角色。通过附加IAM策略,授予账户 B
roleB
中的IAM角色在账户 AbucketA
中下载 (GetObject
PutObject
) 和上传 () 对象的权限。要限制对特定存储桶文件夹的访问权限,请在资源元素中定义文件夹名称,例如
arn:aws:s3:::<bucketA>/FolderName/*
。有关更多信息,请参阅如何使用IAM策略授予用户对特定文件夹的特定访问权限? 注意
存储桶级别的操作(例如
GetBucketCors
和GetBucketLocation
)应添加在存储桶级别的资源上,而不是文件夹上。以下示例IAM策略授予
roleB
访问中对象所需的权限bucketA
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucketA/FolderName/*", ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::bucketA", ] } ] }
-
bucketA
在账户 A 中配置存储桶策略,以向账户 BroleB
中的IAM角色授予权限。注意
管理员还必须关闭存储桶权限部分下的阻止所有公开访问。
下面是
bucketA
的存储桶策略示例,用于向roleB
授予必要的权限:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::bucketA/FolderName/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:ListBucket", "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucketA" } ] }
配置上述权限后,账户 B 中的 Canvas 用户配置文件现在可以使用账户 A 中的 Amazon S3 存储桶作为 Canvas 构件的存储位置。
使用加密的跨账户 Amazon S3 存储桶的权限 AWS KMS
以下过程向您展示如何授予必要的权限,以便 Canvas 可以在另一个使用加密的账户中访问您的 Amazon S3 存储桶 AWS KMS。相关步骤与上面的过程类似,但需要额外的权限。有关授予跨账户KMS密钥访问权限的更多信息,请参阅AWS KMS 开发者指南中的允许其他账户中的用户使用KMS密钥。
-
在账户 A 中创建亚马逊 S3 存储桶和亚马逊 S3 KMS 密钥
bucketA
s3KmsInAccountA
-
Canvas 用户存在于另一个名为账户 B 的账户中。在以下步骤中,我们将 Canvas 用户的IAM角色称为账户 B
roleB
中的角色。向账户 B
roleB
中的IAM角色授予执行以下操作的权限:通过账户 A 中的
bucketA
下载 (GetObject
) 和上传 (PutObject
) 对象。访问账户 A
s3KmsInAccountA
中的 AWS KMS 密钥
以下示例IAM策略授予
roleB
访问中的对象bucketA
和使用KMS密钥所需的权限s3KmsInAccountA
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucketA/FolderName/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::bucketA" ] }, { "Action": [ "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlainText", "kms:Decrypt" ], "Effect": "Allow", "Resource": "arn:aws:kms:{region}:accountA:key/s3KmsInAccountA" } ] }
-
为账户 A 配置存储桶策略
bucketA
和密钥策略,以向账户 BroleB
中的IAM角色授予权限。s3KmsInAccountA
下面是
bucketA
的存储桶策略示例,用于向roleB
授予必要的权限:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::bucketA/FolderName/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucketA" } ] }
以下示例是您附加到账户 A
s3KmsInAccountA
中的KMS密钥以授予roleB
访问权限的密钥策略。有关如何创建和附加密钥策略声明的更多信息,请参阅《AWS KMS 开发人员指南》中的创建密钥策略。{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::accountB:role/roleB" ] }, "Action": [ "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlainText", "kms:Decrypt" ], "Resource": "*" }
配置上述权限后,账户 B 中的 Canvas 用户个人资料现在可以使用账户 A 中的加密的 Amazon S3 存储桶作为 Canvas 项目的存储位置。