如何配置仅允许AWS内部资源访问的S3专属IAM用户
解决方案:限制IAM用户访问仅允许自身AWS账户内的资源
因为aws:SourceIp不支持私有IP,且无法使用IAM角色,你可以通过基于账户身份的条件判断来实现需求,核心是利用IAM的aws:PrincipalAccount或aws:PrincipalArn条件键,结合允许+拒绝的策略组合精准控制访问范围。
正确的策略配置示例
1. 授予S3基础访问权限
先创建允许该IAM用户访问目标S3桶的策略,按需添加具体操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" // 根据实际需求补充其他S3操作 ], "Resource": [ "arn:aws:s3:::你的存储桶名称", "arn:aws:s3:::你的存储桶名称/*" ] } ] }
2. 添加拒绝策略,阻断外部账户访问
再创建拒绝策略,仅允许自身AWS账户内的资源使用该密钥访问S3:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "*", "Resource": [ "arn:aws:s3:::你的存储桶名称", "arn:aws:s3:::你的存储桶名称/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "你的AWS账户ID" } } } ] }
关键说明
aws:PrincipalAccount会验证请求关联的AWS账户ID,只有来自你指定账户的请求才不会触发拒绝规则。- 需将上述两个策略同时附加到目标IAM用户,实现「允许合法操作+拒绝外部账户使用」的效果。
- 如果需要更精准控制(比如仅允许特定EC2实例、Lambda函数),可结合
aws:SourceArn指定具体资源ARN,示例:"Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:你的区域:你的账户ID:instance/*" } }
内容的提问来源于stack exchange,提问作者gdawgrancid
相关产品推荐
相关产品推荐

