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
ESPERTO
posta 6 mesi fa13 visualizzazioni
1 Risposta
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
ESPERTO
con risposta 6 mesi fa

Accesso non effettuato. Accedi per postare una risposta.

Una buona risposta soddisfa chiaramente la domanda, fornisce un feedback costruttivo e incoraggia la crescita professionale del richiedente.

Linee guida per rispondere alle domande