Inicio de sesión con Azure PowerShell
Azure PowerShell admite varios métodos de autenticación. La manera más fácil de empezar a trabajar es Azure Cloud Shell, que inicia sesión automáticamente. En una instalación local, puede iniciar sesión interactivamente en el explorador. Al escribir scripts de automatización, el enfoque recomendado es usar una entidad de servicio con los permisos necesarios. Al restringir los permisos de inicio de sesión tanto como sea posible en su caso, ayuda a proteger los recursos de Azure.
Inicialmente, inicia sesión en la primera suscripción que Azure devuelve si tiene acceso a más de una suscripción. Los comandos se ejecutan en esta suscripción de forma predeterminada. Para cambiar la suscripción activa para una sesión, use el cmdlet Set-AzContext. Para cambiar la suscripción activa y hacer que persista entre las sesiones en el mismo sistema, use el cmdlet Select-AzContext.
Importante
Sus credenciales se comparten entre varias sesiones de PowerShell, siempre que permanezca con la sesión iniciada. Para más información, consulte el artículo sobre credenciales persistentes.
Inicio sesión interactivo
Para iniciar sesión de forma interactiva, utilice el cmdlet Connect-AzAccount.
Connect-AzAccount
A partir de la versión 5.0.0 del módulo Az de PowerShell, este cmdlet presenta una solicitud de inicio de sesión interactiva basada en un explorador de forma predeterminada. Puede especificar el parámetro UseDeviceAuthentication para recibir una cadena de token que antes era la predeterminada para la versión 6 de PowerShell y versiones posteriores.
Importante
La autorización con credenciales usuario/contraseña se ha quitado de Azure PowerShell debido a cambios en las implementaciones de autorización de Active Directory y a problemas de seguridad. Si usa autorización con credenciales con fines de automatización, en su lugar deberá crear una entidad de servicio.
Use el cmdlet Get-AzContext para almacenar el identificador de inquilino en una variable que se usará en las dos secciones siguientes de este artículo.
$tenantId = (Get-AzContext).Tenant.Id
Inicio de sesión con una entidad de servicio
Las entidades de servicio son cuentas de Azure no interactivas. Al igual que otras cuentas de usuario, sus permisos se administran con Azure Active Directory. Al conceder solo los permisos que una entidad de servicio necesita, los scripts de automatización están seguros.
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.
Para iniciar sesión con una entidad de servicio, utilice el parámetro ServicePrincipal del cmdlet Connect-AzAccount. También necesitará el identificador de aplicación de la entidad de servicio, las credenciales de inicio de sesión y los identificadores de los inquilinos asociados con la entidad de servicio. La manera de iniciar sesión con una entidad de servicio depende de si la ha configurado para la autenticación basada en contraseña o en certificado.
Autenticación basada en contraseña
Cree una entidad de servicio que se usará en 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
Para obtener las credenciales de la entidad de servicio en forma del objeto adecuado, utilice el cmdlet Get-Credential. Este cmdlet presenta un aviso para especificar un nombre de usuario y una contraseña. Use el valor de applicationID 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.secret | ConvertFrom-SecureString -AsPlainText
$pscredential = Get-Credential -UserName $sp.ApplicationId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
En escenarios de automatización, deberá crear las credenciales a partir de los valores de applicationId y secret de la entidad de servicio:
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential($sp.ApplicationId, $sp.Secret)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
Asegúrese de usar procedimientos recomendados de almacenamiento de contraseñas para automatizar las conexiones a la entidad de servicio.
Autenticación basada en certificados
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 PowerShell 5.1, el almacén de certificados puede administrarse e inspeccionarse con el módulo PKI. En PowerShell 6.x y versiones posteriores, el proceso es más complicado. 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 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
Importación de un certificado en PowerShell Core 6.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()
Inicio de sesión con una identidad administrada
Las identidades asignadas son una característica de Azure Active Directory. Las identidades administradas son entidades de servicio asignadas a los recursos que se ejecutan en Azure. Puede usar una entidad de servicio de identidad administrada para iniciar sesión y adquirir un token de acceso solo para aplicaciones para tener acceso a otros recursos. Las identidades administradas solo están disponibles en recursos que se ejecutan en una nube de Azure.
Este ejemplo se conecta mediante la identidad administrada del entorno de host. Por ejemplo, si se ejecuta en una máquina virtual que tiene asignada una identidad de Managed Service Identity, esto permite que el código inicie sesión con esa identidad asignada.
Connect-AzAccount -Identity
En este ejemplo, la conexión realiza mediante Managed Service Identity 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. Para más información, consulte Configuración de identidades administradas para recursos de Azure en una máquina virtual de Azure.
$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
------- ---------------- -------- -----------
yyyy-yyyy-yyyy-yyyy Subscription1 xxxx-xxxx-xxxx-xxxx AzureCloud
Inicio de sesión con un inquilino no predeterminado o como un proveedor de soluciones en la nube (CSP)
Si su cuenta está asociada con más de un inquilino, para iniciar sesión es necesario especificar el parámetro Tenant al conectarse. Este parámetro funciona con cualquier método de inicio de sesión. Al iniciar sesión, el valor de este parámetro puede ser el identificador de objeto del inquilino de Azure (Id. de inquilino) o el nombre de dominio completo del inquilino.
Si es un proveedor de soluciones en la nube (CSP), el valor del parámetro Tenant debe ser un identificador de inquilino.
Connect-AzAccount -Tenant '00000000-0000-0000-0000-000000000000'
Inicio de sesión en otra nube
Los servicios en la nube de Azure ofrecen a los entornos compatibles normas regionales de control de datos. Para las cuentas en una nube regional, establezca el entorno al iniciar sesión con el parámetro Environment. Este parámetro funciona con cualquier método de inicio de sesión. Por ejemplo, si su cuenta está en Azure China 21Vianet:
Connect-AzAccount -Environment AzureChinaCloud
El comando siguiente obtiene una lista de los entornos disponibles:
Get-AzEnvironment | Select-Object -Property Name