选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用 Lake Formation 基于标签的访问控制管理数据湖

聚焦模式
使用 Lake Formation 基于标签的访问控制管理数据湖 - AWS Lake Formation

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

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

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

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

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

您可以将 LF-TBAC 用于以下使用案例:

  • 您有大量表和主体,数据湖管理员必须授予对它们的访问权限

  • 您想基于本体对数据进行分类并基于分类授予权限

  • 数据湖管理员想要以松耦合的方式动态分配权限

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

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

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

  3. 数据工程师构建了两个数据库:tag_databasecol_tag_databasetag_database 中的所有表都配有 Confidential=Truecol_tag_database 中的所有表都配有 Confidential=Falsecol_tag_database 中表的一些列带有 Sensitive=True 标签,以满足特定的分析需求。

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

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

目标受众

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

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

角色 描述
数据管家(管理员) lf-data-steward 用户拥有以下访问权限:
  • 对数据目录中所有资源的读取权限

  • 可以创建 LF 标签并将其关联到数据工程师角色,以便向其他主体授予可授予权限

数据工程师

lf-data-engineer 用户具有以下访问权限:

  • 对数据目录中所有资源的完整读取、写入和更新权限

  • 数据湖中的数据位置权限

  • 可以关联 LF 标签并将其关联到数据目录

  • 可以将 LF 标签附加到资源,从而根据数据管家创建的所有策略为主体提供访问权限

数据分析人员 lf-data-analyst 用户拥有以下访问权限:
  • 对通过 Lake Formation 基于标签的访问策略共享的资源的精细访问权限

先决条件

在开始学习本教程之前,您必须拥有 AWS 账户,以便能够以具有正确权限的管理用户身份登录。有关更多信息,请参阅 完成初始 AWS 配置任务

本教程假定您熟悉 IAM。有关 IAM 的信息,请参阅 IAM 用户指南

第 1 步:调配资源

本教程中提供了一个用于进行快速设置的 AWS CloudFormation 模板。您可以查看和自定义该模板来满足自己的需求。该模板创建三个不同的角色(列在目标受众中)来执行本练习,并将 nyc-taxi-data 数据集复制到您的本地 Amazon S3 存储桶。

  • 一个 Amazon S3 存储桶

  • 适当的 Lake Formation 设置

  • 适当的 Amazon EC2 资源

  • 三个具有凭证的 IAM 角色

创建您的资源
  1. 在美国东部(弗吉尼亚州北部)区域通过 https://console.aws.amazon.com/cloudformation 登录 AWS CloudFormation 控制台。

  2. 选择启动堆栈

  3. 选择下一步

  4. 用户配置部分,为以下三个角色输入密码:DataStewardUserPasswordDataEngineerUserPasswordDataAnalystUserPassword

  5. 查看最后页面上的详细信息,然后选择我确认 AWS CloudFormation 可以创建 IAM 资源

  6. 选择创建

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

注意

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

第 2 步:注册数据位置、创建 LF 标签本体并授予权限

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

注册数据位置并创建 LF 标签本体
  1. 以数据管家用户 (lf-data-steward) 的身份执行第一步,验证 Amazon S3 及 Lake Formation 中数据目录中的数据。

    1. 通过 https://console.aws.amazon.com/lakeformation/ 使用部署 AWS CloudFormation 堆栈时使用的密码以 lf-data-steward 身份登录 Lake Formation 控制台。

    2. 在导航窗格中的权限下,选择管理角色和任务

    3. 数据湖管理员部分,选择添加

    4. 添加管理员页面上,对于 IAM 用户和角色,选择用户 lf-data-steward

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

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

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

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

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

    4. 单击保存

  3. 接下来,注册数据湖的数据位置。

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

    2. 选择注册位置

    3. 注册位置页面上,对于 Amazon S3 路径,输入 s3://lf-tagbased-demo-Account-ID

    4. 对于 IAM 角色,保留默认值 AWSServiceRoleForLakeFormationDataAccess 不变。

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

    6. 选择注册位置

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

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

    2. 选择添加 LF 标签

    3. 对于,输入 Confidential

    4. 对于,添加 TrueFalse

    5. 选择添加 LF 标签

    6. 重复上述步骤,使用值 True 创建 LF 标签 Sensitive

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

