Tutorial: Integrar o Azure Key Vault na implementação de modelos do Resource Manager

Saiba como obter segredos a partir de um cofre de chaves do Azure e transmitir os segredos como parâmetros quando implementa um modelo de Resource Manager do Azure (modelo do ARM). O valor do parâmetro nunca é exposto, porque faz referência apenas ao ID do cofre de chaves. Pode referenciar o segredo do cofre de chaves com um ID estático ou um ID dinâmico. Este tutorial utiliza um ID estático. Com a abordagem de ID estático, faz referência ao cofre de chaves no ficheiro de parâmetro do modelo e não ao ficheiro de modelo. Para obter mais informações sobre ambas as abordagens, veja Utilizar o Azure Key Vault para transmitir o valor do parâmetro seguro durante a implementação.

No tutorial Definir ordem de implementação de recursos , vai criar uma máquina virtual (VM). Tem de fornecer o nome de utilizador e a palavra-passe do administrador da VM. Em vez de fornecer a palavra-passe, pode pré-armazenar a palavra-passe num cofre de chaves do Azure e, em seguida, personalizar o modelo para obter a palavra-passe do cofre de chaves durante a implementação.

Diagrama que apresenta a integração de um modelo de Resource Manager com um cofre de chaves

Este tutorial abrange as seguintes tarefas:

  • Preparar um cofre de chaves
  • Abrir um modelo de início rápido
  • Editar o ficheiro de parâmetros
  • Implementar o modelo
  • Validar a implementação
  • Limpar os recursos

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Para um módulo do Learn que utiliza um valor seguro a partir de um cofre de chaves, veja Gerir implementações de cloud complexas com funcionalidades avançadas de modelo do ARM.

Pré-requisitos

Para concluir este artigo, precisa de:

Preparar um cofre de chaves

Nesta secção, vai criar um cofre de chaves e adicionar um segredo ao mesmo, para que possa obter o segredo quando implementar o modelo. Existem várias formas de criar um cofre de chaves. Neste tutorial, vai utilizar Azure PowerShell para implementar um modelo do ARM. Este modelo faz duas coisas:

  • Cria um cofre de chaves com a enabledForTemplateDeployment propriedade ativada. Esta propriedade tem de ser verdadeira antes de o processo de implementação do modelo poder aceder aos segredos definidos no cofre de chaves.
  • Adiciona um segredo ao cofre de chaves. O segredo armazena a palavra-passe de administrador da VM.

Nota

Enquanto utilizador que está a implementar o modelo de máquina virtual, se não for o Proprietário ou contribuidor para o cofre de chaves, o Proprietário ou um Contribuidor tem de lhe conceder acesso à Microsoft.KeyVault/vaults/deploy/action permissão do cofre de chaves. Para obter mais informações, veja Utilizar o Azure Key Vault para transmitir um valor de parâmetro seguro durante a implementação.

Para executar o seguinte script de Azure PowerShell, selecione Experimentar para abrir Cloud Shell. Para colar o script, clique com o botão direito do rato no painel da shell e, em seguida, selecione Colar.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString

$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue

Write-Host "Press [ENTER] to continue ..."

Importante

  • O nome do grupo de recursos é o nome do projeto, mas com rg anexado ao mesmo. Para facilitar a limpeza dos recursos que criou neste tutorial, utilize o mesmo nome de projeto e nome do grupo de recursos quando implementar o modelo seguinte.
  • O nome predefinido do segredo é vmAdminPassword. Está codificado no modelo.
  • Para ativar o modelo para obter o segredo, tem de ativar uma política de acesso denominada Ativar o acesso ao Azure Resource Manager para implementação de modelos para o cofre de chaves. Esta política está ativada no modelo. Para obter mais informações sobre a política de acesso, veja Implementar cofres de chaves e segredos.

O modelo tem um valor de saída, denominado keyVaultId. Irá utilizar este ID juntamente com o nome do segredo para obter o valor do segredo mais à frente no tutorial. O formato do ID do recurso é:

/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>

Quando copia e cola o ID, este pode ser dividido em múltiplas linhas. Intercale as linhas e corte os espaços adicionais.

Para validar a implementação, execute o seguinte comando do PowerShell no mesmo painel de shell para obter o segredo em texto claro. O comando só funciona na mesma sessão de shell, uma vez que utiliza a variável $keyVaultName, que é definida no script anterior do PowerShell.

