Creare un'entità servizio di Azure con Azure PowerShell
Gli strumenti automatici che usano i servizi di Azure devono sempre avere autorizzazioni limitate. Anziché avere applicazioni che accedono come utente con privilegi completi, Azure fornisce entità servizio.
Un'entità servizio di Azure è un'identità creata per l'uso con applicazioni, servizi in hosting e strumenti automatici per l'accesso alle risorse di Azure. Questo accesso è limitato dai ruoli assegnati all'entità servizio e consente quindi di definire quali risorse siano accessibili e a quale livello. Per motivi di sicurezza è sempre consigliabile usare le identità servizio per gli strumenti automatici, invece di consentire loro di accedere con un'identità utente.
Questo articolo illustra i passaggi per la creazione, l'acquisizione di informazioni correlate e il ripristino di un'entità servizio con Azure PowerShell.
Attenzione
Quando si crea un'entità servizio con il comando New-AzADServicePrincipal, l'output include credenziali che è necessario 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 di PowerShell.
- Connettersi all'account Azure con il cmdlet Connect-AzAccount.
- Se si sceglie di usare Azure Cloud Shell:
- Vedere Panoramica di Azure Cloud Shell per altre informazioni.
Creare un'entità servizio
Creare un'entità servizio con il cmdlet New-AzADServicePrincipal. Quando si crea un'entità servizio, si sceglie il tipo di autenticazione per l'accesso che verrà usata dall'entità.
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 l'account non dispone dell'autorizzazione per creare un'entità servizio, New-AzADServicePrincipal
restituisce un messaggio di errore contenente "Privilegi insufficienti per completare l'operazione". Contattare l'amministratore di Microsoft Entra per creare un'entità servizio.
In una directory microsoft Entra ID in cui l'impostazione utente Users can register applications has been set to No, you must be a member of one of the following Microsoft Entra ID built-in roles (che hanno l'azione: microsoft.directory/applications/createAsOwner
o microsoft.directory/applications/create
):
- Sviluppatore di applicazioni
- Amministratore applicazione
- Amministratore di applicazioni cloud
- Amministratore globale
- Amministratore delle identità ibride
Per altre informazioni sulle impostazioni utente in Microsoft Entra ID, vedere Limitare 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 di un'entità servizio di autenticazione basata su password è Collaboratore. Questo ruolo ha autorizzazioni complete per la lettura e la scrittura in un account di Azure. Per informazioni sulla gestione delle assegnazioni di ruolo, vedere Gestire i ruoli delle entità servizio.
Senza altri parametri di autenticazione, viene usata l'autenticazione basata su password e viene creata automaticamente una password casuale. Se si intende implementare l'autenticazione basata su password, si consiglia questo metodo.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
L'oggetto restituito contiene la PasswordCredentials.SecretText
proprietà contenente la password generata. Assicurarsi di conservare questo valore in un posto sicuro per eseguire l'autenticazione con l'entità servizio. Il valore non verrà visualizzato nell'output della console. Se si perde la password, reimpostare le credenziali dell'entità servizio.
Il codice seguente consente di esportare il segreto:
$sp.PasswordCredentials.SecretText
L'oggetto restituito da New-AzADServicePrincipal
contiene i membri Id
e DisplayName
, che possono essere entrambi usati per l'accesso con l'entità servizio.
Importante
L'accesso con un'entità servizio richiede l'ID del tenant in cui è stata creata. Per ottenere il tenant attivo quando è stata creata l'entità servizio, eseguire il comando seguente immediatamente dopo averla creata:
(Get-AzContext).Tenant.Id
Autenticazione basata su certificati
Importante
Quando viene creata, a un'entità servizio di autenticazione basata su certificato non è assegnato alcun ruolo predefinito. Per informazioni sulla gestione delle assegnazioni di ruolo, vedere Gestire i ruoli delle entità servizio.
Le entità servizio che usano l'autenticazione basata su certificato vengono create con il parametro CertValue
. Questo parametro accetta una stringa ASCII con codifica Base64 del certificato pubblico, rappresentato da un file PEM oppure da un file CRT o CER con codifica di 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 Id
proprietà e DisplayName
, che possono essere usate per l'accesso con l'entità servizio. I client che accedono con l'entità servizio devono anche accedere alla chiave privata del certificato.
Importante
L'accesso con un'entità servizio richiede l'ID del tenant in cui è stata creata. Per ottenere il tenant attivo quando è stata creata l'entità servizio, eseguire il comando seguente immediatamente dopo averla creata:
(Get-AzContext).Tenant.Id
Ottenere un'entità servizio esistente
L'elenco delle entità servizio per il tenant attivo può essere recuperato con Get-AzADServicePrincipal. Per impostazione predefinita, questo comando restituisce tutte le entità servizio in un tenant. Per le organizzazioni di grandi dimensioni, la restituzione dei risultati potrebbe richiedere molto tempo. In alternativa, è consigliabile usare gli argomenti di filtro facoltativi sul lato server:
DisplayNameBeginsWith
richiede entità di servizio che abbiano un prefisso corrispondente al valore specificato. Il nome visualizzato di un'entità servizio è il valore impostato conDisplayName
durante la creazione.DisplayName
richiede una corrispondenza esatta del nome di un'entità servizio.
Gestire i ruoli delle entità servizio
Azure PowerShell include i cmdlet seguenti per gestire le assegnazioni dei ruoli:
Per altre informazioni sul controllo degli accessi in base al ruolo e i ruoli, vedere Ruoli predefiniti per il controllo degli accessi in base al ruolo.
Nell'esempio seguente viene aggiunto il ruolo Lettore e viene rimosso il ruolo Collaboratore :
New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'
Importante
I cmdlet per l'assegnazione dei ruoli non accettano l'ID oggetto entità servizio. Accettano l'ID applicazione associato, 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". Contattare l'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, il ruolo Collaboratore deve essere rimosso.
È possibile verificare le modifiche visualizzando l'elenco dei ruoli assegnati:
Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName
Accedere con un'entità servizio
Testare le credenziali e le autorizzazioni della nuova entità servizio eseguendo l'accesso. Per accedere con un'entità servizio, è necessario il applicationId
valore associato e il tenant in cui è 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>
Per l'autenticazione basata su certificato, è necessario che Azure PowerShell sia in grado di recuperare informazioni da un archivio certificati locale in base a un'identificazione personale 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 dimenticano le credenziali per un'entità servizio, usare New-AzADSpCredential per aggiungere credenziali nuove con una password casuale. Questo cmdlet non supporta le credenziali definite dall'utente durante la reimpostazione della password.
Importante
Prima di assegnare nuove credenziali, è consigliabile rimuovere quelle esistenti per evitare che vengano usate per l'accesso. A questo 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 l'entità servizio esistente non è più necessaria, è possibile rimuoverla usando l'esempio seguente.
Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName
Questo errore può verificarsi anche quando in precedenza è stata creata un'entità servizio per un'applicazione Azure Active Directory. Se si rimuove l'entità servizio, l'applicazione rimane 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 esiste un'applicazione con lo stesso nome ma non è più necessaria, è possibile rimuoverla usando l'esempio seguente.
Remove-AzADApplication -DisplayName ServicePrincipalName
In caso contrario, scegliere un nome alternativo per la nuova entità servizio da creare.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per