Pular para conteúdo

🔒 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

  1. Imediato:
  2. Rotacionar secret no Secrets Manager
  3. Invalidar sessões ativas
  4. Revisar logs do CloudWatch

  5. Análise:

  6. Identificar origem do acesso
  7. Verificar quais recursos foram acessados
  8. Documentar incidente

  9. Prevenção:

  10. Revisar IAM policies
  11. Implementar MFA onde possível
  12. Adicionar alertas adicionais

📚 Referências

🔄 Migração de ZIP para Container

Passo a Passo

  1. Build da imagem:

    ./docker-build.sh dev
    

  2. Atualizar Terraform:

  3. Mudar de filename para image_uri
  4. Remover runtime (já está na imagem)
  5. Adicionar variável image_uri

  6. Aplicar mudanças:

    terraform plan
    terraform apply
    

  7. Validar:

  8. Testar execução da Lambda
  9. Verificar logs
  10. Confirmar que secrets estão sendo usados

⚠️ Avisos Importantes

  1. Nunca commitar:
  2. Senhas
  3. Tokens
  4. Chaves privadas
  5. Credenciais de banco

  6. Sempre usar:

  7. Secrets Manager para credenciais
  8. IAM roles ao invés de access keys
  9. HTTPS para todas as comunicações
  10. Criptografia em repouso

  11. Revisar regularmente:

  12. Dependências (vulnerabilidades)
  13. IAM policies (permissões)
  14. Logs (atividades suspeitas)
  15. Secrets (rotação)

Última Atualização: 2025-12-09
Versão: 2.0.0
Responsável: ECOSIF Security Team