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=sales
或 classification=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 方法验证主体是否有权访问正确的资源后,撤销使用命名资源方法授予的权限。 |
- |
请考虑以下情况:您必须向三个主体授予对三个数据库和七个表的权限。
要使用命名资源方法实现上图中指示的权限,您必须进行 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
和可能的值 Sales
、Orders
和 Customers
。LF 标签示例如下所示:
module=Sales
该图仅显示 LF 标签值。
对数据目录资源和继承的标签分配
表从数据库继承 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 权限(例如 SELECT
、ALTER
)。因此,以下伪代码命令更准确地表示了如何通过 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 |
|
主体 2 |
|
主体 3 |
|
总结
在这个简单的示例中,使用 5 项分配操作和 8 项授予操作,数据湖管理员能够指定 17 项权限。当有数十个数据库和数百个表时,LF-TBAC 方法相对于命名资源方法的优势就显而易见了。假设需要向每个主体授予对每种资源的访问权限,其中 n(P)
是主体的数量,n(R)
是资源的数量:
-
使用命名资源方法时,所需的授予数为
n(P)
✕n(R)
。 -
通过 LF-TBAC 方法,使用单个 LF 标签,向主体的授予和对资源的分配总数为
n(P)
+n(R)
。