

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

# 使用 Lake Formation 基于标签的访问控制管理数据湖
<a name="managing-dl-tutorial"></a>

成千上万的客户正在构建 PB 级的数据湖。 AWS这些客户中有许多人习 AWS Lake Formation 惯于在整个组织中轻松构建和共享他们的数据湖。随着表和用户数量的增加，数据管家和管理员正在寻找方法来轻松地大规模管理对数据湖的权限。Lake Formation 基于标签的访问控制 (LF-TBAC) 允许数据管家创建 *LF 标签*（基于其数据分类和本体）并在之后将其附加到资源，因而解决了这个问题。

LF-TBAC 是一种基于属性定义权限的授权策略。在 Lake Formation 中，这些属性被称为“LF 标签”。您可以将 LF 标签附加到数据目录资源和 Lake Formation 主体。数据湖管理员可以使用 LF 标签分配和撤销对 Lake Formation 资源的权限。有关更多信息，请参阅[Lake Formation 基于标签的访问控制](tag-based-access-control.md)。

 本教程演示如何使用 AWS 公共数据集创建基于 Lake Formation 标签的访问控制策略。此外，它还展示了如何查询具有相关的 Lake Formation 基于标签的访问策略的表、数据库和列。

您可以将 LF-TBAC 用于以下使用案例：
+ 您有大量表和主体，数据湖管理员必须授予对它们的访问权限
+ 您想基于本体对数据进行分类并基于分类授予权限
+ 数据湖管理员想要以松耦合的方式动态分配权限

以下是使用 LF-TBAC 配置权限的主要步骤：

1. 数据管家使用以下两个 LF 标签定义标签本体：`Confidential` 和 `Sensitive`。带有 `Confidential=True` 的数据具有更严格的访问控制。带有 `Sensitive=True` 的数据需要分析师进行具体分析。

1. 数据管家为数据工程师分配不同级别的权限，以便他们使用不同 LF 标签构建表。

1. 数据工程师构建了两个数据库：`tag_database` 和 `col_tag_database`。`tag_database` 中的所有表都配有 `Confidential=True`。`col_tag_database` 中的所有表都配有 `Confidential=False`。`col_tag_database` 中表的一些列带有 `Sensitive=True` 标签，以满足特定的分析需求。

1. 数据工程师使用特定表达式条件 `Confidential=True` 以及 `Confidential=False`、`Sensitive=True` 向分析人员授予对表的读取权限。

1. 通过这种配置，数据分析师可以专注于使用正确的数据执行分析。

