Exercício — Gerenciar segredos no modelo do ARM
No exercício anterior, você executou um modelo básico do ARM (Azure Resource Manager) que provisiona uma máquina virtual do Linux. Nesta parte, você segue um processo semelhante.
Desta vez, em vez de passar a senha como um parâmetro, você armazena a senha no Azure Key Vault. A fim de habilitar o modelo do ARM para acessar a senha, crie um arquivo de parâmetro que referencie o segredo do cofre de chaves na sua assinatura.
Implantar o Azure Key Vault
Observação
Devido às limitações da área restrita, aqui você criará um cofre de chaves no Azure Key Vault pelo portal do Azure. Normalmente, o cmdlet New-AzKeyVault
é usado para criar um cofre de chaves por meio do Azure PowerShell.
Crie um cofre de chaves e permita o acesso no momento da implantação. Para fazer isso:
Crie uma variável do PowerShell que contenha o nome do cofre de chaves:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Execute
$KVNAME
para imprimir seu valor:$KVNAME
A saída é semelhante a esta (o número será diferente):
tailwind-secrets5978564
Copie o valor em um local conveniente para a próxima etapa.
Entre no portal do Azure usando a mesma conta com a qual você ativou a área restrita.
No menu do portal do Azure ou na Página inicial, selecione Criar um recurso.
Digite Key Vault na caixa de pesquisa.
Selecione Key Vault na lista e Criar para começar a configurar o cofre de chaves.
No painel de criação, especifique estes valores:
- Grupo de recursos:
nome do grupo de recursos . - Nome do cofre de chaves: o valor de
$KVNAME
, por exemplo, tailwind-secrets5978564.
- Grupo de recursos:
Selecione Examinar + criar.
Selecione Criar. Isso deve levar cerca de um minuto. Depois de criar o recurso, selecione Ir para o recurso.
Escolha Configuração de Acesso em Configurações. Habilite a opção Azure Resource Manager para implantação de modelo e selecione Salvar.
Na sua sessão do PowerShell, execute o cmdlet
ConvertTo-SecureString
e atribua o resultado à variávelsecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Execute o comando
Set-AzKeyVaultSecret
a seguir para criar um segredo no cofre de chaves. O segredo é chamadovmPassword
, com o valorinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Criar o arquivo de parâmetros
Aqui, você cria um arquivo de parâmetros que contém o nome da VM, o nome de usuário do administrador e uma referência à senha da VM no cofre de chaves.
Você pode passar parâmetros para modelos da linha de comando. Lembre-se de que um arquivo de parâmetro é uma maneira alternativa de passar parâmetros para o modelo do ARM durante a implantação. Um arquivo de parâmetro permite que você acesse os segredos do cofre de chaves do seu modelo.
Execute o seguinte comando
Get-AzKeyVault
para imprimir a ID do cofre de chaves:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
A saída será semelhante a esta:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Observe a saída para a próxima etapa.
No Visual Studio Code, crie um arquivo chamado azuredeploy.parameters.json no mesmo diretório que contém azuredeploy.json.
Adicione esse conteúdo ao azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
Substitua o valor de
id
(a cadeia de caracteres vazia) pelo valor que você copiou na etapa anterior. Em seguida, salve o arquivo.
Implantar VM do Linux
Aqui, você implanta o mesmo modelo do ARM implantado no exercício anterior. Desta vez, você fornece o arquivo de parâmetro que faz referência à senha da VM no cofre de chaves.
Execute o seguinte comando
New-AzResourceGroupDeployment
:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
No exercício anterior, você forneceu cada par chave-valor diretamente da linha de comando. Aqui, você especifica
"./azuredeploy.parameters.json"
para fornecer o arquivo de parâmetros.O
dnsLabelPrefix
é definido comovm2-
, seguido por um número aleatório. Isso é necessário para garantir que o nome DNS seja diferente do nome DNS usado no exercício anterior.
Verificar a implantação
Verifique se a VM está provisionada e pode ser conectada via SSH. Para fazer isso:
Execute o comando
Invoke-Expression
para se conectar à VM por meio do SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
Quando solicitado, insira
yes
para continuar a se conectar. Em seguida, insira a senha do administrador,insecurepassword123!
.Importante
Na prática, mantenha as senhas seguras. Use também a autenticação de chave pública, que normalmente é mais segura do que usar senhas.
De sua conexão SSH com a VM, execute
hostname
para imprimir o nome do host da VM:hostname
Você vê o nome do host interno da VM,
vm1
:vm2
Execute
exit
para sair de sua sessão SSH.exit
Bom trabalho! Você estendeu a implantação para incluir um arquivo de parâmetros que lê informações secretas do Key Vault.
Implantar o Azure Key Vault
No Azure Key Vault, crie um cofre de chaves e adicione a senha da VM como um segredo seguro. Para fazer isso:
Crie uma variável do Bash que contenha o nome do cofre de chaves.
KVNAME=tailwind-secrets$RANDOM
Os nomes do cofre de chaves precisam ser exclusivos. A parte
$RANDOM
garante que o nome do cofre de chaves termine com uma série aleatória de números.Execute o seguinte comando
az keyvault create
para criar o cofre de chaves:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
O argumento
--enabled-for-template-deployment
permite que o modelo do ARM (Azure Resource Manager) recupere segredos do cofre de chaves.Execute o comando
az keyvault secret set
a seguir para criar um segredo no cofre de chaves. O segredo é chamadovmPassword
, com o valorinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Criar o arquivo de parâmetros
Aqui, você cria um arquivo de parâmetros que contém o nome da VM, o nome de usuário do administrador e uma referência à senha da VM no cofre de chaves.
Você pode passar parâmetros para modelos da linha de comando. Lembre-se de que um arquivo de parâmetro é uma maneira alternativa de passar parâmetros para o modelo do ARM durante a implantação. Um arquivo de parâmetro permite que você acesse os segredos do cofre de chaves do seu modelo.
Execute o seguinte comando
az keyvault show
para imprimir a ID do cofre de chaves:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
A saída será semelhante a esta:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Observe a saída para a próxima etapa.
No Visual Studio Code, crie um arquivo chamado azuredeploy.parameters.json no mesmo diretório que contém azuredeploy.json.
Adicione esse conteúdo ao azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
Substitua o valor de
id
(a cadeia de caracteres vazia) pelo valor que você copiou na etapa anterior. Em seguida, salve o arquivo.
Implantar VM do Linux
Aqui, você implanta o mesmo modelo do ARM implantado no exercício anterior. Desta vez, você fornece o arquivo de parâmetro que faz referência à senha da VM no cofre de chaves.
Execute o seguinte comando az deployment group create
para implantar o modelo:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
No exercício anterior, você forneceu cada par chave-valor no argumento --parameters
. Aqui, você especifica @azuredeploy.parameters.json
para fornecer o arquivo de parâmetros.
O dnsLabelPrefix
é definido como vm2-
, seguido por um número aleatório. Isso é necessário para garantir que o nome DNS seja diferente do nome DNS usado no exercício anterior.
Verificar a implantação
Como você fez no exercício anterior, verifique se a VM está provisionada e pode ser conectada via SSH. Para resumir, desta vez você pulará algumas das etapas intermediárias.
Execute o seguinte para se conectar à VM por SSH:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
Quando solicitado, insira
yes
para continuar a se conectar. Em seguida, insira a senha do administrador,insecurepassword123!
.De sua conexão SSH com a VM, execute
hostname
para imprimir o nome do host da VM:hostname
Você vê o nome do host interno da VM,
vm2
:vm2
Execute
exit
para sair de sua sessão SSH.exit
Bom trabalho! Você estendeu a implantação para incluir um arquivo de parâmetros que lê informações secretas do Key Vault.