

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

# 启用跨账户访问
<a name="feature-store-cross-account-access"></a>

访问权限包括只读、读写和管理员权限。以下列出了每个权限的权限名称、描述和特定 APIs 可用权限列表：
+ 只读权限 (`AWSRAMPermissionSageMakerFeatureGroupReadOnly`)：读取权限允许资源使用者账户读取共享特征组中的记录并查看详细信息和元数据。
  + `DescribeFeatureGroup`：检索有关特征组及其配置的详细信息
  + `DescribeFeatureMetadata`：显示特征组中特征的元数据
  + `BatchGetRecord`：从特征组中检索一批记录
  + `GetRecord`：从特征组中检索一条记录
+ 读写权限 (`AWSRAMPermissionSagemakerFeatureGroupReadWrite`)：读写权限除读取权限外，还允许资源使用者账户将记录写入共享特征组或从共享特征组中删除记录。
  + `PutRecord`：将记录写入特征组
  + `DeleteRecord`：从特征组中删除记录
  + APIs 列在 `AWSRAMPermissionSageMakerFeatureGroupReadOnly`
+ 管理员权限 (`AWSRAMPermissionSagemakerFeatureGroupAdmin`)：管理员权限除读写权限外，还允许资源使用者账户更新共享特征组中特征的描述和参数，以及更新共享特征组的配置。
  + `DescribeFeatureMetadata`：显示特征组中特征的元数据
  + `UpdateFeatureGroup`：更新特征组配置
  + `UpdateFeatureMetadata`：更新特征组中某项特征的描述和参数
  + APIs 列在 `AWSRAMPermissionSagemakerFeatureGroupReadWrite`

在以下主题中，您可以了解如何共享在线和离线特征组 - 在共享方面，两者有区别。

**Topics**
+ [与之共享在线功能组 AWS Resource Access Manager](feature-store-cross-account-access-online-store.md)
+ [跨账户离线存储访问](feature-store-cross-account-access-offline-store.md)

# 与之共享在线功能组 AWS Resource Access Manager
<a name="feature-store-cross-account-access-online-store"></a>

使用 AWS Resource Access Manager (AWS RAM)，您可以安全地与其他人共享 Amazon F SageMaker eature Store 在线功能组 AWS 账户。您的团队成员可以浏览和访问跨多个账户的特征组，从而提高数据一致性，简化协作并减少重复工作。

资源所有者账户可以通过使用授予权限与其他 AWS 账户 人共享资源 AWS RAM。资源使用者账户是指 AWS 账户 与之共享资源的人，受资源所有者账户授予的权限的限制。如果你是一个组织，你可能想利用这个优势 AWS Organizations，你可以与个人 AWS 账户、组织中的所有账户或组织单位 (OU) 中的所有账户共享资源，而不必对每个账户应用权限。有关教学视频以及有关 AWS RAM 概念和优势的更多信息，请参阅[什么是 AWS Resource Access Manager？](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 在《 AWS RAM 用户指南》中。

请注意，每个 AWS 账户每 API 的每秒事务数 (TPS) 有一个软最大限制。最大 TPS 限制适用于资源拥有者账户中资源的*所有* 事务，因此资源使用者账户中的事务也计入该最大限制。有关服务配额以及如何请求增加配额的更多信息，请参阅 [AWS 服务配额](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

本节介绍资源拥有者账户如何选择特征组并向资源使用者账户授予访问权限（只读、读写和管理员权限），然后介绍具有访问权限的资源使用者账户如何使用这些特征组。访问权限不允许资源使用者账户搜索和发现特征组。要允许资源使用者账户搜索和发现资源拥有者账户中的特征组，资源拥有者账户必须向资源使用者账户授予可发现性权限，这样，资源使用者账户就可以发现资源拥有者账户中的所有特征组。有关授予可发现性权限的更多信息，请参阅[启用跨账户可发现性](feature-store-cross-account-discoverability.md)。

以下主题介绍如何使用 AWS RAM 控制台共享 Feature Store 在线商店资源。有关 AWS 使用 AWS RAM 控制台或 AWS Command Line Interface (AWS CLI) 共享资源和在其中授予权限的信息，请参阅[共享您的 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)。

**Topics**
+ [共享您的特征组实体](feature-store-cross-account-access-online-store-share-feature-group.md)
+ [使用具有访问权限的在线存储共享资源](feature-store-cross-account-access-online-store-use.md)

# 共享您的特征组实体
<a name="feature-store-cross-account-access-online-store-share-feature-group"></a>

作为资源所有者账户，您可以通过在 AWS Resource Access Manager (AWS RAM) 中创建资源共享，使用 Amazon F SageMaker eature Store 的功能组资源类型来共享功能组实体。

使用以下说明以及《 AWS RAM 用户指南》中的 “[共享您的 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create)” 说明。

使用 AWS RAM 控制台共享功能组资源类型时，您需要做出以下选择。

1. **指定资源共享详细信息**：
   + 资源类型：选择 **SageMaker AI 功能组**。
   + ARN：选择具有如下格式的特征组 ARN：`arn:aws:sagemaker:us-east-1:111122223333:feature-group/your-feature-group-name`。

     `us-east-1` 是资源所在的区域，`111122223333` 是资源拥有者账户 ID，`your-feature-group-name` 是要共享的特征组。
   + 资源 ID：选择要向其授予访问权限的特征组 `your-feature-group-name`。

1. **关联托管权限**：
   + 托管权限：选择访问权限。有关访问权限的更多信息，请参阅[启用跨账户访问](feature-store-cross-account-access.md)。

1. **向主体授予访问权限**：
   + 选择主体类型（AWS 账户、组织、组织部门、IAM 角色或 IAM 用户），然后输入相应的 ID 或 ARN。

1. **审核和创建**：
   + 审核，然后选择**创建资源共享**。

授予任何访问权限都不会向资源使用者账户授予可发现性权限，因此具有访问权限的资源使用者账户无法搜索和发现这些特征组。要允许资源使用者账户搜索和发现资源拥有者账户中的特征组，资源拥有者账户必须向资源使用者账户授予可发现性权限，这样，资源使用者账户就可以发现资源拥有者账户中的*所有* 特征组。有关授予可发现性权限的更多信息，请参阅[启用跨账户可发现性](feature-store-cross-account-discoverability.md)。

如果仅向资源使用者账户授予访问权限，则仍可以在 AWS RAM上查看特征组实体。要查看上的资源 AWS RAM，请参阅 AWS RAM 用户指南中的[访问与您共享的 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared.html)。

可能需要花几分钟时间，才能完成资源共享和主体（或资源使用者账户）关联。设置资源共享和主体关联后，指定的资源使用者账户会收到加入资源共享的邀请。资源使用者帐户可以通过在 AWS RAM 控制台中打开 “[与我共享：资源共享](https://console.aws.amazon.com/ram/home#SharedResourceShares)” 页面来查看和接受邀请。在以下情况下不会发送邀请：
+ 如果您是组织中的一员， AWS Organizations 并且启用了组织中的共享，则该组织中的委托人无需邀请即可自动访问共享资源。
+ 如果您与拥有 AWS 账户 该资源的用户共享，则该账户中的委托人无需邀请即可自动访问共享资源。

有关接受和使用资源共享的更多信息 AWS RAM，请参阅 AWS RAM 用户指南中的[使用共享 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-shared.html)。

## 使用共享在线商店功能组 适用于 Python (Boto3) 的 AWS SDK
<a name="feature-store-cross-account-access-online-store-python-sdk-example"></a>

您可以使用 fo 适用于 Python (Boto3) 的 AWS SDK r AWS RAM APIs 来创建资源共享。以下代码举例说明了资源拥有者账户 ID `111122223333` 创建名为 `'test-cross-account-fg'` 的资源共享，与资源使用者账户 ID `444455556666` 共享名为 `'my-feature-group'` 的特征组，同时授予 `AWSRAMPermissionSageMakerFeatureGroupReadOnly` 权限。有关访问权限的更多信息，请参阅[启用跨账户访问](feature-store-cross-account-access.md)。要将 Python SDK 用于 AWS RAM APIs，您需要附加具有执行角色的 AWS RAM 完全访问托管策略。有关更多详细信息，请参阅 [create\$1resource\$1shar](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ram/client/create_resource_share.html) AWS RAM e API。

```
import boto3

# Choose feature group name
feature_group_name = 'my-feature-group' # Change to your feature group name 

# Share 'my-feature-group' with other account
ram_client = boto3.client("ram")
response = ram_client.create_resource_share(
    name='test-cross-account-fg', # Change to your custom resource share name
    resourceArns=[
        'arn:aws:sagemaker:us-east-1:111122223333:feature-group/' + feature_group_name, # Change 111122223333 to the resource owner account ID
    ],
    principals=[
        '444455556666', # Change 444455556666 to the resource consumer account ID
    ],
    permissionArns = ["arn:aws:ram::aws:permission/AWSRAMPermissionSageMakerFeatureGroupReadOnly"]
)
```

主体是安全系统的参与者。在基于资源的策略中，允许的主体是 IAM 用户、IAM 角色、根账户或其他 AWS 服务。

# 使用具有访问权限的在线存储共享资源
<a name="feature-store-cross-account-access-online-store-use"></a>

资源拥有者账户必须向资源使用者账户授予权限，使其对共享资源具有可发现性、只读、写入或管理员权限。在以下几节中，我们提供了有关如何接受访问共享资源的邀请的说明，并提供了一些示例来说明如何查看共享特征组并与之交互。

**使用 AWS RAM接受访问共享资源的邀请**

一旦资源拥有者账户授予了权限，作为资源使用者账户，您将收到加入资源共享的邀请。要接受任何共享资源的邀请，请在 AWS RAM 控制台中打开 “[与我共享：资源](https://console.aws.amazon.com/ram/home#SharedResourceShares)共享” 页面，查看和回复邀请。在以下情况下不会发送邀请：
+ 如果您是组织中的一员， AWS Organizations 并且启用了组织中的共享，则该组织中的委托人无需邀请即可自动访问共享资源。
+ 如果您与拥有 AWS 账户 该资源的用户共享，则该账户中的委托人无需邀请即可自动访问共享资源。

有关接受和使用资源共享的更多信息 AWS RAM，请参阅 AWS RAM 用户指南中的[使用共享 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-shared.html)。

## 在 AWS RAM 控制台上查看共享资源
<a name="feature-store-cross-account-access-online-store-use-view"></a>

授予任何访问权限都不会向资源使用者账户授予可发现性权限，因此具有访问权限的资源使用者账户无法搜索和发现这些特征组。要允许资源使用者账户搜索和发现资源拥有者账户中的特征组，资源拥有者账户必须向资源使用者账户授予可发现性权限，这样，资源使用者账户就可以发现资源拥有者账户中的所有特征组。有关授予可发现性权限的更多信息，请参阅[启用跨账户可发现性](feature-store-cross-account-discoverability.md)。

要在控制台上查看共享资源， AWS RAM 请在控制台中打开 “[与我共享：资源](https://console.aws.amazon.com/ram/home#SharedResourceShares)共享” 页面。 AWS RAM 

## 共享特征组的读写操作示例
<a name="feature-store-cross-account-access-online-store-use-read-write-actions"></a>

资源拥有者账户向您的资源使用者账户授予相应权限后，您就可以使用 Feature Store SDK 对共享资源执行操作。您可以通过提供资源 ARN 作为 `FeatureGroupName` 来做到这一点。要获取功能组 ARN，您可以使用 适用于 Python (Boto3) 的 AWS SDK [https://boto3.amazonaws.com/v1/documentation/api/1.26.98/reference/services/sagemaker/client/describe_feature_group.html#describe-feature-group](https://boto3.amazonaws.com/v1/documentation/api/1.26.98/reference/services/sagemaker/client/describe_feature_group.html#describe-feature-group)函数或使用控制台 UI。有关使用管理控制台 UI 查看特征组详情的信息，请参阅 [从管理控制台查看特征组详情](feature-store-use-with-studio.md#feature-store-view-feature-group-detail-studio)。

以下示例对一个共享特征组实体使用 `PutRecord` 和 `GetRecord`。有关和的信息，请参阅 适用于 Python (Boto3) 的 AWS SDK 文档中的请求[https://boto3.amazonaws.com/v1/documentation/api/1.26.98/reference/services/firehose/client/put_record.html#put-record](https://boto3.amazonaws.com/v1/documentation/api/1.26.98/reference/services/firehose/client/put_record.html#put-record)和响应语法[https://boto3.amazonaws.com/v1/documentation/api/1.26.98/reference/services/sagemaker-featurestore-runtime/client/get_record.html#get-record](https://boto3.amazonaws.com/v1/documentation/api/1.26.98/reference/services/sagemaker-featurestore-runtime/client/get_record.html#get-record)。

```
import boto3

sagemaker_featurestore_runtime = boto3.client('sagemaker-featurestore-runtime')

# Put record into feature group named 'test-fg' within the resource owner account ID 111122223333
featurestore_runtime.put_record(
    FeatureGroupName="arn:aws:sagemaker:us-east-1:111122223333:feature-group/test-fg", 
    Record=[value.to_dict() for value in record] # You will need to define record prior to calling PutRecord
)
```

```
import boto3

sagemaker_featurestore_runtime = boto3.client('sagemaker-featurestore-runtime')

# Choose record identifier
record_identifier_value = str(2990130)

# Get record from feature group named 'test-fg' within the resource owner account ID 111122223333
featurestore_runtime.get_record(
    FeatureGroupName="arn:aws:sagemaker:us-east-1:111122223333:feature-group/test-fg", 
    RecordIdentifierValueAsString=record_identifier_value
)
```

有关向特征组实体授予权限的更多信息，请参阅[共享您的特征组实体](feature-store-cross-account-access-online-store-share-feature-group.md)。

# 跨账户离线存储访问
<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`。