

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

# Amazon S3 表格与 AWS Glue Data Catalog 和的集成 AWS Lake Formation
<a name="create-s3-tables-catalog"></a>

[Amazon S3 表类数据存储服务](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html)提供专门针对分析工作负载进行优化的 S3 存储，可提高查询性能，同时降低成本。S3 表类数据存储服务中的数据存储在新的存储桶类型中：*表存储桶*，它将表存储为子资源。S3 表内置支持 Apache Iceberg 标准，让您可以使用 Apache Spark 等常用查询引擎轻松查询 Amazon S3 表类数据存储服务存储桶中的表格数据。

您可以 AWS Glue Data Catalog 使用 IAM 访问控制或 IAM 和 Lake Formation 拨款将 Amazon S3 表格与以下各项集成：
+ **IAM 访问控制**：使用 IAM 策略来控制对 S3 表和数据目录的访问。在这种访问控制方法中，您需要具有 S3 表资源和数据目录对象的 IAM 权限才能访问资源。
+ **Lake Formation 访问控制**：除了 AWS Glue IAM 权限外，还使用 AWS Lake Formation 授权，通过数据目录控制对 S3 表的访问。在此模式下，委托人需要 IAM 权限才能与数据目录交互，而 Lake Formation 授权决定委托人可以访问哪些目录资源（数据库、表、列、行）。此模式支持粗粒度访问控制（数据库级和表级授权）和精细访问控制（列级和行级安全）。配置注册角色并启用凭证自动售出后，委托人不需要 S3 Tables IAM 权限，因为 Lake Formation 使用注册角色代表委托人出售证书。Lake Formation 访问控制还支持第三方分析引擎的凭证自动售出。

本节提供了在以下场景中配置集成的指导： AWS Lake Formation 
+ **方案 A**：您使用 IAM 访问控制集成了 S3 表和数据目录，现在计划使用 AWS Lake Formation。请参阅 [更改 S3 表格集成的访问控制](manage-s3tables-catalog-integration.md)，了解更多信息。
+ **方案 B**：您计划使用 AWS Lake Formation 集成 S3 表和数据目录，但目前尚未将其集成到您的账户和区域中。从[将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件](s3tables-catalog-prerequisites.md)本节开始，然后按照[启用 Amazon S3 表类数据存储服务集成](enable-s3-tables-catalog-integration.md)。
+ **方案 C**：您使用集成了 S3 表和数据目录 AWS Lake Formation ，现在计划使用 IAM。请参阅 [更改 S3 表格集成的访问控制](manage-s3tables-catalog-integration.md)，了解更多信息。

确保按照[将 S3 表与 AWS 分析服务集成的](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)步骤进行操作，以便您拥有访问 AWS Glue Data Catalog 和您的表资源以及使用 AWS 分析服务的相应权限。

