我的 AWS Glue 爬网程序或 ETL 作业因 AWS Lake Formation 权限错误而失败。尽管我已经配置所需的 AWS Identity and Access Management (IAM) 权限,但还是会发生错误。
解决方法
常见的权限错误包括默认权限不足或权限不足,无法向其他用户授予权限。
默认权限不足
您必须为尝试查询表的角色提供默认数据库的权限。如果缺少这些权限,Lake Formation 会生成类似于以下内容的异常:
“AnalysisException: 无法验证默认数据库的存在:com.amazonaws.services.glue.model.AccessDeniedException: 默认 Lake Formation 权限不足”
要授予默认权限,请执行以下操作:
- 以数据湖管理员身份登录您的 Lake Formation 控制台。
- 在左侧窗格中,打开 Permissions(权限)、Data lake permissions(数据湖权限),然后选择 Grant(授予)。
- 在 Grant data lake permissions(授予数据湖权限)页面的 Principals(主体)下,选择您的 Glue 作业的主体类别。
- 在 IAM users and roles(IAM 用户和角色)下,选择一个或多个 IAM 角色。
- 在 LF-Tags or catalog resources(LF 标签或目录资源)下,选择 Named Data Catalog resources(命名 Data Catalog 资源),然后在 Databases(数据库)下选择 Default(默认)。如果您看不到默认数据库,请按照后面的说明创建一个。
- 在 Grant data lake permissions(授予数据湖权限)页面的 Database permissions(数据库权限)下,对于 Database permissions(数据库权限),选择 Describe(描述)。
- 选择 Grant(授予)按钮。
- 在 AWS Glue 中重新运行您的作业并验证作业是否成功。
要创建默认数据库,如果尚不存在,请执行以下操作:
- 打开 Administrative roles and tasks(管理角色和任务),然后在 Database creators(数据库创建者)下选择 Grant(授予)。
- 在 Grant permissions(授予权限)对话框中,选择您的 Glue 角色。
- 在 Grantable permissions(可授予权限)下,为要授予的特定访问权限选择 Create database(创建数据库)权限,然后选择 Grant(授予)。这会将附加到 AWS Glue 作业的 IAM 角色配置为 Lake Formation 中的数据库创建者。然后,Lake Formation 会自动创建默认数据库(如果不存在),并为该角色授予所需的权限。
- 在 AWS Glue 中运行您的作业并验证作业是否成功。
权限不足,无法授予权限
授予对 AWS Glue 表的权限时,必须拥有该表的可授予权限。例如,要通过 CloudFormation 模板或 CI/CD 管线授予权限,您必须拥有可授予的权限。如果缺少可授予的权限,Lake Formation 会生成如下异常:
“AccessDeniedException: “调用 GrantPermissions 操作时发生错误 (AccessDeniedException): 资源不存在或请求者无权访问所请求的权限。”
- 使用命名资源方法为用户或角色授予对表或数据库的可授予权限。
- 例如,该用户或角色可以通过 AWS CloudFormation 或 CICD 管线向其他用户或角色授予权限。
相关信息
管理 Lake Formation 权限
注册 Amazon S3 位置