跨账号假定角色访问S3桶时遇权限拒绝问题排查
跨AWS账号假定角色访问S3桶权限问题
环境配置
- 账号A:ID为
1111,包含名为data的角色 - 账号B:包含名为
lakehouse的S3桶
操作情况
已成功假定data角色,执行aws sts get-caller-identity返回身份ARN为arn:aws:sts::1111:assumed-role/data/AWSCLI-Session。
权限配置
账号B中lakehouse桶的权限策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::lakehouse/*", "arn:aws:s3:::lakehouse" ], "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:sts::1111:assumed-role/data/*" } } } ] }
错误信息
执行aws s3 ls lakehouse时收到报错:
aws s3 ls lakehouse
调用ListObjectsV2操作时出错(AccessDenied):访问被拒绝
问题诊断与解决办法
- 检查账号A的
data角色权限策略
跨账号访问S3需要双向授权:桶策略允许角色访问,同时角色自身必须拥有执行对应操作的权限。确认data角色的权限策略中包含以下语句(可根据实际需求调整操作范围):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::lakehouse", "arn:aws:s3:::lakehouse/*" ] } ] }
排查服务控制策略(SCP)限制
检查账号A和账号B的组织单元(OU)是否有SCP限制了跨账号S3访问。比如账号A的SCP是否禁止访问外部S3资源,或者账号B的SCP是否拒绝非本账号实体的访问请求。验证权限匹配逻辑
虽然桶策略中的StringLike条件arn:aws:sts::1111:assumed-role/data/*看起来能匹配当前会话ARN,但可以尝试将条件改为StringEquals并指定完整的会话ARN进行测试,排除通配符匹配问题:
"Condition": { "StringEquals": { "aws:PrincipalArn": "arn:aws:sts::1111:assumed-role/data/AWSCLI-Session" } }
- 启用调试模式排查细节
执行命令时添加--debug参数,查看完整的请求签名和服务端响应,定位具体的拒绝原因:
aws s3 ls lakehouse --debug
内容的提问来源于stack exchange,提问作者Eyal Solomon
相关产品推荐
相关产品推荐

