求助:配置S3 Bucket Policy实现同IAM角色下EC2实例的差异化访问
正确的S3桶策略配置方案
原策略失效的核心问题是依赖EC2实例的IP地址做权限控制——EC2实例的公网/内网IP可能随重启、配置变更发生变化,IP填写错误也会导致逻辑混乱。更可靠的方式是直接用EC2实例的ARN(唯一固定标识)区分InstanceA和InstanceB。
以下是调整后的有效策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowInstanceAAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::211125774119:role/s3-it-role" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::classic", "arn:aws:s3:::classic/*" ], "Condition": { "StringEquals": { "aws:SourceInstanceARN": "arn:aws:ec2:你的区域ID:211125774119:instance/InstanceA的实例ID" } } }, { "Sid": "DenyInstanceBAccess", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::211125774119:role/s3-it-role" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::classic", "arn:aws:s3:::classic/*" ], "Condition": { "StringEquals": { "aws:SourceInstanceARN": "arn:aws:ec2:你的区域ID:211125774119:instance/InstanceB的实例ID" } } } ] }
配置说明:
- 替换
你的区域ID为EC2实例所在AWS区域(比如us-east-1、cn-north-1) - 替换
InstanceA的实例ID和InstanceB的实例ID为对应EC2实例的实际ID(格式类似i-0abcdef1234567890) - 第一条规则仅允许绑定
s3-it-role角色的请求来自InstanceA时,对classic桶执行所有S3操作 - 第二条规则明确拒绝绑定该角色的请求来自InstanceB时,对桶的所有操作
验证步骤:
- 保存策略并应用到
classic桶 - 在InstanceA上执行S3操作(比如
aws s3 ls s3://classic),确认可正常访问 - 在InstanceB上执行相同操作,确认返回访问拒绝错误
内容的提问来源于stack exchange,提问作者Kotesh Ushkamalla
相关产品推荐
相关产品推荐

