Tutorial: Uso de identidades administradas asignadas por el usuario en máquinas virtuales Windows para acceder a Azure Resource Manager

En este tutorial, se explican los pasos para crear una identidad asignada por el usuario, asignar esa identidad a una máquina virtual (VM) Windows y usarla después para acceder a la API de Azure Resource Manager. Azure administra automáticamente las identidades de servicio administradas. Estas identidades permiten autenticarse en servicios que admiten la autenticación de Microsoft Entra, sin necesidad de incluir credenciales en el código.

Aprenderá a:

  • Crear una identidad administrada asignada por el usuario
  • Asignar la identidad asignada por el usuario a la máquina virtual Windows.
  • Conceder a la identidad asignada por el usuario acceso a un grupo de recursos de Azure Resource Manager.
  • Obtener un token de acceso utilizando la identidad asignada por el usuario y usarlo para llamar a Azure Resource Manager.
  • Leer las propiedades de un grupo de recursos

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Requisitos previos

Configuración de Azure PowerShell de forma local

Para usar Azure PowerShell de forma local en este artículo (en lugar de usar Cloud Shell), complete los pasos siguientes:

  1. Instale la versión más reciente de Azure PowerShell si aún no lo ha hecho.

  2. Inicie de sesión en Azure:

    Connect-AzAccount
    
  3. Instalar la versión más reciente de PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Es posible que necesite Exit fuera de la sesión de PowerShell actual después de ejecutar este comando para el paso siguiente.

  4. Instale la versión preliminar del módulo Az.ManagedServiceIdentity con el fin de realizar las operaciones de identidad administrada que haya asignado el usuario, y que se indican en este artículo.

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Habilitar

Para un escenario basado en una identidad asignada por el usuario, debe realizar los siguientes pasos:

  • Creación de una identidad
  • Asignación de la identidad recién creada

Creación de la identidad

En esta sección se muestra cómo crear una identidad asignada por el usuario. Las identidades asignadas por el usuario se crean como recursos de Azure independientes. Mediante New-AzUserAssignedIdentity, Azure crea una identidad en el inquilino de Microsoft Entra que puede asignarse a una o varias instancias de servicio de Azure.

Importante

Al crear identidades administradas asignadas por el usuario, el nombre debe comenzar con una letra o un número, y puede incluir una combinación de caracteres alfanuméricos, guiones (-) y guiones bajos (_). Para que la asignación a una máquina virtual o un conjunto de escalado de máquinas virtuales funcione correctamente, el nombre está limitado a 24 caracteres. Para más información, consulte Preguntas más frecuentes y problemas conocidos.

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

La respuesta contiene detalles sobre la identidad asignada por el usuario que se ha creado, tal y como se muestra en el ejemplo siguiente. Anote los valores Id y ClientId de la identidad asignada por el usuario, ya que los utilizará en los siguientes pasos:

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: 733a8f0e-ec41-4e69-8ad8-971fc4b533f8
PrincipalId: e591178e-b785-43c8-95d2-1397559b2fb9
ClientId: af825a31-b0e0-471f-baea-96de555632f9
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=733a8f0e-ec41-4e69-8ad8-971fc4b533f8&oid=e591178e-b785-43c8-95d2-1397559b2fb9&aid=af825a31-b0e0-471f-baea-96de555632f9
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

Asignación de la identidad

En esta sección se muestra cómo asignar una identidad asignada por el usuario a una máquina virtual Windows. Los clientes pueden usar las identidades asignadas por el usuario en diversos recursos de Azure. Use los comandos siguientes para asociar la identidad asignada por el usuario con una única máquina virtual. Use la propiedad Id devuelta en el paso anterior para el parámetro -IdentityID.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

Conceder acceso

En esta sección se muestra cómo conceder a la identidad asignada por el usuario el acceso a un grupo de recursos de Azure Resource Manager. Identidades administradas para recursos de Azure dispone de identidades que el código puede utilizar para solicitar tokens de acceso que le permitan autenticarse en las API de recursos compatibles con la autenticación de Microsoft Entra. En este tutorial, el código accederá a la API de Azure Resource Manager.

Antes de que el código pueda acceder a la API, debe conceder a la identidad acceso a un recurso en Azure Resource Manager. En este caso, se trata del grupo de recursos que contiene la máquina virtual. Actualice el valor de <SUBSCRIPTIONID> según corresponda en su entorno.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

La respuesta contiene detalles de la asignación de roles que se ha creado, de forma similar al ejemplo siguiente:

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/f9cc753d-265e-4434-ae19-0c3e2ead62ac
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId: e591178e-b785-43c8-95d2-1397559b2fb9
ObjectType: ServicePrincipal
CanDelegate: False

Acceso a los datos

Obtención de un token de acceso

Sugerencia

Los pasos de este artículo pueden variar ligeramente en función del portal desde donde comienza.

En el resto del tutorial, trabajará desde la máquina virtual que ha creado anteriormente.

  1. Inicie sesión en Azure Portal.

  2. En el portal, vaya a Virtual Machines y diríjase a la máquina virtual Windows. A continuación, en Introducción, haga clic en Conectar.

  3. Escriba el nombre de usuario y la contraseña que usó al crear la máquina virtual Windows.

  4. Ahora que ha creado una conexión a Escritorio remoto con la máquina virtual, abra PowerShell en la sesión remota.

  5. Utilizando Invoke-WebRequest de PowerShell, realice una solicitud al punto de conexión local de identidades administradas para recursos de Azure para obtener un token de acceso de Azure Resource Manager. client_id es el valor que se devuelve al crear la identidad administrada asignada por el usuario.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=af825a31-b0e0-471f-baea-96de555632f9&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

Lectura de las propiedades

Use el token de acceso que ha recuperado en el paso anterior para acceder a Azure Resource Manager y lea las propiedades del grupo de recursos para el que ha concedido acceso a la identidad asignada por el usuario. Reemplace <SUBSCRIPTION ID> con el identificador de la suscripción de su entorno.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

La respuesta contiene la información específica del grupo de recursos, de forma similar al ejemplo siguiente:

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

Pasos siguientes

En este tutorial, ha aprendido a crear una identidad asignada por el usuario y a asociarla a una instancia de Azure Virtual Machines para acceder a la API de Azure Resource Manager. Para obtener más información sobre Azure Resource Manager, vea: