公共S3存储桶跨账号权限问询:账号2用户XYZ能否执行操作?
跨账号S3权限问题解答
答案很明确:AWS账号2的用户XYZ只能执行s3:GetObject(读取对象)操作,无法执行列出桶、上传、删除对象的操作。
原因分析:
AWS的权限判定遵循「默认拒绝,显式允许」的核心规则,且跨账号访问非自有资源时,需要同时满足**身份侧(IAM策略)和资源侧(桶策略)**的双重允许,具体到这个场景:
- 读取对象(s3:GetObject):桶策略已经明确允许所有用户(
Principal: "*")执行这个操作,再加上XYZ的IAM策略也允许该操作,双重允许下这个操作是可行的。 - 列出桶(s3:ListBucket)、上传(s3:PutObject)、删除(s3:DeleteObject):
- XYZ的IAM策略虽然允许这些操作,但这只是账号2给自己用户的授权,相当于“账号2允许你发起这些操作请求”;
- 但目标S3桶的桶策略里,并没有给账号2或XYZ用户授予这些操作的权限,相当于“资源所有者没同意你执行这些操作”;
- 跨账号访问非自有资源时,必须同时获得身份侧和资源侧的允许,所以这些操作会被AWS拒绝。
如果想要让XYZ拥有这些完整权限,需要修改S3桶的桶策略,添加允许账号2(或XYZ用户)执行对应操作的语句,比如:
{ "Version": "2012-10-17", "Id": "Policy1589032691178", "Statement": [ { "Sid": "Stmt1589032265458", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<BUCKET>/*" }, { "Sid": "StmtAllowAccount2Actions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT2_ID:user/XYZ" }, "Action": [ "s3:ListBucket", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::<BUCKET>", "arn:aws:s3:::<BUCKET>/*" ] } ] }
内容的提问来源于stack exchange,提问作者Siddharth Pharate
相关产品推荐
相关产品推荐

