设置 AWS Lake Formation - AWS Lake Formation

设置 AWS Lake Formation

以下各节提供有关首次设置 Lake Formation 的信息。要开始使用 Lake Formation,并非本节中的所有主题都是必须学习的。您可以按照说明在 Amazon Simple Storage Service (Amazon S3) 中设置 Lake Formation 权限模型,以管理您的现有 AWS Glue Data Catalog 对象和数据位置。

本节将介绍如何通过两种不同的方式设置 Lake Formation 资源:

  • 使用 AWS CloudFormation 模板

  • 使用 Lake Formation 控制台

要使用 AWS 控制台设置 Lake Formation,请转至创建数据湖管理员

使用 AWS CloudFormation 模板设置 Lake Formation 资源

注意

除步骤 2 和 5 外,AWS CloudFormation 堆栈执行上述步骤 1 至 6。从 Lake Formation 控制台手动执行 更改默认权限模式或使用混合访问模式集成 IAM Identity Center

  1. 在美国东部(弗吉尼亚州北部)区域通过 https://console.aws.amazon.com/cloudformation 以 IAM 管理员身份登录 AWS CloudFormation 控制台。

  2. 选择启动堆栈

  3. 创建堆栈屏幕上,选择下一步

  4. 输入堆栈名称

  5. 对于 DataLakeAdminNameDatalakeAdminPassword,输入您的数据湖管理用户的用户名和密码。

  6. 对于 DatalakeUser1NameDatalakeUser1Password,输入您的数据湖分析师用户的用户名和密码。

  7. 对于 DataLakeBucketName,输入要创建的新存储桶的名称。

  8. 选择下一步

  9. 在下一页上,选择下一步

  10. 查看最后页面上的详细信息,然后选择我确认 AWS CloudFormation 可以创建 IAM 资源

  11. 选择创建

    堆栈创建过程可能需要几分钟时间才能完成。

清理资源

如果您想清除 AWS CloudFormation 堆栈资源,请执行以下操作:

  1. 取消注册您的堆栈创建并注册为数据湖位置的 Amazon S3 存储桶。

  2. 删除 AWS CloudFormation 堆栈 这将删除堆栈创建的所有资源。

创建数据湖管理员

数据湖管理员最初是唯一可以向任何主体(包括自己)授予对数据位置和数据目录资源的 Lake Formation 权限的 AWS Identity and Access Management (IAM) 用户或角色。有关数据湖管理员功能的信息,请参阅隐式 Lake Formation 权限。默认情况下,Lake Formation 允许您最多创建 30 个数据湖管理员。

您可以使用 Lake Formation 控制台或 Lake Formation API 的 PutDataLakeSettings 操作来创建数据湖管理员。

创建数据湖管理员需要以下权限。Administrator 用户隐式拥有这些权限。

  • lakeformation:PutDataLakeSettings

  • lakeformation:GetDataLakeSettings

如果您向用户授予 AWSLakeFormationDataAdmin 策略,则该用户将无法创建其他 Lake Formation 管理员用户。

