Segurança
Como manter segredos fora do código-fonte
Nomes de variáveis de ambiente podem ficar no manifesto; credenciais, não. Referências a segredos preservam essa separação do trabalho local à produção.
Um segredo gravado em um commit pode permanecer em clones, caches, logs e commits antigos muito depois de a linha visível ser removida.
Gravar a referência no repositório, não o valor
O código da aplicação precisa de nomes estáveis de variáveis de ambiente, não da credencial de produção por trás de cada nome. No manifesto Adios, uma referência a segredo registra a dependência sem colocar seu valor no repositório.
Isso permite revisar o contrato de implantação. Um integrante da equipe vê que a aplicação espera DATABASE_URL ou STRIPE_SECRET_KEY, enquanto o acesso ao valor real continua controlado separadamente.
env:
DATABASE_URL: secret://DATABASE_URL
API_SIGNING_KEY: secret://API_SIGNING_KEYTratar compilação e execução como destinatários diferentes
Algumas credenciais só são necessárias durante a instalação de dependências ou a obtenção de código-fonte privado. Outras são necessárias ao processo em execução. Dar todos os segredos às duas fases aumenta a exposição além do necessário para a aplicação.
Restrinja cada valor ao caminho que o utiliza e não imprima valores resolvidos na saída da compilação, nos logs de execução ou em mensagens de erro. Um armazenamento de segredos não protege uma credencial que a própria aplicação escreve em um log público.
- —Apenas compilação: tokens de pacotes privados e chaves de implantação Git.
- —Somente execução: senhas do banco de dados, chaves de assinatura e credenciais de API de provedores.
- —Nas duas fases, somente quando ambas realmente precisam do mesmo valor.
A rotação deve ser normal
Uma credencial precisará mudar em algum momento. Use nomes e comportamentos da aplicação que permitam substituir o valor sem editar o código-fonte. Para credenciais de alto impacto, planeje uma sobreposição em que valores antigos e novos sejam aceitos enquanto as cargas de trabalho reiniciam.
Se um segredo entrar no Git, rotacione-o primeiro e limpe o repositório depois. Remover a linha ajuda na organização, mas não torna seguro novamente o valor exposto.
- —Crie a credencial de substituição sem desativar a antiga.
- —Atualize o valor armazenado e substitua gradualmente as cargas de trabalho para usar a nova credencial.
- —Verifique nos logs e na atividade do provedor que a nova credencial está em uso.
- —Revogue a credencial antiga e registre o horário da rotação.
Responder a uma credencial gravada no repositório
Suponha que um desenvolvedor grave uma URL de banco de dados em um commit, remova-a no seguinte e faça force-push da branch. Considere a senha exposta mesmo assim: um clone, uma busca da CI, um índice do editor ou um cache de pull request já pode contê-la.
Desative ou rotacione a credencial, examine a trilha de auditoria no provedor, procure valores impressos acidentalmente nos logs e só depois limpe o histórico do repositório. Reescrever o histórico reduz a descoberta futura; rotacionar remove o acesso atual.