🔒 Segurança - ecosif-automations-python
Este documento descreve as medidas de segurança implementadas no módulo ecosif-automations-python e as melhores práticas recomendadas.
🎯 Visão Geral
O módulo foi projetado com segurança em camadas, seguindo as melhores práticas da AWS e do setor financeiro.
🛡️ Camadas de Segurança
1. Containerização (Lambda Container Images)
Problema: Código Python em ZIP pode ser facilmente extraído e analisado.
Solução: Uso de Lambda Container Images ao invés de ZIP deployment.
Vantagens: - ✅ Código não é facilmente acessível (containerizado) - ✅ Melhor isolamento e controle de dependências - ✅ Imagens até 10GB (vs 50MB ZIP) - ✅ Suporte a ferramentas customizadas - ✅ Imagens são criptografadas no ECR
Como usar:
# Build da imagem
./docker-build.sh dev
# A imagem será pushada para ECR e usada no Terraform
2. AWS Secrets Manager
Problema: Credenciais em variáveis de ambiente são visíveis no console AWS.
Solução: Uso de AWS Secrets Manager para armazenar credenciais sensíveis.
Credenciais protegidas: - Senhas do PostgreSQL - Tokens de API - Chaves de criptografia - Certificados
Implementação:
import boto3
import json
def get_secret(secret_name: str) -> dict:
"""Recupera secret do AWS Secrets Manager."""
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId=secret_name)
return json.loads(response['SecretString'])
3. IAM Roles e Least Privilege
Princípio: Cada Lambda tem apenas as permissões mínimas necessárias.
Permissões configuradas: - ✅ Acesso apenas ao S3 bucket específico - ✅ Acesso apenas às filas SQS necessárias - ✅ Acesso apenas ao Secrets Manager específico - ✅ Acesso apenas ao VPC/Subnet configurado - ❌ Sem acesso a outros recursos AWS
4. VPC e Network Isolation
Configuração: - Lambdas rodam dentro de VPC privada - Acesso ao PostgreSQL apenas via VPC - Sem exposição pública - Security Groups restritivos
5. Criptografia
Em trânsito: - ✅ HTTPS/TLS para todas as comunicações - ✅ SQS com criptografia habilitada - ✅ S3 com SSL/TLS obrigatório
Em repouso: - ✅ ECR images criptografadas (AES-256) - ✅ Secrets Manager criptografado - ✅ S3 bucket com encryption habilitado - ✅ PostgreSQL com encryption at rest
6. Logging e Monitoramento
CloudWatch Logs: - ✅ Logs estruturados (JSON) - ✅ Sem dados sensíveis nos logs - ✅ Retenção configurável - ✅ Alertas para erros críticos
CloudWatch Metrics: - ✅ Monitoramento de execuções - ✅ Alertas de falhas - ✅ Métricas de performance
7. Code Obfuscation (Opcional)
Quando usar: - Código com lógica de negócio muito sensível - Requisitos de compliance específicos
Ferramentas:
- pyarmor - Ofuscação de bytecode Python
- Nuitka - Compilação para C++
⚠️ Aviso: Ofuscação dificulta debugging e manutenção. Use apenas se necessário.
📋 Checklist de Segurança
Antes do Deploy
- [ ] Imagem Docker buildada e testada
- [ ] Secrets criados no AWS Secrets Manager
- [ ] IAM roles configuradas com least privilege
- [ ] VPC e Security Groups configurados
- [ ] Criptografia habilitada em todos os recursos
- [ ] Logs configurados sem dados sensíveis
- [ ] Variáveis de ambiente revisadas (sem senhas)
Após o Deploy
- [ ] Testar acesso apenas via triggers configurados
- [ ] Verificar logs do CloudWatch
- [ ] Validar que Secrets Manager está sendo usado
- [ ] Testar isolamento de rede
- [ ] Verificar alertas do CloudWatch
Manutenção Contínua
- [ ] Rotacionar secrets periodicamente
- [ ] Revisar IAM policies regularmente
- [ ] Atualizar dependências (security patches)
- [ ] Revisar logs para atividades suspeitas
- [ ] Manter imagens Docker atualizadas
🔐 Configuração de Secrets
Criar Secret no AWS Secrets Manager
aws secretsmanager create-secret \
--name ecosif-automations/db-credentials \
--secret-string '{
"host": "postgres.example.com",
"port": 5432,
"database": "ecosif",
"username": "app_user",
"password": "secure_password"
}' \
--region us-east-1
Atualizar IAM Role para Acessar Secrets
resource "aws_iam_role_policy" "secrets_access" {
name = "secrets-manager-access"
role = aws_iam_role.lambda_role.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
]
Resource = "arn:aws:secretsmanager:*:*:secret:ecosif-automations/*"
}]
})
}
🚨 Incident Response
Se Credenciais Forem Comprometidas
-
Imediato: - Rotacionar secret no Secrets Manager - Invalidar sessões ativas - Revisar logs do CloudWatch
-
Análise: - Identificar origem do acesso - Verificar quais recursos foram acessados - Documentar incidente
-
Prevenção: - Revisar IAM policies - Implementar MFA onde possível - Adicionar alertas adicionais
📚 Referências
- AWS Lambda Security Best Practices
- AWS Secrets Manager Best Practices
- OWASP Top 10
- AWS Well-Architected Framework - Security Pillar
🔄 Migração de ZIP para Container
Passo a Passo
-
Build da imagem:
bash ./docker-build.sh dev -
Atualizar Terraform: - Mudar de
filenameparaimage_uri- Removerruntime(já está na imagem) - Adicionar variávelimage_uri -
Aplicar mudanças:
bash terraform plan terraform apply -
Validar: - Testar execução da Lambda - Verificar logs - Confirmar que secrets estão sendo usados
⚠️ Avisos Importantes
-
Nunca commitar: - Senhas - Tokens - Chaves privadas - Credenciais de banco
-
Sempre usar: - Secrets Manager para credenciais - IAM roles ao invés de access keys - HTTPS para todas as comunicações - Criptografia em repouso
-
Revisar regularmente: - Dependências (vulnerabilidades) - IAM policies (permissões) - Logs (atividades suspeitas) - Secrets (rotação)
Última Atualização: 2025-12-09
Versão: 2.0.0
Responsável: ECOSIF Security Team