

# 使用 Lake Formation 管理对表或数据库的访问权限
<a name="grant-permissions-tables"></a>

在表存储桶与 Amazon 分析服务集成后，Lake Formation 将管理对表的访问，并要求向每个 IAM 主体（用户或角色）授权对分析服务执行操作。Lake Formation 使用其自己的权限模型（Lake Formation 权限），该模型可以对数据目录资源进行精细的访问控制。

有关更多信息，请参阅《Amazon Lake Formation Developer Guide》**中的 [Overview of Lake Formation permissions](https://docs.amazonaws.cn//lake-formation/latest/dg/lf-permissions-overview.html)。

Amazon Lake Formation 中有两种主要类型的权限：

1. 元数据访问权限控制着在数据目录中创建、读取、更新和删除元数据数据库和表的能力。

1. 基础数据访问权限控制着对数据目录资源指向的基础 Amazon S3 位置读取和写入数据的能力。

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

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

**注意**  
如果您是执行表存储桶集成的用户，则您已经拥有对表的 Lake Formation 权限。如果您是唯一将访问表的主体，则可以跳过此步骤。您只需向其它 IAM 主体授予对表的 Lake Formation 权限即可。这可让其它主体在运行查询时访问该表。有关更多信息，请参阅 [授予对表或数据库的 Lake Formation 权限](#grant-lf-table)。

## 授予对表或数据库的 Lake Formation 权限
<a name="grant-lf-table"></a>

您可以通过 Lake Formation 控制台或 Amazon CLI，向主体授予对表存储桶中表或数据库的 Lake Formation 权限。

**注意**  
当您将对数据目录资源的 Lake Formation 权限授予外部账户或直接授予其他账户中的 IAM 主体时，Lake Formation 会使用 Amazon Resource Access Manager (Amazon RAM) 服务共享该资源。如果被授权者账户与授予者账户在同一个组织中，则被授权者立即可以使用共享资源。如果被授权者账户不在同一个组织中，则 Amazon RAM 会向被授权者账户发送邀请，以便其接受或拒绝资源授权。然后，要使共享资源可用，被授权者账户中的数据湖管理员必须使用 Amazon RAM 控制台或 Amazon CLI 接受邀请。有关跨账户数据共享的更多信息，请参阅《Amazon Lake Formation Developer Guide》**中的 [Cross-account data sharing in Lake Formation](https://docs.amazonaws.cn/lake-formation/latest/dg/cross-account-permissions.html)。

------
#### [ Console ]

1. 打开 Amazon Lake Formation 控制台（网址为 [https://console.amazonaws.cn/lakeformation/](https://console.amazonaws.cn/lakeformation/)），并以数据湖管理员身份登录。有关如何创建数据湖管理员的更多信息，请参阅《Amazon Lake Formation Developer Guide》**中的 [Create a data lake administrator](https://docs.amazonaws.cn/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)。

1. 在导航窗格中，选择**数据权限**，然后选择**授予**。

1. 在**授予权限**页面的**主体**下，执行以下操作之一：
   + 对于 Amazon Athena 或 Amazon Redshift，选择 **IAM 用户和角色**，然后选择您用于查询的 IAM 主体。
   + 对于 Amazon Data Firehose，选择 **IAM 用户和角色**，然后选择您创建的服务角色以流式传输到表中。
   + 对于 Quick，选择 **SAML 用户和组**，然后输入 Quick 管理员用户的 Amazon 资源名称（ARN）。
   + 要访问 Amazon Glue Iceberg REST 端点，请选择 **IAM 用户和角色**，然后选择您为客户端创建的 IAM 角色。有关更多信息，请参阅 [为客户端创建 IAM 角色](s3-tables-integrating-glue-endpoint.md#glue-endpoint-create-iam-role)。

1. 在 **LF 标签或目录资源**下，选择**命名 Data Catalog 资源**。

1. 对于**目录**，请选择您在集成表存储桶时创建的子目录，例如 `account-id:s3tablescatalog/amzn-s3-demo-bucket`。

1. 对于**数据库**，选择您创建的 S3 表存储桶命名空间。

1. （可选）对于**表**，请选择您在表存储桶中创建的 S3 表。
**注意**  
如果您要在 Athena 查询编辑器中创建新表，请不要选择表。

1. 请执行以下操作之一：
   + 如果您在之前的步骤中指定了表，请为**表权限**选择 **Super**。
   + 如果您未在之前的步骤中指定表，请转到**数据库权限**。对于跨账户数据共享，您不能选择 **Super** 来向另一个主体授予对数据库的所有权限。而是应选择更精细的权限，例如**描述**。

1. 选择**授权**。

------
#### [ CLI ]

1. 务必要以数据湖管理员身份运行以下 Amazon CLI 命令。有关更多信息，请参阅《Amazon Lake Formation Developer Guide》**中的 [Create a data lake administrator](https://docs.amazonaws.cn//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)。

1. 运行以下命令，向 IAM 主体授予对 S3 表存储桶中表的 Lake Formation 权限以访问该表。要使用此示例，请将 *`user input placeholders`* 替换为您自己的信息。

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role"
       },
       "Resource": {
           "Table": {
               "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket",
               "DatabaseName": "S3 table bucket namespace, for example, test_namespace",
               "Name": "S3 table bucket table name, for example test_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

------