Athena无权限在S3路径上操作。

0

【以下的问题经过翻译处理】 我正在通过 Terraform(基础设施即代码)使用 S3、Glue 和 Athena 创建一个简单的数据湖,它由 Lake Formation 管理。我授予工作流角色以及 Athena 用户所需的 IAM 和 Lake Formation 中的所有权限。但是,有时(我在开发环境下多次部署和销毁基础设施)当我尝试查询 Athena 中的粘合表时出现错误:Permission denied on S3 path: s3://XXX/XX. This query ran against the "XXXX" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: 0adbb706-4500-4c3b-8f0d-3174fa4e12b9. 该错误发生时会影响数据库中的所有表。当我重新部署相同的代码时,错误可能根本不会发生。我在 AWS 和互联网上搜索但没有找到原因和解决方案。有没有人遇到过这个错误或知道原因?这个问题有什么解决办法吗?顺便说一句,我没有 KMS 加密,但此时只是打开了 S3-SSE。

profile picture
EXPERTE
gefragt vor 6 Monaten13 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 感谢您分享查询ID。

在注册Lake Formation路径时,我们会授予“数据位置”到需要访问注册位置的LF管理表的角色的路径权限。

查看提供的Athena查询ID的S3日志,认证过程类似于使用Lake Formation注册位置[1]。该过程如下:

  1. 一个主体在Athena中运行“SELECT”查询。
  2. Athena分析查询并检查Lake Formation权限,以查看主体是否已被授予访问表和表列的权限。
  3. 如果主体具有访问权限,Athena会从Lake Formation请求凭证。如果主体没有访问权限,Athena会发出访问被拒绝的错误。
  4. Lake Formation向Athena发出凭证,用于读取Amazon S3中的数据,以及允许的列列表。
  5. Athena使用Lake Formation临时凭据从Amazon S3查询数据。查询完成后,Athena会丢弃凭证。

现在,回答您的问题-共享的查询ID的错误是由Lake Formation末端缺少s3:ListBucket权限造成的。

尽管目前正在检查您使用的角色,但我可以看到Athena所假设的角色(AWSServiceRoleForLakeFormationDataAccess)具有S3路径(s3://xxxx-xxxxx-xxxx-xxx-us-east-1-123456789000/xxxxxx_xxxxx)的权限,因此在我撰写本文时,您不应该再遇到此错误。

一旦您将S3存储桶(xxxx-xxxxx-xxxx-xxx-us-east-1-123456789000)注册到Lake Formation中,它将自动更新您的角色(AWSServiceRoleForLakeFormationDataAccess)中缺少的权限(在您的情况下为s3:ListBucket)。

话虽如此,我建议您在通过Terraform进行部署时

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen