Configuração centralizada
Dica
Esse conteúdo é um trecho do livro eletrônico, para Projetar os Aplicativos .NET nativos de nuvem para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Ao contrário de um aplicativo monolítico em que tudo executa em uma única instância, um aplicativo nativo de nuvem consiste em serviços distribuídos independentes em máquinas virtuais, contêineres e regiões geográficas. Gerenciar as definições de configuração para dezenas de serviços interdependentes pode ser um desafio. Cópias duplicadas de definições de configuração em diferentes locais são propensas a erros e difíceis de gerenciar. A configuração centralizada é um requisito crítico para aplicativos nativos de nuvem distribuídos.
Conforme discutido no Capítulo 1, as recomendações do aplicativo Twelve-Factor exigem uma separação estrita entre código e configuração. A configuração deverá ser armazenada externamente do aplicativo e lida, conforme necessário. Armazenar os valores de configuração como constantes ou valores literais no código é uma violação. Os mesmos valores de configuração costumam ser usados por muitos serviços no mesmo aplicativo. Além disso, devemos dar suporte aos mesmos valores em vários ambientes, como desenvolvimento, teste e produção. A melhor prática é armazená-los em um armazenamento de configuração centralizado.
A nuvem do Azure apresenta várias ótimas opções.
Configuração de Aplicativo do Azure
A Configuração de Aplicativos do Azure é um serviço do Azure totalmente gerenciado que armazena as configurações não secretas em um local seguro e centralizado. Os valores armazenados poderão ser compartilhados entre vários serviços e aplicativos.
O serviço é simples de usar e oferece vários benefícios:
- Representações e mapeamentos flexíveis de chave-valor
- Marcação com rótulos do Azure
- Interface do usuário dedicada para gerenciamento
- Criptografia de informações confidenciais
- Consulta e recuperação em lote
A Configuração de Aplicativos do Azure mantém as alterações feitas nas configurações de chave-valor por sete dias. O recurso de instantâneo pontual permite reconstruir o histórico de uma configuração e até mesmo reverter para uma implantação com falha.
A Configuração de Aplicativos armazena em cache automaticamente cada configuração para evitar chamadas excessivas para o repositório de configurações. A operação de atualização aguarda até o valor em cache de uma configuração expirar para atualizar essa configuração, mesmo quando o valor é alterado no repositório de configurações. O tempo de término de cache padrão é de 30 segundos. Você pode substituir o tempo de expiração.
A Configuração de Aplicativos criptografa todos os valores de configuração em trânsito e em repouso. Os nomes de chaves e rótulos são usados como índices para a recuperação de dados de configuração e não são criptografados.
Embora a Configuração de Aplicativos forneça segurança avançada, o Azure Key Vault ainda é o melhor local para armazenar os segredos do aplicativo. O Key Vault fornece criptografia no nível de hardware, além de políticas de acesso granulares e operações de gerenciamento, como a rotação de certificado. É possível criar valores de Configuração de Aplicativos que fazem referência a segredos armazenados em um cofre de chaves.
Cofre de Chave do Azure
O Key Vault é um serviço gerenciado para armazenar e acessar os segredos com segurança. Um segredo é tudo a que você deseja controlar rigorosamente o acesso, como certificados, senhas ou chaves de API. Um cofre é um grupo lógico de segredos.
O Key Vault reduz consideravelmente a probabilidade de os segredos serem vazados acidentalmente. Ao usar o Key Vault, os desenvolvedores de aplicativos não precisam mais armazenar informações de segurança no aplicativo. Essa prática elimina a necessidade de armazenar essas informações no código. Por exemplo, um aplicativo pode precisar se conectar a um banco de dados. Em vez de armazenar a cadeia de conexão no código do aplicativo, armazene-o com segurança no Key Vault.
Os aplicativos podem acessar com segurança as informações necessárias usando URIs. Esses URIs permitem que os aplicativos recuperem versões específicas de um segredo. Não há necessidade de gravar código personalizado para proteger informações secretas armazenadas no Key Vault.
O acesso ao Key Vault exige autenticação e autorização apropriadas do chamador. Normalmente, cada microsserviço nativo de nuvem usa uma combinação ClientId/ClientSecret. É importante manter essas credenciais fora do controle do código-fonte. Uma melhor prática é defini-las no ambiente do aplicativo. O acesso direto ao Key Vault do AKS pode ser obtido usando Key Vault FlexVolume.
Configuração na eShop
O aplicativo eShopOnContainers inclui arquivos de configurações de aplicativos locais com cada microsserviço. Esses arquivos são verificados no controle do código-fonte, mas não incluem segredos de produção como cadeias de conexão ou chaves de API. Na produção, as configurações individuais poderão ser substituídas por variáveis de ambiente por serviço. Injetar segredos em variáveis de ambiente é uma prática comum para aplicativos hospedados, mas não fornece um repositório de configurações central. Para dar suporte ao gerenciamento centralizado de definições de configuração, cada microsserviço inclui uma configuração para alternar entre o uso de configurações locais ou configurações do Azure Key Vault.
Referências
- A arquitetura eShopOnContainers
- Orquestrar microsserviços e aplicativos de vários contêineres para alta escalabilidade e disponibilidade
- Gerenciamento de API do Azure
- Visão geral do Banco de Dados SQL do Azure
- Cache Redis do Azure
- API do Azure Cosmos DB para MongoDB
- Barramento de Serviço do Azure
- Visão geral do Azure Monitor
- eShopOnContainers: criar cluster Kubernetes no AKS
- eShopOnContainers: Azure Dev Spaces
- Azure Dev Spaces