Adios
BlogSegurança

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.

Equipe AdiosAtualizado 17 de julho de 20267 min de leitura

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_KEY

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

Todos os artigos