微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不同账户中执行 Athena 查询后无法查看 S3 存储桶中的结果?

如何解决在不同账户中执行 Athena 查询后无法查看 S3 存储桶中的结果?

我有两个帐户:帐户 A 和帐户 B。

我正在账户 A 中执行 Athena 查询,并希望将查询结果填充到账户 B 的 S3 存储桶中。

我已经在单个帐户中测试了无数次执行此操作的脚本,因此知道我的代码没有问题。 Athena 中的查询历史也表明我的代码运行成功,所以肯定是权限问题。

我可以在账户 B 中看到一个包含 CSV 文件的对象(如预期),但由于某种原因无法打开或下载它以查看内容。当我尝试这样做时,我只看到 XML 代码

<Code>AccessDenied</Code>
<Message>Access Denied</Message>

文件属性中,我看到 UnkNown ErrorServer-side encryption settings 下的 You don't have permission to get object ACL 带有一条关于不允许 s3:GetobjectAcl 操作的消息。

我已尝试通过账户 B 中的存储桶策略为账户 A 和账户 B 授予完整的 S3 权限,如下所示:

{
  "Version": "2012-10-17","Statement": [
    {
      "Sid": "This is for Account A","Effect": "Allow","Principal": {
        "AWS": "arn:aws:iam::iam-number-account-a:root"
      },"Action": "s3:*","Resource": [
        "arn:aws:s3:::my-bucket-name","arn:aws:s3:::my-bucket-name/*"
      ]
    },{
      "Sid": "This is for Account B","Principal": {
        "AWS": "arn:aws:iam::iam-number-account-b:root"
      },"arn:aws:s3:::my-bucket-name/*"
      ]
    }
  ]
}

可能导致我的问题的一些其他存储桶(帐户 B)配置设置:

  • 认加密:已禁用

  • 阻止公共访问:关闭所有内容

  • 对象所有权:首选存储桶所有者

  • 访问控制列表:

存储桶所有者 - 账户 B:对象(列表、写入)、存储桶 ACL(读取、写入)

外部账户 - 账户 A:对象(写入)、存储桶 ACL(写入)

如果有人能帮助确定我的问题以及我需要解决的问题,我们将不胜感激。几个小时以来,我一直在努力寻找解决方案。

解决方法

在属于不同 AWS 账户的 Amazon S3 存储桶中创建对象时的一个常见问题是对象“所有者”仍然是原始账户。在 Amazon S3 中复制对象时,可以通过指定 ACL=bucket-owner-full-control 来解决此问题。

但是,这在使用 Amazon Athena 创建文件时可能是不可能的。

查看其他类似的 StackOverflow 问题:

一些解决方法可能是:

  • 写入账户 A 中的 S3 存储桶并使用存储桶策略授予对账户 B 的读取访问权限,
  • 写入账户 A 中的 S3 存储桶并让 S3 触发 AWS Lambda 函数,该函数将对象复制到账户 B 中的存储桶,同时指定 ACL=bucket-owner-full-control
  • 向账户 B 中的 IAM 用户或角色授予对源数据的访问权限,并从账户 B 运行 Athena 查询,以便账户 B 写入“输出”存储桶
,

CTAS 查询默认具有 bucket-owner-full-control ACL,用于通过 Athena 进行跨账户写入

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?