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

跨账号S3访问权限拒绝:EC2实例访问其他账号S3失败排查

问题诊断与修复方案

一、命令执行核心错误

你执行的S3命令格式错误,且未切换到目标跨账号角色:

  • 错误命令:aws s3 ls //test-sample-bucket,正确格式应为 aws s3 ls s3://test-sample-bucket
  • 关键问题:EC2实例默认使用AccountB的ec2_role,该角色仅拥有sts:AssumeRole权限,没有直接访问AccountA桶的权限。必须先切换到AccountA的cross_account_access_role才能执行操作。

正确的命令执行方式:
直接在S3命令中指定跨账号角色:

aws s3 ls s3://test-sample-bucket --role-arn arn:aws:iam::AAAAAAAAAA:role/cross_account_access_role --role-session-name test-session

或者先通过STS获取临时凭证并配置环境变量后再执行S3命令。

二、AccountA桶策略缺失关键配置

当前AccountA的桶策略未指定Principal字段,导致策略完全无效。桶策略必须明确授权对象,修改后的桶策略应指定AccountB的角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::BBBBBBBBBB:role/ec2_role"
      },
      "Action": ["s3:*"],
      "Resource": [
        "arn:aws:s3:::test-sample-bucket",
        "arn:aws:s3:::test-sample-bucket/*"
      ]
    }
  ]
}

三、AccountA跨账号角色的权限策略冗余

你将桶策略直接附加到cross_account_access_role属于冗余操作,IAM角色的权限策略应直接定义允许的S3操作,简化后的角色权限策略如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": [
        "arn:aws:s3:::test-sample-bucket",
        "arn:aws:s3:::test-sample-bucket/*"
      ]
    }
  ]
}

注:你当前的角色信任策略是正确的,无需修改

四、角色名称不匹配导致信任失败

在AccountA的信任策略中,指定的Principal是arn:aws:iam::BBBBBBBBBB:role/test_ec2_role,但你在AccountB实际创建的角色名为ec2_role,名称完全不匹配!这会直接导致无法AssumeRole,必须二选一修正:

  • 将AccountB的角色名改为test_ec2_role
  • 修改AccountA信任策略中的Principal为arn:aws:iam::BBBBBBBBBB:role/ec2_role

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:35