Upgrading AWS GlueAWS Lake Formation 模型的数据权限 - AWS Lake Formation

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

Upgrading AWS GlueAWS Lake Formation 模型的数据权限

AWS Lake Formation 权限可对数据湖中的数据进行精细的访问控制。您可以使用 Lake Formation 权限模型来管理亚马逊简单存储服务 (Amazon S3) 中的现有 AWS Glue Data Catalog 对象和数据位置。

Lake Formation 权限模型使用粗粒度 AWS Identity and Access Management (IAM) 权限来访问服务。API它限制了您的用户和这些服务通过 Lake Formation 功能可以访问的数据。相比之下,AWS Glue model 通过精细的访问控制IAM权限授予数据访问权限。要切换模型,请按照本指南中的步骤操作。

有关更多信息,请参阅 Lake Formation 权限概述

关于默认权限

保持向后兼容 AWS Glue,默认情况下, AWS Lake Formation 向该IAMAllowedPrincipals群组授予对所有现有内容的Super权限 AWS Glue 数据目录资源,如果启用了 “仅使用” IAM 访问控制设置,则授予对新数据目录资源的Super权限。这实际上导致对数据目录资源和 Amazon S3 位置的访问只能由 AWS 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。

要开始在现有权限中使用 Lake Formation 权限 AWS Glue 数据目录数据库和表,您必须执行以下操作:

  1. 确定用户对每个数据库和表的现有IAM权限。

  2. 在 Lake Formation 中复制这些权限。

  3. 对于包含数据的每个 Amazon S3 位置:

    1. 撤销 IAMAllowedPrincipals 组对引用该位置的每个数据目录资源的 Super 权限。

    2. 向 Lake Formation 注册该位置。

  4. 清理现有的细粒度访问控制IAM策略。

重要

要在过渡数据目录的过程中添加新用户,必须进行精细设置 AWS Glue 权限和以前IAM一样。还必须在 Lake Formation 中复制这些权限,如本部分所述。如果新用户拥有本指南中描述的粗粒度IAM策略,则他们可以列出任何被授予权限的数据库或表。Super IAMAllowedPrincipals他们还可以查看这些资源的元数据。

按照本部分中的步骤升级为 Lake Formation 权限模型。

步骤 1:列出用户和角色的现有权限

要开始使用现有 AWS Lake Formation 权限 AWS Glue 数据库和表,则必须首先确定用户的现有权限。

重要

在开始之前,请确保您已完成 Lake Formation 入门中的任务。

使用该API操作

使用 AWS Identity and Access Management (IAM) ListPoliciesGrantingServiceAccessAPI操作来确定附加到每个委托人(用户或角色)的IAM策略。根据结果中返回的策略,您可以确定授予委托人的IAM权限。您必须分别API为每位委托人调用。

以下 AWS 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 }

使用 AWS Management Console

您还可以在 AWS Identity and Access Management (IAM) 控制台的用户或角色摘要页面的 Access Advisor 选项卡中查看以下信息:

  1. 打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择用户角色

  3. 在列表中选择一个名称以打开其摘要页面,然后选择访问顾问选项卡。

  4. 检查每个策略以确定每个用户有权访问的数据库、表和操作的组合。

    请记住,在此过程中,除了检查用户之外,还要检查角色,因为数据处理作业可能会代入访问数据的角色。

使用 AWS CloudTrail

确定现有权限的另一种方法是查找 AWS CloudTrail AWS Glue API在日志additionaleventdata字段包含insufficientLakeFormationPermissions条目的位置调用。此条目列出了用户需要对其具有 Lake Formation 权限才能执行相同操作的数据库和表。

这些是数据访问日志,因此不能保证它们会生成用户及其权限的完整列表。我们建议选择较宽的时间范围来捕获大多数用户的数据访问模式,例如几周或几个月。

有关更多信息,请参阅《AWS CloudTrail 用户指南》中的使用 CloudTrail 事件历史记录查看事件

接下来,你可以设置 Lake Formation 权限以匹配 AWS Glue 权限。请参阅 步骤 2:设置等效的 Lake Formation 权限

步骤 2:设置等效的 Lake Formation 权限

使用中收集的信息步骤 1:列出用户和角色的现有权限,授予与之匹配的 AWS Lake Formation 权限 AWS Glue 权限。使用以下任一方法进行授予:

有关更多信息,请参阅 Lake Formation 权限概述

设置 Lake Formation 权限后,继续执行第 3 步:向用户IAM授予使用 Lake Formation 的权限

