View a markdown version of this page

Lake Formation 基于标签的访问控制 - AWS Lake Formation

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

Lake Formation 基于标签的访问控制

基于 Lake Formation 标签的访问控制 (LF-TBAC) 是一种基于属性定义权限的授权策略。在 Lake Formation 中,这些属性被称为LF-Tags。您可以附加 LF-Tags 到数据目录资源,并使用这些资源向 Lake Formation 委托人授予对这些 LF-Tags资源的权限。当主体已获授权,可以访问与资源标签值匹配的标签值时,Lake Formation 允许对这些资源执行操作。

LF-TBAC 在快速增长的环境中很有用,也有助于解决策略管理变得繁琐的情况。

LF-TBAC 当存在大量数据目录对象(包括联合目录、数据库、表和视图)时,推荐使用此方法来授予 Lake Formation 权限。Lake Formation 支持对亚马逊 S3 表、 Amazon Redshift 数据仓库和联合数据源(例如 SQL Server 和 Snowflake)的联合目录进行基于标签的访问控制。 Amazon DynamoDB

注意

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

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

每个都 LF-Tag 是一个键值对,例如或。department=sales classification=restricted一个键可以有多个定义的值,例如 department=sales,marketing,engineering,finance

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

Task 任务详细信息

1. 定义的属性和关系 LF-Tags。

-

2. 在 Lake Formation 中创建 LF-Tag 创作者。

添加 LF-Tag 创作者

3. 在 Lake Formation LF-Tag 中创建。

正在创建 LF-Tags

4. 分配 LF-Tags 给数据目录资源。

分配 LF-Tags 给数据目录资源

5. 向其他委托人授予分配 LF-Tags 资源的权限,可以选择使用授予选项。

管理 LF-Tag 值权限

6. 向委托人授予 LF-Tag 表达式,可选择使用授权选项。

使用 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-Tags 给数据库和表,并已 LF-Tags 向委托人授予权限。

在此示例中, LF-Tags 表示数据湖中包含针对企业资源规划 (ERP) 应用程序套件不同模块的分析的区域。您可以通过访问控制来控制对各个模块的分析数据的访问。它们 LF-Tags 都有键module和可能的值SalesOrders、和Customers。一个例子是 LF-Tag 这样的:

module=Sales

该图仅显示 LF-Tag 值。

与上图一样,左侧是垂直排列的三个用户的图形,右侧是垂直排列的三个标为 A、B 和 C 的数据库。数据库 A 有两个标 A.1 有表的表 A.2,数据库 B 有表标签 B.1 和 B.2,数据库 C 有三个标有 C.1 C.2、和的表 C.3。用户与数据库和表之间没有箭头。相反,在用户旁边标有 “标记” 表示用户 1 已获得 LF-Tags 销售和客户,用户 2 已获得 LF-Tag 订单,用户 3 已获得 LF-Tag 客户。数据库和表旁边的标志表示对数据库和表LF-Tags 的以下分配:数据库 A:销售。表 A1:灰显标志表示 Sales 继承自数据库 A。表 A2:Orders,但灰显标志表示 Sales 继承自数据库 A。数据库 B:Orders。表 B.1 并 B.2 继承订单 B.2 ,表格包含客户。数据库 C 有客户、表 C.1 C.2、和 C.3 继承客户。C 表没有任何其他分配。
对数据目录资源和继承的标签分配

表继承 LF-Tags 自数据库,列继承 LF-Tags 自表。继承的值可以被覆盖。在上图中,灰色 LF-Tags 是继承的。

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

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-Tags 给数据库和表后,数据湖管理员只能 LF-Tags 向委托人进行四次授权,如下所示(在伪代码中)。

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=SalesLF-Tag 可以通过 module=Sales LF-Tag (例如数据库 A)访问数据目录资源,拥有的委托人module=Customers LF-Tag 可以使用访问资源 module=Customers LF-Tag,依此类推。

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

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-Tags 分配给数据库和表的权限以及图中向委托人 LF-Tags 授予的权限,下表列出了委托人对数据库和表拥有的 Lake Formation 权限。

Principal 通过授予的权限 LF-Tags
主体 1
  • 对数据库 A 的 CREATE_TABLE 权限

  • SELECTINSERT在桌子上 A.1

  • SELECTINSERT在桌子上 B.2

  • 对数据库 C 的 CREATE_TABLE 权限

  • SELECTINSERT在桌子上 C.1

  • SELECTINSERT在桌子上 C.2

  • SELECTINSERT在桌子上 C.3

主体 2
  • SELECTINSERT在桌子上 A.2

  • 对数据库 B 的 CREATE_TABLE 权限

  • SELECTINSERT在桌子上 B.1

主体 3
  • SELECTINSERT在桌子上 B.2

  • 对数据库 C 的 CREATE_TABLE 权限

  • SELECTINSERT在桌子上 C.1

  • SELECTINSERT在桌子上 C.2

  • SELECTINSERT在桌子上 C.3

总结

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

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

  • 使用该 LF-TBAC 方法,使用单个 LF-Tag,向委托人授予的总数和对资源的分配总数为 n(P) + n(R)