**Topics**
+ [Data Catalog 和 Lake Formation 集成的工作原理](#w2aac13c27c19)
+ [将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件](s3tables-catalog-prerequisites.md)
+ [启用 Amazon S3 表类数据存储服务集成](enable-s3-tables-catalog-integration.md)
+ [在 S3 表目录中创建数据库和表](create-databases-tables-s3-catalog.md)
+ [在另一个 AWS 账户中注册 Amazon S3 表存储桶](register-cross-account-s3-table-bucket.md)
+ [授予权限](s3-tables-grant-permissions.md)

## Data Catalog 和 Lake Formation 集成的工作原理
<a name="w2aac13c27c19"></a>

当您将 S3 表目录与 Data Catalog 和 Lake Formation 集成时， AWS Glue 服务会在您的账户中特定于您的 AWS 区域的默认数据目录中创建一个名为 `s3tablescatalog` 的联合目录。该集成按以下方式映射您的账户和联合目录 AWS 区域 下的所有 Amazon S3 表存储桶资源：
+ Amazon S3 表类数据存储服务存储桶成为 Data Catalog 中的多级目录。
+ 关联的 Amazon S3 命名空间在 Data Catalog 中注册为数据库。
+ 表存储桶中的 Amazon S3 表类数据存储服务成为 Data Catalog 中的表。

![\[S3 表和之间对象的映射 AWS Glue Data Catalog。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/S3Tables-glue-catalog.png)


 与 Lake Formation 集成后，您可以在表存储桶目录中创建 Apache Iceberg 表，并通过 Amazon Athena Amazon EMR 等集成 AWS 分析引擎以及第三方分析引擎访问这些表。

当你同时启用带集成功能的 Lake Formation 时，它会通过实现细粒度的访问控制。 AWS Lake Formation这种安全方法意味着，除了 AWS Identity and Access Management (IAM) 权限外，您还必须向 IAM 委托人授予对您的表的 Lake Formation 权限，然后才能使用这些表。

 AWS Lake Formation中有两种主要类型的权限：
+ 元数据访问权限控制着在数据目录中创建、读取、更新和删除元数据数据库和表的能力。
+ 基础数据访问权限控制着对数据目录资源指向的基础 Amazon S3 位置读取和写入数据的能力。

Lake Formation 结合使用自己的权限模型和 IAM 权限模型，来控制对数据目录资源和基础数据的访问权限：
+ 为了使访问数据目录资源或基础数据的请求取得成功，请求必须通过由 IAM 和 Lake Formation 进行的权限检查。
+ IAM 权限控制对 Lake Formation AWS Glue APIs 和资源的访问，而 Lake Formation 权限控制对数据目录资源、Amazon S3 位置和底层数据的访问。

Lake Formation 权限仅适用于授予这些权限的区域，并且主体必须由数据湖管理员或其它具有必要权限的主体授权，才能获得 Lake Formation 权限。

# 将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件
<a name="s3tables-catalog-prerequisites"></a>

以下是启用 Amazon S3 表与 AWS Glue Data Catalog 和集成的先决条件 AWS Lake Formation。

1.  当您启用 Amazon S3 表类数据存储服务集成时，Lake Formation 会自动注册 S3 表的位置。要向 Lake Formation 注册表存储桶位置，您需要一个 role/user 具有`lakeformation:RegisterResource``lakeformation:RegisterResourceWithPrivilegedAccess`、和`lakeformation:CreateCatalog`权限的 IAM。当具有这些权限的非管理员用户注册目录位置时，Lake Formation 会自动向他们授予该位置的 `DATA_LOCATION_ACCESS` 权限，从而允许调用主体对注册的数据位置执行所有支持的 Lake Formation 操作。

1. <a name="step3-permissions"></a> 启用 S3 表集成时，您需要为 Lake Formation 选择一个 IAM 角色来提供凭证，以便允许数据访问。为 Lake Formation 创建一个 IAM 角色，用于访问存储在 S3 表存储桶中的数据。向 Lake Formation 注册表存储桶时使用的 IAM 角色需要以下权限：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LakeFormationPermissionsForS3ListTableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTableBuckets"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTableBucket",
                   "s3tables:GetTableBucket",
                   "s3tables:CreateNamespace",
                   "s3tables:GetNamespace",
                   "s3tables:ListNamespaces",
                   "s3tables:DeleteNamespace",
                   "s3tables:DeleteTableBucket",
                   "s3tables:CreateTable",
                   "s3tables:DeleteTable",
                   "s3tables:GetTable",
                   "s3tables:ListTables",
                   "s3tables:RenameTable",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData",
                   "s3tables:PutTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:123456789012:bucket/*"
               ]
           }
       ]
   }
   ```

------

   有关更多信息，请参阅 [用于注册位置的角色的要求](registration-role.md)。

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

   ```
   {
     "Effect": "Allow",
     "Principal": {
       "Service": "lakeformation.amazonaws.com"
     },
     "Action": [
       "sts:AssumeRole",
       "sts:SetSourceIdentity",
       "sts:SetContext"  # add action to trust relationship when using IAM Identity center principals with Lake Formation
     ]
   }
   ```

**注意**  
 AWS 分析服务集成流程已更新。如果您已使用预览版设置了集成，则可以继续使用当前的集成。但是，更新的集成流程实现了性能改进。要更新集成，请执行以下操作：  
首先，在 Lake Formation 中删除现有的 S3 表目录。要删除目录，请从目录列表中选择 `s3tablescatalog` 目录，然后从**操作**中选择**删除**。
接下来，取消注册 `s3tablescatalog` 的数据位置。  
在 Lake Formation 控制台的**管理**部分，选择**数据位置**。
选择一个位置，然后从**操作**菜单中选择**删除**。
当系统提示进行确认时，选择**删除**。  
有关取消注册数据位置的详细说明，请参阅一[取消注册 Amazon S3 位置](unregister-location.md)节。
然后，按照本[启用 Amazon S3 表类数据存储服务集成](enable-s3-tables-catalog-integration.md)节中更新的集成步骤进行操作。

# 启用 Amazon S3 表类数据存储服务集成
<a name="enable-s3-tables-catalog-integration"></a>

您可以使用 Amazon S3 控制台创建 Amazon S3 表类数据存储服务存储桶，并将其与 AWS 分析服务集成。有关更多信息，请参阅[将 Amazon S3 表类数据存储服务与 AWS 分析服务配合使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)。

 在中 AWS Lake Formation，您可以启用 Amazon S3 表格与 AWS Glue Data Catalog Lake Formation 控制台的集成，也可以 AWS Lake Formation 使用 Lake Formation 控制台或使用 AWS CLI。

## 将 Amazon S3 表类数据存储服务与 Data Catalog 和 Lake Formation 集成（控制台）
<a name="w2aac13c27c23b7b1"></a>

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在导航窗格的 **Data Catalog** 下，选择**目录**。

1. 在**目录**页面上选择**启用 S3 表集成**。  
![\[目录页面上的启用 S3 表集成选项。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/enable-s3-table-integration.png)

1.  选择一个具有所需权限的 IAM 角色，供 Lake Formation 代入，以便向分析查询引擎提供凭证。有关该角色访问数据所需的权限，请参阅先决条件部分的[step3-permissions](s3tables-catalog-prerequisites.md#step3-permissions)。  
![\[使用 IAM 角色启用 S3 集成屏幕。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/enable-s3-table-catalog.png)

1.  选择**支持外部引擎以完全表访问权限访问 Amazon S3 位置的数据**选项。当您为第三方引擎启用完全表访问权限时，Lake Formation 将直接向第三方引擎返回凭证，而无需执行 IAM 会话标签验证。这意味着您无法对要访问的表应用 Lake Formation 精细访问控制。

1. 请选择**启用**。S3 表的新目录已添加到目录列表中。启用 S3 表目录集成后，该服务会向 Lake Formation 注册 S3 表存储桶的数据位置。

1. 选择目录以查看目录对象并向其他主体授予权限。  
![\[S3 表目录\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/s3-table-catalog.png)

   要创建多级目录，请参阅《Amazon Simple Storage Service 用户指南》中的[创建表存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)部分。

## 将 Amazon S3 表类数据存储服务与 Data Catalog 和 Lake Formation 集成（CLI）
<a name="w2aac13c27c23b7b3"></a>

在先决条件部分之后，创建一个允许 Lake Formation 访问您的表资源的 IAM 服务角色。

1. 创建一个名为 `Role-Trust-Policy.json` 的文件，其中包含以下信任策略：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
         {
           "Sid": "LakeFormationDataAccessPolicy",
           "Effect": "Allow",
           "Principal": {
             "Service": "lakeformation.amazonaws.com"
           },
           "Action": [
               "sts:AssumeRole",
               "sts:SetContext",
               "sts:SetSourceIdentity"
           ],
           "Condition": {
             "StringEquals": {
               "aws:SourceAccount": "111122223333"
             }
           }
         }
       ]
   }
   ```

