Condividi tramite


Accedere a Azure PowerShell in modo non interattivo per gli scenari di automazione

Un'identità gestita in Azure offre un modo sicuro e semplice per applicazioni, servizi e strumenti di automazione per accedere alle risorse Azure senza archiviare le credenziali nel codice o nella configurazione. A differenza delle entità servizio, che richiedono la gestione manuale delle credenziali, Azure gestisce automaticamente le identità gestite e non espone segreti sensibili. L'uso di un'identità gestita è la procedura consigliata per la scrittura di script di automazione sicuri perché semplifica l'autenticazione e riduce al minimo il rischio di perdite di credenziali. Le identità gestite consentono anche di automatizzare le attività di gestione in modo sicuro senza basarsi sulle identità utente. Le autorizzazioni per le identità gestite vengono gestite tramite Microsoft Entra, assicurandosi di avere solo l'accesso necessario alle risorse, migliorando sia la sicurezza che la gestibilità.

Importante

A partire da settembre 2025, Azure PowerShell richiederà l'autenticazione a più fattori (MFA) durante l'accesso con un'identità utente Microsoft Entra ID. Questa modifica migliora la sicurezza, ma potrebbe influire sui flussi di lavoro di automazione che si basano sull'autenticazione con nome utente e password. Per altre informazioni, vedere Il impatto dell'autenticazione a più fattori sui Azure PowerShell negli scenari di automazione.

Prerequisiti

  • Installare la versione più recente del modulo Az PowerShell.

Accedere con un'identità gestita

Le identità gestite sono un tipo speciale di principale del servizio che forniscono ai servizi di Azure un'identità gestita automaticamente. L'uso di questo tipo di identità non richiede l'archiviazione delle credenziali nella configurazione o nel codice per l'autenticazione a qualsiasi servizio Azure che supporta le identità gestite.

Sono disponibili due tipi di identità gestite:

  • Identità gestita assegnata dal sistema
  • Identità gestita assegnata dall'utente

Le identità gestite offrono un modo sicuro per comunicare con altri servizi di Azure senza che gli sviluppatori debbano gestire le credenziali. Aiutano anche a ridurre il rischio di perdite di credenziali.

Ecco come funzionano le identità gestite in scenari reali:

  • Azure gestisce automaticamente la creazione e l'eliminazione delle credenziali usate dall'identità gestita.
  • Un servizio Azure abilitato con un'identità gestita può accedere in modo sicuro ad altri servizi, ad esempio Azure Key Vault, Azure SQL Database, Azure Blob Storage e così via, usando token di Microsoft Entra.
  • Questa identità viene gestita direttamente all'interno di Azure senza dover effettuare il provisioning aggiuntivo.

Le identità gestite semplificano il modello di sicurezza evitando la necessità di archiviare e gestire le credenziali e svolgono un ruolo fondamentale nelle operazioni cloud sicure riducendo il rischio associato alla gestione dei segreti.

Identità gestita assegnata dal sistema

Azure crea automaticamente un'identità gestita assegnata dal sistema per un'istanza del servizio Azure ,ad esempio una macchina virtuale Azure, un servizio app o un Azure Functions. Quando l'istanza del servizio viene eliminata, Azure pulisce automaticamente le credenziali e l'identità associata al servizio.

L'esempio seguente si connette usando un'identità gestita assegnata dal sistema dell'ambiente host. Se eseguito in una macchina virtuale con un'identità gestita assegnata, consente al codice di accedere usando l'identità assegnata.

 Connect-AzAccount -Identity

Identità gestita assegnata dall'utente

Un'identità gestita assegnata dall'utente è un'identità creata e gestita in Microsoft Entra. Può essere assegnato a una o più istanze del servizio Azure. Il ciclo di vita di un'identità gestita assegnata dall'utente viene gestito separatamente dalle istanze del servizio a cui è assegnata.

Quando si usa un'identità gestita assegnata dall'utente, è necessario specificare i parametri AccountId e Identity , come illustrato nell'esempio seguente.

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

I comandi seguenti si connettono usando l'identità gestita di . Aggiunge l'identità assegnata dall'utente alla macchina virtuale e quindi si connette usando l'ID client dell'identità assegnata dall'utente.

$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

Per altre informazioni, vedere Configurare le identità gestite per le risorse di Azure in una macchina virtuale Azure.

Accedere con un principale del servizio

Per accedere con un principale del servizio, usare il parametro ServicePrincipal del cmdlet. Sono necessarie anche le informazioni seguenti per il principale del servizio:

  • AppId
  • Credenziali di accesso o accesso al certificato usato per creare l'entità servizio
  • ID dell'inquilino

Il modo in cui accedi con un principale del servizio dipende dal fatto che sia configurata per l'autenticazione basata su certificati o su password.

Autenticazione basata su certificati

Per informazioni su come creare un'entità servizio per Azure PowerShell, vedere Creare un'entità servizio Azure con Azure PowerShell.

L'autenticazione basata su certificati richiede Azure PowerShell per recuperare informazioni da un archivio certificati locale in base a un'identificazione personale del certificato.

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

Quando si usa un'entità servizio anziché un'applicazione registrata, specificare il parametro ServicePrincipal e specificare l'AppId dell'entità servizio come valore per il parametro ApplicationId .

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

In Windows PowerShell 5.1 l'archivio certificati può essere gestito ed esaminato con il modulo PKI. Per PowerShell 7.x e versioni successive, il processo è diverso. Gli script seguenti illustrano come importare un certificato esistente nell'archivio certificati accessibile da PowerShell.

Importare un certificato in PowerShell 7.x e versioni successive

# 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()

Importare un certificato in 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

Autenticazione basata su password

Creare un'entità servizio da usare con gli esempi in questa sezione. Per altre informazioni sulla creazione di entità servizio, vedere Creare un'entità servizio Azure con Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Attenzione

Il segreto dell'entità servizio specificato viene archiviato nel file AzureRmContext.json nel profilo utente ($env:USERPROFILE\.Azure). Assicurarsi che questa directory disponga di protezioni appropriate.

Per ottenere le credenziali dell'entità servizio come oggetto, usare il Microsoft cmdlet. Questo cmdlet richiede un nome utente e una password. Utilizzare il principale del servizio per il nome utente e convertire le sue credenziali in testo normale per la password.

# 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

Per gli scenari di automazione, è necessario creare credenziali da un principale del servizio.

$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

Usare le procedure appropriate per l'archiviazione delle password durante l'automatizzazione delle connessioni del principale di servizio.

Vedere anche