
cloud-custodian v0.9.52.0
Motor de regras para segurança em nuvem, otimização de custos e governança, DSL em yaml para políticas de consultar, filtrar e agir sobre recursos
Cloud Custodian (c7n)
Cloud Custodian, também conhecido como c7n, é um motor de regras para gerenciar contas e recursos em nuvens públicas. Permite que os usuários definam políticas para possibilitar uma infraestrutura em nuvem bem gerenciada, que seja segura e otimizada em custos. Ele consolida muitos dos scripts ad hoc que as organizações possuem em uma ferramenta leve e flexível, com métricas e relatórios unificados.
Custodian pode ser usado para gerenciar ambientes AWS, Azure e GCP, garantindo conformidade em tempo real com políticas de segurança (como requisitos de criptografia e acesso), políticas de tags e gerenciamento de custos por meio da coleta de lixo de recursos não utilizados e gerenciamento de recursos fora do horário comercial.
Custodian também suporta a execução de políticas em ativos de infraestrutura como código para fornecer feedback diretamente nas estações de trabalho dos desenvolvedores ou dentro de pipelines de CI.
As políticas do Custodian são escritas em arquivos de configuração YAML simples que permitem aos usuários especificar políticas sobre um tipo de recurso (EC2, ASG, Redshift, CosmosDB, Tópico PubSub) e são construídas a partir de um vocabulário de filtros e ações.
Ele se integra com as capacidades serverless nativas da nuvem de cada provedor para fornecer aplicação em tempo real de políticas com provisionamento embutido. Ou pode ser executado como um simples cron job em um servidor para executar contra grandes frotas existentes.
Cloud Custodian é um projeto em incubação da CNCF, liderado por uma comunidade de centenas de contribuidores.
Funcionalidades
- Suporte abrangente para serviços e recursos de nuvem pública com uma rica biblioteca de ações e filtros para construir políticas.
- Executar políticas em ativos de infraestrutura como código (terraform, etc).
- Suporta filtragem arbitrária em recursos com condições booleanas aninhadas.
- Dry run em qualquer política para ver o que ela faria.
- Provisiona automaticamente funções serverless e fontes de eventos (AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP AuditLog & Pub/Sub, etc)
- Saídas de métricas nativas do provedor de nuvem sobre recursos que corresponderam a uma política.
- Saídas estruturadas para armazenamento de objetos nativo da nuvem de quais recursos corresponderam a uma política.
- Uso inteligente de cache para minimizar chamadas de API.
- Suporta uso multi-conta/assinatura/projeto.
- Testado em batalha - em produção em alguns ambientes de nuvem muito grandes.
Links
- Página inicial
- Documentação
- Roadmap do Projeto
- Instalação para Desenvolvedores
- Apresentações
- Canal do YouTube
Instalação Rápida
Custodian é publicado no pypi como uma série de pacotes com o prefixo c7n, também está disponível como uma imagem docker.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
Uso
O primeiro passo para usar o Cloud Custodian (c7n) é escrever um arquivo YAML contendo as políticas que você deseja executar. Cada política especifica o tipo de recurso no qual a política será executada, um conjunto de filtros que controlam quais recursos serão afetados por esta política, ações que a política tomará sobre os recursos correspondentes e um modo que controla como a política será executada.
Os melhores guias de início rápido são os tutoriais específicos de cada provedor de nuvem.
Como uma rápida demonstração, abaixo estão algumas políticas de exemplo para recursos AWS.
- garantirá que nenhum bucket S3 tenha acesso entre contas ativado.
- encerrará qualquer instância EC2 recém-lançada que não tenha um volume EBS criptografado.
- marcará qualquer instância EC2 que não tenha as seguintes tags "Environment", "AppId" e "OwnerContact" ou "DeptID" para ser parada em quatro dias.
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
Você pode validar, testar e executar o Cloud Custodian com a política de exemplo usando estes comandos:
# 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
Você também pode executar o Cloud Custodian via 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.