

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

# 跨账户离线存储访问
<a name="feature-store-cross-account-access-offline-store"></a>

 Amazon F SageMaker eature Store 允许用户在一个账户（账户 A）中创建功能组，并使用另一个账户（账户 B）中的 Amazon S3 存储桶使用离线商店对其进行配置。您可以使用下一节中的步骤进行此项设置。

**Topics**
+ [步骤 1：在账户 A 中设置离线存储访问角色](#feature-store-setup-step1)
+ [步骤 2：在账户 B 中设置离线存储 Amazon S3 存储桶](#feature-store-setup-step2)
+ [第 3 步：在账户 A 中设置离线商店 AWS KMS 加密密钥](#feature-store-setup-step3)
+ [步骤 4：在账户 A 中创建特征组](#feature-store-setup-step4)

## 步骤 1：在账户 A 中设置离线存储访问角色
<a name="feature-store-setup-step1"></a>

首先，为 Amazon Feature SageMaker Store 设置一个角色来将数据写入离线商店。实现此目的的最简单方法是使用 `AmazonSageMakerFeatureStoreAccess` 策略创建新角色，或使用已附加 `AmazonSageMakerFeatureStoreAccess` 策略的现有角色。本文档将该策略称为 `Account-A-Offline-Feature-Store-Role-ARN`。

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

****  

```
{
    "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` 部分的范围缩小到名称包含 `SageMaker`、`Sagemaker` 或 `sagemaker` 的 S3 存储桶。这意味着所使用的离线存储 Amazon S3 存储桶必须遵循此命名约定。如果不是这种情况，或者您想进一步缩小资源范围，则可以在控制台中将该策略复制并粘贴到您的 Amazon S3 存储桶策略中，将 `Resource` 部分自定义为 `arn:aws:s3:::your-offline-store-bucket-name`，然后附加到角色。

此外，此角色必须附加 AWS KMS 权限。至少需要获得 `kms:GenerateDataKey` 权限，才能使用客户托管密钥写入离线存储。请参阅步骤 3，了解为什么跨账户场景需要客户托管密钥以及如何进行设置。以下示例显示了一个内联策略：

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

****  

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

------

此策略的 `Resource` 部分适用于账户 A 中的任何密钥。要进一步缩小范围，在步骤 3 中设置离线存储 KMS 密钥后，请返回到此策略并将其替换为密钥 ARN。

## 步骤 2：在账户 B 中设置离线存储 Amazon S3 存储桶
<a name="feature-store-setup-step2"></a>

在账户 B 中创建 Amazon S3 存储桶。如果您使用的是默认 `AmazonSageMakerFeatureStoreAccess` 策略，则存储桶名称必须包含 `SageMaker`、`Sagemaker` 或 `sagemaker`。如以下示例所示编辑存储桶策略，以允许账户 A 读取和写入对象。

本文档将以下示例存储桶策略称为 `Account-B-Offline-Feature-Store-Bucket`。

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

****  

```
{
    "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 F SageMaker eature Store 以写入线下商店。您可以在 `Principal` 下提供多个 ARN 角色。

## 第 3 步：在账户 A 中设置离线商店 AWS KMS 加密密钥
<a name="feature-store-setup-step3"></a>

Amazon F SageMaker eature Store 可确保始终为离线商店中的 Amazon S3 对象启用服务器端加密。对于跨账户使用案例，您必须提供客户托管密钥，这样便能控制谁可以写入离线存储（在本例中为账户 A 的 `Account-A-Offline-Feature-Store-Role-ARN`）以及谁可以从离线存储读取信息（在本例中为账户 B 的身份）。

本文档将以下示例密钥策略称为 `Account-A-Offline-Feature-Store-KMS-Key-ARN`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "key-consolepolicy-3",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                "arn:aws:iam::111122223333: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::444455556666: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 name="feature-store-setup-step4"></a>

接下来，在账户 A 中创建特征组，在账户 B 中创建离线存储 Amazon S3 存储桶。为此，请分别为 `RoleArn`、`OfflineStoreConfig.S3StorageConfig.KmsKeyId` 和 `OfflineStoreConfig.S3StorageConfig.S3Uri` 提供以下参数：
+ 提供 `Account-A-Offline-Feature-Store-Role-ARN` 作为 `RoleArn`。
+ 为 `OfflineStoreConfig.S3StorageConfig.KmsKeyId` 提供 `Account-A-Offline-Feature-Store-KMS-Key-ARN`。
+ 为 `OfflineStoreConfig.S3StorageConfig.S3Uri` 提供 `Account-B-Offline-Feature-Store-Bucket`。