You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从AWS账户A的Athena控制台指定账户B的S3桶为查询结果位置?

跨AWS账户将Athena查询结果存储到S3桶的实现方案

要实现从账户A的Athena控制台把查询结果存到账户B的S3桶,核心是做好桶策略+IAM权限的配合,别搞复杂的跨账户角色切换,按以下步骤来:

1. 配置账户B的S3桶策略

登录账户B的AWS控制台,找到目标S3桶,添加桶策略,允许账户A中执行Athena查询的身份(比如你登控制台用的IAM用户/角色)往桶内写数据、查看桶内容。示例策略如下,记得替换占位符:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::账户A-ID:user/你的控制台用户名"
        // 若用IAM角色,替换为arn:aws:iam::账户A-ID:role/角色名
      },
      "Action": [
        "s3:PutObject",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::目标桶名",
        "arn:aws:s3:::目标桶名/*"
      ]
    }
  ]
}

另外检查桶的阻止公共访问设置,别开启“阻止跨账户访问”(如果开了,要么关掉,要么在桶策略里添加对应例外)。

2. 配置账户A的IAM权限

登录账户A的控制台,找到你用来执行Athena查询的IAM身份(用户/角色),附加以下权限策略,确保它能访问目标桶:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::目标桶名",
        "arn:aws:s3:::目标桶名/*"
      ]
    },
    // 保留Athena基础权限,按需调整
    {
      "Effect": "Allow",
      "Action": [
        "athena:StartQueryExecution",
        "athena:GetQueryResults",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": "*"
    }
  ]
}

3. 设置Athena查询结果位置

回到账户A的Athena控制台,在“设置”里把查询结果位置改成:
s3://目标桶名/任意子路径/
注意不要加账户ID——S3桶名是全局唯一的,额外加账户ID会导致路径识别错误,这也是你之前报错的原因之一。

常见问题排查

如果还是出现“Unable to verify/create output bucket”,检查这几点:

  • 桶策略里的Principal是否写错,比如账户ID、用户/角色ARN有没有拼写错误
  • 账户A的IAM权限是否覆盖了目标桶的PutObject和ListBucket操作
  • 目标桶是否开启版本控制?如果是,需要在权限里添加s3:PutObjectVersion(一般场景不需要,除非强制要求版本控制)
  • 目标桶是否用了自定义KMS密钥加密?如果是,要确保账户A的身份有访问该KMS密钥的权限

内容的提问来源于stack exchange,提问作者Jeremy Fisher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:42:45