Cloud Custodian策略结构详解:以EC2标签合规策略为例
前言
Cloud Custodian作为一款云资源治理工具,其核心功能是通过YAML格式的策略文件对云资源进行管理和操作。本文将深入解析一个典型的EC2标签合规策略,帮助读者理解Cloud Custodian策略文件的结构和工作原理。
策略概述
这个示例策略的主要目标是识别并标记不符合标签要求的EC2实例。具体来说,它会筛选出:
- 正在运行的EC2实例
- 不属于自动伸缩组(ASG)的实例
- 尚未被标记为待操作的实例
- 标签数量少于10个的实例
- 缺少一个或多个必需标签(Owner、CostCenter、Project)的实例
对于符合上述条件的实例,策略会给它们打上特殊标签,指定在4天后执行停止操作。
策略文件结构解析
让我们逐部分分析这个YAML策略文件:
- name: ec2-tag-compliance-mark
resource: ec2
comment: |
标记不符合标签要求的非ASG EC2实例,4天后停止
- name: 策略的唯一标识名称
- resource: 指定策略作用的资源类型,这里是EC2
- comment: 策略的详细描述
过滤器(Filters)详解
过滤器是策略的核心部分,用于筛选出需要操作的资源。这个策略使用了多级过滤:
-
运行状态过滤:
- "State.Name": running
只选择当前正在运行的EC2实例
-
ASG成员过滤:
- "tag:aws:autoscaling:groupName": absent
排除属于自动伸缩组的实例(通过检查缺少ASG特有标签实现)
-
操作状态过滤:
- "tag:c7n_status": absent
排除已经被标记为待操作的实例
-
标签数量过滤:
- type: tag-count
只选择标签数量少于10个的实例
-
必需标签检查:
- or: - "tag:Owner": absent - "tag:CostCenter": absent - "tag:Project": absent
使用逻辑或(or)条件,只要缺少Owner、CostCenter或Project中的任意一个标签,就会被选中
操作(Actions)详解
当资源通过所有过滤器后,将执行指定的操作:
actions:
- type: mark-for-op
tag: c7n_status
op: stop
days: 4
- type: mark-for-op: 这是一个标记操作,用于标记资源以便后续处理
- tag: c7n_status: 使用c7n_status作为标记标签(替代旧的maid_status)
- op: stop: 指定要执行的操作是停止实例
- days: 4: 4天后执行操作
策略执行流程
- 首先筛选出所有正在运行的EC2实例
- 排除属于ASG的实例(因为这些实例通常由ASG管理)
- 排除已经被标记的实例(避免重复操作)
- 检查标签数量(避免对标签过多的实例进行操作)
- 检查是否缺少必需标签
- 对最终筛选出的实例打上标记,计划4天后停止
完整策略上下文
这个标记策略通常是一个三阶段合规管理流程的一部分:
- 标记阶段:本文解析的策略,识别并标记不合规实例
- 验证阶段:在4天内检查标记的实例是否已修正标签
- 执行阶段:对到期仍未修正的实例执行停止操作
最佳实践建议
- 标签命名规范:建议为合规标签建立统一的命名规范
- 宽限期设置:根据业务需求调整days参数,给管理员足够时间修正
- 例外处理:考虑为特殊实例设置例外机制
- 监控与告警:配合监控系统,在标记操作发生时发出告警
通过这种分阶段的策略设计,Cloud Custodian实现了对云资源的渐进式治理,既确保了合规性,又给了管理员足够的响应时间。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考