Voltar às atualizações
New releaseSep 5, 2026

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

Compartilhar

Cloud Custodian (c7n)

Cloud Custodian Logo


slack CI CII Best Practices

Cloud Custodian, também conhecido como c7n, é um motor de regras para gerenciar contas e recursos de nuvem pública. Ele permite que os usuários definam políticas para viabilizar uma infraestrutura de nuvem bem gerenciada, que seja tanto segura quanto 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.

O 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 recursos não utilizados e do gerenciamento de recursos fora do horário comercial.

O Custodian também oferece suporte à 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, PubSub Topic) 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 de políticas em tempo real com provisionamento integrado. Ou pode ser executado como um simples cron job em um servidor para executar contra grandes frotas existentes.

Cloud Custodian é um projeto CNCF Incubating, liderado por uma comunidade de centenas de contribuidores.

Recursos

  • Suporte abrangente para serviços e recursos de nuvem pública com uma rica biblioteca de ações e filtros para construir políticas.
  • Execute políticas em ativos de infraestrutura como código (terraform, etc).
  • Suporta filtragem arbitrária em recursos com condições booleanas aninhadas.
  • Execute qualquer política em modo de simulação (dry run) 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 em armazenamento de objetos nativo da nuvem dos recursos que 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.

Instalação Rápida

O 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 sobre o 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 executará sobre os recursos correspondentes, e um modo que controla como a política será executada.

Os melhores guias de introdução são os tutoriais específicos de cada provedor de nuvem.

Como um rápido panorama, abaixo estão algumas políticas de exemplo para recursos da AWS.

  1. irá garantir que nenhum bucket S3 tenha acesso entre contas habilitado.
  2. irá encerrar qualquer instância EC2 recém-lançada que não tenha um volume EBS criptografado.
  3. irá marcar qualquer instância EC2 que não tenha as seguintes tags "Environment", "AppId", e "OwnerContact" ou "DeptID" para ser interrompida 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.

Categorias