Tutorial: Integrar o Azure Key Vault em sua implantação de modelo ARM
Saiba como recuperar segredos de um cofre de chaves do Azure e passar os segredos como parâmetros ao implantar um modelo do Azure Resource Manager (modelo ARM). O valor do parâmetro nunca é exposto, porque você faz referência apenas ao ID do cofre da chave. Você pode fazer referência ao segredo do cofre de chaves usando uma ID estática ou uma ID dinâmica. Este tutorial usa uma ID estática. Com a abordagem de ID estático, você faz referência ao cofre de chaves no arquivo de parâmetros de modelo, não no arquivo de modelo. Para obter mais informações sobre ambas as abordagens, consulte Usar o Cofre da Chave do Azure para passar o valor do parâmetro seguro durante a implantação.
No tutorial Definir ordem de implantação de recursos, você cria uma máquina virtual (VM). Você precisa fornecer o nome de usuário e a senha do administrador da VM. Em vez de fornecer a senha, você pode pré-armazenar a senha em um cofre de chaves do Azure e, em seguida, personalizar o modelo para recuperar a senha do cofre de chaves durante a implantação.
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
- Clean up resources (Limpar recursos)
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Para obter um módulo do Learn que usa um valor seguro de um cofre de chaves, consulte Gerenciar implantações complexas na nuvem usando recursos avançados de modelo ARM.
Pré-requisitos
Para concluir este artigo, precisa de:
Visual Studio Code com extensão Ferramentas do Resource Manager. Consulte Guia de início rápido: criar modelos ARM com o Visual Studio Code.
Para aumentar a segurança, use uma senha gerada para a conta de administrador da VM. Você pode usar o Azure Cloud Shell para executar o seguinte comando no PowerShell ou no Bash:
openssl rand -base64 32
Para saber mais, execute
man openssl rand
para abrir a página de manual.Verifique se a senha gerada atende aos requisitos de senha da VM. Cada serviço do Azure tem requisitos de palavra-passe específicos. Para obter os requisitos de senha da VM, consulte Quais são os requisitos de senha ao criar uma VM?.
Preparar um cofre de chaves
Nesta seção, você cria um cofre de chaves e adiciona um segredo a ele, para que possa recuperá-lo quando implantar seu modelo. Há muitas maneiras de criar um cofre de chaves. Neste tutorial, você usa o Azure PowerShell para implantar um modelo ARM. Este modelo faz duas coisas:
- Cria um cofre de chaves com a
enabledForTemplateDeployment
propriedade ativada. Essa propriedade deve ser true antes que o processo de implantação do modelo possa acessar os segredos definidos no cofre de chaves. - Adiciona um segredo ao cofre de chaves. O segredo armazena a senha de administrador da VM.
Nota
Como o usuário que está implantando o modelo de máquina virtual, se você não for o Proprietário ou um Colaborador do cofre de chaves, o Proprietário ou um Colaborador deverá conceder acesso à Microsoft.KeyVault/vaults/deploy/action
permissão para o cofre de chaves. Para obter mais informações, consulte Usar o Cofre da Chave do Azure para passar um valor de parâmetro seguro durante a implantação.
Para executar o seguinte script do Azure PowerShell, selecione Experimentar para abrir o Cloud Shell. Para colar o script, clique com o botão direito do mouse no painel do shell e 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 a ele. Para facilitar a limpeza dos recursos criados neste tutorial, use o mesmo nome de projeto e o mesmo nome de grupo de recursos ao implantar o próximo modelo.
- O nome padrão para o segredo é vmAdminPassword. É codificado no modelo.
- Para habilitar o modelo para recuperar o segredo, você deve habilitar uma política de acesso chamada Habilitar acesso ao Gerenciador de Recursos do Azure para implantação de modelo para o cofre de chaves. Esta política está habilitada no modelo. Para obter mais informações sobre a política de acesso, consulte Implantar cofres de chaves e segredos.
O modelo tem um valor de saída, chamado keyVaultId
. Você usará esse ID junto com o nome secreto para recuperar o valor secreto mais adiante no tutorial. O formato de ID do recurso é:
/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>
Quando você copia e cola o ID, ele pode ser dividido em várias linhas. Mescle as linhas e corte os espaços extras.
Para validar a implantação, execute o seguinte comando do PowerShell no mesmo painel do shell para recuperar o segredo em texto não criptografado. O comando funciona apenas na mesma sessão de shell, porque usa a variável $keyVaultName
, que é definida no script PowerShell anterior.
$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 você preparou um cofre de chaves e um segredo. As seções a seguir mostram como personalizar um modelo existente para recuperar o segredo durante a implantaçã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 ARM. Em vez de criar um modelo do zero, pode encontrar um modelo de exemplo e personalizá-lo. O modelo usado neste tutorial é chamado Implantar uma VM simples do Windows.
No Visual Studio Code, selecione File>Open File.
Na caixa Nome do arquivo , cole o seguinte URL:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
Selecione Abrir para abrir o ficheiro. O cenário é o mesmo usado em Tutorial: Criar modelos ARM com recursos dependentes. O modelo define seis recursos:
- Microsoft.Storage/storageAccounts.
- Microsoft.Network/publicIPAddresses.
- Microsoft.Network/networkSecurityGroups.
- Microsoft.Network/virtualNetworks.
- Microsoft.Network/networkInterfaces.
- Microsoft.Compute/virtualMachines.
É útil ter alguma compreensão básica do modelo antes de personalizá-lo.
Selecione Guardar Ficheiro>Como e, em seguida, guarde uma cópia do ficheiro no computador local com o nome azuredeploy.json.
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
Usando o método de ID estático, você não precisa fazer nenhuma alteração no arquivo de modelo. A recuperação do valor secreto é feita configurando o arquivo de parâmetro do modelo.
No Visual Studio Code, abra azuredeploy.parameters.json se ainda não estiver aberto.
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 for
id
pelo ID do recurso do cofre de chaves que você criou no procedimento anterior. OsecretName
é codificado como vmAdminPassword. Consulte Preparar um cofre de chaves.Atualize os seguintes valores:
adminUsername
: O nome da conta de administrador da máquina virtual.dnsLabelPrefix
: Nomeie odnsLabelPrefix
valor.
Para obter exemplos de nomes, consulte a imagem anterior.
Guarde as alterações.
Implementar o modelo
Faça login no Cloud Shell.
Escolha seu ambiente preferido selecionando PowerShell ou Bash (para CLI) no canto superior esquerdo. É necessário reiniciar o Shell quando mudar.
Selecione Carregar/transferir ficheiros e, em seguida, selecione Carregar. Carregue azuredeploy.json e azuredeploy.parameters.json para o Cloud Shell. Depois de carregar o arquivo, você pode usar o
ls
comando e ocat
comando para verificar se o arquivo foi carregado com êxito.Execute o seguinte script do PowerShell para implantar 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 ..."
Ao implantar o modelo, use o mesmo grupo de recursos usado no cofre de chaves. Essa abordagem facilita a limpeza dos recursos, pois é necessário excluir apenas um grupo de recursos em vez de dois.
Validar a implementação
Depois de implantar com êxito a máquina virtual, teste as credenciais de entrada usando a senha armazenada no cofre de chaves.
Abra o portal do Azure.
Selecione Grupos><de recursos YourResourceGroupName>>simpleWinVM.
Selecione Conectar na parte superior.
Selecione Baixar arquivo RDP e siga as instruções para entrar na máquina virtual usando a senha armazenada no cofre de chaves.
Clean up resources (Limpar recursos)
Quando não precisar mais dos recursos do Azure, limpe os recursos implantados excluindo 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 ..."
Próximos passos
Neste tutorial, você recuperou um segredo do seu cofre de chaves do Azure. Em seguida, você usou o segredo na implantação do modelo. Para saber como usar extensões de máquina virtual para executar tarefas pós-implantação, consulte: