如何解决 AWS Glue 中的 Lake Formation 权限错误?

3 分钟阅读
0

我的 AWS Glue 爬网程序或 ETL 任务失败,并出现与 AWS Lake Formation 相关的错误。但是,我配置了所需的 AWS Identity and Access Management (IAM) 权限。

简短描述

要访问诸如 AWS Glue Data Catalog 和 Amazon Simple Storage Service (Amazon S3) 之类的资源,您必须拥有正确的 IAM 策略和 Lake Formation 权限。当与您的 Amazon S3 爬网程序或 ETL 任务关联的 IAM 角色没有足够的 Lake Formation 权限时,您会收到错误讯息。您必须拥有正确的 Lake Formation 权限才能读取和写入以下资源:

  • Data Catalog 中的数据库和表
  • Amazon S3 中的基础数据

解决方法

创建数据目录数据库时出现访问问题

如果 Data Catalog 数据库创建问题导致了错误,则您会收到一条与以下内容类似的错误消息:

Insufficient Lake Formation permission(s): Required Create Database on Catalog

要解决此错误,请使用数据湖管理员角色访问 Lake Formation 控制台。然后,向相关的 IAM 角色授予创建数据库权限

  1. 打开 AWS Lake Formation 控制台
  2. 在导航窗格中的 Permissions(权限)下,选择 Administrative roles and tasks(管理角色和任务)。
  3. Database creators(数据库创建者)下,选择 Grant(授予)。
  4. 对于 IAM 用户和角色,从下拉列表中选择您想要授予访问权限的 IAM 角色。
  5. Catalog permissions(目录权限)下,选择 Create database(创建数据库)。
  6. 如果您需要 IAM 角色向您账户中的其他角色授予权限,则选择 Grantable permissions(可授予的权限)下的 Create database(创建数据库)。
  7. 选择 Grant(授予)。

Data Catalog 数据库存在访问权限问题

如果 Data Catalog 数据库问题导致错误,则您会收到一条类似于以下错误消息之一的错误消息:

Insufficient Lake Formation permission(s) on example_database: Required Create Table
Insufficient Lake Formation permission(s) on example_database: (Database name: example_database)
Insufficient Lake Formation permission(s) on example_table (Database name: example_database, Table Name: example_table)

要解决第一个和第三个错误,请为 example_databaseCreate table 权限授予与爬网程序或 ETL 任务关联的 IAM 角色。

要解决第二个错误,请将 example_databaseDescribe(描述)权限授予与爬网程序或 ETL 任务关联的 IAM 角色。

  1. 打开 Lake Formation 控制台
  2. 在导航窗格中的 Permissions(权限)下,选择 Data lake permissions(数据湖权限)。
  3. 选择 Grant(授予)。
  4. Principals(主体)下,选择 IAM 用户和角色
  5. 对于 IAM 用户和角色,选择与爬网程序关联的 IAM 角色。
  6. LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named data catalog resources(命名的数据目录资源)。
  7. 对于 Databases(数据库),选择您的爬网程序正在写入的数据库。
  8. Database permissions(数据库权限)下,根据您的用例选择 Create table(创建表)或 Describe(描述)。注意:爬网程序角色必须对其要写入的数据库同时具有 Describe(描述)和 Create Table(创建表)权限。对于 AWS Glue ETL,这些权限也足够了,除非您从任务本身运行 UpdateDatabaseDeleteDatabase API 调用。在这些情况下,授予 Alter(更改)或 Drop(丢弃)权限。
  9. 如果希望 IAM 角色向您账户中的其他角色授予权限,请在 Grantable permissions(可授予的权限)下设置权限。
  10. 选择 Grant(授予)。

Data Catalog 表存在访问权限问题

如果导致错误的原因是 Data Catalog 表问题,则您会收到一条类似于以下错误消息之一的错误消息:

Insufficient Lake Formation permission(s) on example_table (Database name: example_database, Table Name: example_table)
Insufficient Lake Formation permission(s): Required Alter on example_table

如果您收到此错误,则 AWS Glue 爬网程序或 ETL 任务正在访问该表。对于爬网程序,为 example_tableDescribe(描述)和 Alter(更改)权限授予与爬网程序关联的 IAM 角色。

