跨账户脱机存储访问 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

跨账户脱机存储访问

Amazon SageMaker 功能存储允许用户在一个账户(账户 A)中创建功能组,并使用另一个账户(账户 B)中的 Amazon S3 存储桶使用离线商店配置该功能组。这可以使用以下部分中的步骤进行设置。

第 1 步:在账户 A 中设置脱机应用商店访问角色

首先,为 Amazon SageMaker 功能商店设置一个角色,以将数据写入离线商店。达到这一目的的最简单方式是使用AmazonSageMakerFeatureStoreAccess策略或使用已具有AmazonSageMakerFeatureStoreAccess附加策略。本文档将此策略称为Account-A-Offline-Feature-Store-Role-ARN.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetBucketAcl", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::*SageMaker*", "arn:aws:s3:::*Sagemaker*", "arn:aws:s3:::*sagemaker*" ] } ] }

前面的代码段显示了AmazonSageMakerFeatureStoreAccess政策。这些区域有:Resource部分的范围默认缩小为 S3 存储桶,名称包含SageMakerSagemaker,或者sagemaker. 这意味着正在使用的脱机存储 S3 存储桶必须遵循此命名约定。如果不是这种情况,或者如果您想进一步缩小资源的范围,则可以在控制台中将策略复制并粘贴到 S3 存储桶策略,自定义Resource部分将arn:aws:s3:::your-offline-store-bucket-name,然后将其附加到角色。

此外,此角色必须附加 KMS 权限。至少,它需要kms:GenerateDataKey权限,以便能够使用您的客户管理密钥写入离线商店。请参阅步骤 3,了解为什么跨账户方案需要客户托管密钥以及如何设置该密钥。以下示例显示了一个内联策略:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:*:Account-A-Account-Id:key/*" } ] }

这些区域有:Resource部分的作用域为帐户 A 中的任何密钥。要进一步缩小此范围,请在步骤 3 中设置脱机存储 KMS 密钥后,返回到此策略并将其替换为密钥 ARN。

第 2 步:在账户 B 中设置脱机存储 S3 存储桶

在账户 B 中创建 S3 存储桶。如果您使用的是默认的AmazonSageMakerFeatureStoreAccess策略时,存储桶名称必须包含SageMakerSagemaker,或者sagemaker. 如下面的示例所示,编辑存储桶策略,以允许账户 A 读取和写入对象。

本文档将以下示例存储桶策略引用为Account-B-Offline-Feature-Store-Bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3CrossAccountBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetBucketAcl" ], "Principal": { "AWS": [ "*Account-A-Offline-Feature-Store-Role-ARN*" ], }, "Resource": [ "arn:aws:s3:::offline-store-bucket-name/*", "arn:aws:s3:::offline-store-bucket-name" ] } ] }

在上一个策略中,委托人是Account-A-Offline-Feature-Store-Role-ARN,该角色是在步骤 1 中在账户 A 中创建的角色,并提供给 Amazon SageMaker 功能商店以写入离线商店。您 ARN 在Principal.

第 3 步:在账户 A 中设置脱机存储 KMS 加密密钥

Amazon SageMaker 功能存储可确保始终为脱机商店中的 S3 对象启用服务器端加密。对于跨账户使用案例,您必须提供客户管理的密钥,以便您能够控制谁可以写入脱机存储(在这种情况下,Account-A-Offline-Feature-Store-Role-ARN)以及谁可以从脱机商店读取(在这种情况下,是账户 B 中的身份)。

本文档将以下示例密钥策略引用为Account-A-Offline-Feature-Store-KMS-Key-ARN.

{ "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account-A-Account-Id:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::Account-A-Account-Id:role/Administrator", ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow Feature Store to get information about the customer managed key", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "*Account-A-Offline-Feature-Store-Role-ARN*", "*arn:aws:iam::Account-B-Account-Id:root*" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:ListAliases", "kms:ListGrants" ], "Resource": "*", } ] }

第 4 步:在帐户 A 中创建要素组

接下来,在账户 A 中创建要素组,并在账户 B 中使用一个脱机存储 S3 存储桶。要执行此操作,请为RoleArnOfflineStoreConfig.S3StorageConfig.KmsKeyIdOfflineStoreConfig.S3StorageConfig.S3Uri分别:

  • 提供的Account-A-Offline-Feature-Store-Role-ARN作为RoleArn.

  • 提供的Account-A-Offline-Feature-Store-KMS-Key-ARN对于 来说为OfflineStoreConfig.S3StorageConfig.KmsKeyId.

  • 提供的Account-B-Offline-Feature-Store-Bucket对于 来说为OfflineStoreConfig.S3StorageConfig.S3Uri.