为什么我的 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(创建数据库)权限:
- 打开 AWS Lake Formation 控制台。
- 在导航窗格中的 Permissions(权限)下,选择 Administrative roles and tasks(管理角色和任务)。
- 在 Database creators(数据库创建者)下,选择 Grant(授予)。
- 对于 IAM users and roles(IAM 用户和角色),从下拉列表中选择要为其授予访问权限的 IAM 角色。
- 在 Catalog permissions(目录权限)下,选择 Create database(创建数据库)。
- 如果您需要 IAM 角色向您账户中的其他角色授予权限,请选择 Grantable permissions(可授予的权限)下的 Create database(创建数据库)。
- 选择 Grant(授予)。
数据目录表存在访问权限问题
如果错误是由与数据目录表相关的访问权限问题所致,则错误消息类似于以下内容:
ERROR : Insufficient Lake Formation permission(s) on example-table (Database name: example-database, Table Name: example-table)
要解决此错误,请向与爬网程序/ETL 任务关联的 IAM 角色授予 example-database 的 Create table(创建表)权限:
- 打开 AWS Lake Formation 控制台。
- 在导航窗格中的 Permissions(权限)下,选择 Data lake permissions(数据湖权限)。
- 选择 Grant(授予)。
- 在 Principals(委托人)下,选择 IAM users and roles(IAM 用户和角色)。
- 对于 IAM users and roles(IAM 用户和角色),选择 IAM 角色。
- 在 LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named data catalog resources(命名的数据目录资源)。
- 对于 Databases(数据库),选择数据库。
- 在 Database permissions(数据库权限)下,根据您的使用案例选择 Create table(创建表)或 Super(超级)。
- 如果您需要 IAM 角色向您账户中的其他角色授予权限,请在 下选择所需的权限(可授予的权限)下选择所需的权限。
- 选择 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 路径所需的权限。
要解决此错误,请执行以下操作:
- 打开 AWS Lake Formation 控制台。
- 在导航窗格中的 Register and ingest(注册和提取)下,选择 Data lake locations(数据湖位置)。
您可以查看数据湖位置。 - 验证错误消息中提到的 Amazon S3 路径或 S3 路径的前缀是否是 Data lake locations(数据湖位置)列表中的注册位置。
- 如果错误消息中的 S3 路径或前缀与 Data lake locations(数据湖位置)列表中列出的路径或前缀不同,请选择 Register location(注册位置)。
- 对于 Amazon S3 path(Amazon S3 路径),选择 Browse(浏览),然后选择正确的 S3 路径。
- 对于 IAM role(IAM 角色),保留默认选择 AWSServiceRoleForLakeFormationDataAccess。如果您需要使用自定义 IAM 角色,请确保满足相关要求。
重要提示:当您注册 S3 位置时,Lake Formation 将担任上面的 IAM 角色,为访问该位置中数据的集成 AWS 服务授予临时凭证。因此,请确保与爬网程序/ETL 任务关联的 IAM 角色具有读/写 S3 存储桶所需的权限,以防止 AccessDenied 错误。 - 在导航窗格中的 Permissions(权限)下,选择 Data locations(数据位置)。
- 选择 Grant(授予)。
- 对于 Grant permissions(授予权限),选择 My account(我的账户)。
- 在 IAM users and roles(IAM 用户和角色)下,选择要为其授予访问权限的 IAM 角色。
- 选择 Grant(授予)。