使用 AWS Glue 和 Lake Formation 管理跨账户权限。
可以使用 AWS Glue 或 AWS Lake Formation 授予对数据目录资源和基础数据的跨账户访问权限。
在 AWS Glue 中,您可以通过创建或更新数据目录资源策略来授予跨账户权限。在 Lake Formation 中,您可以使用 Lake Formation GRANT/REVOKE
权限模型和 Grant Permissions
API 操作来授予跨账户权限。
提示
我们建议仅依靠 Lake Formation 权限来保护您的数据湖。
您可以使用 Lake Formation 控制台或 AWS Resource Access Manager(AWS RAM)控制台查看 Lake Formation 跨账户授权。但是,这些控制台页面不显示通过 AWS Glue 数据目录资源策略授予的跨账户权限。同样,您可以使用 AWS Glue 控制台的设置页面在数据目录资源策略中查看跨账户授权,但该页面不显示使用 Lake Formation 授予的跨账户权限。
为了确保您在查看和管理跨账户权限时不会错过任何授权,Lake Formation 和 AWS Glue 会要求您执行以下操作,以表明您知道并将允许 Lake Formation 和 AWS Glue 进行跨账户授权。
使用 AWS Glue 数据目录资源策略授予跨账户权限时
如果您的账户(授予者账户或生产者账户)没有使用 AWS RAM 共享资源的跨账户授权,您可以像往常一样在 AWS Glue 中保存数据目录资源策略。但是,如果已经进行了涉及 AWS RAM 资源共享的授权,则必须执行以下操作之一,以确保成功保存资源策略:
-
当您在 AWS Glue 控制台的设置 页面上保存资源策略时,控制台会发出警报,指出除了使用 Lake Formation 控制台授予的任何权限之外,还将授予该策略中的权限。必须选择继续才能保存该策略。
-
使用
glue:PutResourcePolicy
API 操作保存资源策略时,必须将EnableHybrid
字段设置为“TRUE
”(类型 = 字符串)。以下代码示例演示如何在 Python 中执行此操作。import boto3 import json REGION = 'us-east-2' PRODUCER_ACCOUNT_ID = '123456789012' CONSUMER_ACCOUNT_IDs = ['111122223333'] glue = glue_client = boto3.client('glue') policy = { "Version": "2012-10-17", "Statement": [ { "Sid": "Cataloguers", "Effect": "Allow", "Action": [ "glue:*" ], "Principal": { "AWS": CONSUMER_ACCOUNT_IDs }, "Resource": [ f"arn:aws:glue:{REGION}:{PRODUCER_ACCOUNT_ID}:catalog", f"arn:aws:glue:{REGION}:{PRODUCER_ACCOUNT_ID}:database/*", f"arn:aws:glue:{REGION}:{PRODUCER_ACCOUNT_ID}:table/*/*" ] } ] } policy = json.dumps(policy) glue.put_resource_policy(PolicyInJson=policy, EnableHybrid='TRUE')
有关更多信息,请参阅《AWS Glue 开发人员指南》中的 PutResourcePolicy 操作(Python:put_resource_policy)。
使用 Lake Formation 命名资源方法授予跨账户权限时
如果您的账户(生产者账户)中没有数据目录资源策略,您进行的 Lake Formation 跨账户授权将照常进行。但是,如果存在数据目录资源策略,则必须在其中添加以下语句,以确保使用命名资源方法进行的跨账户授权成功完成。将 <region>
替换为有效的区域名称,并将 <account-id>
替换为 AWS 账户 ID(生产者账户 ID)。
{ "Effect": "Allow", "Action": [ "glue:ShareResource" ], "Principal": {"Service": [ "ram.amazonaws.com" ]}, "Resource": [ "arn:aws:glue:
<region>
:<account-id>
:table/*/*", "arn:aws:glue:<region>
:<account-id>
:database/*", "arn:aws:glue:<region>
:<account-id>
:catalog" ] }
如果没有这条额外的语句,Lake Formation 授权会成功完成,但会被封锁在 AWS RAM 中,接收方账户将无法访问被授权使用的资源。
重要
使用 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法进行跨账户授权时,您的数据目录资源策略必须至少含有先决条件中指定的权限。
另请参见:
-
元数据访问控制(用于讨论命名资源方法与 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法)。
-
《AWS Glue 开发人员指南》中的在 AWS Glue 控制台中使用数据目录设置
-
《AWS Glue 开发人员指南》中的授予跨账户访问权限(适用于数据目录资源策略示例)