跨AWS账号S3访问:仅靠身份与信任策略可行吗?问题排查
问题解答
这种跨账号访问方式是否可行?
可行。通过IAM角色实现跨账号S3访问是AWS官方支持的方案,无需配置桶策略即可生效,与你参考的官方文档逻辑一致。
当前配置的核心问题
账号B的Root用户缺少
sts:AssumeRole的显式权限
AWS Root用户默认不会自动拥有所有操作的权限,即使账号A的角色信任策略允许Root扮演该角色,账号B的Root用户仍需要显式被允许执行sts:AssumeRole,否则会触发IAM的隐式拒绝规则。可能存在信任策略配置错误
若信任策略中的<account B ID>未替换为实际的12位数字账号ID,或ARN格式有误,会导致信任关系不生效。
修改步骤
1. 为账号B的Root用户添加IAM权限策略
在账号B的IAM控制台中,为Root用户附加以下策略,允许其扮演账号A中的目标角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<账号A的12位ID>:role/<你在账号A创建的角色名称>" } ] }
2. 验证账号A中角色的信任策略
确保信任策略里的Principal是账号B Root用户的正确ARN,替换<实际账号B ID>为真实的12位数字:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<实际账号B ID>:root" }, "Action": "sts:AssumeRole" } ] }
3. 正确执行角色扮演操作
以AWS CLI为例,在账号B的环境中执行以下命令获取临时凭证:
aws sts assume-role --role-arn arn:aws:iam::<账号A ID>:role/<目标角色名> --role-session-name test-cross-account
使用返回的AccessKeyId、SecretAccessKey和SessionToken配置临时凭证,再访问S3:
aws s3 ls s3://connect-to-other-acct
额外建议
尽管用Root用户测试可以生效,但强烈建议遵循AWS最佳实践:在账号B中创建一个普通IAM用户或角色,为其分配sts:AssumeRole权限,再通过该实体扮演账号A的角色,避免直接使用Root账号。
内容的提问来源于stack exchange,提问作者Wilson Anorue
相关产品推荐
相关产品推荐

