为什么我的 AWS Glue 爬网程序或 ETL 任务失败并显示错误“Insufficient Lake Formation permission(s)”?

上次更新日期:2022 年 2 月 15 日

我的 AWS Glue 爬网程序或 ETL 任务失败,并显示错误“Insufficient Lake Formation permission(s)”。但是,与 AWS Glue 爬网程序或 AWS Glue ETL 任务关联的 AWS Identity and Access Management (IAM) 角色具有必要的 IAM 权限。

简短描述

对 AWS Glue 数据目录和 Amazon Simple Storage Service (Amazon S3) 资源的访问不仅通过 IAM 策略进行管理,还通过 AWS Lake Formation 权限进行管理。如果与 AWS Glue 爬网程序或 ETL 任务关联的 IAM 角色不具备从以下项读取和/或写入以下项所必需的 Lake Formation 权限,则会出现 Insufficient Lake Formation permission(s) 错误:

  • 数据目录中的数据库/表
  • Amazon S3 中的基础数据

解决方法

数据目录数据库存在访问权限问题

如果错误是由与数据目录数据库相关的访问权限问题所致,则错误消息类似于以下内容:

ERROR : Insufficient Lake Formation permission(s) on example-database (Database name: example-database)

要解决此错误,请使用数据湖管理员角色登录到 AWS Lake Formation 控制台,然后向与爬网程序/ETL 任务关联的 IAM 角色授予 Create database(创建数据库)权限:

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

数据目录表存在访问权限问题

如果错误是由与数据目录表相关的访问权限问题所致,则错误消息类似于以下内容:

ERROR : Insufficient Lake Formation permission(s) on example-table (Database name: example-database, Table Name: example-table)

要解决此错误,请向与爬网程序/ETL 任务关联的 IAM 角色授予 example-databaseCreate table(创建表)权限:

  1. 打开 AWS Lake Formation 控制台
  2. 在导航窗格中的 Permissions(权限)下,选择 Data lake permissions(数据湖权限)。
  3. 选择 Grant(授予)。
  4. Principals(委托人)下,选择 IAM users and roles(IAM 用户和角色)。
  5. 对于 IAM users and roles(IAM 用户和角色),选择 IAM 角色。
  6. LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named data catalog resources(命名的数据目录资源)。
  7. 对于 Databases(数据库),选择数据库。
  8. Database permissions(数据库权限)下,根据您的使用案例选择 Create table(创建表)或 Super(超级)。
  9. 如果您需要 IAM 角色向您账户中的其他角色授予权限,请在 下选择所需的权限(可授予的权限)下选择所需的权限。
  10. 选择 Grant(授予)。

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

如果错误是由与 Amazon S3 路径相关的访问权限问题所致,则错误消息将包含 S3 路径,类似于以下内容:

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

这意味着与爬网程序/ETL 任务关联的 IAM 角色没有访问 S3 路径所需的权限。

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

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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?