创建数据湖管理员(控制台)
  1. 如果要成为数据湖管理员的用户尚不存在,请使用 IAM 控制台创建该用户。或者,请选择现有用户来担任数据湖管理员。

    注意

    我们建议您不要选择 IAM 管理用户(拥有 AdministratorAccess AWS 托管策略的用户)作为数据湖管理员。

    将以下 AWS 托管策略附加到用户:

    策略 必需? 注意
    AWSLakeFormationDataAdmin 强制性 基本数据湖管理员权限。此 AWS 托管策略包含显式拒绝 Lake Formation API 操作 PutDataLakeSetting,该操作可限制用户创建新的数据湖管理员。
    AWSGlueConsoleFullAccess, CloudWatchLogsReadOnlyAccess 可选 如果数据湖管理员要对通过 Lake Formation 蓝图创建的工作流进行故障排除,请附加这些策略。这些策略使数据湖管理员能够在 AWS Glue 控制台和 Amazon CloudWatch Logs 控制台中查看故障排除信息。有关工作流的更多信息,请参阅在 Lake Formation 中使用工作流导入数据
    AWSLakeFormationCrossAccountManager 可选 附加此策略可使数据湖管理员能够授予和撤销对数据目录资源的跨账户权限。有关更多信息,请参阅 Lake Formation 中的跨账户数据共享
    AmazonAthenaFullAccess 可选 如果数据湖管理员要在 Amazon Athena 中运行查询,请附加此策略。
  2. 附加以下内联策略,该策略向数据湖管理员授予创建 Lake Formation 服务相关角色的权限。建议将该策略命名为 LakeFormationSLR

    服务相关角色使数据湖管理员能够更轻松地在 Lake Formation 中注册 Amazon S3 位置。有关 Lake Formation 服务相关角色的更多信息,请参阅在 Lake Formation 中使用服务相关角色

    重要

    在以下所有策略中,将 <account-id> 替换为有效的 AWS 账户编号。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": "lakeformation.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::<account-id>:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess" } ] }
  3. (可选)将下面的 PassRole 内联策略附加到用户。此策略使数据湖管理员能够创建和运行工作流。iam:PassRole 权限使工作流能够担任创建爬网程序和作业的角色 LakeFormationWorkflowRole,并将该角色附加到所创建的爬网程序和作业。建议将该策略命名为 UserPassRole

    重要

    <account-id> 替换为有效的 AWS 账户编号。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PassRolePermissions", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<account-id>:role/LakeFormationWorkflowRole" ] } ] }
  4. (可选)如果您的账户将授予或接收跨账户 Lake Formation 权限,请附加此额外内联策略。此策略使数据湖管理员能够查看和接受 AWS Resource Access Manager (AWS RAM) 资源共享邀请。此外,对于 AWS Organizations 管理账户中的数据湖管理员,该策略还包括针对组织启用跨账户授权的权限。有关更多信息,请参阅 Lake Formation 中的跨账户数据共享

    建议将该策略命名为 RAMAccess

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ram:AcceptResourceShareInvitation", "ram:RejectResourceShareInvitation", "ec2:DescribeAvailabilityZones", "ram:EnableSharingWithAwsOrganization" ], "Resource": "*" } ] }
  5. 通过 https://console.aws.amazon.com/lakeformation/ 打开 AWS Lake Formation 控制台,并以您在创建具有管理访问权限的用户中创建的管理员用户或使用 AdministratorAccess 用户 AWS 托管策略的用户身份登录。

  6. 如果显示欢迎使用 Lake Formation 窗口,请选择您在第 1 步创建或选择的 IAM 用户,然后选择开始使用

  7. 如果没有看到欢迎使用 Lake Formation ‬窗口,请执行以下步骤来配置 Lake Formation 管理员。

    1. 在导航窗格中的管理员下,选择管理角色和任务。在控制台页面的数据湖管理员部分,选择添加

    2. 添加管理员对话框中的“访问类型”下,选择数据湖管理员

    3. 对于 IAM 用户和角色,选择您在第 1 步创建或选择的 IAM 用户,然后选择保存

更改默认权限模式或使用混合访问模式

Lake Formation 一开始就启用了“仅使用 IAM 访问控制”设置,以便与现有 AWS Glue Data Catalog 行为兼容。此设置使您可以通过 IAM 策略和 Amazon S3 存储桶策略管理对数据湖中数据及其元数据的访问。

为了简化数据湖权限从 IAM 和 Amazon S3 模式向 Lake Formation 权限的过渡,我们建议您对数据目录使用混合访问模式。在混合访问模式下,您现在有了增量路径,允许您为一组特定的用户启用 Lake Formation 权限,而不会中断其他现有用户或工作负载。

有关更多信息,请参阅 混合访问模式

禁用默认设置,只需一步即可将表的所有现有用户移至 Lake Formation。

重要

如果您已有 AWS Glue Data Catalog 数据库和表,请不要按照本节中的说明执行操作。而是应按照将 AWS Glue 数据权限升级为 AWS Lake Formation 模型中的说明操作。

警告

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

更改默认数据目录设置
  1. 通过 https://console.aws.amazon.com/lakeformation/ 继续在 Lake Formation 控制台中操作。确保以您在创建具有管理访问权限的用户中创建的管理员用户或使用 AdministratorAccess AWS 托管策略的用户身份登录。

  2. 修改数据目录设置:

    1. 在导航窗格中的管理下,选择数据目录设置

    2. 清除两个复选框,然后选择保存

      “数据目录设置”对话框的副标题为“对新创建的数据库和表的默认权限”,并且含有两个复选框(如文本中所述)。
  3. 撤销数据库创建者的 IAMAllowedPrincipals 权限。

    1. 在导航窗格中的管理下,选择管理角色和任务

    2. 管理角色和任务控制台页面的数据库创建者部分,选择 IAMAllowedPrincipals 组,然后选择撤销

      此时将出现撤销权限对话框,其中显示 IAMAllowedPrincipals 拥有创建数据库权限。

    3. 选择撤销

为 Lake Formation 用户分配权限

创建用户以访问 AWS Lake Formation 中的数据湖。此用户拥有查询数据湖的最低权限。

有关创建用户或组的更多信息,请参阅《IAM 用户指南》中的 IAM 身份

向非管理员用户附加用于访问 Lake Formation 数据的权限
  1. 以您在创建具有管理访问权限的用户中创建的管理员用户或使用 AdministratorAccess AWS 托管策略的用户身份通过 https://console.aws.amazon.com/iam 打开 IAM 控制台。

  2. 选择用户用户组

  3. 在列表中,请选择要在其中嵌入策略的用户或组的名称。

    选择权限

  4. 选择添加权限,然后选择直接附加策略。在筛选策略文本字段中输入 Athena。在结果列表中,选中 AmazonAthenaFullAccess 的复选框。

  5. 选择创建策略按钮。在创建策略页面上,选择 JSON 选项卡。复制以下策略并将其粘贴到策略编辑器中。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:SearchTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions", "lakeformation:GetResourceLFTags", "lakeformation:ListLFTags", "lakeformation:GetLFTag", "lakeformation:SearchTablesByLFTags", "lakeformation:SearchDatabasesByLFTags" ], "Resource": "*" } ] }
  6. 选择底部的下一步按钮,直到看到查看策略页面。输入策略名称,例如 DatalakeUserBasic。选择创建策略,然后关闭策略选项卡或浏览器窗口。

为您的数据湖配置 Amazon S3 位置

要使用 Lake Formation 管理和保护数据湖中的数据,您必须先注册一个 Amazon S3 位置。注册位置时,会注册 Amazon S3 路径和该路径下的所有文件夹,这使 Lake Formation 能够强制实施存储级别权限。当用户从 Amazon Athena 等集成引擎请求数据时,Lake Formation 会提供数据访问权限,而不是使用用户权限。

注册位置时,您需要指定一个 IAM 角色以授予对该位置的读/写权限。Lake Formation 担任该角色,向请求访问已注册 Amazon S3 位置的数据的集成 AWS 服务提供临时凭证。您可以指定 Lake Formation 服务相关角色 (SLR) 或创建自己的角色。

在以下情况下使用自定义角色:

所选角色必须具有必需的权限,如用于注册位置的角色的要求中所述。有关如何注册 Amazon S3 位置的说明,请参阅向数据湖添加 Amazon S3 位置

(可选)外部数据筛选设置

如果您打算使用第三方查询引擎分析和处理数据湖中的数据,则必须选择允许外部引擎访问由 Lake Formation 管理的数据。如果您不选择,则外部引擎将无法访问已在 Lake Formation 中注册的 Amazon S3 位置处的数据。