$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "vmAdminPassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

Agora preparou um cofre de chaves e um segredo. As secções seguintes mostram-lhe como personalizar um modelo existente para obter o segredo durante a implementação.

Abrir um modelo de início rápido

Os Modelos de Início Rápido do Azure são um repositório para modelos do ARM. Em vez de criar um modelo do zero, pode encontrar um modelo de exemplo e personalizá-lo. O modelo utilizado neste tutorial chama-se Implementar uma VM do Windows simples.

  1. No Visual Studio Code, selecione Ficheiro>Aberto Ficheiro.

  2. Na caixa Nome do ficheiro , cole o seguinte URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. Selecione Abrir para abrir o ficheiro. O cenário é o mesmo que é utilizado no Tutorial: Criar modelos do ARM com recursos dependentes. O modelo define seis recursos:

    É útil ter alguma compreensão básica do modelo antes de o personalizar.

  4. Selecione Guardar Ficheiro>Como e, em seguida, guarde uma cópia do ficheiro no seu computador local com o nome azuredeploy.json.

  5. Repita os passos 1 a 3 para abrir o seguinte URL e, em seguida, guarde o ficheiro como azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
    

Editar o ficheiro de parâmetros

Ao utilizar o método de ID estático, não precisa de efetuar alterações ao ficheiro de modelo. A obtenção do valor secreto é feita ao configurar o ficheiro de parâmetro do modelo.

  1. No Visual Studio Code, abra azuredeploy.parameters.json se ainda não estiver aberto.

  2. Atualize o adminPassword parâmetro para:

    "adminPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
        },
        "secretName": "vmAdminPassword"
      }
    },
    

    Importante

    Substitua o valor para pelo id ID de recurso do cofre de chaves que criou no procedimento anterior. O secretName é codificado como vmAdminPassword. Veja Preparar um cofre de chaves.

    Integrar o cofre de chaves e Resource Manager ficheiro de parâmetros de implementação de máquinas virtuais de modelo

  3. Atualize os seguintes valores:

    • adminUsername: o nome da conta de administrador da máquina virtual.
    • dnsLabelPrefix: atribua um nome ao dnsLabelPrefix valor.

    Para obter exemplos de nomes, veja a imagem anterior.

  4. Guarde as alterações.

Implementar o modelo

  1. Inicie sessão no Cloud Shell.

  2. Selecione o seu ambiente preferido ao selecionar PowerShell ou Bash (para CLI) no canto superior esquerdo. É necessário reiniciar o Shell quando mudar.

    portal do Azure Cloud Shell carregar ficheiro

  3. Selecione Carregar/transferir ficheiros e, em seguida, selecione Carregar. Carregue azuredeploy.json e azuredeploy.parameters.json para Cloud Shell. Depois de carregar o ficheiro, pode utilizar o ls comando e o cat comando para verificar se o ficheiro é carregado com êxito.

  4. Execute o seguinte script do PowerShell para implementar o modelo.

    $projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
    $location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)"
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -TemplateFile "$HOME/azuredeploy.json" `
        -TemplateParameterFile "$HOME/azuredeploy.parameters.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    Quando implementar o modelo, utilize o mesmo grupo de recursos que utilizou no cofre de chaves. Esta abordagem facilita a limpeza dos recursos, uma vez que só precisa de eliminar um grupo de recursos em vez de dois.

Validar a implementação

Depois de implementar com êxito a máquina virtual, teste as credenciais de início de sessão com a palavra-passe armazenada no cofre de chaves.

  1. Abra o portal do Azure.

  2. Selecione Grupos de recursos><YourResourceGroupName>>simpleWinVM.

  3. Selecione Ligar na parte superior.

  4. Selecione Transferir Ficheiro RDP e, em seguida, siga as instruções para iniciar sessão na máquina virtual com a palavra-passe armazenada no cofre de chaves.

Limpar os recursos

Quando já não precisar dos recursos do Azure, limpe os recursos que implementou ao eliminar o grupo de recursos.

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

Passos seguintes

Neste tutorial, obteve um segredo do cofre de chaves do Azure. Em seguida, utilizou o segredo na implementação do modelo. Para saber como utilizar extensões de máquinas virtuais para realizar tarefas pós-implementação, consulte: