Ejercicio: Administración de secretos en la plantilla de ARM
En el ejercicio anterior, ejecutó una plantilla básica de Azure Resource Manager (ARM) que aprovisiona una máquina virtual Linux. En esta parte, seguirá un proceso similar.
Esta vez, en lugar de pasar la contraseña como un parámetro, esta se almacena en Azure Key Vault. Para permitir el acceso de la plantilla de ARM a la contraseña, cree un archivo de parámetros que haga referencia al secreto del almacén de claves de su suscripción.
Implementar Azure Key Vault
Nota:
Debido a las limitaciones con el espacio aislado, aquí creará un almacén de claves en Azure Key Vault desde Azure Portal. Normalmente, usaríamos el cmdlet New-AzKeyVault
para crear un almacén de claves desde Azure PowerShell.
Cree un almacén de claves y permita el acceso en el momento de la implementación. Para ello:
Cree una variable de PowerShell que contenga el nombre del almacén de claves:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Ejecute
$KVNAME
para imprimir su valor:$KVNAME
La salida será similar a esta (el número que ve será diferente):
tailwind-secrets5978564
Copie el valor en un lugar adecuado para realizar el paso siguiente.
Inicie sesión en Azure Portal con la misma cuenta con la que activó el espacio aislado.
En el menú o en la página principal de Azure Portal, seleccione Crear un recurso.
En el cuadro de búsqueda, escriba Key Vault.
Seleccione Almacén de claves de la lista y, luego, Crear para empezar a configurar el almacén de claves.
En el panel de creación, especifique estos valores:
- Grupo de recursos:
nombre del grupo de recursos . - Nombre del almacén de claves: el valor de
$KVNAME
, por ejemplo, tailwind-secrets5978564.
- Grupo de recursos:
Seleccione Revisar + crear.
Seleccione Crear. Esto debería tardar un minuto aproximadamente. Una vez creado el recurso, seleccione Ir al recurso.
Seleccione Configuración de acceso en Configuración. Habilite la opción Azure Resource Manager para la implementación de plantillas y seleccione Aplicar.
En la sesión de PowerShell, ejecute el cmdlet
ConvertTo-SecureString
y asigne el resultado a la variablesecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Ejecute el comando
Set-AzKeyVaultSecret
siguiente para crear un secreto en el almacén de claves: El secreto se denominavmPassword
, con el valorinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Creación del archivo de parámetros
Aquí, creará un archivo de parámetros que contiene el nombre de la máquina virtual, el nombre de usuario del administrador y una referencia a la contraseña de máquina virtual en el almacén de claves.
Puede pasar parámetros a plantillas desde la línea de comandos. Recuerde que un archivo de parámetros es una forma alternativa de pasar parámetros a la plantilla de ARM durante la implementación. Un archivo de parámetros permite tener acceso a los secretos de almacén de claves desde la plantilla.
Ejecute el comando
Get-AzKeyVault
siguiente para imprimir el identificador de almacén de claves:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
La salida será similar a esta:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Tenga en cuenta la salida para realizar el paso siguiente.
En Visual Studio Code, cree un archivo llamado azuredeploy.parameters.json en el mismo directorio que contiene azuredeploy.json.
Agregue este contenido a 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" } } } }
Reemplace el valor de
id
(la cadena vacía) por el valor que copió en el paso anterior. A continuación, guarde el archivo.
Implementación de una máquina virtual Linux
Aquí, implementará la misma plantilla de ARM que implementó en el ejercicio anterior. Esta vez, debe proporcionar el archivo de parámetros que hace referencia a la contraseña de máquina virtual en el almacén de claves.
Ejecute el siguiente comando
New-AzResourceGroupDeployment
:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
En el ejercicio anterior, proporcionó cada par clave-valor directamente desde la línea de comandos. Aquí, especifica
"./azuredeploy.parameters.json"
para proporcionar el archivo de parámetros.dnsLabelPrefix
se establece envm2-
, seguido de un número aleatorio. Esto es necesario para asegurarse de que el nombre DNS difiere del nombre DNS que usó en el ejercicio anterior.
Comprobación de la implementación
Compruebe que la máquina virtual está aprovisionada y se puede conectar a través de SSH. Para ello:
Ejecute el comando
Invoke-Expression
para conectarse a la máquina virtual mediante SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
Cuando se le solicite, escriba
yes
para continuar con la conexión. A continuación, escriba la contraseña de administrador,insecurepassword123!
.Importante
En la práctica, mantenga las contraseñas seguras. También puede usar la autenticación de clave pública, que suele ser más segura que el empleo de contraseñas.
En la conexión SSH a la máquina virtual, ejecute
hostname
para imprimir el nombre de host de la máquina virtual:hostname
Verá el nombre de host interno de la máquina virtual
vm1
:vm2
Ejecute
exit
para salir de la sesión de SSH.exit
Buen trabajo. Ha ampliado la implementación para incluir un archivo de parámetros que lea información sobre el secreto de Key Vault.
Implementar Azure Key Vault
En Azure Key Vault, cree un almacén de claves y agregue la contraseña de la máquina virtual como un secreto seguro. Para ello:
Cree una variable de Bash que contenga el nombre del almacén de claves.
KVNAME=tailwind-secrets$RANDOM
Los nombres de los almacenes de claves deben ser únicos. El elemento
$RANDOM
garantiza que el nombre del almacén de claves acaba en una serie aleatoria de números.Ejecute el comando
az keyvault create
siguiente para crear el almacén de claves:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
El argumento
--enabled-for-template-deployment
permite que la plantilla de Azure Resource Manager (ARM) recupere los secretos del almacén de claves.Ejecute el comando
az keyvault secret set
siguiente para crear un secreto en el almacén de claves: El secreto se denominavmPassword
, con el valorinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Creación del archivo de parámetros
Aquí, creará un archivo de parámetros que contiene el nombre de la máquina virtual, el nombre de usuario del administrador y una referencia a la contraseña de máquina virtual en el almacén de claves.
Puede pasar parámetros a plantillas desde la línea de comandos. Recuerde que un archivo de parámetros es una forma alternativa de pasar parámetros a la plantilla de ARM durante la implementación. Un archivo de parámetros permite tener acceso a los secretos de almacén de claves desde la plantilla.
Ejecute el comando
az keyvault show
siguiente para imprimir el identificador de almacén de claves:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
La salida será similar a esta:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Tenga en cuenta la salida para realizar el paso siguiente.
En Visual Studio Code, cree un archivo llamado azuredeploy.parameters.json en el mismo directorio que contiene azuredeploy.json.
Agregue este contenido a 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" } } } }
Reemplace el valor de
id
(la cadena vacía) por el valor que copió en el paso anterior. A continuación, guarde el archivo.
Implementación de una máquina virtual Linux
Aquí, implementará la misma plantilla de ARM que implementó en el ejercicio anterior. Esta vez, debe proporcionar el archivo de parámetros que hace referencia a la contraseña de máquina virtual en el almacén de claves.
Ejecute el comando az deployment group create
siguiente para implementar la plantilla:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
En el ejercicio anterior, proporcionó cada par clave-valor en el argumento --parameters
. Aquí, especifica @azuredeploy.parameters.json
para proporcionar el archivo de parámetros.
dnsLabelPrefix
se establece en vm2-
, seguido de un número aleatorio. Esto es necesario para asegurarse de que el nombre DNS difiere del nombre DNS que usó en el ejercicio anterior.
Comprobar la implementación
Tal y como hizo en el ejercicio anterior, compruebe que la máquina virtual está aprovisionada y se puede conectar a través de SSH. Por cuestiones de brevedad, esta vez omitirá algunos de los pasos intermedios.
Ejecute lo siguiente para conectarse a la máquina virtual a través de SSH:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
Cuando se le solicite, escriba
yes
para continuar con la conexión. A continuación, escriba la contraseña de administrador,insecurepassword123!
.En la conexión SSH a la máquina virtual, ejecute
hostname
para imprimir el nombre de host de la máquina virtual:hostname
Verá el nombre de host interno de la máquina virtual
vm2
:vm2
Ejecute
exit
para salir de la sesión de SSH.exit
Buen trabajo. Ha ampliado la implementación para incluir un archivo de parámetros que lea información sobre el secreto de Key Vault.