Lake Formation 基于标签的访问控制 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Lake Formation 基于标签的访问控制

Lake Formation 基于标签的访问控制 (LF-TBAC) 是一种基于属性定义权限的授权策略。在 Lake Formation 中,这些属性被称为“LF 标签”。您可以将 LF 标签附加到数据目录资源,并使用这些 LF 标签向 Lake Formation 委托人授予对这些资源的权限。当委托人的标签值与资源标签值匹配时,Lake Formation 允许对这些资源进行操作。LF-TBAC 在快速增长的环境中非常有用,并在策略管理变得繁琐的情况下可以提供帮助。

当有大量数据目录资源时,建议使用 LF-TBAC 来授予 Lake Formation 权限。LF-TBAC 比命名资源方法更具可扩展性,并且需要的权限管理开销更少。

注意

IAM 标签与 LF 标签不同。这些标签不可互换。LF 标签用于授予 Lake Formation 权限,而 IAM 标签用于定义 IAM 策略。

Lake Formation 基于标签的访问控制的工作原理

每个 LF 标签都是一个键值对,例如 department=salesclassification=restricted。一个键可以有多个定义的值,例如 department=sales,marketing,engineering,finance

要使用 LF-TBAC 方法,数据湖管理员和数据工程师需要执行以下任务。

任务 任务详细信息

1. 定义 LF 标签的属性和关系。

-

2. 在 Lake Formation 中创建 LF 标签创建者。

添加 LF 标签创建者

3. 在 Lake Formation 中创建 LF 标签。

创建 LF 标签

4. 将 LF 标签分配给数据目录资源。

将 LF 标签分配给数据目录资源

5. 向其他主体授予权限以将 LF 标签分配给资源,也可以使用授予选项。

授予、撤销和列出 LF 标签值权限

6. 向主体授予 LF 标签表达式,也可以使用授予选项。

使用 LF-TBAC 方法授予数据湖权限

7. (推荐)通过 LF-TBAC 方法验证主体是否有权访问正确的资源后,撤销使用命名资源方法授予的权限。

-

请考虑以下情况:您必须向三个主体授予对三个数据库和七个表的权限。


        左侧是三个用户的图形,垂直排列。右侧是三个标为 A、B 和 C 的数据库,垂直排列。数据库 A 有两个标为 A.1 和 A.2 的表,数据库 B 有两个标为 B.1 和 B.2 的表,数据库 C 有三个标为 C.1、C.2 和 C.3 的表。17 个箭头将用户与数据库和表连接起来,表示向用户授予对数据库和表的权限。

要使用命名资源方法实现上图中指示的权限,您必须进行 17 次授予,如下所示(使用伪代码)。

GRANT CREATE_TABLE ON Database A TO PRINCIPAL 1 GRANT SELECT, INSERT ON Table A.1 TO PRINCIPAL 1 GRANT SELECT, INSERT ON Table A.2 TO PRINCIPAL 1 GRANT SELECT, INSERT ON Table B.2 TO PRINCIPAL 1 ... GRANT SELECT, INSERT ON Table A.2 TO PRINCIPAL 2 GRANT CREATE_TABLE ON Database B TO PRINCIPAL 2 ... GRANT SELECT, INSERT ON Table C.3 TO PRINCIPAL 3

现在考虑如何使用 LF-TBAC 授予权限。下图表明您已将 LF 标签分配给数据库和表,并已向主体授予对 LF 标签的权限。

在此示例中,LF 标签表示数据湖中包含企业资源规划 (ERP) 应用程序套件不同模块的分析的区域。您可以控制对各个模块的分析数据的访问。所有 LF 标签均具有键 module 和可能的值 SalesOrdersCustomers。LF 标签示例如下所示:

module=Sales

该图仅显示 LF 标签值。


        与上图一样,左侧是垂直排列的三个用户的图形,右侧是垂直排列的三个标为 A、B 和 C 的数据库。数据库 A 有两个标为 A.1 和 A.2 的表,数据库 B 有两个标为 B.1 和 B.2 的表,数据库 C 有三个标为 C.1、C.2 和 C.3 的表。用户与数据库和表之间没有箭头。取而代之的是,用户旁边标有“标志”表示用户 1 已被授予 LF 标签 Sales 和 Customers,用户 2 已被授予 LF 标签 Orders,用户 3 已被授予 LF 标签“Customers”。数据库和表旁边的标志表示对数据库和表的以下 LF 标签分配:数据库 A:Sales。表 A1:灰显标志表示 Sales 继承自数据库 A。表 A2:Orders,但灰显标志表示 Sales 继承自数据库 A。数据库 B:Orders。表 B.1 和 B.2 继承 Orders,表 B.2 具有 Customers。数据库 C 具有 Customers,表 C.1、C.2 和 C.3 继承 Customers。C 表没有任何其他分配。
对数据目录资源和继承的标签分配

表从数据库继承 LF 标签,列从表继承 LF 标签。继承的值可以被覆盖。在上图中,继承了灰显 LF 标签。

由于继承,数据湖管理员只需对资源进行以下五个 LF 标签分配(使用伪代码)。

ASSIGN TAGS module=Sales TO database A ASSIGN TAGS module=Orders TO table A.2 ASSIGN TAGS module=Orders TO database B ASSIGN TAGS module=Customers TO table B.2 ASSIGN TAGS module=Customers TO database C
标记向主体的授予

将 LF 标签分配给数据库和表后,数据湖管理员必须仅向主体授予 4 个 LF 标签,如下所示(使用伪代码)。

GRANT TAGS module=Sales TO Principal 1 GRANT TAGS module=Customers TO Principal 1 GRANT TAGS module=Orders TO Principal 2 GRANT TAGS module=Customers TO Principal 3

现在,具有 module=Sales LF 标签的主体可以访问带有 module=Sales LF 标签的数据目录资源(例如,数据库 A),具有 module=Customers LF 标签的主体可以访问带有 module=Customers LF 标签的资源,依此类推。

上述授予命令不完整。这是因为,尽管它们通过 LF 标签指示主体对其具有权限的数据目录资源,但它们并未准确指示主体对这些资源具有哪些 Lake Formation 权限(例如 SELECTALTER)。因此,以下伪代码命令更准确地表示了如何通过 LF 标签授予对数据目录资源的 Lake Formation 权限。

GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Sales TO Principal 1 GRANT (SELECT, INSERT ON TABLES) ON TAGS module=Sales TO Principal 1 GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Customers TO Principal 1 GRANT (SELECT, INSERT ON TABLES) ON TAGS module=Customers TO Principal 1 GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Orders TO Principal 2 GRANT (SELECT, INSERT ON TABLES) ON TAGS module=Orders TO Principal 2 GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Customers TO Principal 3 GRANT (SELECT, INSERT ON TABLES) ON TAGS module=Customers TO Principal 3
综上所述,由此授予对资源的权限

根据上图中分配给数据库和表的 LF 标签以及图中向主体授予的 LF 标签,下表列出了主体对数据库和表具有的 Lake Formation 权限。

主体 通过 LF 标签授予的权限
主体 1
  • 对数据库 A 的 CREATE_TABLE 权限

  • 对表 A.1 的 SELECTINSERT 权限

  • 对表 B.2 的 SELECTINSERT 权限

  • 对数据库 C 的 CREATE_TABLE 权限

  • 对表 C.1 的 SELECTINSERT 权限

  • 对表 C.2 的 SELECTINSERT 权限

  • 对表 C.3 的 SELECTINSERT 权限

主体 2
  • 对表 A.2 的 SELECTINSERT 权限

  • 对数据库 B 的 CREATE_TABLE 权限

  • 对表 B.1 的 SELECTINSERT 权限

  • 对表 B.2 的 SELECTINSERT 权限

主体 3
  • 对表 B.2 的 SELECTINSERT 权限

  • 对数据库 C 的 CREATE_TABLE 权限

  • 对表 C.1 的 SELECTINSERT 权限

  • 对表 C.2 的 SELECTINSERT 权限

  • 对表 C.3 的 SELECTINSERT 权限

总结

在这个简单的示例中,使用 5 项分配操作和 8 项授予操作,数据湖管理员能够指定 17 项权限。当有数十个数据库和数百个表时,LF-TBAC 方法相对于命名资源方法的优势就显而易见了。假设需要向每个主体授予对每种资源的访问权限,其中 n(P) 是主体的数量,n(R) 是资源的数量:

  • 使用命名资源方法时,所需的授予数为 n(P)n(R)

  • 通过 LF-TBAC 方法,使用单个 LF 标签,向主体的授予和对资源的分配总数为 n(P) + n(R)