Gerenciar segredos no modelo do ARM com a leitura no Azure Key Vault

Concluído

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:

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

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

  3. 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ção Contributor 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')]"
  }
}