如何配置AWS IAM策略允许CloudFormation执行EC2操作?
解决CloudFormation因源IP限制无法执行EC2操作的问题
我之前处理过类似的问题,你遇到的核心矛盾是:CloudFormation在代你执行EC2操作时,是以服务自身的身份发起请求的,它的源IP是cloudformation.amazonaws.com,而非你的客户端IP 1.2.3.4,导致原有Deny策略误拦截了这些合法调用。
解决方案思路
我们需要调整IAM策略的条件逻辑,区分两种场景:
- 你直接发起的EC2/CloudFormation操作:必须限制在指定IP 1.2.3.4
- CloudFormation代理发起的EC2操作:无需检查源IP,允许正常执行
修改后的IAM策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["ec2:*", "cloudformation:*"], "Resource": "*", "Condition": { "And": [ { "NotIpAddress": { "aws:SourceIp": ["1.2.3.4"] } }, { "NotEquals": { "aws:CalledVia": "cloudformation.amazonaws.com" } } ] } } ] }
策略逻辑解释
And条件组合:只有当两个条件同时满足时,才会触发Deny:- 请求的源IP不是1.2.3.4(
NotIpAddress) - 请求不是由CloudFormation服务代理发起的(
NotEquals: aws:CalledVia)
- 请求的源IP不是1.2.3.4(
aws:CalledVia的作用:AWS会自动为通过服务代理的请求添加这个条件,当CloudFormation调用EC2的RunInstances时,该值会被设为cloudformation.amazonaws.com,从而绕过Deny限制。
额外注意事项
如果你的CloudFormation栈使用了专用服务角色(推荐的最佳实践),请确保该角色拥有足够的EC2操作权限(比如ec2:RunInstances、ec2:CreateVolume等),不过这部分权限配置和当前的源IP限制策略是相互独立的。
内容的提问来源于stack exchange,提问作者Brett
相关产品推荐
相关产品推荐

