如何编写IAM策略让Dev环境EC2仅访问带dev前缀的S3存储桶?
限制Dev环境EC2访问前缀为
dev-的S3存储桶的IAM策略方案 先明确:s3:prefix这个条件确实仅作用于存储桶内的对象路径前缀,而非存储桶名称本身。要实现仅允许Dev环境EC2访问名称以dev-开头的S3桶,需要通过资源匹配+条件判断结合实现。
核心思路
- 匹配所有名称以
dev-开头的存储桶及其内部所有对象 - 限制仅允许Dev环境VPC内的EC2实例发起请求
- 确保仅访问本账号下的存储桶,避免跨账号误操作
完整IAM策略示例
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::dev-*", "arn:aws:s3:::dev-*/*" ], "Condition": { "StringEquals": { "aws:SourceVpc": "vpc-xxxxxx", // 替换为你的Dev环境VPC ID "aws:ResourceAccount": "123456789012" // 替换为你的AWS账号ID } } } ] }
策略细节说明
- 资源配置:
arn:aws:s3:::dev-*匹配所有名称以dev-开头的存储桶;arn:aws:s3:::dev-*/*匹配这些桶内的所有对象。 - 条件限制:
aws:SourceVpc:仅允许来自指定Dev环境VPC的请求,直接排除Test环境EC2的访问权限。aws:ResourceAccount:确保仅能访问本账号下的存储桶,防止恶意利用通配符访问其他账号的同名前缀桶。
- 动作列表:根据实际业务需求调整允许的S3操作,比如仅需读权限时,保留
GetObject和ListBucket即可,移除写/删操作。
额外注意事项
- 需将该策略关联到Dev环境EC2实例绑定的IAM角色上,且EC2实例必须处于指定的Dev VPC内。
- 若需更精细的对象访问控制(比如仅允许访问桶内特定路径),可在资源中添加路径匹配,例如
arn:aws:s3:::dev-*/data/*。
内容的提问来源于stack exchange,提问作者J R
相关产品推荐
相关产品推荐

