

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

# 使用 LF-TBAC 方法授予数据湖权限
<a name="granting-catalog-perms-TBAC"></a>

您可以 LF-Tags 向委托人授予`DESCRIBE`和 `ASSOCIATE` Lake Formation 权限，以便他们可以查看 LF-Tags 和分配给数据目录资源（数据库、表、视图和列）。分配给数据目录资源后 LF-Tags ，您可以使用基于 Lake Formation 标签的访问控制 (LF-TBAC) 方法来保护这些资源。有关更多信息，请参阅 [Lake Formation 基于标签的访问控制](tag-based-access-control.md)。

首先，只有数据湖管理员才能授予这些权限。如果数据湖管理员通过授予选项授予这些权限，则其他主体可以授予这些权限。[Lake Formation 基于标签的访问控制最佳实践和注意事项](lf-tag-considerations.md)中介绍了 `DESCRIBE` 和 `ASSOCIATE` 权限。

您可以向外部 AWS 账户授予`DESCRIBE`和`ASSOCIATE`权限。 LF-Tag然后，该账户中的数据湖管理员可以将这些权限授予给该账户中的其他主体。然后，外部账户中的数据湖管理员向其授予`ASSOCIATE`权限的委托人可以分配 LF-Tags给您与其账户共享的数据目录资源。

向外部账户授予权限时，您必须包括授予选项。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface (AWS CLI) 授予权限。 LF-Tags 

**注意**  
S3 表目录不需要执行以下步骤。您可以使用授予 LF-Tags 对现有 S3 表目录的权限，而无需删除和重新创建它们。

**启用对使用 Lake Formation 权限的现有联合目录的 LF-Tags 支持**

如果您有使用 Lake Formation 权限的现有联合目录，例如 Amazon Redshift Amazon DynamoDB 或 LF-Tags 在支持联合目录之前创建的目录，请按照以下步骤操作。

1. 删除现有目录 - 调用 `deleteCatalog` API 操作以移除使用 Lake Formation 权限的现有联合目录。

1.  创建新的联合目录-创建新目录并将新目录指向您的现有目录 namespace/datashare。

   为目录使用新名称-此过程会更新您先前存在的联合目录以支持 LF-Tag 功能。如果您想使用相同的目录名称，请联系 AWS 支持团队寻求帮助。

**Topics**
+ [授予数据目录权限](#granting-cat-perms-TBAC-console)

**另请参阅**  
[管理 LF-Tag 值权限](TBAC-granting-tags.md)
[管理 LF-Tags 元数据访问控制](managing-tags.md)
[Lake Formation 基于标签的访问控制](tag-based-access-control.md)

## 授予数据目录权限
<a name="granting-cat-perms-TBAC-console"></a>

使用 Lake Formation 控制台，或者 AWS CLI 使用基于 Lake Formation 标签的访问控制 (LF-TBAC) 方法授予 Lake Formation 对数据目录数据库、表、视图和列的权限。

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

以下步骤说明了如何使用基于 Lake Formation 标签的访问控制 (LF-TBAC) 方法和 Lake Formation 控制台上的 “**授予数据湖权限**” 页面来授予权限。该页面分为以下几个部分：
+  **委托人**-用户、角色和 AWS 账户 向其授予权限。
+  **LF-Tags 或目录资源**-要授予权限的数据库、表或资源链接。
+  **权限**：要授予的 Lake Formation 权限。

1. 

**打开“授予数据湖权限”页面。**

   在上打开 AWS Lake Formation 控制台 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，然后以数据湖管理员或使用授权选项获得 Lake Formation 数据目录资源权限的 LF-TBAC 用户身份登录。

   在导航窗格的**权限**下，选择**数据湖权限**。然后选择**授予**。

1. 

**指定主体。**

    在**主体**部分中，选择主体类型，然后指定要向其授予权限的主体。  
![“主体”部分包含以下文本中命名的四个磁贴。每个磁贴包含一个选项按钮和文本。IAM Identity Center 磁贴处于选中状态，“用户和组”下拉列表位于磁贴下方。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/identity-center-grant-perm.png)  
**IAM 用户和角色**  
从 **IAM 用户和角色**列表中选择一个或多个用户或角色。  
**IAM Identity Center **  
从**用户和组**列表中选择一个或多个用户或组。  
**SAML 用户和组**  
对于 **SAML 和 Quick 用户和群组**，请为通过 SAML 联合的用户或群组输入一个或多个 Amazon 资源名称 (ARN)，为快速用户或群组输入 ARN。在每个 ARN 后按 Enter。  
有关如何构建 ARN 的信息，请参阅 [Lake Formation 的批准和撤销 AWS CLI 命令](lf-permissions-reference.md#perm-command-format)。  
仅Quick 企业版支持 Lake Formation 与 Quick 集成。  
**外部账户**  
对于**AWS 账户 AWS 组织**或 **IAM 委托人**，请为 IAM 用户或角色输入一个或多个有效 AWS 账户 ID、组织 ID、组织单位 ID 或 ARN。在每个 ID 后按 **Enter**。  
组织 ID 由“o-”后跟 10 到 32 个小写字母或数字组成。  
单位 ID 以“ou-”开头，后跟 4 到 32 个小写字母或数字（包含 OU 的根的 ID）。该字符串后跟第二个“-”短横线和 8 到 32 个额外的小写字母或数字。

1. 

**指定 LF-Tags。**

   确保选择 “**资源匹配依 LF-Tags**据” 选项。选择**LF-Tag 键值对**或**已保存 LF-Tag **的表达式。

   1. 如果选择**LF-Tag 键值对**选项，请选择键和值。

      如果选择多个值，则使用`OR`运算符创建 LF-Tag 表达式。这意味着，如果其中任何一个 LF-Tag 值与 LF-Tag 分配给数据目录资源的值相匹配，则授予您对该资源的权限。  
![LF-Tag 或目录资源部分包含两个水平排列的图块，其中每个图块都包含一个选项按钮和描述性文本。选项包括匹配的资源 LF-Tags （推荐）和命名数据目录资源。已选择匹配 LF-Tags 的资源。磁贴下方是水平排列的“键”字段和“值”字段。“键”字段包含“module”，“值”字段是一个下拉列表，其中包含三个条目：“Orders”、“Sales”和“Customers”。每个条目都有一个关联的复选框。“Customers”对应的复选框处于选中状态。这两个字段旁边有一个 “移除” 按钮。该对话框还包括一个 “添加 LF-Tag ” 按钮，表示您可以添加另一行包含 “关键字” 和 “值” 字段以及 “移除” 按钮。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/grant-data-permissions-tags-2.png)

   1. （可选）再次选择 “**添加 LF-Tag 键值对**” 以指定另一个键值对。 LF-Tag

      如果指定多个 LF-Tag，则使用`AND`运算符创建 LF-Tag 表达式。只有在 LF-Tag 表达式中为每个 LF-Tag资源分配了匹配项时，才会向委托人授予 LF-Tag 对数据目录资源的权限。

   1. 选择**另存为新表达式**选项可重复使用该表达式。

      您需要具有 `Create LF-Tag expression` 权限才能保存表达式。

      有关 LF-Tag 表达式的更多信息，请参阅[管理元数据访问控制 LF-Tag 表达式](managing-tag-expressions.md)。

1. 

**指定权限。**

   指定向主体授予的对匹配数据目录资源的权限。匹配资源是指分配给委 LF-Tags 托人的其中一个 LF-Tag 表达式匹配的资源。

   您可以指定要授予的对匹配数据库、匹配表和匹配视图的权限。  
![显示了页面的两个部分。“数据库权限”部分包含“数据库权限”和“可授予的权限”对应的复选框。在“数据库”部分下方，“表权限”部分显示“表权限”和“可授予的权限”对应的复选框。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/grant-TBAC-DB-table-permissions.png)

   在**数据库权限**下，选择要向主体授予的对匹配数据库的数据库权限。

   在**表权限**下，选择要向主体授予的对匹配表和匹配视图的表或视图权限。

   您也可以从**表权限**中选择要对视图应用的 `Select`、`Describe` 和 `Drop` 权限。

1. 选择**授权**。

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

您可以使用 AWS Command Line Interface (AWS CLI) 和基于 Lake Formation 标签的访问控制 (LF-TBAC) 方法来授予 Lake Formation 对数据目录数据库、表和列的权限。

**使用授予数据湖权限 AWS CLI 还有 LF-TBAC 方法**
+ 使用 `grant-permissions` 命令。  
**Example**  

  以下示例将 LF-Tag 表达式 “`module=*`”（ LF-Tag 密钥的所有值`module`）授予用户`datalake_user1`。该用户将拥有所有匹配数据库的`CREATE_TABLE`权限，即已分配了密钥 LF-Tag `module`和任意值的数据库。

  ```
  aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "CREATE_TABLE" --resource '{ "LFTagPolicy": {"CatalogId":"111122223333","ResourceType":"DATABASE","Expression":[{"TagKey":"module","TagValues":["*"]}]}}' 
  ```  
**Example**  

  下一个示例将 LF-Tag 表达式 “`(level=director) AND (region=west OR region=south)`” 授予用户`datalake_user1`。该用户将通过授予选项具有对匹配表（即分配了 `level=director` 和 `region=west` 或`region=south` 的表）的 `SELECT`、`ALTER` 和 `DROP` 权限。

  ```
  aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" "ALTER" "DROP" --permissions-with-grant-option "SELECT" "ALTER" "DROP" --resource '{ "LFTagPolicy": {"CatalogId":"111122223333","ResourceType":"TABLE","Expression": [{"TagKey": "level","TagValues": ["director"]},{"TagKey": "region","TagValues": ["west", "south"]}]}}'
  ```  
**Example**  

  下一个示例将 LF-Tag 表达式 “`module=orders`” 授予 AWS 账户 1234-5678-9012。然后，该账户中的数据湖管理员可以向其账户中的主体授予“`module=orders`”表达式。然后，这些委托人将`CREATE_TABLE`有权使用指定的资源方法或方法访问账户 1111-2222-3333 拥有并与账户 1234-5678-9012 共享的匹配数据库。 LF-TBAC 

  ```
  aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=123456789012 --permissions "CREATE_TABLE" --permissions-with-grant-option "CREATE_TABLE" --resource '{ "LFTagPolicy": {"CatalogId":"111122223333","ResourceType":"DATABASE","Expression":[{"TagKey":"module","TagValues":["orders"]}]}}'
  ```

------