1. 使用以下命令创建 IAM 服务角色：

   ```
   aws iam create-role \
     --role-name S3TablesRoleForLakeFormation \
     --assume-role-policy-document file://Role-Trust-Policy.json
   ```

1. 创建一个名为 `LF-GluePolicy.json` 的文件，其中包含以下策略：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LakeFormationPermissionsForS3ListTableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTableBuckets"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTableBucket",
                   "s3tables:GetTableBucket",
                   "s3tables:CreateNamespace",
                   "s3tables:GetNamespace",
                   "s3tables:ListNamespaces",
                   "s3tables:DeleteNamespace",
                   "s3tables:DeleteTableBucket",
                   "s3tables:CreateTable",
                   "s3tables:DeleteTable",
                   "s3tables:GetTable",
                   "s3tables:ListTables",
                   "s3tables:RenameTable",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData",
                   "s3tables:PutTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
               ]
           }
       ]
   }
   ```

1. 使用以下命令将策略附加到角色：

   ```
   aws iam put-role-policy \
     --role-name S3TablesRoleForLakeFormation \
     --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \
     --policy-document file://LF-GluePolicy.json
   ```

1. 创建一个名为 `input.json` 的文件，其中包含以下内容：

   ```
   {
       "ResourceArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
       "WithFederation": true,
       "RoleArn": "arn:aws:iam::111122223333:role/S3TablesRoleForLakeFormation"
   }
   ```

1. 使用以下命令在 Lake Formation 中注册表存储桶：

   ```
   aws lakeformation register-resource \
     --region us-east-1 \
     --with-privileged-access \
     --cli-input-json file://input.json
   ```

1. 创建一个名为 `catalog.json` 的文件，其中包含以下目录：

   ```
   {
      "Name": "s3tablescatalog",
      "CatalogInput": {
         "FederatedCatalog": {
             "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
             "ConnectionName": "aws:s3tables"
          },
          "CreateDatabaseDefaultPermissions": [],
          "CreateTableDefaultPermissions": [],
          "AllowFullTableExternalDataAccess": "True"
      }
   }
   ```

1. 使用以下命令创建 `s3tablescatalog` 目录。创建此目录时，会 AWS Glue Data Catalog 使用与表存储桶、命名空间和表对应的对象填充。

   ```
   aws glue create-catalog \
     --region us-east-1 \
     --cli-input-json file://catalog.json
   ```

1. 使用以下命令验证是否已添加`s3tablescatalog`目录： AWS Glue 

   ```
   aws glue get-catalog --catalog-id s3tablescatalog
   ```

# 在 S3 表目录中创建数据库和表
<a name="create-databases-tables-s3-catalog"></a>

 您可以创建数据库来组织 Apache Iceberg 表，也可以创建表来定义数据在 S3 表目录中的架构和位置。

## 创建数据库（控制台）
<a name="w2aac13c27c25b5b1"></a>

1.  在上打开 Lake Formation 控制台 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，然后以数据湖管理员或数据库创建者的身份登录。

1. 在导航窗格的 **Data Catalog** 下，选择**数据库**。

1. 选择**创建数据库**。

1.  在**创建数据库**页面上，选择**数据库**选项，然后输入以下详细信息：
   + **名称**：输入数据库的唯一名称。
   + **数据目录**：选择 S3 表目录。数据库将位于此目录中。
   + **描述**：（可选）添加描述和位置。
   + **新表的 IAM 访问控制**：可以选择“仅对此数据库中的新表使用 IAM 访问控制”。有关此选项的信息，请参阅[更改数据湖的默认设置](https://docs.aws.amazon.com/lake-formation/latest/dg/change-settings.html)部分。
   + 选择**创建数据库**。您可以看到创建的数据库在 S3 表目录下面。

## 使用创建数据库 AWS CLI
<a name="w2aac13c27c25b5b3"></a>

以下 CLI 命令显示如何在 S3 表目录中创建数据库。

```
aws glue create-database 
--region us-east-1 \
--catalog-id "123456789012:s3tablescatalog/test" \
--database-input \
 '{ "Name": "testglueclidbcreation" }'
