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.envdeve conter apenas URLs, flags de ambiente (APP_ENV,APP_DEBUG) e definições de infraestrutura. - Integração: O Laravel lê as variáveis do
.envnormalmente, 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_backupe 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
.envviaGOOGLE_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.gitignoreque 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.