本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Lake Formation 标签访问控制
当有大量数据目录资源时,推荐使用基于 Lake Formation 标签的访问控制 (LF-TBAC) 来授予 Lake Formation 权限的方法。LF-TBAC 比命名资源方法更具可扩展性,并且所需的权限管理开销更少。
主题
Lake Formation 标签的访问控制的工作原理
每 LFG 都是一个键/值对,例如department=sales要么classification=restricted. 一个键可以有多个已定义的值,例如department=sales,marketing,engineering,finance.
要使用 LF-TBAC 方法,数据湖管理员和数据工程师需要执行以下任务。
| 任务 | 任务详情 |
|---|---|
|
1. 定义 LF-tags 的属性和关系。 |
- |
|
2. 在 Lake Formation 中创建 LF 标签。 |
创建 LF 标签 |
|
3. 为数据目录资源分配 LF 标签。 |
为数据目录资源分配 LF 标签 |
|
4. 授予其他委托人为资源分配 LF-tags 的权限,可以选择使用授予选项。 |
授予、撤销和列出 LF-tag 权限 |
|
5. 向委托人授予 LF-tag 表达式,可以选择使用授予选项。 |
使用 LF-TBAC 方法授予数据目录权限 |
|
6. (推荐)确认委托人有权通过 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-tag,并已向委托人授予了 LF-tag 的权限。
在此示例中,LF 标签表示数据湖的区域,其中包含对企业资源规划 (ERP) 应用程序套件的不同模块的分析。数据湖管理员想要控制对各种模块分析数据的访问权限。所有 LF 标签都有密钥module和可能的值Sales、Orders, 和Customers. LFormation 标签的示例如下:
module=Sales
该图仅显示了 LF-tag 值。
数据目录资源的标签分配和继承
表继承数据库的 LF 标签,列继承表中的 LF 标签。可以覆盖继承的值。在前面的示意图中,将继承变暗的 LFormation 标签。
由于继承的原因,数据湖管理员只需要对资源进行以下五个 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-tag 后,数据湖管理员只能向委托人授予四个 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=SalesLF-tag 可以使用以下命令访问数据目录资源module=SalesLF-tag(例如,数据库 A),主体具有module=CustomersLF-tag 可以通过以下方式访问资源module=CustomersLF-tag,依此类推。
前面的授权命令不完整。这是因为尽管它们通过 LF-tags 指明了委托人拥有权限的数据目录资源,但它们并不能准确指明哪个 Lake Formation 权限(例如SELECT、ALTER)校长们拥有这些资源。因此,以下伪代码命令可以更准确地表示如何通过 LF-Tags 向数据目录资源授予 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-tag,以及图中授予委托人的 LF 标签,下表列出了委托人对数据库和表拥有的 Lake Formation 权限。
| 主体 | 通过 LF 标签授予的权限 |
|---|---|
| 委托人 1 |
|
| 委托人 2 |
|
| 委托人 3 |
|
底线
在这个简单的示例中,使用五个分配操作和八个授权操作,数据湖管理员能够指定 17 个权限。当有数十个数据库和数百个表时,LF-TBAC 方法相对于命名资源方法的优势就显而易见了。假设需要向每位委托人授予对每项资源的访问权限,以及在哪里n(P)是校长人数,n(R)是资源数:
-
使用命名资源方法时,所需的授权数量为
n(P)✕n(R). -
使用 LF-TBAC 方法,使用单个 LF-tag,向委托人授予的权限和分配给资源的总数为
n(P)+n(R).