Exercício – Gerir segredos no modelo do ARM
No exercício anterior, executou um modelo do Azure Resource Manager (ARM) básico que aprovisiona uma máquina virtual do Linux. Nesta parte, seguirá um processo semelhante.
Desta vez, em vez de transmitir a palavra-passe como parâmetro, vai armazená-la no Azure Key Vault. Para permitir que o modelo do ARM aceda à palavra-passe, tem de criar um ficheiro de parâmetros que faça referência ao segredo do cofre de chaves na subscrição.
Implementar o Azure Key Vault
Nota
Devido às limitações com o sandbox, vai criar aqui um cofre de chaves no Azure Key Vault a partir do portal do Azure. Normalmente, utilizaria o cmdlet New-AzKeyVault
para criar um cofre de chaves do Azure PowerShell.
Crie um cofre de chaves e permita o acesso durante a implementação. Para tal:
Crie uma variável do PowerShell que contém o nome do cofre de chaves:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Execute
$KVNAME
para imprimir o valor:$KVNAME
A saída é semelhante a esta (o número que vê será diferente):
tailwind-secrets5978564
Copie o valor para algum lugar conveniente para o próximo passo.
Inicie sessão no portal do Azure com a mesma conta que utilizou para ativar o sandbox.
No menu do portal do Azure ou a partir da Home Page, selecione Criar um recurso.
Na caixa de pesquisa, introduza Key Vault.
Selecione Key Vault na lista e selecione 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 da chave: seu valor de
$KVNAME
, por exemplo, tailwind-secrets5978564.
- Grupo de recursos:
Selecione Rever + criar.
Selecione Criar. Esta ação deve demorar cerca de um minuto. Quando o recurso tiver sido criado, selecione Aceder ao recurso.
Selecione Configuração de acesso em Configurações. Habilite a opção Azure Resource Manager para implantação de modelo e selecione Aplicar.
Na sessão do PowerShell, execute o cmdlet
ConvertTo-SecureString
e atribua o resultado à variávelsecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Execute o seguinte comando
Set-AzKeyVaultSecret
para criar um segredo no cofre de chaves. O segredo tem o nomevmPassword
, com o valorinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Criar o ficheiro de parâmetros
Vai agora criar um ficheiro de parâmetros que contém o nome da VM, o nome de utilizador do administrador e uma referência à palavra-passe da VM no cofre de chaves.
Pode transmitir os parâmetros aos modelos na linha de comandos. Lembre-se de que um ficheiro de parâmetros é uma forma alternativa de transmitir parâmetros ao modelo do ARM durante a implementação. Um ficheiro de parâmetros permite que aceda aos segredos do cofre de chaves no modelo.
Execute o seguinte comando
Get-AzKeyVault
para imprimir o ID do cofre de chaves:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
A saída é semelhante ao seguinte:
/subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Anote a saída para utilizar no próximo passo.
No Visual Studio Code, crie um ficheiro chamado azuredeploy.parameters.json no mesmo diretório que contém azuredeploy.json.
Adicione estes conteúdos 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 carateres vazia) pelo valor que copiou no passo anterior. Em seguida, guarde o ficheiro.
Implementar uma VM do Linux
Vai agora implementar o mesmo modelo do ARM que implementou no exercício anterior. Desta vez, vai disponibilizar o ficheiro de parâmetros que faz referência à palavra-passe 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, indicou cada par chave-valor diretamente na linha de comandos. Aqui, vai especificar
"./azuredeploy.parameters.json"
para proporcionar o ficheiro de parâmetros.O
dnsLabelPrefix
é definido comovm2-
, seguido de um número aleatório. Tal é necessário para garantir que o nome DNS é diferente do nome DNS utilizado no exercício anterior.
Verificar a implementação
Verifique se a VM está aprovisionada e se pode ligar-se via SSH. Para tal:
Execute o comando
Invoke-Expression
para se ligar à VM via SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
Quando solicitado, entre
yes
para continuar a se conectar. Em seguida, digite a senha de administrador,insecurepassword123!
.Importante
Na prática, mantenha as palavras-passe seguras. Também pode utilizar a autenticação de chave pública, que normalmente é mais segura do que utilizar palavras-passe.
Na ligação SSH com a VM, execute
hostname
para imprimir o nome do anfitrião da VM:hostname
Você vê o nome de host interno da VM,
vm1
:vm2
Execute
exit
para sair da sessão SSH.exit
Bom trabalho! Estendeu a implementação para incluir um ficheiro de parâmetros que lê informações secretas do Key Vault.
Implementar o Azure Key Vault
No Azure Key Vault, crie um cofre de chaves e adicione a palavra-passe da VM como um segredo seguro. Para tal:
Crie uma variável do Bash com o nome do cofre de chaves.
KVNAME=tailwind-secrets$RANDOM
Os nomes dos cofres de chaves têm de ser exclusivos. A parte
$RANDOM
garante que o nome do cofre de chaves termina numa série de números aleatória.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 Azure Resource Manager (ARM) obtenha os segredos do cofre de chaves.Execute o seguinte comando
az keyvault secret set
para criar um segredo no cofre de chaves. O segredo tem o nomevmPassword
, com o valorinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Criar o ficheiro de parâmetros
Vai agora criar um ficheiro de parâmetros que contém o nome da VM, o nome de utilizador do administrador e uma referência à palavra-passe da VM no cofre de chaves.
Pode transmitir os parâmetros aos modelos na linha de comandos. Lembre-se de que um ficheiro de parâmetros é uma forma alternativa de transmitir parâmetros ao modelo do ARM durante a implementação. Um ficheiro de parâmetros permite que aceda aos segredos do cofre de chaves no modelo.
Execute o seguinte comando
az keyvault show
para imprimir o ID do cofre de chaves:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
A saída é semelhante ao seguinte:
/subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Anote a saída para utilizar no próximo passo.
No Visual Studio Code, crie um ficheiro chamado azuredeploy.parameters.json no mesmo diretório que contém azuredeploy.json.
Adicione estes conteúdos 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 carateres vazia) pelo valor que copiou no passo anterior. Em seguida, guarde o ficheiro.
Implementar uma VM do Linux
Vai agora implementar o mesmo modelo do ARM que implementou no exercício anterior. Desta vez, vai disponibilizar o ficheiro de parâmetros que faz referência à palavra-passe da VM no cofre de chaves.
Para implementar o modelo, execute o seguinte comando az deployment group create
:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
No exercício anterior, indicou cada par chave-valor no argumento --parameters
. Aqui, vai especificar @azuredeploy.parameters.json
para proporcionar o ficheiro de parâmetros.
O dnsLabelPrefix
é definido como vm2-
, seguido de um número aleatório. Tal é necessário para garantir que o nome DNS é diferente do nome DNS utilizado no exercício anterior.
Verificar a implementação
Tal como fez no exercício anterior, verifique se a VM está aprovisionada e se pode ligar-se via SSH. Para resumir, desta vez, vai ignorar alguns dos passos intermédios.
Execute o seguinte para se ligar à VM por SSH:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
Quando solicitado, entre
yes
para continuar a se conectar. Em seguida, digite a senha de administrador,insecurepassword123!
.Na ligação SSH com a VM, execute
hostname
para imprimir o nome do anfitrião da VM:hostname
Você vê o nome de host interno da VM,
vm2
:vm2
Execute
exit
para sair da sessão SSH.exit
Bom trabalho! Estendeu a implementação para incluir um ficheiro de parâmetros que lê informações secretas do Key Vault.