Cómo apagar una VM de Azure con un Script
Apagar una Vm o encenderla utilizando un script no parece complejo, sin embargo, para conectarse a Azure en forma segura hay que cumplir ciertos requisitos.
En este post voy a mostrar cómo conectarse a Azure en forma segura, y sin crededenciales, para una operación sencilla como apagar una VM.
Tener presente que se utilizará autenticación basada en certificados, y los certificados expiran, por lo tanto, hay que anotar en alguna parte la fecha para renovarlo, sino nuestros script fallarán.
Este método es preferido porque evitas tener que almacenar credenciales, en especial si el tenant tiene multi factor auth (MFA) o políticas de seguridad adicionales.
Este documento está basado en los módulos de Az para Powershell
I. Instalar el módulo Az.compute
Este módulo es la nueva forma de conectarse a azure, y reemplaza a AzureRM. Los comandos de AzureRM ya no se podrán utilizar despuésd de febrero de 2024.
Ejecuta en powershell
install-module Az.compute
Si por alguna razón recibes errores relacionados a NuGet, te recomiendo validar si ese Powershell está actualizado y se puede conectar mediante TLS 1.2 o superior. Ahora Microsoft no admite conexiones anteriores a esa versión. Para estar seguro, ejecuta primero en esa ventana de Powershell:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Una vez realizado, vuelve a ejecutar el comando de instalación, y no deberías recibir errores.
II. Instalar módulo az.resources
Este módulo es necesario para crear la aplicación en Azure
install-module az.resources
III. Importar los módulos
ejecuta los comandos
import-module az.compute
import-module az.resources
IV. Creación del certificado autofirmado
Para crear el certificado, primero tendrás que conectarte mediante el método tradicional de credenciales.
Connect-AzAccount
Aparecerá una ventana para introducir credenciales. Una vez autorizado, te habrás conecatado a tu Tenant de Azure.
Modifica el código pde acuerdo a tu necesidad. En este caso el Subject es "ScriptAzure2021" y estará almacenado en el contenedor del usuario actual de la Máquina desde la cual vas a ejecutar los scripts remotos.
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" `
-Subject "CN=ScriptAzure2021" `
-KeySpec KeyExchange
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
#########
V. Creación del App en Azure
#El siguiente comando es para crear el ServicePrincipal.
#Modifica el DisplayName de acuerdo a tus necesidades
$sp = New-AzADServicePrincipal -DisplayName appAzure001 `
-CertValue $keyValue `
-EndDate $cert.NotAfter `
-StartDate $cert.NotBefore
##Espera un minuto antes de continuar. Puedes ingresar al portal Azure, y ver si se creó la App.
## Revisa en "Enterprise Applications - All applications"
VI. Asignación de permisos
Si necesitas realizar cambios en las VM, como apagar o encender, recomiendo el rol Contributor, pero puedes elegir otro. Este es el nivel de permisos que tendrá tu conexión de Scripts.
New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $sp.ApplicationId
VII. Probar conexión
Para probar la conexión, y crear tu script básico. Debes llenar los datos adecuadamente.
$Thumbprint = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
#corresponde al thumbprint de tu certificado autofirmado
$TenantId = 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyy'
#Tu tenant ID de Azure. Lo puedes consultar ingresando a AzureAD
$ApplicationId = '00000000-0000-0000-0000-00000000'
#El application ID de tu aplicación, se puede consultar en "Enterprise Applications - All applications" y filtrando por el DisplayName.
Connect-AzAccount -CertificateThumbprint $Thumbprint -ApplicationId $ApplicationId -Tenant $TenantId -ServicePrincipal
Ahora que estás conectado, puedes ejecutar tareas como apagar una máquina.
Stop-AzVM -ResourceGroupName "ResourceGroup11" -Name "VirtualMachine07"
Guarda tu script como archvo.ps1
Para invocar tu script, puedes usar un .bat con esta sintaxis de ejemplo:
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command "& 'C:\micarpeta\Script-ejemplo.ps1'"
Finalmente, te reitero que recuerdes que debes renovar el certificado cuando expire.
Fuentes:
Comments
Post a Comment