Назад к обновлениям
New releaseSep 5, 2026

cloud-custodian v0.9.52.0

Правила для обеспечения безопасности облака, оптимизации затрат и управления, DSL на YAML для политик, позволяющих запрашивать, фильтровать и выполнять действия над ресурсами.

Поделиться

Cloud Custodian (c7n)

Cloud Custodian Logo


slack CI CII Best Practices

Cloud Custodian, также известный как c7n, — это движок правил для управления аккаунтами и ресурсами публичных облаков. Он позволяет пользователям определять политики для обеспечения хорошо управляемой облачной инфраструктуры, которая одновременно безопасна и оптимизирована по затратам. Он объединяет множество разрозненных скриптов, которые есть в организациях, в лёгкий и гибкий инструмент с унифицированными метриками и отчётностью.

Custodian можно использовать для управления средами AWS, Azure и GCP, обеспечивая соответствие политикам безопасности в реальном времени (например, требованиям к шифрованию и доступу), политикам тегирования и управлению затратами за счёт удаления неиспользуемых ресурсов и управления ресурсами в нерабочие часы.

Custodian также поддерживает запуск политик на активах infrastructure as code, чтобы предоставлять обратную связь непосредственно на рабочих станциях разработчиков или в CI-конвейерах.

Политики Custodian пишутся в простых конфигурационных файлах YAML, которые позволяют пользователям задавать политики для типа ресурса (EC2, ASG, Redshift, CosmosDB, PubSub Topic) и строятся из словаря фильтров и действий.

Он интегрируется с облачными serverless-возможностями каждого провайдера, обеспечивая принудительное применение политик в реальном времени со встроенным провижинингом. Или его можно запускать как простую cron-задачу на сервере для выполнения против больших существующих парков ресурсов.

Cloud Custodian — это инкубируемый проект CNCF, возглавляемый сообществом сотен участников.

Возможности

  • Всесторонняя поддержка сервисов и ресурсов публичных облаков с богатой библиотекой действий и фильтров для построения политик.
  • Запуск политик на активах infrastructure as code (terraform и т. д.).
  • Поддержка произвольной фильтрации ресурсов с вложенными булевыми условиями.
  • Пробный запуск любой политики, чтобы увидеть, что она сделает.
  • Автоматический провижининг serverless-функций и источников событий ( 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. завершит работу любого только что запущенного экземпляра EC2, у которого нет зашифрованного тома EBS.
  3. пометит любой экземпляр EC2, у которого нет следующих тегов "Environment", "AppId" и либо "OwnerContact", либо "DeptID", для остановки через четыре дня.
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

Cloud Custodian можно также запускать через Docker:

# 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.

Категории