🔒 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:
./docker-build.sh dev -
Atualizar Terraform:
- Mudar de
filenameparaimage_uri - Remover
runtime(já está na imagem) -
Adicionar variável
image_uri -
Aplicar mudanças:
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