

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

# 向数据湖添加 Amazon S3 位置
<a name="register-data-lake"></a>

要将数据位置添加为数据湖中的存储空间，请向*注册*该位置（**数据湖位置**） AWS Lake Formation。然后，您可以使用 Lake Formation 权限对指向该位置的 AWS Glue Data Catalog 对象以及该位置中的基础数据进行精细的访问控制。

Lake Formation 还允许在混合访问模式下注册数据位置，并让您能够灵活地选择为数据目录中的数据库和表启用 Lake Formation 权限。在混合访问模式下，您可以通过增量路径为一组特定用户设置 Lake Formation 权限，而不会干扰其它现有用户或工作负载的权限策略。

有关设置混合访问模式的更多信息，请参阅[混合访问模式](hybrid-access-mode.md) 

当您注册某个位置时，将注册 Amazon S3 路径以及该路径下的所有文件夹。

例如，假设您有一个如下所示的 Amazon S3 路径组织：

`/mybucket/accounting/sales/`

如果您注册了 `S3://mybucket/accounting`，则 `sales` 文件夹也会被注册并由 Lake Formation 管理。

有关注册位置的更多信息，请参阅[Underlying data access control](access-control-underlying-data.md#underlying-data-access-control)。

**注意**  
建议对结构化数据（按包含行和列的表进行排列）使用 Lake Formation 权限。如果您的数据包含基于对象的非结构化数据，请考虑使用 Amazon S3 访问权限管控来管理数据访问。

**Topics**
+ [用于注册位置的角色的要求](registration-role.md)
+ [注册 Amazon S3 位置](register-location.md)
+ [注册加密的 Amazon S3 位置](register-encrypted.md)
+ [在另一个 AWS 账户中注册 Amazon S3 营业地点](register-cross-account.md)
+ [跨 AWS 账户注册加密的 Amazon S3 位置](register-cross-encrypted.md)
+ [取消注册 Amazon S3 位置](unregister-location.md)

# 用于注册位置的角色的要求
<a name="registration-role"></a>

注册亚马逊简单存储服务 AWS Identity and Access Management (Amazon S3) 位置时，必须指定 (IAM) 角色。 AWS Lake Formation 在访问该位置的数据时担任该角色。

您可以使用以下角色类型之一来注册位置：
+ Lake Formation 服务相关角色。此角色授予对该位置的所需权限。使用此角色是注册位置的最简单方法。有关更多信息，请参阅[在 Lake Formation 中使用服务相关角色](service-linked-roles.md)和[服务相关角色限制](service-linked-role-limitations.md)。
+ 用户定义的角色。当您需要授予的权限多于服务相关角色提供的权限时，请使用用户定义的角色。

  在以下情况下，您必须使用用户定义的角色：
  + 在其他账户中注册位置时。

    有关更多信息，请参阅[在另一个 AWS 账户中注册 Amazon S3 营业地点](register-cross-account.md)和[跨 AWS 账户注册加密的 Amazon S3 位置](register-cross-encrypted.md)。
  + 如果您使用 AWS 托管 CMK (`aws/s3`) 对 Amazon S3 位置进行加密。

    有关更多信息，请参阅 [注册加密的 Amazon S3 位置](register-encrypted.md)。
  + 如果您计划使用 Amazon EMR。

    如果您已使用服务相关角色注册了某个位置，并且想要开始使用 Amazon EMR 访问该位置，则必须取消注册该位置，然后使用用户定义的角色重新注册该位置。有关更多信息，请参阅 [取消注册 Amazon S3 位置](unregister-location.md)。

# 在 Lake Formation 中使用服务相关角色
<a name="service-linked-roles"></a>

AWS Lake Formation 使用 AWS Identity and Access Management (IAM) *服务相关角色*。服务相关角色是一种独特类型的 IAM 角色，它与 Lake Formation 直接相关。服务相关角色由 Lake Formation 预定义，包括该服务代表您调用其他 AWS 服务所需的所有权限。

服务相关角色可让您更轻松地设置 Lake Formation，因为您不必创建角色并手动添加必要的权限。Lake Formation 定义其服务相关角色的权限，除非另有定义，否则只有 Lake Formation 可以代入该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

此服务相关角色仅信任以下服务来代入该角色：
+ `lakeformation.amazonaws.com`

当您使用账户 A 中的服务相关角色注册账户 B 所拥有的 Amazon S3 位置时，账户 B 中的 Amazon S3 存储桶策略（基于资源的策略）必须向账户 A 中的服务相关角色授予访问权限。

有关使用服务相关角色注册数据位置的信息，请参阅[服务相关角色限制](service-linked-role-limitations.md)。

**注意**  
服务控制策略 (SCPs) 不影响服务相关角色。  
有关更多信息，请参阅*AWS Organizations 用户指南*中的[服务控制策略 (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。

## Lake Formation 的服务相关角色权限
<a name="service-linked-role-permissions"></a>

Lake Formation 使用名为 `AWSServiceRoleForLakeFormationDataAccess` 的服务相关角色。此角色提供了一组亚马逊简单存储服务 (Amazon S3) 权限，这些权限使 Lake Formation 集成服务（ Amazon Athena例如）能够访问注册地点。注册数据湖位置时，必须提供具有该位置所需的 Amazon S3 read/write 权限的角色。您可以使用此服务相关角色，而不是创建具有所需 Amazon S3 权限的角色。

首次将服务相关角色命名为用于注册路径的角色时，将代表您创建服务相关角色和新的 IAM 策略。Lake Formation 将路径添加到内联策略，并将其附加到服务相关角色。当您向服务相关角色注册后续路径时，Lake Formation 会将该路径添加到现有策略中。

以数据湖管理员身份登录后，注册数据湖位置。然后，在 IAM 控制台中，搜索角色 `AWSServiceRoleForLakeFormationDataAccess` 并查看其附加的策略。

例如，在您注册位置 `s3://my-kinesis-test/logs` 后，Lake Formation 会创建以下内联策略并将其附加到 `AWSServiceRoleForLakeFormationDataAccess`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "LakeFormationDataAccessPermissionsForS3",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::my-kinesis-test/logs/*"
            ]
        },
        {
            "Sid": "LakeFormationDataAccessPermissionsForS3ListBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-kinesis-test"
            ]
        }
    ]
}
```

------

## 为 Lake Formation 创建服务相关角色
<a name="create-slr"></a>

您无需手动创建服务关联角色。当你在 AWS 管理控制台、或 AWS API 中向 Lake Formation 注册一个 Amazon S3 地点时，Lake Formation 会为你创建服务相关角色。 AWS CLI

**重要**  
如果您在其他使用此角色支持的功能的服务中完成某个操作，此服务关联角色可以出现在您的账户中。要了解更多信息，请参阅[我的 IAM 账户中出现新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

如果您删除该服务关联角色，然后需要再次创建，您可以使用相同流程在账户中重新创建此角色。当您向 Lake Formation 注册 Amazon S3 位置时，Lake Formation 会再次为您创建服务相关角色。

您也可以使用 IAM 控制台为 **Lake Formation** 使用案例创建服务相关角色。在 AWS CLI 或 AWS API 中，使用服务名称创建服务相关角色。`lakeformation.amazonaws.com`有关更多信息，请参阅 *IAM 用户指南* 中的[创建服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)。如果您删除了此服务相关角色，可以使用同样的过程再次创建角色。

## 为 Lake Formation 编辑服务相关角色
<a name="edit-slr"></a>

Lake Formation 不允许您编辑 `AWSServiceRoleForLakeFormationDataAccess` 服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。但是可以使用 IAM 编辑角色描述。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 为 Lake Formation 删除服务相关角色
<a name="delete-slr"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样就没有未被主动监控或维护的未使用实体。但是，必须先清除服务相关角色的资源，然后才能手动删除它。

**注意**  
如果在您试图删除资源时 Lake Formation 服务正在使用该角色，则删除操作可能会失败。如果发生这种情况，请等待几分钟后重试。

**删除 Lake Formation 使用的 Lake Formation 资源**
+ 如果您使用服务相关角色向 Lake Formation 注册了 Amazon S3 位置，则在删除服务相关角色之前，需要注销该位置，然后使用自定义角色重新注册。

**使用 IAM 手动删除服务关联角色**

使用 IAM 控制台 AWS CLI、或 AWS API 删除`AWSServiceRoleForLakeFormationDataAccess`服务相关角色。有关更多信息，请参见 *IAM 用户指南*中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

以下是用户定义的角色的要求：
+ 创建新角色时，在 IAM 控制台的**创建角色**页面上，选择 **AWS 服务**，然后在**选择一个使用案例**下选择 **Lake Formation**。

  如果使用其他路径创建角色，请确保该角色与 `lakeformation.amazonaws.com` 具有信任关系。有关更多信息，请参阅[修改角色信任策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。
+ 该角色必须具有授予 Amazon S3 read/write 对该位置的权限的内联策略。以下是典型的策略。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::awsexamplebucket/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::awsexamplebucket"
              ]
          }
      ]
  }
  ```

------
+ 将以下信任策略添加到 IAM 角色，以便 Lake Formation 服务代入该角色并将临时凭证提供给集成的分析引擎。

  要在 CloudTrail 日志中包含 IAM Identity Center 用户上下文，信任策略必须具有该`sts:SetContext`操作的权限。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "DataCatalogViewDefinerAssumeRole1",
              "Effect": "Allow",
              "Principal": {
                 "Service": [                    
                      "lakeformation.amazonaws.com"
                   ]
              },
              "Action": [
                  "sts:AssumeRole",
                  "sts:SetContext"
              ]
          }
      ]
  }
  ```

------
+ 注册该位置的数据湖管理员必须具有对该角色的 `iam:PassRole` 权限。

  以下是授予此权限的内联策略。*<account-id>*替换为有效的 AWS 账号，然后*<role-name>*替换为角色的名称。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "PassRolePermissions",
              "Effect": "Allow",
              "Action": [
                  "iam:PassRole"
              ],
              "Resource": [
                  "arn:aws:iam::111122223333:role/<role-name>"
              ]
          }
      ]
  }
  ```

------
+ 要允许 Lake Formati CloudWatch on 在日志中添加日志并发布指标，请添加以下内联策略。
**注意**  
写入 CloudWatch 日志会产生费用。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Sid1",
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogStream",
                  "logs:CreateLogGroup",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws-lakeformation-acceleration/*",
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws-lakeformation-acceleration/*:log-stream:*"
              ]
          }
      ]
  }
  ```

------

# 注册 Amazon S3 位置
<a name="register-location"></a>

注册亚马逊简单存储服务 AWS Identity and Access Management (Amazon S3) 位置时，必须指定 (IAM) 角色。Lake Formation 在向访问该位置数据的集成 AWS 服务授予临时证书时担任该角色。

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

您可以使用 AWS Lake Formation 控制台、Lake Formation API 或 AWS Command Line Interface (AWS CLI) 注册亚马逊 S3 地点。

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

**注册位置（控制台）**
**重要**  
以下过程假设 Amazon S3 位置与数据目录位于同一个 AWS 账户中，并且该位置中的数据未加密。本章中的其他部分介绍了跨账户注册和加密位置的注册。

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员或具有 `lakeformation:RegisterResource` IAM 权限的用户身份登录。

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

1. 选择**注册位置**，然后选择**浏览**以选择 Amazon Simple Storage Service (Amazon S3) 路径。

1. （可选，但强烈推荐）选择**查看位置权限**以查看所选 Amazon S3 位置中所有现有资源及其权限的列表。

   注册所选位置可能会导致 Lake Formation 用户可以访问该位置已有的数据。查看此列表有助于确保现有数据保持安全。

1. 对于 **IAM 角色**，选择 `AWSServiceRoleForLakeFormationDataAccess` 服务相关角色（默认）或符合[用于注册位置的角色的要求](registration-role.md)中要求的自定义 IAM 角色。

   只有在使用自定义 IAM 角色注册已注册位置时，您才能更新该位置或其他详细信息。要编辑使用服务相关角色注册的位置，应取消注册该位置，然后重新注册。

1. 选择 “**启用数据目录联**合” 选项，允许 Lake Formation 代入角色并向集成 AWS 服务提供临时凭证，以访问联合数据库下的表。如果某个位置已注册到 Lake Formation，并且您希望对联合数据库下的表使用同一位置，则需要使用**启用数据目录联合身份验证**选项注册该同一位置。

1. 选择**混合访问模式**以默认不启用 Lake Formation 权限。当您在混合访问模式下注册 Amazon S3 位置时，您可以通过选择该位置下的数据库和表的主体来启用 Lake Formation 权限。 

   有关设置混合访问模式的更多信息，请参阅[混合访问模式](hybrid-access-mode.md)。

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

**注册位置 (AWS CLI)**

1. 

**向 Lake Formation 注册新位置**

   此示例使用服务相关角色注册位置。您可以改用 `--role-arn` 参数来提供自己的角色。

   *<s3-path>*替换为有效的 Amazon S3 路径、*<s3-access-role>*使用有效 AWS 账户的账号以及有权注册数据位置的 IAM 角色。
**注意**  
如果已注册位置是使用服务相关角色注册的，则无法编辑该位置的属性。

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --use-service-linked-role
   ```

   以下示例使用自定义角色注册位置。

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role>
   ```

1. 

**更新向 Lake Formation 注册的位置**

   仅当使用自定义 IAM 角色注册已注册位置时，您才能对其进行编辑。对于使用服务相关角色注册的位置，应取消注册该位置并重新注册。有关更多信息，请参阅 [取消注册 Amazon S3 位置](unregister-location.md)。

   ```
   aws lakeformation update-resource \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role>\
    --resource-arn arn:aws:s3:::<s3-path>
   ```

   ```
   aws lakeformation update-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --use-service-linked-role
   ```

1. 

**在混合访问模式下使用联合身份验证注册数据位置**

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role> \
    --hybrid-access-enabled
   ```

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role> \
    --with-federation
   ```

   ```
   aws lakeformation update-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role> \
    --hybrid-access-enabled
   ```

有关更多信息，请参阅 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html)API 操作。

**注意**  
注册了 Amazon S3 位置后，任何指向该地点（或其任何子位置）的 AWS Glue 表都将返回`GetTable`调用`true`中`IsRegisteredWithLakeFormation`参数的值。存在一个已知限制，即数据目录 API 操作（如 `GetTables` 和 `SearchTables`）不会更新 `IsRegisteredWithLakeFormation` 参数的值，并返回默认值 false。建议使用 `GetTable` API 查看 `IsRegisteredWithLakeFormation` 参数的正确值。

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

Lake Formation 与 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) (AWS KMS) 集成，使您能够更轻松地设置其他集成服务，以加密和解密 Amazon Simple Storage Service (Amazon S3) 位置中的数据。

既由客户管理 AWS KMS keys ，又 AWS 托管式密钥 受支持。目前，只有 encryption/decryption Athena 支持客户端。

在注册 Amazon S3 营业地点时，您必须指定 AWS Identity and Access Management (IAM) 角色。对于加密的 Amazon S3 位置，要么角色必须具有使用加密和解密数据的权限 AWS KMS key，要么是 KMS 密钥策略必须向该角色授予对密钥的权限。

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

Lake Formation 使用服务相关角色来注册数据位置。但此角色有几项[限制](service-linked-role-limitations.md)。由于这些限制，我们建议改为创建和使用自定义 IAM 角色，以获得更高的灵活性和更强的控制力。您为注册位置而创建的自定义角色必须满足[用于注册位置的角色的要求](registration-role.md)中指定的要求。

**重要**  
如果您使用 AWS 托管式密钥 来加密 Amazon S3 位置，则无法使用 Lake Formation 服务相关角色。您必须使用一个自定义角色，并向该角色添加对密钥的 IAM 权限。本部分后面将提供相关详细信息。

以下过程说明如何注册使用客户自主管理型密钥或 AWS 托管式密钥加密的 Amazon S3 位置。
+ [注册使用客户自主管理型密钥加密的位置](#proc-register-cust-cmk)
+ [注册使用加密的地点 AWS 托管式密钥](#proc-register-aws-cmk)

**开始前的准备工作**  
查看[用于注册位置的角色的要求](registration-role.md)。<a name="proc-register-cust-cmk"></a>

**注册使用客户自主管理型密钥加密的 Amazon S3 位置**
**注意**  
如果 KMS 密钥或 Amazon S3 位置与数据目录不在同一个 AWS 账户中，请[跨 AWS 账户注册加密的 Amazon S3 位置](register-cross-encrypted.md)改为按照中的说明进行操作。

1. 在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 上打开 AWS KMS 控制台，以 AWS Identity and Access Management (IAM) 管理用户或可以修改用于加密位置的 KMS 密钥策略的用户身份登录。

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

1. 在 KMS 密钥详细信息页面上，选择**密钥策略**选项卡，然后执行以下任一操作将您的自定义角色或 Lake Formation 服务相关角色添加为 KMS 密钥用户：
   + **如果显示默认视图（包括 “****密钥管理员**”、“密**钥删除**”、“**密钥用户**” 和 “**其他 AWS 账户**” 部分），则在 “**密钥用户**” 部分下，添加您的自定义角色或 Lake Formation 服务相关角色`AWSServiceRoleForLakeFormationDataAccess`。
   + **如果显示密钥策略 (JSON)** – 编辑策略以将您的自定义角色或 Lake Formation 服务相关角色 `AWSServiceRoleForLakeFormationDataAccess` 添加到“Allow use of the key”对象，如以下示例所示。
**注意**  
如果缺少该对象，请使用示例中显示的权限添加该对象。该示例使用服务相关角色。

     ```
             ...
             {
                 "Sid": "Allow use of the key",
                 "Effect": "Allow",
                 "Principal": {
                     "AWS": [
                         "arn:aws:iam::111122223333:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess",
                         "arn:aws:iam::111122223333:user/keyuser"
                     ]
                 },
                 "Action": [
                     "kms:Encrypt",
                     "kms:Decrypt",
                     "kms:ReEncrypt*",
                     "kms:GenerateDataKey*",
                     "kms:DescribeKey"
                 ],
                 "Resource": "*"
             },
             ...
     ```

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员或具有 `lakeformation:RegisterResource` IAM 权限的用户身份登录。

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

1. 选择**注册位置**，然后选择**浏览**以选择 Amazon Simple Storage Service (Amazon S3) 路径。

1. （可选，但强烈推荐）选择**查看位置权限**以查看所选 Amazon S3 位置中所有现有资源及其权限的列表。

   注册所选位置可能会导致 Lake Formation 用户可以访问该位置已有的数据。查看此列表有助于确保现有数据保持安全。

1. 对于 **IAM 角色**，选择 `AWSServiceRoleForLakeFormationDataAccess` 服务相关角色（默认）或符合[用于注册位置的角色的要求](registration-role.md)的自定义角色。

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

有关服务相关角色的更多信息，请参阅 [Lake Formation 的服务相关角色权限](service-linked-roles.md#service-linked-role-permissions)。<a name="proc-register-aws-cmk"></a>

**注册使用加密的 Amazon S3 地点 AWS 托管式密钥**
**重要**  
如果 Amazon S3 位置与数据目录不在同一个 AWS 账户中，请[跨 AWS 账户注册加密的 Amazon S3 位置](register-cross-encrypted.md)改为按照中的说明进行操作。

1. 创建用于注册位置的 IAM 角色。确保该角色符合[用于注册位置的角色的要求](registration-role.md)中列出的要求。

1. 将下面的内联策略附加到该角色。该策略会向该角色授予对密钥的权限。`Resource` 规范必须指定 AWS 托管式密钥的 Amazon 资源名称 (ARN)。您可以从控制台获取 ARN。 AWS KMS 要获得正确的 ARN，请确保使用与加密该位置相同的 AWS 账户和区域登录 AWS KMS 控制台。 AWS 托管式密钥 

------
#### [ 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/1234abcd-12ab-34cd-56ef-1234567890ab"
       }
     ]
   }
   ```

------

   您可以使用 KMS 密钥别名代替密钥 ID - `arn:aws:kms:region:account-id:key/alias/your-key-alias`

   有关更多信息，请参阅《 AWS Key Management Service 开发人员指南》[中的 “别名](https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html)” 一 AWS KMS节。

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员或具有 `lakeformation:RegisterResource` IAM 权限的用户身份登录。

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

1. 选择**注册位置**，然后选择**浏览**以选择 Amazon S3 路径。

1. （可选，但强烈推荐）选择**查看位置权限**以查看所选 Amazon S3 位置中所有现有资源及其权限的列表。

   注册所选位置可能会导致 Lake Formation 用户可以访问该位置已有的数据。查看此列表有助于确保现有数据保持安全。

1. 对于 **IAM 角色**，选择您在步骤 1 中创建的角色。

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

# 在另一个 AWS 账户中注册 Amazon S3 营业地点
<a name="register-cross-account"></a>

AWS Lake Formation 允许您跨账户注册亚马逊简单存储服务 (Amazon S3) Service 地点 AWS 。例如，如果在账户 A 中， AWS Glue Data Catalog 则账户 A 中的用户可以在账户 B 中注册 Amazon S3 存储桶。

使用账户 A 中的 AWS Identity and Access Management (IAM) 角色在 AWS 账户 B 中 AWS 注册 Amazon S3 存储桶需要以下权限：
+ 账户 A 中的角色必须授予对账户 B 中存储桶的权限。
+ 账户 B 中的存储桶策略必须向账户 A 中的角色授予访问权限。

**重要**  
避免注册启用了**请求者付费**的 Amazon S3 存储桶。对于在 Lake Formation 中注册的存储桶，用于注册存储桶的角色始终被视为请求者。如果存储桶被其他 AWS 账户访问，则如果该角色与存储桶拥有者属于同一个账户，则该存储桶拥有者需要支付数据访问费用。  
您不能使用 Lake Formation 服务相关角色在其他账户中注册位置。您必须改用用户定义的角色。该角色必须符合[用于注册位置的角色的要求](registration-role.md)中的要求。有关服务相关角色的更多信息，请参阅 [Lake Formation 的服务相关角色权限](service-linked-roles.md#service-linked-role-permissions)。

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

**在其他 AWS 账户中注册营业地点**
**注意**  
如果该位置已加密，请改为按照[跨 AWS 账户注册加密的 Amazon S3 位置](register-cross-encrypted.md)中的说明进行操作。

以下过程假定包含数据目录的账户 1111-2222-3333 中的主体想要注册位于账户 1234-5678-9012 中的 Amazon S3 存储桶 `awsexamplebucket1`。

1. 在账户 1111-2222-3333 中，登录 AWS 管理控制台 并打开 IAM 控制台，网址为。[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

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

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。使用账户 1234-5678-9012 登录。

1. 在**存储桶名称**列表中，选择存储桶名称 `awsexamplebucket1`。

1. 选择**权限**。

1. 在**权限**页面上，选择**存储桶策略**。

1. 在**存储桶策略编辑器**中，粘贴以下策略。将 *<role-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:::awsexamplebucket1"
           },
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::111122223333:role/<role-name>"
               },
               "Action": [
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource":"arn:aws:s3:::awsexamplebucket1/*"
           }
       ]
   }
   ```

------

1. 选择**保存**。

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员或具有足够权限注册位置的用户身份登录账户 1111-2222-3333。

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

1. 在**数据湖位置**页面上，选择**注册位置**。

1. 在**注册位置**页面上，对于 **Amazon S3 路径**，输入存储桶名称 `s3://awsexamplebucket1`。
**注意**  
您必须键入存储桶名称，因为当您选择**浏览**时，跨账户存储桶不会显示在列表中。

1. 对于 **IAM 角色**，选择您的角色。

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

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

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

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

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

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

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

在以下步骤中，您将在包含数据目录的 AWS 账户（前面讨论中的账户 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)。

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

1. 使用与数据目录相同的 AWS 账户，登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/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 替换为数据目录的 AWS 账号、*<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. 在中 AWS KMS，将角色添加为 KMS 密钥的用户。

   1. 在 [https://console.aws.amazon.com/km AWS KMS](https://console.aws.amazon.com/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": "*"
              },
              ...
      ```

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

       

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

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

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

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

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

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

# 取消注册 Amazon S3 位置
<a name="unregister-location"></a>

如果您不再希望 Amazon Simple Storage Service (Amazon S3) 位置由 Lake Formation 管理，则可以取消注册该位置。取消注册某个位置不会影响对该位置授予的 Lake Formation 数据位置权限。您可以重新注册已取消注册的位置，并且数据位置权限仍然有效。您可以使用其他角色重新注册该位置。

**取消注册位置（控制台）**

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员或具有 `lakeformation:RegisterResource` IAM 权限的用户身份登录。

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

1. 选择一个位置，然后在**操作**菜单上选择**删除**。

1. 当系统提示进行确认时，选择**删除**。