关于 aws-cloudformation-iam
aws-cloudformation-iam 是面向 AWS 与 CloudFormation 使用者的 IAM 安全建模技能,涵盖角色、策略边界和跨账户访问。重点是分离信任与权限策略,并以最小权限和可审计性组织配置。
主要功能
- 01分离信任策略与权限策略
- 02优先使用 IAM 角色
- 03收紧操作、资源和条件范围
- 04应用权限边界
- 05验证模板并预览变更
适用场景
- 01为 Lambda、ECS 或 EC2 建立服务角色
- 02配置受约束的跨账户角色访问
- 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.mdreferences/reference.md
相关技能
aws-cloudformation-securityaws-cloudformation-ec2aws-cloudformation-ecsaws-cloudformation-lambda
评论
支持 Markdown