Gerenciar segredos no modelo do ARM com a leitura no Azure Key Vault
IaC (infraestrutura como código) refere-se à descrição dos seus requisitos de infraestrutura como arquivos de texto legíveis. Os modelos do ARM (Azure Resource Manager) são uma forma de IaC.
Assim como o código do aplicativo, você pode gerenciar seu código de infraestrutura em um sistema de controle de versão como o Git. Isso permite que você colabore com outras pessoas e rastreie as mudanças nos requisitos de sua infraestrutura conforme eles evoluem.
Assim como ocorre com o código do aplicativo, você não deve codificar informações confidenciais, como senhas e chaves de API, em seus modelos do ARM. Caso contrário, qualquer pessoa com acesso de leitura ao seu repositório terá acesso a essas informações secretas.
Embora apenas as pessoas autorizadas na sua organização devam ter acesso às informações confidenciais, os modelos do ARM também exigem essas informações. O Azure Key Vault é uma forma de ajudar a proteger informações confidenciais.
O Azure Key Vault ajuda a proteger informações confidenciais
O Azure Key Vault é um serviço de nuvem que funciona como um repositório seguro de segredos. O Key Vault permite que você crie vários contêineres seguros, chamado cofres. Esses cofres têm o suporte de HSMs (módulos de segurança de hardware). Os cofres ajudam a reduzir a possibilidade de perda acidental de informações de segurança pela centralização do armazenamento de segredos do aplicativo. Os cofres também controlam e registram em log o acesso a todos os itens armazenados neles.
O Key Vault é capaz de armazenar chaves e segredos. Seus inúmeros recursos o tornam uma boa escolha para gerenciar seus segredos e também uma boa opção de uso em seu processo de implantação.
Controle de acesso baseado em função. Você pode gerenciar o cofre de chaves usando várias funções a fim de garantir que ele possa ser usado por aplicativos e por diferentes níveis de administradores.
Permissão de usuários e aplicativos. Você pode configurar o cofre de chaves para que usuários específicos, bem como aplicativos, possam ter acesso a ele. Para aplicativos, crie uma entidade de serviço. Na verdade, você pode configurar o cofre de chaves para que somente as entidades de serviço tenham acesso a ele.
Observação
Uma entidade de serviço é uma identidade criada para uso com aplicativos, serviços hospedados e ferramentas automatizadas a fim de acessar recursos do Azure. Restrinja o acesso aos recursos atribuindo à entidade de segurança apenas uma função ou um subconjunto de funções com direitos de acesso limitados. Essa abordagem oferece um controle mais granular sobre o quanto algo pode acessar seus recursos e o que pode ser acessado.
Capacidade de integração com um modelo do ARM. Durante a implantação de um modelo do ARM, você pode fazer a leitura de um cofre de chaves. Há uma pequena configuração necessária para fazer isso funcionar. A próxima seção fornecerá mais detalhes.
Configurar permissões
Você escolheu o Key Vault como um serviço em que armazenará suas credenciais. Nele, o ideal é ler segredos durante a implantação para que, por exemplo, você possa definir a senha de uma máquina virtual.
Há várias etapas de configuração que você precisará executar para configurar o Key Vault de modo que ele possa ser lido durante a implantação. As etapas são:
Habilitação do Key Vault para implantação. O Key Vault precisa ter permissão para ser lido durante a implantação. Você pode definir essa configuração na criação ou corrigi-la mais tarde.
O usuário precisa ter a permissão de implantação no grupo de recursos. Isso não é diferente de outras implantações. No entanto, se você não criou o grupo de recursos, é possível atribuir uma função para garantir que possa implantar nele.
O usuário precisa ter o acesso adequado ao cofre de chaves. Você precisará verificar se tem o acesso adequado ao cofre de chaves ao lê-lo durante a implantação. Quando você cria um cofre de chaves, ele cria uma política de acesso que concede ao usuário direitos para gerenciar todos os segredos, as chaves e os certificados.
Configurar o Key Vault para implantação
Configure sua instância do Key Vault para que as credenciais possam ser lidas nela durante a implantação de um modelo do ARM.
Para habilitar o Key Vault para implantação, há uma configuração que você poderá transmitir, durante a criação da instância do Key Vault ou algo que você possa alterar em um ponto posterior. No PowerShell, é uma opção chamada -EnabledForTemplateDeployment
. Na CLI do Azure, é um argumento chamado --enabled-for-template-deployment
que também precisa que o valor true
também seja passado.
Observação
A CLI do Azure também exige a transmissão de um booliano com o valor true
.
O usuário precisa de permissão de implantação no Key Vault e no grupo de recursos
Antes de tentar implantar e ler segredos do cofre de chaves, verifique se você tem a permissão de implantação. Há duas funções que fornecem essa permissão:
Owner
: se criou o cofre de chaves, você tem essa função automaticamente.Contributor
: essa função permite a você acesso para gerenciar todos os segredos. Se você não criou o cofre de chaves, a abordagem mais fácil é fornecer a funçãoContributor
a você mesmo.
Outra opção é criar e atribuir uma função personalizada e verificar se a função contém a permissão Microsoft.KeyVault/vaults/deploy/action.
Configurar o arquivo de parâmetro de implantação
Em vez de especificar cada parâmetro e valores correspondentes como pares chave-valor durante a implantação, você pode usar um arquivo de parâmetro.
Nesse arquivo de parâmetro, especifique qual cofre de chaves e qual segredo nesse cofre de chaves são de interesse. Faça isso modificando um parâmetro e, depois, atualizando o modelo de implantação para usar esse parâmetro.
Observação
O modelo não tem nenhuma noção de um cofre de chaves nem o segredo. A configuração que você está fazendo ocorre no arquivo de parâmetro.
Configurar um cofre de chaves e o segredo para um parâmetro
No arquivo de parâmetro, e em um parâmetro específico, aponte para um cofre de chaves no qual você tem permissão de implantação. Em seguida, especifique em qual segredo você está interessado. Aponte o segredo pelo nome. Durante a implantação, essa configuração será resolvida no valor dos segredos. Este é um parâmetro chamado myPassword
que sendo configurado para usar um cofre de chaves específico e um segredo chamado databaseSecret
.
"myPassword" : {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
"secretName": "databaseSecret"
}
}
}
No JSON anterior, especifique a ID completa para o cofre de chaves e continue para solicitar o segredo databaseSecret
. O valor desse segredo é então extraído e atribuído ao parâmetro myPassword
.
Atribuir o parâmetro à senha do recurso
Esta etapa não está relacionada ao cofre de chaves. Trata-se de garantir que o recurso pretendido use o parâmetro configurado para ler o valor do segredo do cofre de chaves. Veja a seguir um snippet abreviado de uma VM, no arquivo de modelo, que mostra o elemento adminPassword
fazendo a leitura do parâmetro myPassword
. Depois, o valor do segredo será lido no cofre de chaves no momento da implantação e atribuído ao elemento adminPassword
.
{
"osProfile": {
"adminPassword": "[parameters('myPassword')]"
}
}