AWS S3存储桶策略无法拒绝EC2实例上传的原因排查
S3存储桶策略无法阻止EC2上传的原因及解决办法
核心问题:你错误指定了请求主体(Principal)
当SSH登录EC2后用aws s3 cp text.txt s3://bucket-name上传时,发起请求的身份是EC2实例关联的IAM角色(或你手动配置的IAM用户),而非EC2服务本身(ec2.amazonaws.com)。你当前策略里指定的Principal: Service: ec2.amazonaws.com,只会匹配EC2服务直接发起的请求(比如系统级的实例备份操作),完全覆盖不到你通过CLI发起的用户/角色请求,所以策略根本不会触发。正确的配置方式
针对实际发起请求的IAM身份配置Deny策略,两种常用方案:- 修改存储桶策略:将Principal替换为目标IAM角色/用户的ARN,同时缩小Action范围(只限制上传用
s3:PutObject即可):{ "Version": "2012-10-17", "Id": "Policy1668560706336", "Statement": [ { "Sid": "Stmt1668560704089", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::你的账户ID:role/EC2实例关联的角色名" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/*" } ] } - 直接修改EC2的IAM角色:给实例关联的IAM角色添加内联Deny策略,效果相同:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/*" } ] }
- 修改存储桶策略:将Principal替换为目标IAM角色/用户的ARN,同时缩小Action范围(只限制上传用
额外提醒
- 如果是在EC2上手动用
aws configure设置了IAM用户凭证,那存储桶策略的Principal要换成该IAM用户的ARN。 - Deny策略优先级高于所有Allow权限,只要配置正确,一定会生效。
- 如果是在EC2上手动用
内容的提问来源于stack exchange,提问作者Christos Dragios
相关产品推荐
相关产品推荐