**Topics**
+ [目标受众](#tut-manage-dl-roles)
+ [先决条件](#tut-manage-dl-prereqs)
+ [第 1 步：调配资源](#tut-manage-dl-provision-resources)
+ [第 2 步：注册数据位置、创建 LF 标签本体并授予权限](#tut-manage-dl-register-datalocation-lftag)
+ [第 3 步：创建 Lake Formation 数据库](#tut-manage-dl-tbac-create-databases)
+ [第 4 步：授予表权限](#tut-manage-dl-grant-table-permissions)
+ [第 5 步：在 Amazon Athena 中运行查询以验证权限](#tut-manage-dl-tbac-run-query)
+ [步骤 6：清理 AWS 资源](#tut-manage-dl-tbac-clean-up-db)

## 目标受众
<a name="tut-manage-dl-roles"></a>



本教程适用于数据管家、数据工程师和数据分析师。在 Lake Formation 中 AWS Glue Data Catalog 管理和管理权限时，生产账户中的数据管理员根据其支持的职能拥有功能所有权，并且可以向各种消费者、外部组织和账户授予访问权限。

下表列出了本教程中使用的角色：


|  角色 | 说明 | 
| --- | --- | 
| 数据管家（管理员） | lf-data-steward 用户拥有以下访问权限：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/managing-dl-tutorial.html)  | 
| 数据工程师 | `lf-data-engineer` 用户具有以下访问权限：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/managing-dl-tutorial.html) | 
| 数据分析人员 | lf-data-analyst 用户拥有以下访问权限：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/managing-dl-tutorial.html)  | 

## 先决条件
<a name="tut-manage-dl-prereqs"></a>

在开始本教程之前，你必须有一个 AWS 账户 可以用来以具有正确权限的管理用户身份登录的。有关更多信息，请参阅 [完成初始 AWS 配置任务](getting-started-setup.md#initial-aws-signup)。

本教程假定您熟悉 IAM。有关 IAM 的信息，请参阅 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

## 第 1 步：调配资源
<a name="tut-manage-dl-provision-resources"></a>

本教程包括一个用于快速设置的 AWS CloudFormation 模板。您可以查看和自定义该模板来满足自己的需求。该模板创建了三个不同的角色（列在中[目标受众](#tut-manage-dl-roles)）来执行本练习，并将 nyc-taxi-data数据集复制到您的本地 Amazon S3 存储桶。
+ 亚马逊 S3 存储桶
+ 适当的 Lake Formation 设置
+ 适当的 Amazon EC2 资源
+ 三个具有凭证的 IAM 角色

**创建您的资源**

1. 在美国东部（弗吉尼亚北部）区域的 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 登录 AWS CloudFormation 控制台。

1. 选择[启动堆栈](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?templateURL=https://aws-bigdata-blog.s3.amazonaws.com/artifacts/lakeformationtbac/cfn/tbac_permission.json)。

1.  选择**下一步**。

1.  在**用户配置**部分，为以下三个角色输入密码：`DataStewardUserPassword`、`DataEngineerUserPassword` 和 `DataAnalystUserPassword`。

1.  查看最后一页上的详细信息，然后选择**我确认这 AWS CloudFormation 可能会创建 IAM 资源**。

1.  选择**创建**。

   堆栈创建可能最多需要五分钟时间才能完成。

**注意**  
完成本教程后，您可能需要删除中的堆栈 CloudFormation ，以免继续产生费用。根据堆栈的事件状态验证是否已成功删除资源。

## 第 2 步：注册数据位置、创建 LF 标签本体并授予权限
<a name="tut-manage-dl-register-datalocation-lftag"></a>

在这一步，数据管家用户使用 `Confidential` 和 `Sensitive` 这两个 LF 标签定义标签本体，并授权特定的 IAM 主体将新创建的 LF 标签附加到资源。

**注册数据位置并创建 LF 标签本体**

1. 以数据管家用户 (`lf-data-steward`) 的身份执行第一步，验证 Amazon S3 及 Lake Formation 中数据目录中的数据。

   1. 使用部署 CloudFormation 堆栈时使用的密码登录 L [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)ak `lf-data-steward` e Formation 控制台。

   1. 在导航窗格中的**权限**下，选择**管理角色和任务**。

   1. 在**数据湖管理员**部分，选择**添加**。

   1. 在**添加管理员**页面上，对于 **IAM 用户和角色**，选择用户 `lf-data-steward`。

   1. 选择**保存**以添加 `lf-data-steward` 作为 Lake Formation 管理员。

1. 接下来，更新数据目录设置以使用 Lake Formation 权限来控制目录资源，而不是使用基于 IAM 的访问控制。

   1. 在导航窗格中的**管理**下，选择**数据目录设置**。

   1. 取消选中**仅对新数据库使用 IAM 访问控制**。

   1. 取消选中**仅对新数据库中的新表使用 IAM 访问控制**。

   1. 单击**保存**。

1. 接下来，注册数据湖的数据位置。

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

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

   1. 在**注册位置**页面上，对于 **Amazon S3 路径**，输入 `s3://lf-tagbased-demo-{{Account-ID}}`。

   1. 对于 **IAM 角色**，保留默认值 `AWSServiceRoleForLakeFormationDataAccess` 不变。

   1. 选择 **Lake Formation** 作为权限模式。

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

1. 接下来，通过定义 LF 标签来创建本体。

   1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

   1. 选择**添加 LF 标签**。

   1. 对于**键**，输入 `Confidential`。

   1. 对于**值**，添加 `True` 和 `False`。

   1. 选择**添加 LF 标签**。

   1. 重复上述步骤，使用值 `True` 创建 **LF 标签** `Sensitive`。

   您已经为本练习创建了所有必需的 LF 标签。

**向 IAM 用户授予权限**

1. 接下来，授权特定的 IAM 主体将新创建的 LF 标签附加到资源。

   1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

   1. 在 **LF 标签权限**部分，选择**授予权限**。

   1. 对于**权限类型**，选择 **LF 标签键值对权限**。

   1. 选择 **IAM 用户和角色**。

   1. 对于 **IAM 用户和角色**，搜索并选择 `lf-data-engineer` 角色。

   1. 在 **LF 标签**部分，添加值为 `True` 和 `False` 的键 `Confidential`，以及值为 `True` 的 `key` `Sensitive`。

   1. 在**权限**下，为**权限**和**可授予的权限**选择**描述**和**关联**。

   1. 选择**授权**。

1. 接下来，授`lf-data-engineer`予在我们的数据目录和由创建的底层 Amazon S3 存储桶上创建数据库的权限 AWS CloudFormation。

   1. 在导航窗格的**管理**下，选择**管理角色和任务**。

   1.  在**数据库创建者**部分，选择**授权**。

   1. 对于 **IAM 用户和角色**，选择 `lf-data-engineer` 角色。

   1. 对于**目录权限**，选择**创建数据库**。

   1. 选择**授权**。

1. 接下来，向 `lf-data-engineer` 用户授予对 Amazon S3 存储桶 `(s3://lf-tagbased-demo-{{Account-ID}})` 的权限。

   1. 在导航窗格中的**权限**下，选择**数据位置**。

   1. 选择**授权**。

   1. 选择**我的账户**。

   1. 对于 **IAM 用户和角色**，选择 `lf-data-engineer` 角色。

   1. 对于**存储位置**，请输入由 CloudFormation 模板创建的 Amazon S3 存储桶`(s3://lf-tagbased-demo-{{Account-ID}})`。

   1. 选择**授权**。

1. 接下来，授予对与 **LF 标签**表达式 `Confidential=True` 关联的资源的可授予权限 `lf-data-engineer`。

   1. 在导航窗格的**权限**下，选择**数据湖权限**。

   1. 选择**授权**。

   1. 选择 **IAM 用户和角色**。

   1.  选择角色 `lf-data-engineer`。

   1. 在 **LF 标签或目录资源**部分，选择**通过 LF 标签匹配的资源**。

   1. 选择**添加 LF 标签键值对**。

   1.  添加值为 `True` 的键 `Confidential`。

   1. 在**数据库权限**部分，为**数据库权限**和**可授予的权限**选择**描述**。

   1. 在**表权限**部分，为**表权限**和**可授予的权限**选择**描述**、**选择**和**更改**。

   1.  选择**授权**。

1. 接下来，授予对与 LF 标签表达式 `Confidential=False` 关联的资源的可授予权限 `lf-data-engineer`。

   1. 在导航窗格的**权限**下，选择**数据湖权限**。

   1. 选择**授权**。

   1. 选择 **IAM 用户和角色**。

   1. 选择角色 `lf-data-engineer`。

   1.  选择**通过 LF 标签匹配的资源**。

   1. 选择**添加 LF 标签**。

   1.  添加值为 `False` 的键 `Confidential`。

   1. 在**数据库权限**部分，为**数据库权限**和**可授予的权限**选择**描述**。

   1. 在**表和列权限** 部分，请勿选择任何内容。

   1. 选择**授权**。

1. 接下来，授予对与 **LF 标签**键值对 `Confidential=False` 和 `Sensitive=True` 关联的资源的可授予权限 `lf-data-engineer`。

   1. 在导航窗格的**权限**下，选择**数据权限**。

   1. 选择**授权**。

   1. 选择 **IAM 用户和角色**。

   1. 选择角色 `lf-data-engineer`。

   1. 在 **LF 标签或目录资源**部分下，选择**通过 LF 标签匹配的资源**。

   1. 选择**添加 LF 标签**。

   1.  添加值为 `False` 的键 `Confidential`。

   1. 选择**添加 LF 标签键值对**。

   1. 添加值为 `True` 的键 `Sensitive`。

   1. 在**数据库权限**部分，为**数据库权限**和**可授予的权限**选择**描述**。

   1. 在**表权限**部分，为**表权限**和**可授予的权限**选择**描述**、**选择**和**更改**。

   1. 选择**授权**。

## 第 3 步：创建 Lake Formation 数据库
<a name="tut-manage-dl-tbac-create-databases"></a>

在这一步，您将创建两个数据库，并将 LF 标签附加到数据库和特定列以进行测试。

**创建用于数据库级别访问的数据库和表**

1. 首先，创建数据库 `tag_database`、表 `source_data`，并附加适当的 LF 标签。

   1. 在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 上的 “**数据目录**” 下，选择 “**数据库**”。

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

   1. 对于**名称**，请输入 `tag_database`。

   1. 在**位置栏**中，输入由 CloudFormation 模板创建的 Amazon S3 地点`(s3://lf-tagbased-demo-{{Account-ID}}/tag_database/)`。

   1. 取消选中**仅对此数据库中的新表使用 IAM 访问控制**。

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

1. 接下来，在 `tag_database` 中创建一个新表。

   1. 在**数据库**页面上，选择数据库 `tag_database`。

   1.  选择**查看表**，然后单击**创建表**。

   1. 对于**名称**，请输入 `source_data`。

   1. 对于 **Database** (数据库)，选择 `tag_database` 数据库。

   1. 对于**表格格式**，选择**标准 AWS Glue 表格**。

   1. 对于**数据位置**，选择**我的账户中的指定路径**。

   1. 在包含路径中，输入 CloudFormation 模板要`tag_database`创建的路径`(s3://lf-tagbased-demo{{Account-ID}}/tag_database/)`。

   1. 对于**数据格式**，选择 **CSV**。

   1. 在**上传架构**下，输入以下 JSON 列结构数组以创建架构：

      ```
       [
                     {
                          "Name": "vendorid",
                          "Type": "string"
                     },
                     {
                          "Name": "lpep_pickup_datetime",
                          "Type": "string"                    
                     },
                     {
                          "Name": "lpep_dropoff_datetime",
                          "Type": "string"  
                    
                     },
                        {
                          "Name": "store_and_fwd_flag",
                          "Type": "string"                                
                     },
                        {
                          "Name": "ratecodeid",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "pulocationid",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "dolocationid",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "passenger_count",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "trip_distance",
                          "Type": "string"                    
                          
                     }, 
                        {
                          "Name": "fare_amount",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "extra",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "mta_tax",
                          "Type": "string"                    
                          
                     },
                     {
                          "Name": "tip_amount",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "tolls_amount",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "ehail_fee",
                          "Type": "string"                    
                          
                     }, 
                     {
                          "Name": "improvement_surcharge",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "total_amount",
                          "Type": "string"                    
                          
                     },
                     {
                          "Name": "payment_type",
                          "Type": "string"                    
                          
                     }
       ]
      ```

   1. 选择**上传**。上传架构后，表架构看上去应如以下屏幕截图所示：  
![表架构包含 18 列，包括供应商、取件和下车日期时间、地点和票价详情 IDs，均为字符串数据类型。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tutorial-manage-dl-tbac1.jpg)

   1. 选择**提交**。

1. 接下来，在数据库级别附加 LF 标签。

   1. 在**数据库**页面上，找到并选择 `tag_database`。

   1. 在**操作**菜单上，选择**编辑 LF 标签**。

   1. 选择**分配新的 LF 标签**。

   1. 对于**已分配的键**，选择您之前创建的 `Confidential` LF 标签。

   1. 对于**值**，选择 `True`。

   1. 选择**保存**。

   这样就完成了为 tag\_database 数据库进行的 LF 标签分配。

**创建用于列级别访问的数据库和表**

重复以下步骤创建数据库 `col_tag_database` 和表 `source_data_col_lvl`，并在列级别附加 LF 标签。

1. 在**数据库**页面上，选择**创建数据库**。

1. 对于**名称**，请输入 `col_tag_database`。

1. 在**位置栏**中，输入由 CloudFormation 模板创建的 Amazon S3 地点`(s3://lf-tagbased-demo-{{Account-ID}}/col_tag_database/)`。

1. 取消选中**仅对此数据库中的新表使用 IAM 访问控制**。

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

1. 在**数据库**页面上，选择您的新数据库 `(col_tag_database)`。

1. 选择**查看表**，然后单击**创建表**。

1. 对于**名称**，请输入 `source_data_col_lvl`。

1. 对于**数据库**，选择您的新数据库 `(col_tag_database)`。

1. 对于**表格格式**，选择**标准 AWS Glue 表格**。

1. 对于**数据位置**，选择**我的账户中的指定路径**。

1. 输入 `col_tag_database` `(s3://lf-tagbased-demo-{{Account-ID}}/col_tag_database/)` 的 Amazon S3 路径。

1. 对于**数据格式**，选择 `CSV`。

1. 在`Upload schema`下方，输入以下架构 JSON：

   ```
   [
                  {
                       "Name": "vendorid",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "lpep_pickup_datetime",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "lpep_dropoff_datetime",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "store_and_fwd_flag",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "ratecodeid",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "pulocationid",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "dolocationid",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "passenger_count",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "trip_distance",
                       "Type": "string"
                       
                       
                  }, 
                     {
                       "Name": "fare_amount",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "extra",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "mta_tax",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "tip_amount",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "tolls_amount",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "ehail_fee",
                       "Type": "string"
                       
                       
                  }, 
                  {
                       "Name": "improvement_surcharge",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "total_amount",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "payment_type",
                       "Type": "string"
                       
                       
                  }
   ]
   ```

1. 选择 `Upload`。上传架构后，表架构看上去应如以下屏幕截图所示：  
![包含 18 列的表格架构，包括供应商、取件和下车日期时间以及票价金额。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tutorial-manage-dl-tbac2.jpg)

1. 选择**提交**以完成表的创建。

1. 现在，将 `Sensitive=True` LF 标签关联到列 `vendorid` 和 `fare_amount`。

   1. 在**表**页面上，选择您创建的表 `(source_data_col_lvl)`。

   1. 在**操作**菜单上，选择**架构**。

   1. 选择列 `vendorid` 并选择**编辑 LF 标签**。

   1. 对于**已分配的键**，选择**区分大小写**。

   1.  对于**值**，选择 **True**。

   1. 选择**保存**。

1. 接下来，将 `Confidential=False` LF 标签关联到 `col_tag_database`。这是在登录`col_tag_database`时`lf-data-analyst`能够描述数据库所必需的 Amazon Athena。

   1. 在**数据库**页面上，找到并选择 `col_tag_database`。

   1. 在**操作**菜单上，选择**编辑 LF 标签**。

   1. 选择**分配新的 LF 标签**。

   1. 对于**已分配的键**，选择您之前创建的 `Confidential` LF 标签。

   1. 对于**值**，选择 `False`。

   1. 选择**保存**。

## 第 4 步：授予表权限
<a name="tut-manage-dl-grant-table-permissions"></a>

使用 LF 标签 `Confidential` 和 `Sensitive` 向数据分析师授予使用数据库 `tag_database` 和表 `col_tag_database` 的权限。

1. 按照以下步骤向 `lf-data-analyst` 用户授予对与 LF 标签 `Confidential=True`（Database:tag\_database）关联的对象的权限，使其拥有对数据库的 `Describe` 权限和对表的 `Select` 权限。

   1. 登录 Lake Formation 控制台，网址[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)为`lf-data-engineer`。

   1. 在**权限**下，选择**数据湖权限**。

   1. 选择**授权**。

   1. 在**主体**下，选择 **IAM 用户和角色**。

   1. 对于 **IAM 用户和角色**，选择 `lf-data-analyst`。

   1. 在 **LF 标签或目录资源**下，选择**通过 LF 标签匹配的资源**。

   1. 选择**添加 LF 标签**。

   1. 对于**键**，选择 `Confidential`。

   1. 对于**值**，选择 `True`。

   1. 对于**数据库权限**，选择 `Describe`。

   1. 对于**表权限**，选择**选择**和**描述**。

   1. 选择**授权**。

1. 接下来，重复这些步骤，向数据分析师授予对 `Confidential=False` 的 LF 标签表达式的权限。当以 `lf-data-analyst` 身份从 Amazon Athena 登录时，使用此 **LF 标签**描述 `col_tag_database` 和表 `source_data_col_lvl`。

   1. 登录 Lake Formation 控制台，网址[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)为`lf-data-engineer`。

   1. 在**数据库**页面上，选择数据库 `col_tag_database`。

   1. 选择**操作**和**授权**。

   1. 在**主体**下，选择 **IAM 用户和角色**。

   1. 对于 **IAM 用户和角色**，选择 `lf-data-analyst`。

   1. 选择**通过 LF 标签匹配的资源**。

   1. 选择**添加 LF 标签**。

   1. 对于**键**，选择 `Confidential`。

   1.  对于**值**，选择 `False`。

   1. 对于**数据库权限**，选择 `Describe`。

   1. 对于**表权限**，请勿选择任何内容。

   1. 选择**授权**。

1. 接下来，重复这些步骤，向数据分析师授予对 `Confidential=False` 和 `Sensitive=True` 的 LF 标签表达式的权限。当以 `lf-data-analyst` 身份从 Amazon Athena 登录时，使用此 LF 标签描述 `col_tag_database` 和表 `source_data_col_lvl`（列级别）。

   1. 登录 Lake Formation 控制台 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，网址为 `lf-data-engineer`

   1. 在“数据库”页面上，选择数据库 `col_tag_database`。

   1. 选择**操作**和**授权**。

   1. 在**主体**下，选择 **IAM 用户和角色**。

   1.  对于 **IAM 用户和角色**，选择 `lf-data-analyst`。

   1. 选择**通过 LF 标签匹配的资源**。

   1. 选择**添加 LF 标签**。

   1. 对于**键**，选择 `Confidential`。

   1. 对于**值**，选择 `False`。

   1. 选择**添加 LF 标签**。

   1. 对于**键**，选择 `Sensitive`。

   1. 对于**值**，选择 `True`。

   1. 对于**数据库权限**，选择 `Describe`。

   1. 对于**表权限**，选择 `Select` 和 `Describe`。

   1. 选择**授权**。

## 第 5 步：在 Amazon Athena 中运行查询以验证权限
<a name="tut-manage-dl-tbac-run-query"></a>

在这一步，使用 Amazon Athena 对两个表 `(source_data and source_data_col_lvl)` 运行 `SELECT` 查询。使用 Amazon S3 路径作为查询结果位置 `(s3://lf-tagbased-demo-{{Account-ID}}/athena-results/)`。

1. 登录Athena控制台，网址为. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)`lf-data-analyst` 

1. 在 Athena 查询编辑器中，在左侧面板中选择 `tag_database`。

1. 选择 `source_data` 旁边的其他菜单选项图标（三个竖点），然后选择**预览表**。

1. 选择**运行查询**。

   查询可能需要几分钟时间才能运行。查询显示了输出中的所有列，因为 LF 标签是在数据库级别关联的，并且 `source_data` 表会自动从数据库 `tag_database` 继承 `LF-tag`。

1. 使用`col_tag_database` 和 `source_data_col_lvl` 运行另一个查询。

   第二个查询返回标记为 `Non-Confidential` 和 `Sensitive` 的两个列。

1. 您还可以查看您未获得策略授权的列上的 Lake Formation 基于标签的访问策略行为。当从表 `source_data_col_lvl` 中选择未标记的列时，Athena 会返回错误。例如，您可以运行以下查询来选择未标记的列 `geolocationid`：

   ```
   SELECT geolocationid FROM "col_tag_database"."source_data_col_lvl" limit 10;
   ```

## 步骤 6：清理 AWS 资源
<a name="tut-manage-dl-tbac-clean-up-db"></a>

为了防止向你收取不必要的费用 AWS 账户，你可以删除用于本教程的 AWS 资源。

1. 以 `lf-data-engineer` 身份登录 Lake Formation 控制台并删除数据库 `tag_database` 和 `col_tag_database`。

1. 接下来，以 `lf-data-steward` 身份登录并清除上面授予 `lf-data-engineer` 和 `lf-data-analyst.` 的所有 **LF 标签权限**、**数据权限**和**数据位置权限**。

1. 使用您用于部署 CloudFormation 堆栈的 IAM 证书，以账户所有者的身份登录 Amazon S3 控制台。

1. 删除以下存储桶：
   + lf-tagbased-demo-accesslogs-{{acct-id}}
   + lf-tagbased-demo-{{acct-id}}

1. 通过 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 登录 CloudFormation 控制台，然后删除您创建的堆栈。等待堆栈状态变为 `DELETE_COMPLETE`。