Condividi tramite


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é far accedere le applicazioni come utenti con privilegi completi, Azure offre principali del servizio.

Una principalità di servizio di Azure è un'identità creata per essere utilizzata con applicazioni, servizi ospitati e strumenti automatizzati per accedere alle risorse di Azure. Questo accesso è limitato dai ruoli assegnati al principale del servizio, permettendo di controllare le risorse a cui è possibile accedere e a quale livello. Per motivi di sicurezza, è sempre consigliabile utilizzare i principali del servizio attraverso strumenti di automazione piuttosto che permettere loro di accedere con un'identità utente.

Questo articolo illustra i passaggi per la creazione, il recupero di informazioni e la reimpostazione di un'entità servizio con Azure PowerShell.

Cautela

Quando crei un'entità servizio utilizzando il comando New-AzADServicePrincipal, l'output include credenziali che devi proteggere. In alternativa, è consigliabile usare identità gestite per evitare la necessità di usare le credenziali.

Prerequisiti

Creare un'entità servizio

Creare un'entità servizio con il cmdlet New-AzADServicePrincipal. Quando si crea un principale del servizio, si sceglie il tipo di autenticazione di accesso che utilizza.

Importante

A partire dal modulo Az PowerShell versione 7.x, New-AzADServicePrincipal non assegna più di default il ruolo Contributore all'entità servizio. Per assegnare un ruolo specifico a un principale del servizio, consultare 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 che permette agli utenti di registrare 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):

Per ulteriori informazioni sulle impostazioni utente in Microsoft Entra ID, vedere Restrizioni su 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à di 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 del principale del 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. Assicurarsi di archiviare questo valore in un punto sicuro per l'autenticazione con l'entità servizio. Il suo valore non sarà visualizzato nell'output della console. Se perdi la password, reimposta le credenziali del principale 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, ciascuno dei quali può essere utilizzato per l'accesso con il principale del 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 del principal del servizio, eseguire immediatamente il seguente comando dopo la creazione del principal del servizio:

(Get-AzContext).Tenant.Id

Autenticazione basata su certificati

Importante

Non è assegnato alcun ruolo predefinito durante la creazione di un principale del servizio di autenticazione basato su certificato. Per informazioni sulla gestione delle assegnazioni di ruolo, vedere Gestire i ruoli del principale del servizio.

Le entità servizio che usano l'autenticazione basata su certificati vengono create 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 la connessione con l'entità servizio. Anche i client che effettuano l'accesso con il principal 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 principali del servizio 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 usare uno degli argomenti di filtro sul lato server facoltativi:

  • DisplayNameBeginsWith richiede le entità servizio che hanno un prefisso e che coincidono con il valore fornito. Il nome visualizzato di un principale del servizio è il valore impostato con DisplayName durante la creazione.
  • DisplayName richiede una corrispondenza esatta di un nome principale del servizio.

Gestire i ruoli del principale del servizio

Azure PowerShell include i cmdlet seguenti per gestire le assegnazioni di ruolo:

Per altre informazioni sui ruoli e il controllo degli accessi in base al ruolo Role-Based, vedere controllo degli accessi in base al ruolo: ruoli predefiniti.

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 di assegnazione di ruolo non accettano l'ID oggetto dell'entità servizio. Prendono l'ID dell'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, è necessario rimuovere il ruolo Collaboratore.

Le modifiche possono essere verificate elencando i ruoli assegnati:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Accedere con un principale del servizio

Testare le credenziali e le autorizzazioni del nuovo principale servizio effettuando l'accesso. Per accedere con un principale del servizio, è necessario il valore applicationId ad esso associato e il tenant sotto il quale è stato creato.

Per accedere con un principale del servizio utilizzando 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 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à 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 l'entità servizio esistente non è più necessaria, è possibile rimuoverla usando l'esempio seguente.

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 il principale del servizio, l'applicazione è ancora disponibile. Questa applicazione impedisce di creare un altro principale del 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 principale del servizio che si sta tentando di creare.