将 Amazon Glue 数据权限升级为 Amazon Lake Formation 模型
Amazon Lake Formation 权限支持对数据湖中的数据进行精细访问控制。您可以在 Amazon Simple Storage Service (Amazon S3) 中使用 Lake Formation 权限模型来管理您的现有 Amazon Glue Data Catalog 对象和数据位置。
Lake Formation 权限模型使用粗粒度 Amazon Identity and Access Management (IAM) 权限访问 API 服务。Lake Formation 使用 Lake Formation 中的数据筛选和单元格级别安全性 功能限制用户及其应用程序在列、行和单元格级别的表访问权限。相比之下,Amazon Glue 模型通过基于身份和资源的 IAM 策略授予数据访问权限。
要切换模型,请按照本指南中的步骤操作。
有关更多信息,请参阅 Lake Formation 权限概述 。
关于默认权限
为了保持与 Amazon Glue 的向后兼容性,默认情况下,Amazon Lake Formation 会向 IAMAllowedPrincipals
组授予对所有现有 Amazon Glue 数据目录资源的 Super
权限,并且如果启用了仅使用 IAM 访问控制设置,则授予对新数据目录资源的 Super
权限。这实际上会导致对数据目录资源和 Amazon S3 位置的访问仅由 Amazon Identity and Access Management (IAM) 策略控制。IAMAllowedPrincipals
组包括 IAM 策略允许访问数据目录对象的任何 IAM 用户和角色。Super
权限使主体能够对被授予该权限的数据库或表执行所有支持的 Lake Formation 操作。
您可以通过在 Lake Formation 中注册现有数据目录资源的位置或使用混合访问模式,开始使用 Lake Formation 来管理对数据的访问。当您在混合访问模式下注册 Amazon S3 位置时,您可以通过选择该位置下的数据库和表的主体来启用 Lake Formation 权限。
为了简化数据湖权限从 IAM 和 Amazon S3 模型向 Lake Formation 权限的过渡,我们建议您对数据目录使用混合访问模式。在混合访问模式下,您现在有了增量路径,允许您为一组特定的用户启用 Lake Formation 权限,而不会中断其他现有用户或工作负载。
有关更多信息,请参阅 混合访问模式。
禁用默认数据目录设置,只需一步即可将表的所有现有用户移至 Lake Formation。
要开始对现有 Amazon Glue 数据目录数据库和表使用 Lake Formation 权限,您必须执行以下操作:
-
确定用户具有的对每个数据库和表的现有 IAM 权限。
-
在 Lake Formation 中复制这些权限。
-
对于包含数据的每个 Amazon S3 位置:
-
撤销
IAMAllowedPrincipals
组对引用该位置的每个数据目录资源的Super
权限。 -
向 Lake Formation 注册该位置。
-
-
清理现有的精细访问控制 IAM 策略。
重要
要在过渡数据目录的过程中添加新用户,您必须像之前一样在 IAM 中设置精细 Amazon Glue 权限,还必须在 Lake Formation 中复制这些权限,如本部分所述。如果新用户具有本指南中所述的粗粒度 IAM 策略,则可以列出具有已向 IAMAllowedPrincipals
授予的 Super
权限的任何数据库或表。他们还可以查看这些资源的元数据。
按照本部分中的步骤升级为 Lake Formation 权限模型。
主题
步骤 1:列出用户和角色的现有权限
要开始将 Amazon Lake Formation 权限用于您的现有 Amazon Glue 数据库和表,必须先确定用户的现有权限。
重要
在开始之前,请确保您已完成 Lake Formation 入门中的任务。
使用 API 操作
使用 Amazon Identity and Access Management (IAM) ListPoliciesGrantingServiceAccess API 操作确定附加到每个主体(用户或角色)的 IAM 策略。根据结果中返回的策略,您可以确定授予主体的 IAM 权限。您必须分别为每个主体调用该 API。
以下 Amazon CLI 示例返回附加到用户 glue_user1
的策略。
aws iam list-policies-granting-service-access --arn arn:aws:iam::111122223333:user/glue_user1 --service-namespaces glue
该命令返回类似于以下内容的结果。
{ "PoliciesGrantingServiceAccess": [ { "ServiceNamespace": "glue", "Policies": [ { "PolicyType": "INLINE", "PolicyName": "GlueUserBasic", "EntityName": "glue_user1", "EntityType": "USER" }, { "PolicyType": "MANAGED", "PolicyArn": "arn:aws:iam::aws:policy/AmazonAthenaFullAccess", "PolicyName": "AmazonAthenaFullAccess" } ] } ], "IsTruncated": false }
使用 Amazon Web Services Management Console
您还可以在 Amazon Identity and Access Management (IAM) 控制台的用户或角色摘要页面上的访问顾问选项卡中查看此信息:
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
在导航窗格中,选择用户或角色。
-
在列表中选择一个名称以打开其摘要页面,然后选择访问顾问选项卡。
-
检查每个策略以确定每个用户有权访问的数据库、表和操作的组合。
请记住,在此过程中,除了检查用户之外,还要检查角色,因为数据处理作业可能会代入访问数据的角色。
使用 Amazon CloudTrail
确定您的现有权限的另一种方法是在 Amazon CloudTrail 中查找 Amazon Glue API 调用,其中日志的 additionaleventdata
字段包含 insufficientLakeFormationPermissions
条目。此条目列出了用户需要对其具有 Lake Formation 权限才能执行相同操作的数据库和表。
这些是数据访问日志,因此不能保证它们会生成用户及其权限的完整列表。我们建议选择较宽的时间范围来捕获大多数用户的数据访问模式,例如几周或几个月。
有关更多信息,请参阅《Amazon CloudTrail 用户指南》中的使用 CloudTrail 事件历史记录查看事件。
接下来,您可以设置 Lake Formation 权限以匹配 Amazon Glue 权限。请参阅 步骤 2:设置等效的 Lake Formation 权限。
步骤 2:设置等效的 Lake Formation 权限
使用在步骤 1:列出用户和角色的现有权限中收集的信息,授予 Amazon Lake Formation 权限以匹配 Amazon Glue 权限。使用以下任一方法进行授予:
-
使用 Lake Formation 控制台或 Amazon CLI。
请参阅 授予对数据目录资源的权限。
-
使用
GrantPermissions
和BatchGrantPermissions
API 操作。请参阅 权限 API。
有关更多信息,请参阅 Lake Formation 权限概述 。
设置 Lake Formation 权限后,继续执行步骤 3:向用户授予 IAM 权限以使用 Lake Formation。
步骤 3:向用户授予 IAM 权限以使用 Lake Formation
要使用 Amazon Lake Formation 权限模型,主体必须对 Lake Formation API 具有 Amazon Identity and Access Management (IAM) 权限。
在 IAM 中创建以下策略,并将其附加到需要访问您的数据湖的每个用户。将该策略命名为 LakeFormationDataAccess
。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationDataAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
接下来,升级为 Lake Formation 权限,一次升级一个数据位置。请参阅 步骤 4:将数据存储切换到 Lake Formation 权限模型。
步骤 4:将数据存储切换到 Lake Formation 权限模型
升级为 Lake Formation 权限,一次升级一个数据位置。为此,请重复整个部分,直到您注册了数据目录引用的所有 Amazon Simple Storage Service (Amazon S3) 路径。
验证 Lake Formation 权限
在注册位置之前,请执行验证步骤,以确保正确的主体具有所需的 Lake Formation 权限,并且不会向不应具有 Lake Formation 权限的主体授予任何这些权限。使用 Lake Formation GetEffectivePermissionsForPath
API 操作,标识引用 Amazon S3 位置的数据目录资源,以及对这些资源具有权限的主体。
以下 Amazon CLI 示例返回引用 Amazon S3 存储桶 products
的数据目录数据库和表。
aws lakeformation get-effective-permissions-for-path --resource-arn arn:aws:s3:::products --profile datalake_admin
请注意 profile
选项。我们建议您以数据湖管理员身份运行该命令。
以下是返回结果的摘录。
{ "PermissionsWithGrantOption": [ "SELECT" ], "Resource": { "TableWithColumns": { "Name": "inventory_product", "ColumnWildcard": {}, "DatabaseName": "inventory" } }, "Permissions": [ "SELECT" ], "Principal": { "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1", "DataLakePrincipalType": "IAM_USER" } },...
重要
如果您的 Amazon Glue 数据目录已加密,则 GetEffectivePermissionsForPath
仅返回在 Lake Formation 正式发布后创建或修改的数据库和表。
保护现有数据目录资源
接下来,撤销 IAMAllowedPrincipals
对您为该位置标识的每个表和数据库具有的 Super
权限。
警告
如果您实施自动化功能来在数据目录中创建数据库和表,则以下步骤可能会导致自动化和下游提取、转换和加载 (ETL) 作业失败。只有在修改现有流程或向所需主体授予显式 Lake Formation 权限后,才能继续操作。有关 Lake Formation 权限的信息,请参阅 Lake Formation 权限参考。
撤销 IAMAllowedPrincipals
对表具有的 Super
权限
-
通过 https://console.aws.amazon.com/lakeformation/
打开 Amazon Lake Formation 控制台。以数据湖管理员身份登录。 -
在导航窗格中,选择表。
-
在表页面上,选中所需表旁边的单选按钮。
-
在操作菜单上,选择撤销。
-
在撤销权限对话框的 IAM 用户和角色列表中,向下滚动到组标题,然后选择 IAMAllowedPrincipals。
-
在表权限下,确保选中 Super 权限,然后选择撤销。
撤销 IAMAllowedPrincipals
对数据库具有的 Super
权限
-
通过 https://console.aws.amazon.com/lakeformation/
打开 Amazon Lake Formation 控制台。以数据湖管理员身份登录。 -
在导航窗格中,选择数据库。
-
在数据库页面上,选中所需数据库旁边的单选按钮。
-
在操作 菜单上,选择编辑。
-
在编辑数据库页面上,清除仅对此数据库中的新表使用 IAM 访问控制,然后选择保存。
-
返回数据库页面,确保数据库仍处于选中状态,然后在操作菜单上选择撤销。
-
在撤销权限对话框的 IAM 用户和角色列表中,向下滚动到组标题,然后选择 IAMAllowedPrincipals。
-
在数据库权限下,确保选中 Super 权限,然后选择撤销。
为您的 Amazon S3 位置启用 Lake Formation 权限
接下来,向 Lake Formation 注册 Amazon S3 位置。为此,您可以使用向数据湖添加 Amazon S3 位置中所述的过程。或者,使用 RegisterResource
API 操作,如凭证售卖 API 中所述。
注意
如果注册了父位置,则无需注册子位置。
完成这些步骤并测试用户是否可以访问其数据后,您即已成功升级为 Lake Formation 权限。继续执行下一步:步骤 5:保护新的数据目录资源。
步骤 5:保护新的数据目录资源
接下来,通过更改默认数据目录设置来保护所有新的数据目录资源。关闭仅对新数据库和表使用 Amazon Identity and Access Management (IAM) 访问控制的选项。
警告
如果您实施自动化功能来在数据目录中创建数据库和表,则以下步骤可能会导致自动化和下游提取、转换和加载 (ETL) 作业失败。只有在修改现有流程或向所需主体授予显式 Lake Formation 权限后,才能继续操作。有关 Lake Formation 权限的信息,请参阅 Lake Formation 权限参考。
更改默认数据目录设置
-
通过 https://console.aws.amazon.com/lakeformation/
打开 Amazon Lake Formation 控制台。以 IAM 管理用户(用户 Administrator
或具有AdministratorAccess
Amazon 托管式策略的其他用户)身份登录。 -
在导航窗格中,选择设置。
-
在数据目录设置页面上,清除这两个复选框,然后选择保存。
下一步是向用户授予将来访问其他数据库或表的权限。请参阅 步骤 6:向用户提供新的 IAM 策略,以便将来访问数据湖。
步骤 6:向用户提供新的 IAM 策略,以便将来访问数据湖
要向您的用户授予将来访问其他数据目录数据库或表的权限,您必须向他们提供以下粗粒度 Amazon Identity and Access Management (IAM) 内联策略。将该策略命名为 GlueFullReadAccess
。
重要
如果您在撤销 IAMAllowedPrincipals
对您的数据目录中每个数据库和表具有的 Super
权限之前将此策略附加到用户,则该用户可以查看向 IAMAllowedPrincipals
授予对其的 Super
权限的任何资源的所有元数据。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueFullReadAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:SearchTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions" ], "Resource": "*" } ] }
注意
本步骤和前面步骤中指定的内联策略包含最低 IAM 权限。有关数据湖管理员、数据分析师和其他角色的建议策略,请参阅 Lake Formation 角色和 IAM 权限参考。
接下来继续执行步骤 7:清理现有 IAM 策略。
步骤 7:清理现有 IAM 策略
设置 Amazon Lake Formation 权限并创建并附加粗粒度访问控制 Amazon Identity and Access Management (IAM) 策略后,请完成以下最后一步:
-
从用户、组和角色中移除您在 Lake Formation 中复制的旧的精细访问控制 IAM 策略。
这样,您可以确保这些主体不再能够直接访问 Amazon Simple Storage Service (Amazon S3) 中的数据。然后,您可以完全通过 Lake Formation 管理这些主体的数据湖访问权限。