Lake Formation 支持使用列级别权限来限制对表中特定列的访问。Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR 等集成分析服务可从 AWS Glue Data Catalog 中检索未经过筛选的表元数据。集成服务负责对查询响应中的列进行实际筛选。第三方管理员负责妥善处理权限,以免有人未经授权便访问数据。

选择允许第三方引擎访问和筛选数据(控制台)
  1. 通过 https://console.aws.amazon.com/lakeformation/ 继续在 Lake Formation 控制台中操作。确保您以拥有对 Lake Formation PutDataLakeSettings API 操作的 IAM 权限的主体身份登录。您在 注册 AWS 账户 中创建的 IAM 管理员用户拥有此权限。

  2. 在导航窗格中的管理下,选择应用程序集成设置

  3. 应用程序集成设置页面上,执行以下操作:

    1. 选中允许外部引擎筛选在 Lake Formation 中注册的 Amazon S3 位置处的数据复选框。

    2. 输入为第三方引擎定义的会话标签值

    3. 对于 AWS 账户 ID,输入允许第三方引擎从中访问在 Lake Formation 中注册的位置的账户 ID。在输入每个账户 ID 之后按 Enter 键。

    4. 选择保存

要允许外部引擎在不进行会话标签验证的情况下访问数据,请参阅集成应用程序以获取完整表访问权限

(可选)授予对数据目录加密密钥的访问权限

如果 AWS Glue Data Catalog 已加密,则应向需要授予对数据目录数据库和表的 Lake Formation 权限的所有主体授予对 AWS KMS 密钥的 AWS Identity and Access Management (IAM) 权限。

有关更多信息,请参见AWS Key Management Service 开发人员指南

(可选)为工作流创建 IAM 角色

借助 AWS Lake Formation,您可以使用 AWS Glue 爬网程序执行的工作流导入数据。工作流定义数据来源和计划以将数据导入到数据湖中。您可以使用 Lake Formation 提供的蓝图或模板轻松定义工作流。

创建工作流时,必须为其分配一个 AWS Identity and Access Management (IAM) 角色,该角色授予摄取数据所需的 Lake Formation 权限。

以下过程假定您熟悉 IAM。

为工作流创建 IAM 角色
  1. 以您在创建具有管理访问权限的用户中创建的管理员用户或使用 AdministratorAccess AWS 托管策略的用户身份通过 https://console.aws.amazon.com/iam 登录 IAM 控制台。

  2. 在导航窗格中,选择角色,然后选择创建角色

  3. 创建角色页面上,选择 AWS 服务,然后选择 Glue。选择下一步

  4. 添加权限页面上,搜索 AWSGlueServiceRole 托管策略,然后在列表中选中该策略名称旁边的复选框。然后完成创建角色向导,命名角色 LFWorkflowRole。要完成操作,请选择创建角色

  5. 回到角色页面上,搜索 LFflowRole,然后选择该角色名称。

  6. 角色摘要页面上的权限选项卡下,选择添加内联策略。在创建策略屏幕上,导航到 JSON 选项卡,然后添加以下内联策略。建议将该策略命名为 LakeFormationWorkflow

    重要

    在以下策略中,将 <account-id> 替换为有效的 AWS 账户 数字。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "lakeformation:GrantPermissions" ], "Resource": "*" }, { "Effect": "Allow", "Action": ["iam:PassRole"], "Resource": [ "arn:aws:iam::<account-id>:role/LakeFormationWorkflowRole" ] } ] }

    以下是关于该策略中权限的简要描述:

    • lakeformation:GetDataAccess 使工作流创建的作业能够向目标位置写入数据。

    • lakeformation:GrantPermissions 使工作流能够授予对目标表的 SELECT 权限。

    • iam:PassRole 使服务能够担任创建爬网程序和作业(工作流实例)的角色 LakeFormationWorkflowRole,并将该角色附加到所创建的爬网程序和作业。

  7. 验证角色 LakeFormationWorkflowRole 是否附加了两个策略。

  8. 如果您要摄取数据湖位置之外的数据,请添加用于授予来源数据读取权限的内联策略。