Armazene segredos de aplicativos com segurança durante o desenvolvimento
Gorjeta
Este conteúdo é um trecho do eBook, .NET Microservices Architecture for Containerized .NET Applications, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Para se conectar a recursos protegidos e outros serviços, os aplicativos ASP.NET Core normalmente precisam usar cadeias de conexão, senhas ou outras credenciais que contenham informações confidenciais. Essas informações sensíveis são chamadas de segredos. É uma prática recomendada não incluir segredos no código-fonte e certificar-se de não armazenar segredos no controle do código-fonte. Em vez disso, você deve usar o modelo de configuração ASP.NET Core para ler os segredos de locais mais seguros.
Você deve separar os segredos para acessar recursos de desenvolvimento e preparação daqueles usados para acessar recursos de produção, porque indivíduos diferentes precisarão ter acesso a esses diferentes conjuntos de segredos. Para armazenar segredos usados durante o desenvolvimento, as abordagens comuns são armazenar segredos em variáveis de ambiente ou usando a ferramenta ASP.NET Core Secret Manager. Para um armazenamento mais seguro em ambientes de produção, os microsserviços podem armazenar segredos em um Cofre de Chaves do Azure.
Armazenar segredos em variáveis de ambiente
Uma maneira de manter os segredos fora do código-fonte é que os desenvolvedores definam segredos baseados em cadeia de caracteres como variáveis de ambiente em suas máquinas de desenvolvimento. Ao usar variáveis de ambiente para armazenar segredos com nomes hierárquicos, como aqueles aninhados em seções de configuração, você deve nomear as variáveis para incluir a hierarquia completa de suas seções, delimitadas com dois pontos (:).
Por exemplo, definir uma variável Logging:LogLevel:Default
de ambiente como Debug
valor seria equivalente a um valor de configuração do seguinte arquivo JSON:
{
"Logging": {
"LogLevel": {
"Default": "Debug"
}
}
}
Para acessar esses valores a partir de variáveis de ambiente, o aplicativo só precisa chamá-lo AddEnvironmentVariables
ConfigurationBuilder
ao construir um IConfigurationRoot
objeto.
Nota
As variáveis de ambiente são normalmente armazenadas como texto simples, portanto, se a máquina ou o processo com as variáveis de ambiente estiver comprometido, os valores das variáveis de ambiente serão visíveis.
Armazene segredos com o ASP.NET Core Secret Manager
A ferramenta ASP.NET Core Secret Manager fornece outro método de manter os segredos fora do código-fonte durante o desenvolvimento. Para usar a ferramenta Secret Manager, instale o pacote Microsoft.Extensions.Configuration.SecretManager no arquivo de projeto. Uma vez que essa dependência está presente e foi restaurada, o dotnet user-secrets
comando pode ser usado para definir o valor de segredos da linha de comando. Esses segredos serão armazenados em um arquivo JSON no diretório de perfil do usuário (os detalhes variam de acordo com o sistema operacional), longe do código-fonte.
Os segredos definidos pela ferramenta Secret Manager são organizados pela UserSecretsId
propriedade do projeto que está usando os segredos. Portanto, você deve ter certeza de definir a propriedade UserSecretsId em seu arquivo de projeto, conforme mostrado no trecho abaixo. O valor padrão é um GUID atribuído pelo Visual Studio, mas a cadeia de caracteres real não é importante, desde que seja exclusiva no seu computador.
<PropertyGroup>
<UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>
O uso de segredos armazenados com o Secret Manager em um aplicativo é realizado chamando AddUserSecrets<T>
a ConfigurationBuilder
instância para incluir segredos para o aplicativo em sua configuração. O parâmetro T
generic deve ser um tipo do assembly ao qual o UserSecretId foi aplicado. Normalmente, usar AddUserSecrets<Startup>
é bom.
O AddUserSecrets<Startup>()
está incluído nas opções padrão para o ambiente de desenvolvimento ao usar o CreateDefaultBuilder
método em Program.cs.