🔒 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

Após o Deploy

Manutenção Contínua

🔐 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: - Rotacionar secret no Secrets Manager - Invalidar sessões ativas - Revisar logs do CloudWatch

  2. Análise: - Identificar origem do acesso - Verificar quais recursos foram acessados - Documentar incidente

  3. Prevenção: - Revisar IAM policies - Implementar MFA onde possível - Adicionar alertas adicionais

📚 Referências

🔄 Migração de ZIP para Container

Passo a Passo

  1. Build da imagem: bash ./docker-build.sh dev

  2. Atualizar Terraform: - Mudar de filename para image_uri - Remover runtime (já está na imagem) - Adicionar variável image_uri

  3. Aplicar mudanças: bash terraform plan terraform apply

  4. Validar: - Testar execução da Lambda - Verificar logs - Confirmar que secrets estão sendo usados

⚠️ Avisos Importantes

  1. Nunca commitar: - Senhas - Tokens - Chaves privadas - Credenciais de banco

  2. Sempre usar: - Secrets Manager para credenciais - IAM roles ao invés de access keys - HTTPS para todas as comunicações - Criptografia em repouso

  3. 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