Accedere ad Azure PowerShell in modo non interattivo per scenari di automazione
Un service principal in Azure è un account non-interattivo che fornisce un'identità utilizzata da applicazioni, servizi e strumenti di automazione per accedere a specifiche risorse di Azure. L'autenticazione con un'entità servizio è il modo migliore per scrivere script sicuri perché agiscono come identità di sicurezza con autorizzazioni assegnate che regolano quali azioni è possibile eseguire e quali risorse è possibile accedere. I principali del servizio consentono di automatizzare in modo sicuro le attività di gestione senza usare account utente personali, facilitando un accesso più sicuro e gestibile alle risorse di Azure. Analogamente ad altri account utente, le autorizzazioni vengono gestite con Microsoft Entra. Concedendo a un'entità servizio solo le autorizzazioni necessarie, gli script di automazione rimangono protetti.
Prerequisiti
Accedere con un'identità gestita
Le identità gestite sono un tipo speciale di entità di 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 in qualsiasi servizio di Azure che supporta le identità gestite.
Esistono 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 di Azure abilitato con un'identità gestita può accedere in modo sicuro ad altri servizi, ad esempio Azure Key Vault, database SQL di Azure, Archiviazione BLOB di Azure e così via, usando i token Microsoft Entra.
- Questa identità viene gestita direttamente in 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 di Azure, ad esempio una macchina virtuale di Azure, un servizio app o Funzioni di Azure. 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 di 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 il parametro
Connect-AzAccount -Identity -AccountId <user-assigned-identity-clientId-or-resourceId>
I comandi seguenti si collegano utilizzando l'identità gestita di myUserAssignedIdentity
. Aggiunge l'identità assegnata dall'utente alla macchina virtuale e successivamente si connette usando il ClientId 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 di Azure.
Accedere con un principale del servizio
Per accedere con un Service Principal, usare il parametro ServicePrincipal del cmdlet Connect-AzAccount
. È necessario avere anche le seguenti informazioni per il principale del servizio:
- AppId
- Credenziali di accesso o accesso al certificato usato per creare l'entità servizio
- ID Inquilino
La modalità di accesso con un principale del servizio dipende da se è configurato per l'autenticazione basata su certificato o su password.
Autenticazione basata su certificati
Per informazioni su come creare un principale del servizio per Azure PowerShell, vedere Creare un principale del servizio di Azure con Azure PowerShell.
L'autenticazione basata su certificati richiede ad Azure PowerShell di recuperare informazioni da un archivio certificati locale basandosi su un'impronta digitale del certificato.
Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>
Quando si utilizza un'entità servizio invece di un'applicazione registrata, specificare il parametro ServicePrincipal e fornire 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 e controllato con il modulo PKI
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 ulteriori informazioni sulla creazione di principali di servizio, vedere Creare un principale di servizio di 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 misure di protezione appropriate.
Per ottenere le credenziali dell'entità servizio in formato oggetto, usare il cmdlet Get-Credential
. Questo cmdlet richiede un nome utente e una password. Usare il AppId
del principale del servizio per il nome utente e convertire il suo secret
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'entità servizio utilizzando AppId
e SecretText
.
$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'automazione delle connessioni dell'entità servizio.
Vedere anche
- Creare un principale del servizio di Azure con Azure PowerShell
- Quali sono le identità gestite per le risorse di Azure?
- Assegnare l'accesso di un'identità gestita a una risorsa usando PowerShell
- Visualizzare il principale del servizio di un'identità gestita usando PowerShell
- Connect-AzAccount
- New-AzADServicePrincipal
- Get-Credential