返回更新列表
新发布Sep 5, 2026

cloud-custodian v0.9.52.0

用于云安全、成本优化和治理的规则引擎,使用YAML DSL编写策略,以查询、过滤并对资源采取行动。

分享

Cloud Custodian (c7n)

Cloud Custodian Logo


slack CI CII Best Practices

Cloud Custodian(又称 c7n)是一个用于管理公有云账户和资源的规则引擎。它允许用户定义策略,以实现一个既安全又成本优化的良好管理云基础设施。它将组织中许多临时脚本整合到一个轻量级且灵活的工具中,并提供统一的指标和报告。

Custodian 可用于管理 AWS、Azure 和 GCP 环境,通过确保对安全策略(如加密和访问要求)、标签策略以及通过垃圾回收未使用资源和非工作时间资源管理来降低成本,实现实时合规。

Custodian 还支持对基础设施即代码资产运行策略,以便直接在开发者工作站或 CI 管道中提供反馈。

Custodian 策略以简单的 YAML 配置文件编写,使用户能够对特定资源类型(EC2、ASG、Redshift、CosmosDB、PubSub 主题)指定策略,并通过一组过滤器和动作的词汇表构建策略。

它与各云提供商的云原生无服务器能力集成,通过内置的预置功能提供实时策略执行。或者也可以作为服务器上的简单 cron 作业运行,以针对现有的大规模资源集执行。

Cloud Custodian 是一个 CNCF 孵化项目,由数百名贡献者组成的社区领导。

特性

  • 全面支持公有云服务和资源,提供丰富的动作和过滤器库来构建策略。
  • 对基础设施即代码资产(terraform 等)运行策略。
  • 支持使用嵌套布尔条件对资源进行任意过滤。
  • 对任何策略进行预运行,以查看其将要执行的操作。
  • 自动预置无服务器函数和事件源(AWS CloudWatchEvents、AWS Config Rules、Azure EventGrid、GCP AuditLog 和 Pub/Sub 等)。
  • 云提供商原生指标输出,显示与策略匹配的资源。
  • 结构化输出到云原生对象存储,记录哪些资源与策略匹配。
  • 智能缓存使用,最大限度地减少 API 调用。
  • 支持多账户/订阅/项目使用。
  • 经过实战检验——已在一些非常大的云环境中投入生产。

链接

快速安装

Custodian 发布在 PyPI 上,作为一系列以 c7n 为前缀的包。也可以作为 Docker 镜像使用。

$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n

使用

使用 Cloud Custodian (c7n) 的第一步是编写一个包含要运行策略的 YAML 文件。每个策略指定策略将运行的资源类型、控制哪些资源将受此策略影响的一组过滤器、策略将对匹配资源执行的动作,以及控制策略执行方式的模式。

最佳入门指南是云提供商特定的教程。

以下是针对 AWS 资源的一些示例策略快速演示。

  1. 将强制要求没有 S3 存储桶启用跨账户访问。
  2. 将终止任何新启动的没有加密 EBS 卷的 EC2 实例。
  3. 将为任何没有 "Environment"、"AppId" 以及 "OwnerContact" 或 "DeptID" 标签的 EC2 实例打上标签,使其在四天后停止。
policies:
 - name: s3-cross-account
   description: |
     检查 S3 存储桶是否存在跨账户访问,
     并移除跨账户访问。
   resource: aws.s3
   region: us-east-1
   filters:
     - type: cross-account
   actions:
     - type: remove-statements
       statement_ids: matched

 - name: ec2-require-non-public-and-encrypted-volumes
   resource: aws.ec2
   description: |
     预置一个 Lambda 和 CloudWatch 事件目标,
     用于查看所有新实例并终止那些
     具有未加密卷的实例。
   mode:
    type: cloudtrail
    role: CloudCustodian-QuickStart
    events:
      - RunInstances
   filters:
    - type: ebs
      key: Encrypted
      value: false
   actions:
    - terminate

 - name: tag-compliance
   resource: aws.ec2
   description: |
     将不符合标签合规策略的资源安排在四天后停止。请注意,需要一个单独的策略使用 `marked-for-op` 过滤器来实际在四天后停止实例。
   filters:
    - State.Name: running
    - "tag:Environment": absent
    - "tag:AppId": absent
    - or:
      - "tag:OwnerContact": absent
      - "tag:DeptID": absent
   actions:
    - type: mark-for-op
      op: stop
      days: 4

