Tutorial: Integración de Azure Key Vault en la implementación de la plantilla de Resource Manager
Aprenda a recuperar los secretos de un almacén de claves de Azure y a pasarlos como parámetros durante la implementación de una plantilla de Azure Resource Manager (ARM). El valor del parámetro nunca se expone, ya que solo se hace referencia a su identificador de almacén de claves. Puede hacer referencia al secreto del almacén de claves mediante un identificador estático o un identificador dinámico. En este tutorial se usa un identificador estático. Con el método del identificador estático, se hace referencia al almacén de claves en el archivo de parámetros de plantilla, no en el archivo de plantilla. Para más información acerca de ambos métodos, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación.
En el tutorial Establecimiento del orden de implementación de los recursos, se crea una máquina virtual (VM). Deberá proporcionar el nombre de usuario y la contraseña de administrador de la VM. En lugar de proporcionar la contraseña, puede almacenar previamente la contraseña en Azure Key Vault y luego personalizar la plantilla para recuperar la contraseña desde el almacén de claves durante la implementación.
En este tutorial se describen las tareas siguientes:
- Preparación de un almacén de claves
- Apertura de una plantilla de inicio rápido
- Edición del archivo de parámetros
- Implementación de la plantilla
- Validación de la implementación
- Limpieza de recursos
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Para un módulo de Learn donde se usa un valor seguro de un almacén de claves, consulte Administración de implementaciones complejas en la nube mediante características avanzadas de la plantilla de ARM.
Prerrequisitos
Para completar este artículo, necesitará lo siguiente:
Visual Studio Code con la extensión Resource Manager Tools. Consulte Quickstart: Creación de plantillas de ARM mediante Visual Studio Code.
Para mejorar la seguridad, use una contraseña generada para la cuenta de administrador de la VM. Puede usar Azure Cloud Shell ejecutar el siguiente comando en PowerShell o Bash:
openssl rand -base64 32
Para más información, ejecute
man openssl rand
para abrir la página manual.Compruebe que la contraseña generada cumple los requisitos de contraseña de la VM. Cada servicio de Azure tiene unos requisitos de contraseña concretos. Para los requisitos de contraseña de una VM, consulte ¿Cuáles son los requisitos de contraseña cuando se crea una VM?.
Preparación de un almacén de claves
En esta sección, creará un almacén de claves y le agregará un secreto, de manera que pueda recuperar el secreto al implementar la plantilla. Un almacén de claves se puede crear de muchas maneras. En este tutorial, se usa Azure PowerShell para implementar una plantilla de Resource Manager. Esta plantilla hace dos cosas:
- Se crea un almacén de claves con la propiedad
enabledForTemplateDeployment
habilitada. El valor de esta propiedad debe ser true para que el proceso de implementación de plantilla pueda acceder a los secretos definidos en este almacén de claves. - Se agrega un secreto al almacén de claves. El secreto almacena la contraseña de administrador de la VM.
Nota:
Como el usuario que implementa la plantilla de máquina virtual, si no es el propietario o un colaborador del almacén de claves, el propietario o colaborador debe conceder acceso al permiso Microsoft.KeyVault/vaults/deploy/action
para el almacén de claves. Para más información, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación.
Para ejecutar el siguiente script de Azure PowerShell, seleccione Probar para abrir Cloud Shell. Para pegar el script, haga clic con el botón derecho en el panel del shell y, a continuación, seleccione Pegar.
$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
- Observe que el nombre del grupo de recursos es el nombre del proyecto, con rg anexado. Para que resulte más fácil limpiar los recursos que creó en este tutorial, use el mismo nombre de proyecto y de grupo de recursos al implementar la siguiente plantilla.
- El nombre predeterminado para el secreto es vmAdminPassword. Está codificado de forma rígida en la plantilla.
- Para permitir que la plantilla recupere el secreto, debe habilitar una directiva de acceso llamada Habilitar el acceso a Azure Resource Manager para la implementación de plantillas para el almacén de claves. Esta directiva está habilitada en la plantilla. Para más información sobre esta directiva de acceso, consulte Implementación de almacenes de claves y secretos.
La plantilla tiene un valor de salida denominado keyVaultId
. Usará este identificador junto con el nombre del secreto para recuperar el valor del secreto más adelante en el tutorial. El formato del identificador de recurso es:
/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>
Cuando copie y pegue el identificador, este puede dividirse en varias líneas. Combine las líneas y recorte los espacios adicionales.
Para validar la implementación, ejecute el siguiente comando de PowerShell en el mismo panel de shell para recuperar el secreto en texto no cifrado. El comando solo funciona en la misma sesión de shell, ya que usa la variable $keyVaultName
, que se define en el script de 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
Ha preparado un almacén de claves y un secreto. En las secciones siguientes se muestra cómo personalizar una plantilla existente para recuperar el secreto durante la implementación.
Apertura de una plantilla de inicio rápido
Plantillas de inicio rápido de Azure es un repositorio de plantillas de Azure Resource Manager. En lugar de crear una plantilla desde cero, puede buscar una plantilla de ejemplo y personalizarla. La plantilla que se usa en este tutorial se denomina Deploy a simple Windows VM.
En Visual Studio Code, seleccione Archivo>Abrir archivo.
En el cuadro Nombre de archivo, pegue la siguiente dirección URL:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
Seleccione Abrir para abrir el archivo. El escenario es el mismo que el que se usa en Tutorial: Creación de plantillas de Resource Manager con recursos dependientes. La plantilla define seis recursos:
- Microsoft.Storage/storageAccounts.
- Microsoft.Network/publicIPAddresses.
- Microsoft.Network/networkSecurityGroups.
- Microsoft.Network/virtualNetworks.
- Microsoft.Network/networkInterfaces.
- Microsoft.Compute/virtualMachines.
Resulta útil disponer cierto conocimientos básicos sobre la plantilla antes de personalizarla.
Seleccione Archivo>Guardar como y guarde una copia del archivo en el equipo local con el nombre azuredeploy.json.
Repita los pasos de 1 al 3 para abrir la dirección URL siguiente y luego guarde el archivo como azuredeploy.parameters.json.
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
Edición del archivo de parámetros
Al usar el método del identificador estático, no es necesario realizar ningún cambio en el archivo de plantilla. La recuperación del valor de secreto se realiza mediante la configuración del archivo de parámetros de plantilla.
En Visual Studio Code, abra azuredeploy.parameters.json si aún no está abierto.
Actualice el parámetro
adminPassword
a:"adminPassword": { "reference": { "keyVault": { "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>" }, "secretName": "vmAdminPassword" } },
Importante
Reemplace el valor de
id
por el identificador de recurso del almacén de claves que creó en el procedimiento anterior. El valor desecretName
se codifica como vmAdminPassword. Consulte Preparación de un almacén de claves.Actualice los siguientes valores:
adminUsername
: el nombre de la cuenta de administrador de la máquina virtual.dnsLabelPrefix
: Asigne un nombre al valordnsLabelPrefix
.
Para obtener ejemplos de nombres, consulte la imagen anterior.
Guarde los cambios.
Implementación de la plantilla
Inicie sesión en Cloud Shell.
Elija el entorno que prefiera; para ello, seleccione PowerShell o Bash (para CLI) en la esquina superior izquierda. Es necesario reiniciar el shell cuando realiza el cambio.
Seleccione Cargar/descargar archivos y, después, seleccione Cargar. Cargue azuredeploy.json y azuredeploy.parameters.json en Cloud Shell. Después de cargar el archivo, puede usar el comando
ls
y el comandocat
para comprobar que la operación de carga se ha realizado correctamente.Ejecute el siguiente script de PowerShell para implementar la plantilla.
$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 ..."
Al implementar la plantilla, use el mismo grupo de recursos que el que usó en el almacén de claves. Con este método, es más fácil limpiar los recursos, ya que solo se necesita eliminar un único grupo de recursos en lugar de dos.
Validación de la implementación
Después de haber implementado correctamente la máquina virtual, pruebe las credenciales de inicio de sesión con la contraseña que se almacena en el almacén de claves.
Abra Azure Portal.
Seleccione Grupos de recursos><NombreDelGrupoDeRecursos>>simpleWinVM.
Seleccione Conectar en la parte superior.
Seleccione Descargar archivo RDP y siga las instrucciones para iniciar sesión en la máquina virtual con la contraseña almacenada en el almacén de claves.
Limpieza de recursos
Cuando ya no necesite los recursos de Azure, elimine el grupo de recursos para limpiar los recursos que implementó.
$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 ..."
Pasos siguientes
En este tutorial, recuperó un secreto de Azure Key Vault. Luego, usó el secreto en la implementación de la plantilla. Para aprender a usar extensiones de máquina virtual para realizar tareas posteriores a la implementación, consulte: