

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

# 跨 Amazon 账户注册加密的 Amazon S3 位置
<a name="register-cross-encrypted"></a>

Amazon Lake Formation 与 [Amazon Key Management Service](https://docs.amazonaws.cn/kms/latest/developerguide/overview.html)(Amazon KMS) 集成，使您能够更轻松地设置其他集成服务，以加密和解密亚马逊简单存储服务 (Amazon S3) 中的数据。

同时支持客户管理 Amazon 托管式密钥 的密钥和。 encryption/decryption 不支持客户端。

**重要**  
避免注册启用了**请求者付费**的 Amazon S3 存储桶。对于在 Lake Formation 中注册的存储桶，用于注册存储桶的角色始终被视为请求者。如果存储桶被其他 Amazon 账户访问，则如果该角色与存储桶拥有者属于同一个账户，则该存储桶拥有者需要支付数据访问费用。

本部分介绍如何在以下情况下注册 Amazon S3 位置：
+ Amazon S3 位置中的数据使用在 Amazon KMS中创建的 KMS 密钥进行加密。
+ Amazon S3 的营业地点与不在同一个 Amazon 账户中 Amazon Glue Data Catalog。
+ KMS 密钥与数据目录位于或不在同一个 Amazon 账户中。

使用账户 A 中的 Amazon Identity and Access Management (IAM) 角色在 Amazon 账户 B 中 Amazon 注册 Amazon KMS加密的 Amazon S3 存储桶需要以下权限：
+ 账户 A 中的角色必须授予对账户 B 中存储桶的权限。
+ 账户 B 中的存储桶策略必须向账户 A 中的角色授予访问权限。
+ 如果 KMS 密钥位于账户 B 中，则密钥策略必须向账户 A 中的角色授予访问权限，并且账户 A 中的角色必须授予对 KMS 密钥的权限。

在以下步骤中，您将在包含数据目录的 Amazon 账户（前面讨论中的账户 A）中创建一个角色。然后，使用此角色注册位置。Lake Formation 在访问 Amazon S3 中的基础数据时代入此角色。代入的角色具有对 KMS 密钥的所需权限。因此，您不必向使用 ETL 作业或集成服务（如 Amazon Athena）访问基础数据的主体授对 KMS 密钥的权限。

**重要**  
您不能使用 Lake Formation 服务相关角色在其他账户中注册位置。您必须改用用户定义的角色。该角色必须符合[用于注册位置的角色的要求](registration-role.md)中的要求。有关服务相关角色的更多信息，请参阅 [Lake Formation 的服务相关角色权限](service-linked-roles.md#service-linked-role-permissions)。

**开始前的准备工作**  
查看[用于注册位置的角色的要求](registration-role.md)。

**跨 Amazon 账户注册加密的 Amazon S3 营业地点**

1. 使用与数据目录相同的 Amazon 账户，登录 Amazon Web Services 管理控制台 并打开 IAM 控制台，网址为[https://console.amazonaws.cn/iam/](https://console.amazonaws.cn/iam/)。

1. 创建新角色或查看符合[用于注册位置的角色的要求](registration-role.md)中要求的现有角色。确保该角色包含授予对该位置的 Amazon S3 权限的策略。

1. 如果 KMS 密钥与数据目录不在同一账户中，请向该角色附加一个内联策略，该策略授予对 KMS 密钥的所需权限。以下是示例策略。将区域和账户 ID 替换为 KMS 密钥所在的区域和账号。{{<key-id>}}替换为密钥 ID。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
           "Effect": "Allow",
           "Action": [
               "kms:Encrypt",
               "kms:Decrypt",
               "kms:ReEncrypt*",
               "kms:GenerateDataKey*",
               "kms:DescribeKey"
            ],
           "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{<key-id>}}"
           }
       ]
   }
   ```

------

1. 在 Amazon S3 控制台上，添加存储桶策略，该策略向该角色授予所需的 Amazon S3 权限。下面是一个示例存储桶策略。将账户 ID 替换为数据目录的 Amazon 账号、{{<role-name>}}您的角色{{<bucket-name>}}名称和存储桶的名称。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::{{111122223333}}:role/{{<role-name>}}"
               },
               "Action":"s3:ListBucket",
               "Resource":"arn:aws:s3:::{{<bucket-name>}}"
           },
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::{{111122223333}}:role/{{<role-name>}}"
               },
               "Action": [
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource":"arn:aws:s3:::{{<bucket-name>}}/*"
           }
       ]
   }
   ```

------

1. 在中 Amazon KMS，将角色添加为 KMS 密钥的用户。

   1. 在 [https://console.aws.amazon.com/km Amazon KMS](https://console.amazonaws.cn/kms) s 处打开控制台。然后，以管理员用户或可以修改用于加密位置的 KMS 密钥策略的用户身份登录。

   1. 在导航窗格中，选择**客户自主管理型密钥**，然后选择 KMS 密钥的名称。

   1. 在“KMS 密钥详细信息”页面的**密钥策略**选项卡下，如果未显示密钥策略的 JSON 视图，请选择**切换到策略视图**。

   1. 在**密钥策略**部分中，选择**编辑**，然后将该角色的 Amazon 资源名称 (ARN) 添加到 `Allow use of the key` 对象，如以下示例所示。
**注意**  
如果缺少该对象，请使用示例中显示的权限添加该对象。

      ```
              ...
              {
                  "Sid": "Allow use of the key",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": [
                          "arn:aws:iam::{{<catalog-account-id>}}:role/{{<role-name>}}"
                      ]
                  },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:ReEncrypt*",
                      "kms:GenerateDataKey*",
                      "kms:DescribeKey"
                  ],
                  "Resource": "*"
              },
              ...
      ```

      有关更多信息，请参阅《Amazon Key Management Service 开发人员指南》中的[允许其他账户中的用户使用 KMS 密钥](https://docs.amazonaws.cn/en_us/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。**

       

1. 打开 Amazon Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.amazonaws.cn/lakeformation/)。以数据湖管理员身份登录数据目录 Amazon 账户。

1. 在导航窗格的**管理**下，选择**数据湖位置**。

1. 选择**注册位置**。

1. 在**注册位置**页面上，对于 **Amazon S3 路径**，输入位置路径 **s3://{{<bucket>}}/{{<prefix>}}**。{{<bucket>}}替换为存储桶的{{<prefix>}}名称和该位置路径的其余部分。
**注意**  
您必须键入该路径，因为当您选择**浏览**时，跨账户存储桶不会显示在列表中。

1. 对于 **IAM 角色**，从步骤 2 中选择角色。

1. 选择**注册位置**。