第 3 步:向用户IAM授予使用 Lake Formation 的权限

要使用 AWS Lake Formation 权限模型,委托人必须拥有 Lake Formation 的 AWS Identity and Access Management (IAM) 权限。APIs

在中创建以下策略,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 位置的数据目录资源,以及对这些资源拥有权限的委托人。

以下 AWS 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" } },...
重要

如果您的 AWS Glue 数据目录已加密,仅GetEffectivePermissionsForPath返回在 Lake Formation 正式发布后创建或修改的数据库和表。

保护现有数据目录资源

接下来,撤销 IAMAllowedPrincipals 对您为该位置标识的每个表和数据库具有的 Super 权限。

警告

如果您已经实现了在数据目录中创建数据库和表的自动化,则以下步骤可能会导致自动化以及下游提取、转换和加载 (ETL) 作业失败。只有在修改现有流程或向所需主体授予显式 Lake Formation 权限后,才能继续操作。有关 Lake Formation 权限的信息,请参阅 Lake Formation 权限参考

撤销 IAMAllowedPrincipals 对表具有的 Super 权限
  1. 打开 AWS Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/。以数据湖管理员身份登录。

  2. 在导航窗格中,选择

  3. 页面上,选中所需表旁边的单选按钮。

  4. 操作菜单上,选择撤销

  5. 在 “撤消权限” 对话框的 “IAM用户和角色” 列表中,向下滚动到 “” 标题,然后选择IAMAllowedPrincipals

  6. 表权限下,确保选中 Super 权限,然后选择撤销

撤销 IAMAllowedPrincipals 对数据库具有的 Super 权限
  1. 打开 AWS Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/。以数据湖管理员身份登录。

  2. 在导航窗格中,选择数据库

  3. 数据库页面上,选中所需数据库旁边的单选按钮。

  4. 操作 菜单上,选择编辑

  5. “编辑数据库” 页上,清除 “仅IAM对该数据库中的新表使用访问控制”,然后选择 “保存”。

  6. 返回数据库页面,确保数据库仍处于选中状态,然后在操作菜单上选择撤销

  7. 在 “撤消权限” 对话框的 “IAM用户和角色” 列表中,向下滚动到 “” 标题,然后选择IAMAllowedPrincipals

  8. 数据库权限下,确保选中 Super 权限,然后选择撤销

为您的 Amazon S3 位置启用 Lake Formation 权限

接下来,向 Lake Formation 注册 Amazon S3 位置。为此,您可以使用向数据湖添加 Amazon S3 位置中所述的过程。或者,使用中所述的RegisterResourceAPI操作凭证售卖 API

注意

如果注册了父位置,则无需注册子位置。

完成这些步骤并测试用户是否可以访问其数据后,您即已成功升级为 Lake Formation 权限。继续执行下一步:步骤 5:保护新的数据目录资源

步骤 5:保护新的数据目录资源

接下来,通过更改默认数据目录设置来保护所有新的数据目录资源。关闭选项以仅对新数据库和表使用 AWS Identity and Access Management (IAM) 访问控制。

警告

如果您已经实现了在数据目录中创建数据库和表的自动化,则以下步骤可能会导致自动化以及下游提取、转换和加载 (ETL) 作业失败。只有在修改现有流程或向所需主体授予显式 Lake Formation 权限后,才能继续操作。有关 Lake Formation 权限的信息,请参阅 Lake Formation 权限参考

更改默认数据目录设置
  1. 打开 AWS Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/。以IAM管理用户(使用AdministratorAccess AWS 托管策略的用户Administrator或其他用户)身份登录。

  2. 在导航窗格中,选择设置

  3. 数据目录设置页面上,清除这两个复选框,然后选择保存

下一步是向用户授予将来访问其他数据库或表的权限。请参阅 第 6 步:为用户提供新的未来数据湖访问IAM策略

第 6 步:为用户提供新的未来数据湖访问IAM策略

要向您的用户授予将来访问其他 Data Catalog 数据库或表的权限,您必须为他们提供以下粗粒度 AWS 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策略

设置 AWS Lake Formation 权限并创建和附加粗粒度访问控制 AWS Identity and Access Management (IAM) 策略后,完成以下最后一步:

这样,您可以确保这些主体不再能够直接访问 Amazon Simple Storage Service (Amazon S3) 中的数据。然后,您可以完全通过 Lake Formation 管理这些主体的数据湖访问权限。