```

## 创建表（AWS 管理控制台）
<a name="w2aac13c27c25b5b5"></a>

 你可以使用 Lake Formation 控制台或 API 在 S3 表目录中创建 Apache Iceberg 元数据表。 AWS Glue `CreateTable`

1. 在上打开 Lake Formation 控制台 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，然后以数据湖管理员或具有`CreateTable`权限的用户身份登录。

1. 在导航窗格的 Data Catalog 下，选择**表**。

1. 选择“创建表”。

1. 在**创建表**页面上，输入表的详细信息：  
![\[S3 表目录\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/s3-catalog-create-table.png)
   + **表名称**：输入表的唯一名称。
   + **目录**：选择 S3 表目录作为目录。
   + **数据库**：选择 S3 表目录下的数据库。
   +  **描述**：输入表的描述。
   + **架构**：选择“添加列”以添加列和列的数据类型。您可以选择创建一个空表，然后稍后更新架构。Iceberg 允许您在创建表后演变架构和分区。您可以使用 Athena 查询更新表架构，使用 Spark 查询更新分区。

1. 选择**提交**。

## 创建表（AWS CLI）
<a name="w2aac13c27c25b5b7"></a>

```
aws glue create-table \ 
--database-name "testglueclidbcreation" \ 
--catalog-id "123456789012:s3tablescatalog/test" \ 
--region us-east-1 \ 
--table-input \ 
'{ "Name": "testtablegluecli", "Parameters": { "format": "ICEBERG" }, "StorageDescriptor": { "Columns": [ {"Name": "x", "Type": "int", "Parameters": {"required": "true"}} ] } }'
```

# 在另一个 AWS 账户中注册 Amazon S3 表存储桶
<a name="register-cross-account-s3-table-bucket"></a>

您可以将一个账户中的个人 Amazon S3 表存储桶（ARN 格式`arn:aws:s3tables:us-east-1:account-id:bucket/bucket-name`:）注册到 AWS 另一个账户中的 Lake Formation。例如，您可以在账户 B 的 Lake Formation 中注册账户 A 中的表存储桶。

## 先决条件
<a name="w2aac13c27c27b5"></a>

开始跨账户存储桶注册之前：
+ 在账户 A 中创建表存储桶。
+ 在账户 B 中创建具有相应存储桶注册权限的 IAM 角色。

  有关向 Lake Formation 注册表存储桶所需权限的更多信息，请参阅 [将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件](s3tables-catalog-prerequisites.md)。
+ 在要创建 S3 表目录的账户中注册表存储桶。
+  对于跨账户访问，注册表存储桶时指定的角色必须是具有相应权限的账户内角色，这样才能访问跨账户存储桶。该角色需要执行必要的 S3 表 IAM 操作才能访问存储桶资源。

## 跨账户表存储桶注册
<a name="w2aac13c27c27b7"></a>

在以下程序中，账户 A 是资源所属账户，账户 B 是注册表存储桶以管理访问权限的账户。

1. 登录到 AWS 管理控制台 账号 A

   打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1.  创建表存储桶。有关更多信息，请参阅《Amazon S3 用户指南》中的[创建表存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)。

1. 在账户 B 中注册表存储桶。

   使用将账户 A 中的表存储桶注册 AWS CLI 到账户 B 中的 Lake Formation

   ```
   aws lakeformation register-resource \
   --resource-arn 'arn:aws:s3tables:us-east-1:account-A-id:bucket/single-bucket-name' \
   --role-arn arn:aws:iam::account-B-id:role/role-name \
   --region us-east-1
   ```

   将 account-A-id、 single-bucket-name account-B-id、和角色名称替换为您的特定值。

1. 接下来，为账户 B 中的表存储桶创建目录。

   使用 AWS CLI创建目录。

   ```
   aws glue create-catalog --region us-east-1 \
   --cli-input-json \
   '{
      "Name": "catalog-name",
      "CatalogInput" : {
         "FederatedCatalog": {
            "Identifier": "arn:aws:s3tables:us-east-1:account A:bucket/single-bucket-name",
            "ConnectionName": "aws:s3tables"
         },
         "CreateDatabaseDefaultPermissions": [],
         "CreateTableDefaultPermissions": []      
      }
   }'
   ```

   将目录名称 account-A-id、和存储桶名称替换为您的特定值。

    以下 CLI 示例说明如何查看目录的详细信息。

   ```
    aws glue get-catalog \
     --catalog-id account-id:catalog-name \
     --region us-east-1
   ```

1. 接下来，在账户 B 的新创建目录中创建数据库和表。

   创建数据库。

   ```
   aws glue create-database \
     --region us-east-1 \
     --catalog-id "account-B-id:catalog-name" \
     --database-input \
   '{
     "Name": "database-name"
   }'
   ```

   创建表。

   ```
   aws glue create-table \
     --database-name database-name \
     --catalog-id account-B-id:catalog-name\
     --region us-east-1 \
     --table-input \
     '{
           "Name": "table-name",
           "Parameters": {
               "format": "ICEBERG"
           },
           "StorageDescriptor": {
              "Columns": [
           {"Name": "x", "Type": "int", "Parameters": {"required": "true"}}
             ]
           }
   }'
   ```

   将数据库名称、 account-B-id、目录名称和表名替换为您的特定值。

1. 以下示例说明如何查看目录中的对象。

   查看数据库详细信息。

   ```
   aws glue get-database \
     --name database-name \
     --catalog-id account-B-id:catalog-name \
     --region us-east-1
   ```

   查看表详细信息。

   ```
   aws glue get-table \
     --name table-name \
     --database-name database-name \
     --catalog-id account-B-id:catalog-name \
     --region us-east-1
   ```

   将数据库名称、 account-B-id、目录名称和表名替换为您的特定值。

# 授予权限
<a name="s3-tables-grant-permissions"></a>

 将 S3 表与集成后 AWS Lake Formation，您可以向账户中的其他 IAM 角色和用户授予对 S3 表目录和目录对象（表存储桶、数据库、表）的权限。借助 Lake Formation 权限，您可为 Amazon Redshift Spectrum 和 Athena 等集成分析引擎的用户定义表级、列级和行级粒度的访问控制。

 您可以使用命名资源方法或 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法来授予权限。在使用 LF 标签和 LF 标签表达式授予权限之前，必须进行定义并将其分配给 Data Catalog 对象。

有关更多信息，请参阅 [管理 LF 标签以实现元数据访问控制](managing-tags.md)。

通过向外部 AWS 账户授予 Lake Formation 权限，您可以与外部账户共享数据库和表。然后，用户可以运行跨多个账户联接和查询表的查询和作业。当您与其他账户共享目录资源时，该账户中的主体可以对该资源进行操作，就像该资源位于其数据目录中一样。

当您与外部账户共享数据库和表时，**超级用户**权限不可用。

 有关授予权限的详细说明，请参阅[管理 Lake Formation 权限](managing-permissions.md)部分。

## AWS CLI 在 Amazon S3 表上授予权限的示例
<a name="w2aac13c27c29c15"></a>

```
aws lakeformation grant-permissions \
--cli-input-json \
'{
    "Principal": {
        "DataLakePrincipalIdentifier":"arn:aws:iam::111122223333:role/DataAnalystRole"
    },
    "Resource": {
        "Table": {
            "CatalogId":"111122223333:s3tablescatalog/amzn-s3-demo-bucket1",
            "DatabaseName":"S3 table bucket namespace <example_namespace>",
            "Name":"S3 table bucket table name <example_table>"
        }
    },
    "Permissions": [
        "SELECT"
    ]
}'
```

 命名中要包括以下参数：
+ DataLakePrincipalIdentifier — 用于授予权限的 IAM 用户、角色或群组 ARN
+ CatalogId — 拥有数据目录的 12 位数 AWS 账户 ID
+ DatabaseName — Amazon S3 表存储桶命名空间的名称
+ 名称：Amazon S3 表类数据存储服务存储桶表名称
+ 权限：要授予的权限。选项包括：SELECT、INSERT、DELETE、DESCRIBE、ALTER、DROP、ALLL 和 SUPER

# 访问共享的 Amazon S3 表类数据存储服务
<a name="s3-tables-cross-account-sharing"></a>

 对 S3 表目录中数据库或表授予跨账户权限后，要访问这些资源，您需要创建指向共享数据库和表的资源链接。

1.  在目标账户（接收共享资源的账户）中，创建数据库资源链接。有关详细说明，请参阅[创建指向共享数据目录数据库的资源链接](create-resource-link-database.md)。

   创建数据库资源链接的 CLI 示例

   ```
   aws glue create-database 
   --region us-east-1 
   --catalog-id "111122223333" 
   --database-input \
   '{
     "Name": "s3table_resourcelink",
     "TargetDatabase": {
       "CatalogId": "011426214932:s3tablescatalog/chmni-s3-table-bucket-011426214932",
       "DatabaseName": "s3_table_ns"
     },
     "CreateTableDefaultPermissions": []
   }'
   ```

1.  对表授予跨账户权限。

   跨账户权限授予的 CLI 示例

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:role/S3TablesTestExecRole"
       },
       "Resource": {
           "Table": {
               "CatalogId": "011426214932:s3tablescatalog/chmni-s3-table-bucket-011426214932",
               "DatabaseName": "s3_table_ns",
               "Name": "test_s3_iceberg_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

1.  对资源链接授予 Lake Formation `DESCRIBE` 权限。

    对资源链接授予描述权限的 CLI 示例。

   ```
   aws lakeformation grant-permissions \
       --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:role/S3TablesTestExecRole
       --resource Database='{CatalogId=111122223333;, Name=s3table_resourcelink}' \
       --permissions DESCRIBE
   ```