向 IAM 用户授予权限
  1. 接下来,授权特定的 IAM 主体将新创建的 LF 标签附加到资源。

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

    2. LF 标签权限部分,选择授予权限

    3. 对于权限类型,选择 LF 标签键值对权限

    4. 选择 IAM 用户和角色

    5. 对于 IAM 用户和角色,搜索并选择 lf-data-engineer 角色。

    6. LF 标签部分,添加值为 TrueFalse 的键 Confidential,以及值为 Truekey Sensitive

    7. 权限下,为权限可授予的权限选择描述关联

    8. 选择授权

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

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

    2. 数据库创建者部分,选择授权

    3. 对于 IAM 用户和角色,选择 lf-data-engineer 角色。

    4. 对于目录权限,选择创建数据库

    5. 选择授权

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

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

    2. 选择授权

    3. 选择我的账户

    4. 对于 IAM 用户和角色,选择 lf-data-engineer 角色。

    5. 对于存储位置,输入通过 AWS CloudFormation 模板 (s3://lf-tagbased-demo-Account-ID) 创建的 Amazon S3 存储桶。

    6. 选择授权

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

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

    2. 选择授权

    3. 选择 IAM 用户和角色

    4. 选择角色 lf-data-engineer

    5. LF 标签或目录资源部分,选择通过 LF 标签匹配的资源

    6. 选择添加 LF 标签键值对

    7. 添加值为 True 的键 Confidential

    8. 数据库权限部分,为数据库权限可授予的权限选择描述

    9. 表权限部分,为表权限可授予的权限选择描述选择更改

    10. 选择授权

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

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

    2. 选择授权

    3. 选择 IAM 用户和角色

    4. 选择角色 lf-data-engineer

    5. 选择通过 LF 标签匹配的资源

    6. 选择添加 LF 标签

    7. 添加值为 False 的键 Confidential

    8. 数据库权限部分,为数据库权限可授予的权限选择描述

    9. 表和列权限 部分,请勿选择任何内容。

    10. 选择授权

  6. 接下来,授予对与 LF 标签键值对 Confidential=FalseSensitive=True 关联的资源的可授予权限 lf-data-engineer

    1. 在导航窗格的权限下,选择数据权限

    2. 选择授权

    3. 选择 IAM 用户和角色

    4. 选择角色 lf-data-engineer

    5. LF 标签或目录资源部分下,选择通过 LF 标签匹配的资源

    6. 选择添加 LF 标签

    7. 添加值为 False 的键 Confidential

    8. 选择添加 LF 标签键值对

    9. 添加值为 True 的键 Sensitive

    10. 数据库权限部分,为数据库权限可授予的权限选择描述

    11. 表权限部分,为表权限可授予的权限选择描述选择更改

    12. 选择授权

第 3 步:创建 Lake Formation 数据库

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

创建用于数据库级别访问的数据库和表
  1. 首先,创建数据库 tag_database、表 source_data,并附加适当的 LF 标签。

    1. 在 Lake Formation 控制台(https://console.aws.amazon.com/lakeformation/)上,在数据目录下选择数据库

    2. 选择创建数据库

    3. 对于名称,请输入 tag_database

    4. 对于位置,输入通过 AWS CloudFormation 模板 (s3://lf-tagbased-demo-Account-ID/tag_database/) 创建的 Amazon S3 位置。

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

    6. 选择创建数据库

  2. 接下来,在 tag_database 中创建一个新表。

    1. 数据库页面上,选择数据库 tag_database

    2. 选择查看表,然后单击创建表

    3. 对于名称,请输入 source_data

    4. 对于 Database (数据库),选择 tag_database 数据库。

    5. 对于表格格式,选择标准 AWS Glue 表格

    6. 对于数据位置,选择我的账户中的指定路径

    7. 在“包含路径”中,输入要通过 AWS CloudFormation 模板 (s3://lf-tagbased-demoAccount-ID/tag_database/) 创建的 tag_database 的路径。

    8. 对于数据格式,选择 CSV

    9. 上传架构下,输入以下 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" } ]
    10. 选择上传。上传架构后,表架构看上去应如以下屏幕截图所示:

      Table schema with 18 columns showing column names and data types, all set to string.
    11. 选择提交

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

    1. 数据库页面上,找到并选择 tag_database

    2. 操作菜单上,选择编辑 LF 标签

    3. 选择分配新的 LF 标签

    4. 对于已分配的键,选择您之前创建的 Confidential LF 标签。

    5. 对于,选择 True

    6. 选择保存

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

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

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

  1. 数据库页面上,选择创建数据库

  2. 对于名称,请输入 col_tag_database

  3. 对于位置,输入通过 AWS CloudFormation 模板 (s3://lf-tagbased-demo-Account-ID/col_tag_database/) 创建的 Amazon S3 位置。

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

  5. 选择创建数据库

  6. 数据库页面上,选择您的新数据库 (col_tag_database)

  7. 选择查看表,然后单击创建表

  8. 对于名称,请输入 source_data_col_lvl

  9. 对于数据库,选择您的新数据库 (col_tag_database)

  10. 对于表格格式,选择标准 AWS Glue 表格

  11. 对于数据位置,选择我的账户中的指定路径

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

  13. 对于数据格式,选择 CSV

  14. 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" } ]
  15. 选择Upload。上传架构后,表架构看上去应如以下屏幕截图所示:

    Table schema with 18 columns showing column names and data types, all set to string.
  16. 选择提交以完成表的创建。

  17. 现在,将 Sensitive=True LF 标签关联到列 vendoridfare_amount

    1. 页面上,选择您创建的表 (source_data_col_lvl)

    2. 操作菜单上,选择架构

    3. 选择列 vendorid 并选择编辑 LF 标签

    4. 对于已分配的键,选择区分大小写

    5. 对于,选择 True

    6. 选择保存

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

    1. 数据库页面上,找到并选择 col_tag_database

    2. 操作菜单上,选择编辑 LF 标签

    3. 选择分配新的 LF 标签

    4. 对于已分配的键,选择您之前创建的 Confidential LF 标签。

    5. 对于,选择 False

    6. 选择保存

第 4 步:授予表权限

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

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

    1. 通过 https://console.aws.amazon.com/lakeformation/lf-data-engineer 身份登录 Lake Formation 控制台。

    2. 权限下,选择数据湖权限

    3. 选择授权

    4. 主体下,选择 IAM 用户和角色

    5. 对于 IAM 用户和角色,选择 lf-data-analyst

    6. LF 标签或目录资源下,选择通过 LF 标签匹配的资源

    7. 选择添加 LF 标签

    8. 对于,选择 Confidential

    9. 对于,选择 True

    10. 对于数据库权限,选择 Describe

    11. 对于表权限,选择选择描述

    12. 选择授权

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

    1. 通过 https://console.aws.amazon.com/lakeformation/lf-data-engineer 身份登录 Lake Formation 控制台。

    2. 数据库页面上,选择数据库 col_tag_database

    3. 选择操作授权

    4. 主体下,选择 IAM 用户和角色

    5. 对于 IAM 用户和角色,选择 lf-data-analyst

    6. 选择通过 LF 标签匹配的资源

    7. 选择添加 LF 标签

    8. 对于,选择 Confidential

    9. 对于,选择 False

    10. 对于数据库权限,选择 Describe

    11. 对于表权限,请勿选择任何内容。

    12. 选择授权

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

    1. 通过 https://console.aws.amazon.com/lakeformation/lf-data-engineer 身份登录 Lake Formation 控制台。

    2. 在“数据库”页面上,选择数据库 col_tag_database

    3. 选择操作授权

    4. 主体下,选择 IAM 用户和角色

    5. 对于 IAM 用户和角色,选择 lf-data-analyst

    6. 选择通过 LF 标签匹配的资源

    7. 选择添加 LF 标签

    8. 对于,选择 Confidential

    9. 对于,选择 False

    10. 选择添加 LF 标签

    11. 对于,选择 Sensitive

    12. 对于,选择 True

    13. 对于数据库权限,选择 Describe

    14. 对于表权限,选择 SelectDescribe

    15. 选择授权

第 5 步:在 Amazon Athena 中运行查询以验证权限

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

  1. 通过 https://console.aws.amazon.com/athena/lf-data-analyst 用户身份登录 Athena 控制台。

  2. 在 Athena 查询编辑器中,在左侧面板中选择 tag_database

  3. 选择 source_data 旁边的其他菜单选项图标(三个竖点),然后选择预览表

  4. 选择运行查询

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

  5. 使用col_tag_databasesource_data_col_lvl 运行另一个查询。

    第二个查询返回标记为 Non-ConfidentialSensitive 的两个列。

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

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

第 6 步:清除 AWS 资源

为帮助避免您的 AWS 账户产生不必要的费用,您可以删除您在本教程中使用的 AWS 资源。

  1. lf-data-engineer 身份登录 Lake Formation 控制台并删除数据库 tag_databasecol_tag_database

  2. 接下来,以 lf-data-steward 身份登录并清除上面授予 lf-data-engineerlf-data-analyst. 的所有 LF 标签权限数据权限数据位置权限

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

  4. 删除以下存储桶:

    • lf-tagbased-demo-accesslogs-acct-id

    • lf-tagbased-demo-acct-id

  5. 通过 https://console.aws.amazon.com/cloudformation 登录 AWS CloudFormation 控制台,然后删除您创建的堆栈。等待堆栈状态变为 DELETE_COMPLETE

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。