Skip to content

06 - Segredos e Configurações de Ambiente

A segurança é baseada na separação estrita entre configurações de runtime (via .env) e credenciais sensíveis (via Docker Secrets).


1. Estrutura de Injeção de Segredos (Docker Secrets)

Em vez de expor senhas e chaves de API no sistema de arquivos, utilizamos o diretório ./secrets/ mapeado para o ambiente do Docker. O container lê esses arquivos como se fossem caminhos de sistema /run/secrets/.

  • Localização dos Arquivos: ./secrets/*.txt (não versionado no Git).
  • Mapeamento no docker-compose.yml: yaml secrets: db_password: file: ./secrets/db_password.txt openai_api_key: file: ./secrets/openai_api_key.txt # ... outros segredos
  • Aplicação: Todo serviço (Laravel App, Worker IA, Worker Backup) que necessita de uma credencial declara o uso do secret, mantendo a memória isolada e segura.

2. Configurações Dinâmicas (.env)

O arquivo .env gerencia as configurações que não possuem natureza de "segredo" crítico ou que facilitam a orquestração do ambiente de desenvolvimento/homologação.

  • Regra de Ouro: Se a variável for uma senha ou chave de API de terceiros, ela deve ser migrada para Secrets. O .env deve conter apenas URLs, flags de ambiente (APP_ENV, APP_DEBUG) e definições de infraestrutura.
  • Integração: O Laravel lê as variáveis do .env normalmente, mas em produção, o sistema é configurado para priorizar o valor contido no arquivo montado em /run/secrets/ caso haja sobreposição.

3. Gestão de Service Accounts (Integração Google Drive)

Para o backup automático e acesso às APIs do Google, utilizamos um arquivo service_account.json dedicado:

  • Segurança: Este arquivo é armazenado apenas no volume de persistência do container worker_backup e nunca é enviado para o repositório.
  • Permissões: A Service Account possui permissões restritas (Least Privilege) apenas para escrita nos diretórios de backup definidos no Google Drive.
  • Uso: O caminho do arquivo é referenciado no .env via GOOGLE_APPLICATION_CREDENTIALS=/app/config/service_account.json.

4. Fluxo de Auditoria e Auditoria de Acesso

  • Sem Versionamento: O diretório ./secrets/ contém um arquivo .gitignore que impede que qualquer desenvolvedor comita credenciais por acidente.
  • Logs: Em caso de tentativa de acesso a um secret inexistente, o erro é capturado pelo sistema de logs do Docker (docker logs foconopreco_app), alertando a falha de inicialização antes que o container tente se conectar ao banco de dados com credenciais nulas.