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

15

我正在尝试使用AWS Glue爬虫在S3存储桶上填充Glue数据库。我运行创建爬虫向导,选择我的数据源(包含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).

我试图在一个全新的空数据库中创建这个表格(而不是已有表格的数据库),我尝试给名称加前缀,尝试使用不同的模式,并尝试使用具有管理员访问权限的现有角色。我认为后者应该可以解决问题,但我一直收到相同的错误,不知道原因。

明确一下,我创建的服务角色有几个策略,我假设它们足够宽松以创建表格:

enter image description here

日志很普通:


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

1
遇到相同的问题,正在解决。 - yclian
7
我通过删除“数据湖位置”条目来解决问题。请尝试。 - yclian
2
你太棒了!就是这样。你想把它发布为正式答案吗? - mhamrah
1
@yclian提供的答案帮助我解决了同样的问题。 - Raman
1
@yclian提供的答案也帮了我。 - Pawel
4个回答

18

在启用Lake Formation(在同一AWS账户中)后,我设置并运行新的AWS爬虫时遇到了相同的问题。我已经运行Glue爬虫很长时间了,当我看到这个新错误时感到困惑。

经过一些试错,我发现问题的根本原因是当你启用Lake Formation时,它会为通过Glue Crawler创建的新Glue数据库和添加到Lake Formation服务的任何资源(Glue目录,S3等)添加一个额外的权限层。

要解决此问题,您必须授予Crawler的IAM角色适当的Lake Formation权限(CRUD)以访问数据库。

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


12

我通过在AWS Lake Formations -> Permissions -> Data locations中添加授权解决了这个问题。(不要忘记在桶名称后面加上正斜杠 (/))

为数据位置添加授权


感谢这个补充。没有位置权限,它对我来说无法工作。 - Guy
似乎对我没有用。我添加了所有我能找到的IAM权限并授予了数据位置访问权限,但仍然没有成功。 - n3rd

3
我不得不将我为Glue创建的自定义角色添加到“数据湖管理员”授权方中:

enter image description here

(注:仅仅说这句话就解决了爬虫被拒绝访问的问题。可能还有一些权限较低的操作可以执行...)

谢谢您提供的截图和解释!在将相关角色添加到“数据湖管理员”列表并解决问题之前,我在AWS Lake Formation访问方面遇到了1周的问题!(在没有启用Lake Formation的AWS帐户上,没有问题。) - xke

0

确保您在以下路径中向爬虫的 IAM 角色授予了必要的权限:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接