Prática recomendada para informações confidenciais no controle de origem

8

Sei que este tópico foi abordado bastante, mas não consigo encontrar uma resposta para minha situação específica.

Atualmente, estou usando .gitignorepara excluir conteúdo confidencial e mantê-lo (arquivos de configuração, etc.) separadamente. À medida que minha base de código se expande para mais e mais projetos, isso está se tornando bastante difícil de gerenciar e também não tenho como rastrear alterações ou fazer backup dos arquivos corretamente.

Existem algumas ferramentas para este problema, como git-secret, Hashicorp Vaulte git-cryptmas nenhum desses funcionar com o Windows, onde eu faço todo o meu desenvolvimento (por várias razões).

Atualmente, sou o único desenvolvedor que trabalha na minha empresa sem planos de expansão. O controle de origem (Gitlab) é usado principalmente para minha própria referência e capacidade de registrar alterações. Enviar algumas cadeias de conexão ou arquivos de configuração para o controle de origem seria um grande problema ou risco? Essas informações estão atualmente em uma unidade de rede, não seguras (exceto para permissões NTFS)

Eu entendo que a melhor prática é não levar essas coisas ao controle de origem, mas eu tenho uma instância do Gitlab hospedada em particular que não é acessível fora da rede local - isso significa que há menos riscos?

Erro de sintaxe
fonte
Por que você não consegue usar o Hashicorp Vault no Windows? A página de download oficial inclui um binário para Windows: vaultproject.io/downloads.html
VaaChar
git-secreto também suporta o Windows bash: github.com/sobolevn/git-secret/pull/123
VaaChar
Oh legal que não estava no site principal do Git-Secret. Vou tentar
Erro de sintaxe
O que você está incluindo especificamente nas suas configurações sensíveis? Se forem senhas, será necessário procurar opções para evitar a necessidade de senhas.
Berin Loritsch
1
Há uma história circulando sobre um cara que faturou US $ 14 mil pela AWS porque ele armazenou suas chaves no controle de versão privado, mas a publicou publicamente no github por 10 minutos para compartilhar com um amigo.
Karl Bielefeldt

Respostas:

5

Pensando nisso holisticamente, há várias coisas a considerar:

  • O servidor GitLab está hospedado na mesma rede que o ambiente de destino?
  • Você tem nomes de usuário e senhas em seus arquivos de configuração?
  • Você pode separar a configuração de segurança da configuração normal do aplicativo?

A primeira preocupação tem a ver com política. Se o software for implantado em uma rede separada, você poderá encontrar problemas de política, mesmo que suas configurações sejam criptografadas.

Evitando informações confidenciais

Seja específico sobre o que é sensível. Por exemplo, o nome de domínio de um servidor pode não ser sensível, mas pode ser o endereço IP (ou a associação dos dois). Normalmente, nomes de usuário e senhas são confidenciais, bem como clientId e chaves secretas (OAuth2).

Suas melhores opções são:

  • Use cadeias de conexão que não exijam nome de usuário / senha (veja abaixo)
  • Separe as informações confidenciais do Web.config principal
  • Use o atributo file no AppSettings para ler um arquivo de configuração externo

Alguns bancos de dados permitem que você tenha uma cadeia de conexão em que nome de usuário e senha não façam parte do conteúdo. Por exemplo, você pode executar seu aplicativo em uma conta de serviço de domínio para se conectar ao SQL Server usando segurança integrada. Ou você pode usar a Oracle's Wallet para manter o nome de usuário / senha em segredo na máquina de destino. Alguns serviços OAuth2 permitem que você use um arquivo .csv ou .json armazenado na máquina em um local padrão.

Em outras palavras, faça o que puder para evitar manter informações confidenciais onde elas não pertencem. Se você precisar fazer alterações no seu aplicativo para procurar em um local no disco para ler os bits sensíveis, é possível configurá-lo uma vez em cada servidor de destino e apenas lê-lo no seu aplicativo.

Servidores de configuração

O Steeltoe tem portado determinadas bibliotecas de integração do Spring para C # e elas ainda têm suporte para servidores Spring Cloud Config . O servidor Spring Cloud Config requer um repositório Git na rede de implantação , mas permite que você personalize a configuração onde ela precisa estar. Se o seu aplicativo for suficientemente complexo (ou seja, microsserviços), isso seria algo que vale a pena examinar para manter os nomes dos servidores protegidos no mesmo ambiente em que os servidores estão localizados.

Bottom line

Você só quer evitar a necessidade de informações confidenciais o máximo possível, mas mantenha as configurações não confidenciais no controle de origem. Se você não puder evitar o nome de usuário / senha no seu arquivo de configuração (ou seja, um banco de dados diferente que não tenha equivalente à segurança integrada), carregue apenas um pouco de um arquivo externo.

Berin Loritsch
fonte
2

O melhor local para armazenar informações confidenciais é uma loja criada para fins específicos, Hashicorp Vaultque suporta o Windows.

Se (por qualquer motivo) você não conseguir usar isso, também poderá usar o git-secretque também oferece suporte ao Windows. O suporte para Windows foi adicionado a git-secreteste PR: https://github.com/sobolevn/git-secret/pull/123

git-crypt também possui suporte experimental para Windows:

https://github.com/AGWA/git-crypt/wiki/Installation

/programming/43040370/how-to-install-git-crypt-in-windows

VaaChar
fonte