如何解决 AWS Glue 中的 Lake Formation 权限错误?
我的 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 角色授予创建数据库权限。
- 打开 AWS Lake Formation 控制台。
- 在导航窗格中的 Permissions(权限)下,选择 Administrative roles and tasks(管理角色和任务)。
- 在 Database creators(数据库创建者)下,选择 Grant(授予)。
- 对于 IAM 用户和角色,从下拉列表中选择您想要授予访问权限的 IAM 角色。
- 在 Catalog permissions(目录权限)下,选择 Create database(创建数据库)。
- 如果您需要 IAM 角色向您账户中的其他角色授予权限,则选择 Grantable permissions(可授予的权限)下的 Create database(创建数据库)。
- 选择 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_database 将 Create table 权限授予与爬网程序或 ETL 任务关联的 IAM 角色。
要解决第二个错误,请将 example_database 的 Describe(描述)权限授予与爬网程序或 ETL 任务关联的 IAM 角色。
- 打开 Lake Formation 控制台。
- 在导航窗格中的 Permissions(权限)下,选择 Data lake permissions(数据湖权限)。
- 选择 Grant(授予)。
- 在 Principals(主体)下,选择 IAM 用户和角色。
- 对于 IAM 用户和角色,选择与爬网程序关联的 IAM 角色。
- 在 LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named data catalog resources(命名的数据目录资源)。
- 对于 Databases(数据库),选择您的爬网程序正在写入的数据库。
- 在 Database permissions(数据库权限)下,根据您的用例选择 Create table(创建表)或 Describe(描述)。注意:爬网程序角色必须对其要写入的数据库同时具有 Describe(描述)和 Create Table(创建表)权限。对于 AWS Glue ETL,这些权限也足够了,除非您从任务本身运行 UpdateDatabase 或 DeleteDatabase API 调用。在这些情况下,授予 Alter(更改)或 Drop(丢弃)权限。
- 如果希望 IAM 角色向您账户中的其他角色授予权限,请在 Grantable permissions(可授予的权限)下设置权限。
- 选择 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_table 将 Describe(描述)和 Alter(更改)权限授予与爬网程序关联的 IAM 角色。
对于读取 example_table 的 ETL 任务,将 example_table 的 Describe(描述)和 Select(选择)权限授予与该任务关联的 IAM 角色。对于更新 example_table 的 ETL 任务,将 example_table 的 Alter(更改)权限授予与该任务关联的 IAM 角色。
- 打开 Lake Formation 控制台。
- 在导航窗格中的 Permissions(权限)下,选择 Data lake permissions(数据湖权限)。
- 选择 Grant(授予)。
- 在 Principals(主体)下,选择 IAM 用户和角色。
- 对于 IAM users and roles(IAM 用户和角色),选择 IAM role(IAM 角色)。
- 在 LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named data catalog resources(命名的数据目录资源)。
- 对于 Databases(数据库),选择您的爬网程序正在写入的数据库。
- 对于 Tables-optional(可选表格),请选择您的爬网程序正在访问的表。
- 在 Table permissions(表权限)下方,根据您的用例选择 Select(选择)、Describe(描述)或 Alter(更改)。
- 如果希望 IAM 角色向您账户中的其他角色授予权限,请在 Grantable permissions(可授予的权限)下设置权限。
- 选择 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 位置发送临时凭证。
- 打开 IAM 控制台。
- 为您的 AWS Glue 爬网程序或 AWS Glue 工作角色创建 IAM policy。
- 将权限 lakeformation:GetDataAccess 添加为策略中资源的操作。注意:API lakeformation:GetDataAccess 必须使用通配符作为其资源。
- 将策略附加到您的 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 路径所需的权限时,就会出现此错误。
要解决此错误,请执行以下操作:
- 打开 Lake Formation 控制台。
- 在导航窗格中的 Register and ingest(注册和提取)下,选择 Data lake locations(数据湖位置)。
- 验证错误消息中的 Amazon S3 路径或路径的前缀是否是 Data lake locations(数据湖位置)列表中的注册位置。
- 如果错误消息中的 Amazon S3 路径或前缀未在数据湖位置列表中列出,则选择 Register location(注册位置)。
- 对于 Amazon S3 path(Amazon S3 路径),选择 Browse(浏览),然后选择正确的 Amazon S3 路径。
- 对于 IAM role(IAM 角色),保留默认选择 AWSServiceRoleForLakeFormationDataAccess。如果使用自定义 IAM 角色,请确保满足相关要求。**重要提示:**注册 Amazon S3 位置时,Lake Formation 将担任之前的 IAM 角色。这会向访问该位置数据的集成 AWS 服务授予临时凭证。验证与注册的 Amazon S3 位置关联的 IAM 角色是否具有读取和写入 S3 存储桶所需的权限。这样可以防止出现 AccessDenied错误。
- 在导航窗格中的 Permissions(权限)下,选择 Data locations(数据位置)。
- 选择 Grant(授予)。
- 对于 Grant permissions(授予权限),选择 My account(我的账户)。
- 在 IAM users and roles(IAM 用户和角色)下,选择要为其授予访问权限的 IAM 角色。
- 选择 Grant(授予)。
相关信息
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前