Segurança no deploy: protegendo suas aplicações
1. Fundamentos de segurança no pipeline de deploy
A segurança no deploy não é responsabilidade exclusiva de um time — ela exige um modelo de responsabilidade compartilhada entre desenvolvedores, operações e segurança. Cada etapa do pipeline deve incorporar três princípios fundamentais:
- Menor privilégio: cada componente do deploy deve ter apenas as permissões mínimas necessárias para sua função.
- Defesa em profundidade: múltiplas camadas de segurança, de modo que a falha de uma não comprometa todo o sistema.
- Confiança zero: nunca confiar implicitamente em nenhuma entidade, seja interna ou externa.
Os principais riscos mapeados incluem injeção de código malicioso durante a construção, vazamento de credenciais em logs ou repositórios, e configurações incorretas que expõem serviços. Um exemplo de configuração insegura em um pipeline YAML:
# Exemplo de pipeline inseguro
deploy:
script:
- echo "Deploying to production..."
- kubectl apply -f deployment.yaml
variables:
DB_PASSWORD: "senha123" # NUNCA faça isso
2. Proteção de credenciais e segredos no deploy
Gerenciar segredos adequadamente é uma das tarefas mais críticas. Ferramentas como HashiCorp Vault, AWS Secrets Manager e Azure Key Vault permitem armazenar, rotacionar e auditar o acesso a credenciais sem expô-las no código ou nos logs.
Evite exposição em variáveis de ambiente do pipeline. Em vez disso, injete segredos via referência segura:
# Exemplo seguro com AWS Secrets Manager
deploy:
script:
- export DB_PASSWORD=$(aws secretsmanager get-secret-value --secret-id prod/db/password --query SecretString --output text)
- kubectl apply -f deployment.yaml
secrets:
- DB_PASSWORD
A rotação automática de chaves deve ser configurada para ocorrer a cada deploy ou em intervalos regulares, garantindo que credenciais comprometidas tenham vida curta.
3. Assinatura e verificação de artefatos
A cadeia de suprimentos de software precisa ser protegida. Assinatura digital de artefatos com ferramentas como Cosign (para imagens de contêiner) e Notary garante que apenas binários legítimos sejam implantados.
Verificação de integridade antes do deploy:
# Verificar assinatura da imagem antes de implantar
cosign verify --key cosign.pub registry.example.com/app:latest
# Gerar SBOM (Software Bill of Materials)
trivy image --format cyclonedx --output app.sbom registry.example.com/app:latest
O SBOM lista todos os componentes do software, permitindo auditoria de vulnerabilidades conhecidas. O nível de maturidade SLSA (Supply-chain Levels for Software Artifacts) ajuda a medir e melhorar a segurança da cadeia.
4. Segurança em infraestrutura como código (IaC)
Infraestrutura como código (Terraform, CloudFormation, Pulumi) precisa ser varrida por vulnerabilidades e más práticas antes de ser aplicada. Ferramentas como Checkov, tfsec e Kics automatizam essa verificação.
Exemplo de política com Checkov:
# Verificar se buckets S3 têm bloqueio de acesso público
checkov -d . --framework terraform --check CKV_AWS_53
Políticas de compliance com OPA (Open Policy Agent) ou Sentinel garantem que o deploy só prossiga se todas as regras de segurança forem atendidas:
# Política OPA: proibir acesso público a bancos de dados
deny[msg] {
resource := input.resource.aws_db_instance[_]
resource.publicly_accessible == true
msg := sprintf("Banco de dados %s não pode ser público", [resource.name])
}
A imutabilidade de infraestrutura impede que alterações manuais sejam feitas fora do pipeline, eliminando desvios de configuração.
5. Controle de acesso e autenticação no deploy
No deploy, identidades não humanas (service accounts, roles temporárias) devem ser usadas em vez de credenciais de usuário. Ferramentas como AWS IAM Roles for Service Accounts ou Workload Identity no GCP permitem isso.
Autenticação multifator e autorização baseada em contexto (RBAC ou ABAC) devem ser aplicadas em todas as ações do pipeline. Para ambientes críticos (produção, staging), implemente gates de aprovação manual:
# Exemplo de gate de aprovação manual no GitLab CI
deploy-production:
stage: deploy
environment:
name: production
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual
allow_failure: false
script:
- kubectl apply -f production/
6. Monitoramento e auditoria pós-deploy
Após o deploy, logs centralizados e imutáveis são essenciais. AWS CloudTrail, Azure Monitor e ELK Stack registram cada ação do pipeline, permitindo auditoria forense.
Detecção de anomalias em tempo real pode ser configurada com alertas para falhas de segurança, como tentativas de acesso a recursos não autorizados ou comportamento inesperado de aplicações recém-implantadas.
Resposta a incidentes deve incluir rollback automático:
# Script de rollback automático
deploy:
script:
- kubectl apply -f deployment.yaml
- sleep 30
- kubectl rollout status deployment/app --timeout=60s || kubectl rollout undo deployment/app
7. Práticas recomendadas para ambientes multi-nuvem e Kubernetes
Em Kubernetes, Network Policies isolam pods e Service Mesh (como Istio ou Linkerd) adicionam criptografia mTLS entre serviços:
# Política de rede: permitir tráfego apenas do frontend
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-isolation
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
Estratégias de deploy como Blue/Green e Canary precisam de cuidado extra para evitar vazamento de dados entre versões. Use namespaces separados ou labels específicas.
Scan contínuo de vulnerabilidades com Trivy ou Clair deve ser executado em cada imagem de contêiner antes do deploy:
# Scan de vulnerabilidades antes do deploy
trivy image --severity HIGH,CRITICAL registry.example.com/app:latest
Em ambientes multi-nuvem, padronize políticas com ferramentas como Crossplane ou Terraform Cloud para garantir consistência de segurança entre provedores.
Referências
- OWASP Top 10 CI/CD Security Risks — Guia oficial da OWASP sobre os principais riscos de segurança em pipelines de CI/CD.
- HashiCorp Vault Documentation — Documentação oficial do Vault para gerenciamento seguro de segredos e rotação automática.
- Cosign - Sigstore — Ferramenta de assinatura e verificação de artefatos de contêiner e binários.
- Checkov Documentation — Ferramenta de varredura de IaC para Terraform, CloudFormation e Kubernetes com centenas de políticas de segurança.
- SLSA Framework — Níveis de maturidade para segurança da cadeia de suprimentos de software.
- Trivy - Aqua Security — Scanner de vulnerabilidades para contêineres, repositórios Git e sistemas de arquivos.
- Kubernetes Network Policies — Documentação oficial sobre isolamento de pods com políticas de rede no Kubernetes.