
cloud-custodian v0.9.52.0
Правила для обеспечения безопасности облака, оптимизации затрат и управления, DSL на YAML для политик, позволяющих запрашивать, фильтровать и выполнять действия над ресурсами.
Cloud Custodian (c7n)
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.
- Поддержка использования с несколькими аккаунтами/подписками/проектами.
- Проверено в бою — в продакшене на некоторых очень больших облачных средах.
Ссылки
- Домашняя страница
- Документация
- Дорожная карта проекта
- Установка для разработчиков
- Презентации
- Канал на YouTube
Быстрая установка
Custodian публикуется на pypi в виде серии пакетов с префиксом c7n,
также доступен в виде docker-образа.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
Использование
Первым шагом к использованию Cloud Custodian (c7n) является написание YAML-файла, содержащего политики, которые вы хотите запускать. Каждая политика определяет тип ресурса, к которому будет применяться политика, набор фильтров, которые определяют, на какие ресурсы будет распространяться эта политика, действия, которые политика выполнит над подходящими ресурсами, и режим, который определяет, как политика будет выполняться.
Лучшие руководства по началу работы — это учебные пособия для конкретных облачных провайдеров.
В качестве краткого обзора ниже приведены примеры политик для ресурсов AWS.
- обеспечит запрет включения кросс-аккаунтного доступа для любых S3-бакетов.
- завершит работу любого только что запущенного экземпляра EC2, у которого нет зашифрованного тома EBS.
- пометит любой экземпляр 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.