Pide tu presupuesto ya!

Cómo crear entidades principales de servicio de Azure en PowerShell

En esta publicación de blog, aprenderá cómo crear una entidad de servicio de Azure mediante PowerShell, que es esencial para automatizar tareas y administrar recursos de forma segura en Azure. Recorreremos el proceso de creación de una aplicación Azure Active Directory (AD), generando un secreto de cliente y asignando los permisos necesarios para administrar máquinas virtuales (VM). Este método permite que las aplicaciones se autentiquen e interactúen de forma segura con los recursos de Azure.

Paso 1: instalar los módulos de Azure necesarios

Comience instalando el módulo necesario, `Az.Resources`, que contiene los cmdlets necesarios para administrar los recursos de Azure, incluida la creación y administración de aplicaciones y entidades de servicio de Azure AD.

Install-Module -Name Az.Resources

Paso 2: crear una aplicación de Azure AD

Ahora, cree una aplicación de Azure AD, que actúa como identidad para administrar los recursos de Azure. Aquí, creamos una aplicación llamada “VMManagement” que se utilizará para administrar máquinas virtuales.

$vmManagementApp = New-AzADApplication -DisplayName VMManagement

Paso 3: crear una entidad de servicio

Después de crear la aplicación de Azure AD, genere una entidad de servicio. Esta principal nos permite administrar recursos en Azure usando la identidad de la aplicación.

$sp = New-AzADServicePrincipal -ApplicationId $vmManagementApp.AppId

Paso 4: generar un secreto de cliente

Ahora necesitamos crear un secreto de cliente que la entidad de servicio utilizará para la autenticación. Este secreto se genera y almacena de forma segura.

$clientSecret = New-AzADAppCredential -ObjectId $vmManagementApp.Id
$clientSecret.SecretText | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath C:\AzureAppPassword.txt

Este comando crea un secreto de cliente para la aplicación y lo guarda en un formato cifrado en un archivo. Este archivo se utilizará más adelante para autenticar la aplicación.

Paso 5: asignar permisos al director de servicio

El siguiente paso es asignar las funciones necesarias a la entidad de servicio. En este caso, otorgamos el rol de “Colaborador de máquina virtual”, lo que permite que la entidad de servicio administre las máquinas virtuales.

$subscriptionId = (Get-AzSubscription).Id
New-AzRoleAssignment -ObjectId $sp.Id -RoleDefinitionName "Virtual Machine Contributor" -Scope "/subscriptions/$subscriptionId"

Esto otorga a la entidad de servicio permisos para administrar máquinas virtuales en la suscripción especificada.

Paso 6: autenticarse mediante la entidad de servicio

Para probar la autenticación, utilice el secreto del cliente almacenado anteriormente para iniciar sesión con la entidad de servicio.

$pass = (Get-Content -Path 'C:\AzureAppPassword.txt' | ConvertTo-SecureString)
$azureAppCred = New-Object System.Management.Automation.PSCredential($vmManagementApp.AppId, $pass)
$subscription = Get-AzSubscription
Connect-AzAccount -ServicePrincipal -SubscriptionId $subscription.Id -TenantId $subscription.TenantId -Credential $azureAppCred

Este comando autentica la entidad de servicio mediante el ID de la aplicación y la contraseña segura.

Paso 7: prueba la autenticación

Ahora que se ha autenticado, pruebe la autenticación recuperando una lista de máquinas virtuales en la suscripción.

Si tiene éxito, el comando devolverá una lista de máquinas virtuales, confirmando que la entidad de servicio está funcionando como se esperaba.

Paso 8: rotar los secretos del cliente

Por seguridad, es esencial rotar periódicamente los secretos de los clientes. El siguiente script automatiza este proceso, generando un nuevo secreto de cliente y eliminando el antiguo.

[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$AdApplicationName,

    [Parameter()]
    [string]$OutputFilePath = "C:\NewAzureAppPassword.txt"
)

$adApp = Get-AzADApplication -DisplayName $AdApplicationName
$sp = Get-AzADServicePrincipal -ApplicationId $adApp.AppId
$newClientSecret = New-AzADAppCredential -ObjectId $adApp.Id
$newClientSecret.SecretText | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath $OutputFilePath

$oldClientSecret = (Get-AzADApplication -DisplayName $AdApplicationName).PasswordCredentials | Sort-Object StartDateTime | select -First 1
Remove-AzADAppCredential -ApplicationId $adApp.AppId -KeyId $oldClientSecret.KeyId

Este script rota el secreto del cliente, genera uno nuevo y lo guarda de forma segura en un archivo.

Conclusión

Al seguir estos pasos, creó correctamente una entidad de servicio, le otorgó los permisos necesarios, se autenticó mediante el secreto del cliente y la probó. Además, implementó un proceso para rotar los secretos del cliente periódicamente, mejorando la seguridad de sus aplicaciones de Azure. Esta configuración garantiza que sus scripts de automatización puedan acceder y administrar de forma segura los recursos de Azure sin intervención manual.

Written by

Leave a comment