Creare un principale del servizio di Azure con Azure PowerShell
Gli strumenti automatizzati che usano i servizi di Azure devono avere sempre autorizzazioni limitate. Anziché consentire alle applicazioni di accedere come utente con privilegi completi, Azure offre principali di servizio.
Un principale del servizio Azure è un'identità creata da utilizzare con applicazioni, servizi ospitati e strumenti automatizzati per accedere alle risorse di Azure. Questo accesso è limitato dai ruoli assegnati all'entità servizio, consentendo di controllare le risorse a cui è possibile accedere e a quale livello. Per motivi di sicurezza, è sempre consigliabile usare i principali del servizio con strumenti automatizzati, anziché consentire l'accesso con un'identità utente.
Questo articolo illustra i passaggi per creare, ottenere informazioni e reimpostare un'entità di servizio con Azure PowerShell.
Attenzione
Quando si crea un principale del servizio usando il comando New-AzADServicePrincipal, l'output include le credenziali da proteggere. In alternativa, è consigliabile usare identità gestite per evitare la necessità di usare le credenziali.
Prerequisiti
- Se si sceglie di usare Azure PowerShell in locale:
- Installare il modulo Az PowerShell.
- Connetti al tuo account Azure utilizzando il cmdlet Connect-AzAccount.
- Se si sceglie di usare Azure Cloud Shell:
- Per altre informazioni, vedere Panoramica di Azure Cloud Shell.
Creare un'entità servizio
Creare un'entità servizio con il cmdlet New-AzADServicePrincipal
Importante
A partire dal modulo Az PowerShell versione 7.x, New-AzADServicePrincipal non assegna più il ruolo Collaboratore all'entità servizio per impostazione predefinita. Per assegnare un ruolo specifico a un'entità servizio, vedere Passaggi per aggiungere un'assegnazione di ruolo.
Nota
Se il tuo account non dispone dell'autorizzazione per creare un principale del servizio, New-AzADServicePrincipal
genera un messaggio di errore contenente "Privilegi insufficienti per completare l'operazione". Contattare l'amministratore di Microsoft Entra per creare un principal di servizio.
In una directory Microsoft Entra ID in cui l'impostazione utente Gli utenti possono registrare le applicazioni è stata impostata su No, è necessario essere membri di uno dei seguenti ruoli predefiniti di Microsoft Entra ID (che hanno l'azione: microsoft.directory/applications/createAsOwner
o microsoft.directory/applications/create
):
- Sviluppatore di Applicazioni
- Amministratore di Applicazioni
- amministratore di applicazioni cloud
- amministratore globale
- Amministratore di Identità Ibride
Per ulteriori informazioni sulle impostazioni utente in Microsoft Entra ID, vedere Chi può creare applicazioni.
Esistono due tipi di autenticazione disponibili per le entità servizio: autenticazione basata su password e autenticazione basata su certificati.
Autenticazione basata su password
Importante
Il ruolo predefinito per un'entità del servizio di autenticazione basata su password è Collaboratore. Questo ruolo dispone delle autorizzazioni complete per la lettura e la scrittura in un account Azure. Per informazioni sulla gestione delle assegnazioni di ruolo, vedere Gestire i ruoli dell'entità servizio.
Senza altri parametri di autenticazione, viene usata l'autenticazione basata su password e viene creata automaticamente una password casuale. Se si vuole l'autenticazione basata su password, questo metodo è consigliato.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
L'oggetto restituito contiene la proprietà PasswordCredentials.SecretText
contenente la password generata. Assicurati di salvare questo valore in un luogo sicuro per autenticarti con il principale del servizio. Il valore non verrà visualizzato nell'output della console. Se perdi la password, reimposta le credenziali dell'entità del servizio.
Il codice seguente consente di esportare il segreto:
$sp.PasswordCredentials.SecretText
L'oggetto restituito da New-AzADServicePrincipal
contiene i membri Id
e DisplayName
, uno dei quali può essere utilizzato per accedere con il principal di servizio.
Importante
L'accesso con un'entità servizio richiede l'ID tenant in cui è stata creata l'entità servizio. Per ottenere il tenant attivo al momento della creazione dell'entità servizio, eseguire il comando seguente immediatamente dopo creazione dell'entità servizio:
(Get-AzContext).Tenant.Id
Autenticazione basata su certificati
Importante
Non viene assegnato alcun ruolo predefinito alla creazione di una principale di servizio per l'autenticazione basata su certificati. Per informazioni sulla gestione delle assegnazioni di ruolo, vedere Gestire i ruoli del principal del servizio.
I principali di servizio che usano l'autenticazione basata su certificati vengono creati con il parametro CertValue
. Questo parametro accetta una stringa ASCII con codifica Base64 del certificato pubblico. Questa operazione è rappresentata da un file PEM o da un file CRT o CER codificato in testo. Le codifiche binarie del certificato pubblico non sono supportate. Queste istruzioni presuppongono che sia già disponibile un certificato.
$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert
L'oggetto restituito da New-AzADServicePrincipal
contiene le proprietà Id
e DisplayName
, ciascuna delle quali può essere utilizzata per l'accesso con il principale del servizio. Anche i client che effettuano l'accesso con il principale del servizio devono avere accesso alla chiave privata del certificato.
Importante
L'accesso con un'entità servizio richiede l'ID tenant in cui è stata creata l'entità servizio. Per ottenere il tenant attivo al momento della creazione dell'entità servizio, eseguire il comando seguente immediatamente dopo creazione dell'entità servizio:
(Get-AzContext).Tenant.Id
Ottenere un'entità servizio esistente
È possibile recuperare un elenco di service principal per il tenant attivo con Get-AzADServicePrincipal. Per impostazione predefinita, questo comando restituisce tutte le entità servizio in un tenant. Per le organizzazioni di grandi dimensioni, potrebbe essere necessario molto tempo per restituire i risultati. È invece consigliabile utilizzare uno degli argomenti opzionali di filtro lato server:
-
DisplayNameBeginsWith
richiede principali di servizio con un prefisso che corrispondono al valore specificato. Il nome visualizzato di un principale di servizio è il valore impostato conDisplayName
durante la creazione. -
DisplayName
richiede una corrispondenza esatta di un nome di entità servizio.
Gestire i ruoli dell'entità del servizio
Azure PowerShell include i cmdlet seguenti per gestire le assegnazioni di ruolo:
- Get-AzRoleAssignment
- Nuovo-AssegnazioneRuoloAz
- remove-AzRoleAssignment
Per ulteriori informazioni sul controllo degli accessi Role-Based (RBAC) e sui ruoli, consultare RBAC: ruoli predefiniti.
Nell'esempio seguente viene aggiunto il ruolo Lettore
New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'
Importante
I cmdlet di assegnazione di ruolo non accettano l'ID oggetto dell'entità servizio. Prendono l'ID applicazione associato, che è generato al momento della creazione. Per ottenere l'ID applicazione per un'entità servizio, usare Get-AzADServicePrincipal
.
Nota
Se l'account non dispone dell'autorizzazione per assegnare un ruolo, viene visualizzato un messaggio di errore che indica che l'account "non dispone dell'autorizzazione per eseguire l'azione "Microsoft.Authorization/roleAssignments/write". Contatta il tuo amministratore di Microsoft Entra per gestire i ruoli.
L'aggiunta di un ruolo non limita le autorizzazioni assegnate in precedenza. Quando si limitano le autorizzazioni di un'entità servizio, è necessario rimuovere il ruolo di collaboratore .
Le modifiche possono essere verificate elencando i ruoli assegnati:
Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName
Accedi utilizzando un principal del servizio
Testare le credenziali e le autorizzazioni del nuovo principale del servizio effettuando l'accesso. Per accedere con un principale del servizio, è necessario il valore applicationId
associato ad esso e il tenant sotto il quale è stato creato.
Per accedere con un'entità servizio usando una password:
# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>
L'autenticazione basata su certificati richiede che Azure PowerShell possa recuperare informazioni da un archivio certificati locale in base all'impronta digitale del certificato.
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
Per istruzioni sull'importazione di un certificato in un archivio credenziali accessibile da PowerShell, vedere 'autenticazione basata su certificati
Reimpostare le credenziali
Se si sono dimenticate le credenziali per un principale del servizio, usare New-AzADSpCredential per aggiungere una nuova credenziale con una password casuale. Questo cmdlet non supporta le credenziali definite dall'utente durante la reimpostazione della password.
Importante
Prima di assegnare nuove credenziali, è possibile rimuovere le credenziali esistenti per impedire l'accesso con esse. A tale scopo, usare il cmdlet Remove-AzADSpCredential:
Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName
Risoluzione dei problemi
Se viene visualizzato l'errore: "New-AzADServicePrincipal: un altro oggetto con lo stesso valore per property identifierUris esiste già"., verificare che un'entità servizio con lo stesso nome non esista già.
Get-AzAdServicePrincipal -DisplayName ServicePrincipalName
Se il principale del servizio esistente non è più necessario, è possibile rimuoverlo seguendo questo esempio.
Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName
Questo errore può verificarsi anche quando è stata creata in precedenza un'entità servizio per un'applicazione Azure Active Directory. Se si rimuove l'entità servizio, l'applicazione è ancora disponibile. Questa applicazione impedisce di creare un'altra entità servizio con lo stesso nome.
È possibile usare l'esempio seguente per verificare che un'applicazione Microsoft Entra con lo stesso nome non esista:
Get-AzADApplication -DisplayName ServicePrincipalName
Se un'applicazione con lo stesso nome esiste e non è più necessaria, può essere rimossa usando l'esempio seguente.
Remove-AzADApplication -DisplayName ServicePrincipalName
In caso contrario, scegliere un nome alternativo per il nuovo principal del servizio che si sta tentando di creare.