你可以使用以下命令验证、测试和运行 Cloud Custodian 及示例策略:

# 验证配置(注意:运行时会默认执行此操作)
$ custodian validate policy.yml

# 对策略进行预运行(不执行动作),查看哪些资源
# 匹配每个策略。
$ custodian run --dryrun -s out policy.yml

# 运行策略
$ custodian run -s out policy.yml

你也可以通过 Docker 运行 Cloud Custodian:

# 下载镜像
$ docker pull cloudcustodian/c7n
$ mkdir output

# 运行策略
#
# 此命令仅使用环境变量进行身份验证来运行策略
$ docker run -it \
  -v $(pwd)/output:/home/custodian/output \
  -v $(pwd)/policy.yml:/home/custodian/policy.yml \
  --env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE") \
  cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml

# 运行策略(使用 AWS 的 STS 生成的凭证)
#
# 注意:我们将 ``.aws/credentials`` 和 ``.aws/config`` 目录挂载到
# Docker 容器,以支持使用与本地用户相同的凭证进行 AWS 身份验证
# 如果使用 STS 进行身份验证。

$ docker run -it \
  -v $(pwd)/output:/home/custodian/output \
  -v $(pwd)/policy.yml:/home/custodian/policy.yml \
  -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \
  -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \
  --env-file <(env | grep "^AWS") \
  cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml

custodian cask 工具 是一个 Go 二进制文件,提供了透明的 Docker 前端,镜像了常规 custodian CLI,但自动处理卷挂载。

请查阅文档以获取更多信息,或在 Gitter 上联系我们。

云提供商特定帮助

有关 AWS、Azure 和 GCP 的具体说明,请访问相应的入门页面。

参与进来

  • GitHub - (本页面)
  • Slack - 如果你需要帮助或想为 Custodian 做贡献,这里是实时聊天!
    • Gitter - (较旧的实时聊天,我们可能正在迁移离开它)
  • Linen.dev - 在 Linen 上关注我们的讨论
  • 邮件列表 - 我们的项目邮件列表,请在此处订阅以获取重要的项目公告;欢迎提问
  • Reddit - 我们的子版块
  • StackOverflow - 开发者的问答网站,我们关注 cloudcustodian 标签
  • YouTube 频道 - 我们正在添加教程和其他有用信息,以及会议视频

社区资源

我们定期举行社区会议,对所有用户和开发者开放,无论技术水平如何。 加入邮件列表将自动向你发送会议邀请。 有关加入会议的更多技术信息,请参阅下面的说明。

额外工具

Custodian 项目还在以下位置开发和维护一套额外工具: https://github.com/cloud-custodian/cloud-custodian/tree/main/tools

  • Org: 多账户策略执行。

  • ShiftLeft: 左移 ~ 对基础设施即代码资产(如 terraform)运行策略。

  • PolicyStream: 将 Git 历史视为逻辑策略变更流。

  • Salactus: 扩展 S3 扫描。

  • Mailer: 向用户发送消息以通知他们的参考实现。

  • Trail Creator: 从 CloudTrail 追溯标记资源创建者。

  • TrailDB: Cloudtrail 索引和用于仪表板的时间序列生成。

  • LogExporter: 将 CloudWatch 日志导出到 S3。

  • Cask: 通过 Docker 轻松执行 custodian。

  • Guardian: 自动化多账户 Guard Duty 设置。

  • Omni SSM: EC2 Systems Manager 自动化。

  • Mugc: 用于清理 AWS 环境中部署的 Cloud Custodian Lambda 策略的工具。

贡献

参见 https://cloudcustodian.io/docs/contribute.html

安全

如果你发现了与安全相关的问题、漏洞或 Cloud Custodian 的潜在漏洞,请通过电子邮件向 Custodian 安全团队 提供漏洞详情。我们将发送确认邮件以确认收到你的报告,并在我们确定问题的正负面后,再发送一封附加邮件。

行为准则

本项目遵循 CNCF 行为准则

参与即表示你同意遵守此准则。

分类