mcpField
A
aws-cloudformation-iam

aws-cloudformation-iam

github.com/giuseppe-trisciuoglio安全36565 次安装7 周前更新
代码仓库

关于 aws-cloudformation-iam

aws-cloudformation-iam 是面向 AWS 与 CloudFormation 使用者的 IAM 安全建模技能,涵盖角色、策略边界和跨账户访问。重点是分离信任与权限策略,并以最小权限和可审计性组织配置。

主要功能

  1. 01分离信任策略与权限策略
  2. 02优先使用 IAM 角色
  3. 03收紧操作、资源和条件范围
  4. 04应用权限边界
  5. 05验证模板并预览变更

适用场景

  1. 01为 Lambda、ECS 或 EC2 建立服务角色
  2. 02配置受约束的跨账户角色访问
  3. 03审查通配符权限与权限边界

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill aws-cloudformation-iam

安装后在 Claude Code 中输入/aws-cloudformation-iam确认已加载。

附带文件references/examples.mdreferences/reference.md

详细介绍

AWS CloudFormation IAM 安全性

概述

使用此技能,通过 CloudFormation 建模 IAM,确保设计安全、可审计且易于维护。

最重要的设计要点包括:

  • 将信任策略与权限策略分开
  • 尽可能优先使用角色,而不是长期有效的用户
  • 让最小权限边界清晰易读且可复用

不要将 SKILL.md 视为完整的 IAM 百科全书。更复杂的策略示例和特定服务的变体请参阅随附参考资料。

适用场景

  • 为 Lambda、ECS、EC2、Step Functions 或其他 AWS 服务创建 IAM 角色
  • 在 CloudFormation 中定义内联策略、托管策略和权限边界
  • 使用受约束的信任策略建模跨账户 AssumeRole 访问
  • 将 IAM 角色 ARN 或托管策略 ARN 导出到下游堆栈
  • 审查通配符权限、权限边界漂移或角色替换风险
  • 为平台或应用团队创建可复用的 IAM 堆栈

说明

1. 首先定义信任边界

确定谁或什么会代入该角色(服务主体、跨账户主体或联合身份),然后先编写包含明确主体和条件的信任策略,再添加权限。

2. 授予最少权限

角色专属访问使用内联策略;多个主体共享的模式使用托管策略。严格限定操作和资源,并尽可能使用条件。

3. 为委派的角色创建应用权限边界

当团队在自己的堆栈中创建或扩展角色、需要为特权服务(IAM、KMS、Organizations)设置护栏,或需要将允许的最大权限与应用专属策略分开时,请使用权限边界。

统一命名角色和策略,以便轻松追踪堆栈输出并进行审计。

4. 建模跨账户访问

对于跨账户角色:仅信任确切的源账户或主体;适当时添加 sts:ExternalId 条件;将权限策略与信任策略分开;只导出使用方账户所需的 ARN。

5. 验证模板和策略行为

部署前,使用以下命令验证模板和 IAM 行为:

# Validate CloudFormation template syntax
aws cloudformation validate-template --template-body file://template.yaml

# Preview changes before applying
aws cloudformation create-change-set \
  --stack-name <stack-name> \
  --template-body file://template.yaml \
  --change-set-type CREATE

# Simulate whether a principal can perform specific actions
aws iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::123456789012:role/LambdaExecutionRole \
  --action-names dynamodb:GetItem dynamodb:PutItem

# Check for wildcards in IAM policies within the template
aws cloudformation list-stack-resources --stack-name <stack-name>

部署后,确认策略关联和堆栈输出符合预期的安全模型。

示例

示例 1:权限范围严格限定的 Lambda 服务角色
Resources:
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: DynamoDbWritePolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - dynamodb:GetItem
                  - dynamodb:PutItem
                Resource: !GetAtt OrdersTable.Arn
示例 2:带外部 ID 条件的跨账户角色
Resources:
  PartnerReadRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              AWS: arn:aws:iam::123456789012:role/partner-reader
            Action: sts:AssumeRole
            Condition:
              StringEquals:
                sts:ExternalId: partner-contract-001

保持信任关系的范围严格限定,并为其配套单独的只读权限策略。

最佳实践

  • 应用和自动化访问优先使用 IAM 角色,而不是长期有效的 IAM 用户。
  • 审查或重构模板时,将信任策略与权限策略分开。
  • 将角色创建工作委派给其他团队时,使用权限边界。
  • 根据工作负载需求,尽可能严格地限定资源、操作和条件。
  • 只有在其他堆栈确实需要使用时,才导出稳定的 ARN 和名称。
  • 将展开后的策略库和边缘案例放在 references/ 中,避免根技能文件过于臃肿。

限制和警告

  • IAM 中过于宽泛的通配符很容易部署,之后却难以察觉。
  • 一旦其他系统依赖命名的 IAM 资源,就可能很难安全地替换它们。
  • 在 AWS 服务之间的最终一致性生效之前,CloudFormation 中的 IAM 更改可能看似已成功。
  • 某些 Identity Center 或组织范围的访问模式需要借助单个 CloudFormation 堆栈之外的配套工具。
  • 配置错误的信任策略通常比缺少权限带来的风险更大。

参考资料

  • references/examples.md
  • references/reference.md

相关技能

  • aws-cloudformation-security
  • aws-cloudformation-ec2
  • aws-cloudformation-ecs
  • aws-cloudformation-lambda

评论

支持 Markdown