对于读取 example_table 的 ETL 任务,将 example_tableDescribe(描述)和 Select(选择)权限授予与该任务关联的 IAM 角色。对于更新 example_table 的 ETL 任务,将 example_tableAlter(更改)权限授予与该任务关联的 IAM 角色。

  1. 打开 Lake Formation 控制台
  2. 在导航窗格中的 Permissions(权限)下,选择 Data lake permissions(数据湖权限)。
  3. 选择 Grant(授予)。
  4. Principals(主体)下,选择 IAM 用户和角色
  5. 对于 IAM users and roles(IAM 用户和角色),选择 IAM role(IAM 角色)。
  6. LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named data catalog resources(命名的数据目录资源)。
  7. 对于 Databases(数据库),选择您的爬网程序正在写入的数据库。
  8. 对于 Tables-optional(可选表格),请选择您的爬网程序正在访问的表。
  9. Table permissions(表权限)下方,根据您的用例选择 Select(选择)、Describe(描述)或 Alter(更改)。
  10. 如果希望 IAM 角色向您账户中的其他角色授予权限,请在 Grantable permissions(可授予的权限)下设置权限。
  11. 选择 Grant(授予)。

Lake Formation IAM 权限

如果 Lake Formation 的 IAM 权限问题导致了错误,那么您会收到一条类似于以下错误消息之一的错误消息:

com.amazonaws.services.lakeformation.model.AccessDeniedException: Service Principal: glue.amazonaws.com is not authorized to perform: lakeformation:GetDataAccess
on resource: s3://sample-bucket/sample-prefix/ because no identity-based policy allows the lakeformation:GetDataAccess action

当 AWS Glue 任务角色或 AWS Glue 爬网程序角色没有足够的 IAM 权限时,会遇到此错误。该任务或角色必须有权检查 Lake Formation 是否可以向该角色和 Amazon S3 位置发送临时凭证。

  1. 打开 IAM 控制台。
  2. 为您的 AWS Glue 爬网程序或 AWS Glue 工作角色创建 IAM policy。
  3. 将权限 lakeformation:GetDataAccess 添加为策略中资源的操作。注意:API lakeformation:GetDataAccess 必须使用通配符作为其资源。
  4. 将策略附加到您的 AWS Glue 爬网程序或 AWS Glue 工作角色。

Amazon S3 路径存在访问权限问题

如果导致 Amazon S3 路径问题导致错误,则错误消息与以下消息类似。错误包括 Amazon S3 路径:

Insufficient Lake Formation permission(s) on s3://s3-example-bucket/example-prefix/ (Database name: example-database, Table Name: example-table)<br>
Insufficient Lake Formation permission(s) on s3://s3-example-bucket/example-prefix/

当与爬网程序或 ETL 任务关联的 IAM 角色没有访问 Amazon S3 路径所需的权限时,就会出现此错误。

要解决此错误,请执行以下操作:

  1. 打开 Lake Formation 控制台
  2. 在导航窗格中的 Register and ingest(注册和提取)下,选择 Data lake locations(数据湖位置)。
  3. 验证错误消息中的 Amazon S3 路径或路径的前缀是否是 Data lake locations(数据湖位置)列表中的注册位置。
  4. 如果错误消息中的 Amazon S3 路径或前缀未在数据湖位置列表中列出,则选择 Register location(注册位置)。
  5. 对于 Amazon S3 path(Amazon S3 路径),选择 Browse(浏览),然后选择正确的 Amazon S3 路径。
  6. 对于 IAM role(IAM 角色),保留默认选择 AWSServiceRoleForLakeFormationDataAccess。如果使用自定义 IAM 角色,请确保满足相关要求。**重要提示:**注册 Amazon S3 位置时,Lake Formation 将担任之前的 IAM 角色。这会向访问该位置数据的集成 AWS 服务授予临时凭证。验证与注册的 Amazon S3 位置关联的 IAM 角色是否具有读取和写入 S3 存储桶所需的权限。这样可以防止出现 AccessDenied错误。
  7. 在导航窗格中的 Permissions(权限)下,选择 Data locations(数据位置)。
  8. 选择 Grant(授予)。
  9. 对于 Grant permissions(授予权限),选择 My account(我的账户)。
  10. IAM users and roles(IAM 用户和角色)下,选择要为其授予访问权限的 IAM 角色。
  11. 选择 Grant(授予)。

相关信息

管理 Lake Formation 权限

注册 Amazon S3 位置

AWS 官方
AWS 官方已更新 1 年前