【问题标题】:Unable to view results in S3 bucket after executing Athena query in different account?在不同账户中执行 Athena 查询后无法查看 S3 存储桶中的结果?
【发布时间】:2021-07-29 13:12:59
【问题描述】:

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

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

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

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

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

在文件属性中,我在Server-side encryption settingsYou don't have permission to get object ACL 下看到了Unknown Error,并显示了一条关于不允许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",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::iam-number-account-b:root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::my-bucket-name",
        "arn:aws:s3:::my-bucket-name/*"
      ]
    }
  ]
}

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

  • 默认加密:禁用

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

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

  • 访问控制列表:

Bucket Owner - 账户 B:对象(List、Write)、Bucket ACL(Read、Write)

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

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

【问题讨论】:

    标签: amazon-web-services permissions account amazon-s3


    【解决方案1】:

    在属于不同 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 写入“输出”存储桶

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-10
        • 2019-10-06
        • 2019-08-26
        • 2020-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多