Compartir a través de


Inicio de sesión en Azure PowerShell de forma no interactiva para escenarios de automatización

Una identidad administrada en Azure proporciona una manera segura y sin problemas de aplicaciones, servicios y herramientas de automatización para acceder a los recursos de Azure sin almacenar credenciales en el código o la configuración. A diferencia de las entidades de servicio, que requieren administración manual de credenciales, Azure controla automáticamente las identidades administradas y no expone secretos confidenciales. El uso de una identidad administrada es el procedimiento recomendado para escribir scripts de automatización segura porque simplifica la autenticación y minimiza el riesgo de pérdidas de credenciales. Las identidades administradas también ayudan a automatizar las tareas de administración de forma segura sin depender de identidades de usuario. Los permisos para las identidades administradas se administran a través de Microsoft Entra, lo que garantiza que solo tienen el acceso necesario a los recursos, lo que mejora la seguridad y el mantenimiento.

Importante

A partir de septiembre de 2025, Azure PowerShell requerirá autenticación multifactor (MFA) al iniciar sesión con una identidad de usuario de Id. de Microsoft Entra. Este cambio mejora la seguridad, pero puede afectar a los flujos de trabajo de automatización que dependen de la autenticación de nombre de usuario y contraseña. Para más información, consulte Impacto de la autenticación multifactor en Azure PowerShell en escenarios de automatización.

Prerrequisitos

Inicio de sesión con una identidad administrada

Las identidades administradas son un tipo especial de entidad de servicio que proporcionan los servicios de Azure con una identidad administrada automáticamente. El uso de este tipo de identidad no requiere almacenar credenciales en la configuración ni el código para autenticarse en cualquier servicio de Azure que admita identidades administradas.

Hay dos tipos de identidades administradas:

  • Identidad administrada asignada por el sistema
  • Identidad administrada asignada por el usuario

Las identidades administradas proporcionan una manera segura de comunicarse con otros servicios de Azure sin que los desarrolladores tengan que administrar credenciales. También ayudan a mitigar el riesgo de perder credenciales.

Aquí se muestra cómo funcionan las identidades administradas en escenarios reales:

  • Azure administra automáticamente la creación y eliminación de las credenciales usadas por la identidad administrada.
  • Un servicio de Azure habilitado con una identidad administrada puede acceder de forma segura a otros servicios, como Azure Key Vault, Azure SQL Database, Azure Blob Storage, etc., mediante tokens de Microsoft Entra.
  • Esta identidad se administra directamente dentro de Azure sin necesidad de aprovisionamiento adicional.

Las identidades administradas simplifican el modelo de seguridad evitando la necesidad de almacenar y administrar credenciales, y desempeñan un papel fundamental en las operaciones seguras en la nube al reducir el riesgo asociado con el control de secretos.

Identidad administrada asignada por el sistema

Azure crea automáticamente una identidad administrada asignada por el sistema para una instancia de servicio de Azure (como una máquina virtual de Azure, App Service o Azure Functions). Si se elimina la instancia del servicio, Azure elimina automáticamente las credenciales y la identidad asociada con el servicio.

Este ejemplo se conecta mediante una identidad administrada asignada por el sistema del entorno de host. Si se ejecuta en una máquina virtual que tiene asignada una identidad de administrada, esto permite que el código inicie sesión con esa identidad asignada.

 Connect-AzAccount -Identity

Identidad administrada asignada por el usuario

Una identidad administrada asignada por el usuario es una identidad que se crea y administra en Microsoft Entra. Se puede asignar a una o varias instancias de un servicio de Azure. El ciclo de vida de una identidad administrada asignada por el usuario se administra de manera independiente a las instancias de servicio de Azure a las que se asigna.

Al usar una identidad administrada asignada por el usuario, debe especificar los parámetros AccountId e Identity , como se muestra en el ejemplo siguiente.

 Connect-AzAccount -Identity -AccountId <user-assigned-identity-clientId-or-resourceId>

Los siguientes comandos se conectan mediante la identidad administrada de myUserAssignedIdentity. Agrega la identidad asignada por el usuario a la máquina virtual y, después, se conecta mediante el ClientId de la identidad asignada por el usuario.

$identity = Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroup -Name myUserAssignedIdentity
Get-AzVM -ResourceGroupName contoso -Name testvm | Update-AzVM -IdentityType UserAssigned -IdentityId $identity.Id
Connect-AzAccount -Identity -AccountId $identity.ClientId # Run on the virtual machine
Account                              SubscriptionName TenantId                             Environment
-------                              ---------------- --------                             -----------
00000000-0000-0000-0000-000000000000 My Subscription  00000000-0000-0000-0000-000000000000 AzureCloud

Para más información, consulte Configuración de identidades administradas para recursos de Azure en una máquina virtual de Azure.

Inicio de sesión con una entidad de servicio

Para iniciar sesión con un principal de servicio, use el parámetro ServicePrincipal del Connect-AzAccount cmdlet. También vas a necesitar la siguiente información para el servicio principal.

  • AppId
  • Credenciales de inicio de sesión o acceso al certificado que se usa para crear la entidad de servicio
  • Id. de inquilino

La manera de iniciar sesión con una entidad de servicio depende de si está configurada para la autenticación basada en certificado o en contraseña.

Autenticación basada en certificados

Para ver cómo crear una entidad de servicio para usarla con Azure PowerShell, consulte Creación de una entidad de servicio de Azure con Azure PowerShell.

La autenticación basada en certificados requiere que Azure PowerShell pueda recuperar información de un almacén de certificados local en función de una huella digital del certificado.

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>

Si usa una entidad de servicio en lugar de una aplicación registrada, especifique el parámetro ServicePrincipal y proporcione el identificador de aplicación de la entidad de servicio como el valor del parámetro ApplicationId.

Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>

En Windows PowerShell 5.1, el almacén de certificados puede administrarse e inspeccionarse con el módulo PKI. En PowerShell 7.x y versiones posteriores, el proceso es diferente. Los siguientes scripts muestran cómo importar un certificado existente en el almacén de certificados al que PowerShell tiene acceso.

Importación de un certificado en PowerShell 7.x y versiones posteriores

# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()

Importación de un certificado en Windows PowerShell 5.1

# Import a PFX
$credentials = Get-Credential -Message 'Provide PFX private key password'
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My

Autenticación basada en contraseña

Cree un principal de servicio para usar con los ejemplos de esta sección. Para más información sobre las entidades de servicio, consulte Creación de una entidad de servicio de Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Precaución

El secreto proporcionado de la entidad de servicio se almacena en el archivo AzureRmContext.json del perfil de usuario ($env:USERPROFILE\.Azure). Asegúrese de que este directorio tiene las protecciones adecuadas.

Para obtener las credenciales del principal de servicio como un objeto, use el cmdlet Get-Credential. Este cmdlet solicita un nombre de usuario y una contraseña. Use el valor de AppId de la entidad de servicio como nombre de usuario y convierta el valor de secret en texto sin formato para la contraseña.

# Retrieve the plain text password for use with Get-Credential in the next command.
$sp.PasswordCredentials.SecretText

$pscredential = Get-Credential -UserName $sp.AppId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

En escenarios de automatización, deberá crear las credenciales a partir de los valores de AppId y SecretText de la entidad de servicio:

$SecureStringPwd = $sp.PasswordCredentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $sp.AppId, $SecureStringPwd
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

Utilice prácticas adecuadas de almacenamiento de contraseñas al automatizar las conexiones principales.

Consulte también