You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建仅允许通过CloudFormation创建AWS资源的IAM策略与角色?

仅允许通过CloudFormation创建资源的AWS策略与角色实现方案

这是个非常典型的合规管控需求,我来分享一套经过生产环境验证的最优实现方案——核心是利用AWS IAM的条件键精准限制操作发起方,确保只有CloudFormation能创建资源,彻底阻断控制台的直接操作。

1. 编写核心IAM权限策略

这个策略的核心逻辑是:仅允许当请求由CloudFormation发起时,执行指定的资源创建/管理操作,所有其他场景(包括控制台手动操作)都会因为IAM默认的拒绝规则而被阻断。

下面是一个示例策略(你可以根据实际需要调整资源和操作范围):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances",
                "s3:CreateBucket",
                "lambda:CreateFunction",
                // 这里添加你需要CloudFormation管理的所有资源操作
                "cloudformation:*" // 允许CloudFormation自身的栈操作
            ],
            "Resource": "*", // 建议根据实际需求缩小资源范围,比如指定特定S3桶前缀、EC2实例类型等
            "Condition": {
                "StringEquals": {
                    "aws:CalledVia": "cloudformation.amazonaws.com"
                }
            }
        }
    ]
}

关键细节说明

  • aws:CalledVia条件键:这个键会记录请求的发起服务,当CloudFormation调用其他AWS服务API时,该值会被设为cloudformation.amazonaws.com,完美区分控制台手动操作(控制台操作的aws:CalledVia不会包含这个值)。
  • 最小权限原则:不要直接用Action: "*",而是明确列出CloudFormation需要执行的具体操作,比如如果只需要创建S3桶,就只保留s3:CreateBucket。
  • 资源范围:尽量缩小Resource的范围,比如指定特定的VPC ARN、S3桶前缀,进一步降低权限风险。

2. 创建IAM角色并关联策略

接下来需要创建一个IAM角色,让CloudFormation可以扮演这个角色来执行资源操作:

2.1 设置信任策略(Trust Policy)

信任策略要允许CloudFormation服务作为主体来扮演该角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudformation.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

2.2 关联权限策略

将第一步编写的权限策略附加到这个角色上。

3. 使用该角色创建CloudFormation栈

当你创建CloudFormation栈时,需要指定这个角色的ARN,确保CloudFormation使用该角色执行操作:

  • AWS CLI命令示例:
aws cloudformation create-stack --stack-name MyRestrictedStack --template-body file://my-template.yaml --role-arn arn:aws:iam::123456789012:role/CloudFormationRestrictedRole
  • 如果用控制台创建栈(注意:这里是创建栈的操作,不是创建底层资源的操作),在“权限”步骤中选择刚才创建的角色即可。

4. 验证效果

  • 允许场景验证:使用上述角色创建CloudFormation栈,应该能成功创建所有指定的资源。
  • 禁止场景验证:尝试直接通过AWS控制台创建资源(比如手动创建S3桶),会收到权限拒绝的错误;用普通IAM用户调用API(不通过CloudFormation)也会被拒绝。

额外注意事项

  • 如果你的CloudFormation模板需要调用其他服务(比如Lambda函数、SNS主题),确保权限策略中包含对应的操作权限。
  • 如果你需要允许特定用户管理CloudFormation栈(比如创建/删除栈),可以单独给这些用户添加cloudformation:*权限,但要注意不要让他们直接操作底层资源。
  • 可以结合AWS Config来监控是否有非CloudFormation创建的资源,作为额外的合规校验层。

内容的提问来源于stack exchange,提问作者Sarang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:37:36