Cloud Custodian - 策略规则引擎
项目描述
Cloud Custodian (c7n)
Cloud Custodian(也称为c7n)是一个用于管理公共云账户和资源的规则引擎。它允许用户定义策略,以实现良好的云基础设施管理,确保既安全又成本优化。它将许多组织拥有的临时脚本整合为一个轻量级且灵活的工具,具有统一的指标和报告。
Custodian可以通过确保实时符合安全策略(如加密和访问要求)、标签策略以及通过垃圾收集未使用资源和非高峰时段资源管理来实现对AWS、Azure和GCP环境的监控。
Custodian还支持在基础设施即代码资产上运行策略,以直接在开发工作站的CI管道中提供反馈。
Custodian策略是用简单的YAML配置文件编写的,用户可以指定资源类型(EC2、ASG、Redshift、CosmosDB、PubSub Topic)上的策略,并从一组过滤器和动作词汇中构建。
它可以与每个提供商的云原生无服务器功能集成,以提供具有内置配置的实时策略强制执行。或者,它可以在服务器上作为一个简单的cron作业运行,以针对大型现有舰队执行。
Cloud Custodian是一个CNCF孵化项目,由数百名贡献者领导。
功能
- 对公共云服务和资源提供全面支持,具有丰富的动作和过滤器库,可用于构建策略。
- 在基础设施即代码(Terraform等)资产上运行策略。
- 支持对资源进行任意过滤,具有嵌套布尔条件。
- 可以干运行任何策略,以查看它会做什么。
- 自动配置无服务器函数和事件源(AWS CloudWatchEvents、AWS Config Rules、Azure EventGrid、GCP AuditLog & Pub/Sub等)
- 在匹配策略的资源上提供云提供商原生指标输出
- 将结构化输出到匹配策略的资源云原生对象存储中
- 智能缓存使用,以最小化API调用。
- 支持多账户/订阅/项目使用。
- 经过实战检验 - 在一些非常大的云环境中投入生产。
链接
快速安装
Custodian作为一系列带有c7n
前缀的包发布在pypi上,它也可以作为Docker镜像使用。
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
用法
使用Cloud Custodian(c7n)的第一步是编写一个包含您要运行的策略的YAML文件。每个策略指定策略将运行的资源类型、一组控制哪些资源将受此策略影响的过滤器、策略将对匹配资源采取的操作以及控制策略如何执行的模式。
最佳入门指南是针对特定云提供商的教程。
作为一个快速入门,以下是AWS资源的策略示例。
- 将强制执行没有启用跨账户访问的S3存储桶。
- 将终止任何没有加密EBS卷的新启动EC2实例。
- 将标记任何没有以下标记“环境”、“AppId”以及“OwnerContact”或“DeptID”的EC2实例,以在四天后停止。
policies:
- name: s3-cross-account
description: |
Checks S3 for buckets with cross-account access and
removes the cross-account access.
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: |
Provision a lambda and cloud watch event target
that looks at all new instances and terminates those with
unencrypted volumes.
mode:
type: cloudtrail
role: CloudCustodian-QuickStart
events:
- RunInstances
filters:
- type: ebs
key: Encrypted
value: false
actions:
- terminate
- name: tag-compliance
resource: aws.ec2
description: |
Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.
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的示例策略
# Validate the configuration (note this happens by default on run)
$ custodian validate policy.yml
# Dryrun on the policies (no actions executed) to see what resources
# match each policy.
$ custodian run --dryrun -s out policy.yml
# Run the policy
$ custodian run -s out policy.yml
您也可以通过Docker运行Cloud Custodian
# Download the image
$ docker pull cloudcustodian/c7n
$ mkdir output
# Run the policy
#
# This will run the policy using only the environment variables for authentication
$ 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
# Run the policy (using AWS's generated credentials from STS)
#
# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to
# the docker container to support authentication to AWS using the same credentials
# credentials that are available to the local user if authenticating with 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二进制文件,它提供了一个透明的前端,反映了常规的custodian cli,但自动处理挂载卷。
查阅文档以获取更多信息,或在gitter上联系。
云服务提供商特定帮助
有关AWS、Azure和GCP的特定说明,请访问相关的入门页面。
参与进来
- GitHub - (本页)
- Slack - 如果您需要帮助或想要为Custodian做出贡献,请加入实时聊天!
- Gitter - (较旧的实时聊天,我们可能正在迁移)
- Linen.dev - 关注我们在Linen上的讨论
- 邮件列表 - 我们的项目邮件列表,在此订阅以获取重要项目公告,欢迎提问
- Reddit - 我们的subreddit
- StackOverflow - 开发者的问答网站,我们关注
cloudcustodian
标签 - YouTube频道 - 我们正在添加教程和其他有用信息,以及会议视频
社区资源
我们有一个面向所有用户和不同技能水平的开发者的定期社区会议。加入邮件列表会自动发送会议邀请。以下是一些关于加入会议的更多技术信息。
- 社区会议视频
- 社区会议记录存档
- 即将到来的社区活动
- Cloud Custodian年度报告2021 - 为CNCF提供的年度健康检查,概述了项目的健康状况
其他工具
Custodian项目还开发和维护了一套额外的工具,请访问https://github.com/cloud-custodian/cloud-custodian/tree/master/tools
-
Org: 多账户策略执行。
-
ShiftLeft: 左移 ~ 对基础设施即代码资产(如terraform)运行策略。
-
PolicyStream: Git历史作为逻辑策略更改的流。
-
Salactus: 扩展S3扫描。
-
Mailer: 向用户发送消息以通知他们的参考实现。
-
Trail Creator: 从CloudTrail对资源创建者进行追溯标记。
-
TrailDB: 为仪表板生成云轨迹索引和时间序列。
-
LogExporter: 将云监控日志导出到S3。
-
Cask: 通过Docker轻松执行Custodian。
-
Guardian: 自动设置多账户Guard Duty。
-
Omni SSM: EC2系统管理器自动化。
-
Mugc: 用来清理在AWS环境中部署的Cloud Custodian Lambda策略的实用工具。
贡献
请参阅https://cloudcustodian.io/docs/contribute.html
安全
如果您在Cloud Custodian中发现与安全相关的问题、漏洞或潜在漏洞,请通过详细信息告知Cloud Custodian安全团队。我们将发送确认电子邮件以确认您的报告,并在我们确定问题是否正面的情况下发送额外电子邮件。
行为准则
本项目遵循CNCF 行为准则。
参与本项目时,您需遵守此准则。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。