AWS Glue 无法从爬虫创建数据库:权限被拒绝

AWS Glue cannot create database from crawler: permission denied

我正在尝试在 S3 存储桶上使用 AWS Glue 爬虫来填充 Glue 数据库。我 运行 创建爬虫向导, select 我的数据源(带有 avro 文件的 S3 存储桶),让它创建 IAM 角色,然后 运行 它,我收到以下错误:

Database does not exist or principal is not authorized to create tables. (Database name: zzz-db, Table name: avroavro_all) (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: 78fc18e4-c383-11e9-a86f-736a16f57a42). For more information, see Setting up IAM Permissions in the Developer Guide (http://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html).

我试图在一个新的空白数据库中创建这个 table(而不是现有的带有 tables 的数据库),我尝试为名称添加前缀,我尝试寻找不同的模式,然后我尝试使用具有管理员访问权限的现有角色。我虽然后者可以工作,但我一直收到同样的错误,并且不知道为什么。

明确地说,我创建的服务角色有几个策略,我认为这些策略足以创建 tables:

原始日志:


19:52:52
[10cb3191-9785-49dc-8935-fb02dcbd69a3] BENCHMARK : Running Start Crawl for Crawler avro
19:53:22
[10cb3191-9785-49dc-8935-fb02dcbd69a3] BENCHMARK : Classification complete, writing results to database zzz-db
19:53:22
[10cb3191-9785-49dc-8935-fb02dcbd69a3] INFO : Crawler configured with SchemaChangePolicy {"UpdateBehavior":"UPDATE_IN_DATABASE","DeleteBehavior":"DEPRECATE_IN_DATABASE"}.
19:53:34
[10cb3191-9785-49dc-8935-fb02dcbd69a3] ERROR : Insufficient Lake Formation permission(s) on s3://zzz-data/avro-all/ (Database name: zzz-db, Table name: avroavro_all) (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: 31481e7e-c384-11e9-a6e1-e78dc8223fae). For more information, see Setting up IAM Permissions in the Developer Guide (http://docs.aws.amazon.com/glu
19:54:44
[10cb3191-9785-49dc-8935-fb02dcbd69a3] BENCHMARK : Crawler has finished running and is in state READY

我在启用 Lake Formation 后设置和 运行 一个新的 AWS 爬虫时遇到了同样的问题(在同一个 AWS 帐户中)。我已经 运行 Glue 爬虫很长时间了,当我看到这个新错误时被难住了。

经过反复试验,我发现问题的根本原因是当您启用 Lake Formation 时,它会为通过 Glue Crawler 创建的新 Glue 数据库和任何您将其添加到 Lake Formation 服务的资源(Glue 目录、S3 等)。

要解决此问题,您必须 g运行t 爬虫的 IAM 角色,即数据库的一组适当的 Lake Formation 权限 (CRUD)。

您可以在 AWS Lake Formation 控制台 (UI) 的“权限”>“数据权限”部分下或通过 awscli lake formation 命令管理这些权限。

我通过在 AWS Lake Formations -> 权限 -> 数据位置中添加授权解决了这个问题。 (不要忘记在存储桶名称后面添加正斜杠 (/))

我必须将我为 Glue 创建的自定义角色添加到 "Data lake Administrators" 受赠者:

(注:这么说就解决了爬虫被拒绝访问的问题,可能还有权限比较低的事情要做...)

确保您为爬网程序在此路径中的 IAM 角色授予了必要的权限:

Lake Formation -> 权限 -> 数据湖权限

(将相关的 Glue 数据库权限授予您的爬虫的 IAM 角色)