Compartir a través de


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

Una entidad de servicio en Azure es una cuenta no interactiva que proporciona una identidad que usan las aplicaciones, los servicios y las herramientas de automatización para acceder a recursos específicos de Azure. La autenticación con una entidad de servicio es la mejor manera de escribir scripts seguros porque actúan como una identidad de seguridad con permisos asignados que rigen qué acciones se pueden realizar y a qué recursos se puede acceder. Las entidades de servicio ayudan a automatizar de forma segura las tareas de administración sin usar cuentas de usuario personales, lo que facilita un acceso más seguro y fácil de administrar a los recursos de Azure. Al igual que otras cuentas de usuario, administra sus permisos con Microsoft Entra. Al conceder solo los permisos que una entidad de servicio necesita, los scripts de automatización están seguros.

Prerrequisitos

Inicio de sesión con una identidad administrada

Las identidades administradas son un tipo especial de entidad de servicio que proporciona 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 necesiten administrar credenciales. También ayudan a mitigar el riesgo de pérdidas de 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). Cuando se elimina la instancia de servicio, Azure limpia automáticamente las credenciales y la identidad asociada al servicio.

En el ejemplo siguiente se conecta mediante una identidad administrada asignada por el sistema del entorno de host. Si se ejecuta en una máquina virtual con una identidad administrada asignada, permite que el código inicie sesión con la 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 servicio de Azure. El ciclo de vida de una identidad administrada asignada por el usuario se administra por separado de las instancias de servicio a las que está asignada.

Al usar una identidad administrada asignada por el usuario, debe especificar el parámetro AccountId y el parámetro 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, a continuación, 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 forma de iniciar sesión con una entidad de servicio depende de si está configurada para la autenticación basada en certificados o basada en contraseña.

Autenticación basada en certificados

Para obtener información sobre cómo crear una entidad de servicio para Azure PowerShell, consulte Creación de una entidad de servicio de Azure con Azure PowerShell.

La autenticación basada en certificados requiere Azure PowerShell para recuperar información de un almacén de certificados local basado en una huella digital de certificado.

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

Al usar un principal del servicio en lugar de una aplicación registrada, especifique el parámetro ServicePrincipal y proporcione el AppId del principal del servicio como valor para el parámetro ApplicationId.

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

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

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 cómo crear entidades de servicio, consulte Creación de una entidad de servicio de Azure con Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Cautela

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

Use procedimientos recomendados de almacenamiento de contraseñas para automatizar las conexiones de la entidad de servicio.

Consulte también