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
专家
已提问 5 个月前8 查看次数
1 回答
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
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则