Quando hai bisogno di automatizzare compiti in Azure con script e strumenti, prendi in considerazione l’utilizzo di account di servizio o principali servizio di Azure? Non è raro che alcuni creino un nuovo account di servizio, gli assegnino tutti i ruoli di amministratore desiderati ed escludano l’autenticazione multifattore.
I know what you’re thinking – “that is a horrible idea”. Of course, it is! And for sure, your IT Sec will give you a lot of grief if you did all that.
Ma qual è l’alternativa? Come puoi utilizzare una credenziale privilegiata con un ambito limitato che non deve essere esclusa dall’autenticazione multifattore? Sei fortunato perché è proprio di questo che tratterà questo articolo.
In questo articolo, scoprirai cosa è un Principale servizio di Azure. Imparerai come creare principali servizio con diversi tipi di credenziali, come password, chiavi segrete e certificati.
Esistono molti strumenti per creare Principali servizio di Azure. Questi includono l’utilizzo del Portale di Azure, del Centro di amministrazione di Azure Active Directory, di Azure AD PowerShell, di Azure CLI e di Azure PowerShell. Lo strumento su cui si concentrerà questo articolo è Azure PowerShell.
Ancora interessato? Continua a leggere e iniziamo!
Requisiti
Poiché questo è un articolo di apprendimento pratico, ecco alcuni prerequisiti in modo che tu possa seguire.
- Accesso a un abbonamento Azure. Sarebbe meglio se lavorassi su un tenant di test. Se non ne hai uno, puoi registrarti per una prova gratuita.
- Accesso a un computer con Windows 10 con PowerShell 5.1.
- Deve essere installato il modulo PowerShell di Azure (Azure PowerShell module).
Azure Service Principal vs. Service Account
Gli strumenti e gli script di automazione spesso richiedono accesso amministrativo o privilegiato. Ad esempio, la creazione di account di archiviazione o l’avvio e l’arresto di macchine virtuali in base a un programma. E la maggior parte degli amministratori probabilmente utilizza un account utente completamente privilegiato (chiamato account di servizio) per impostare i requisiti di autenticazione per gli script.
A service account is essentially a privileged user account used to authenticate using a username and password. And, if used with automation, a service account is most likely excluded from any conditional access policies or multi-factor authentication.
D’altra parte, un Azure service principal può essere configurato per utilizzare un nome utente e una password o un certificato per l’autenticazione. Pensalo come un’identità utente senza un utente, ma piuttosto come un’identità per un’applicazione.
Un Azure service principal può essere assegnato solo con l’accesso necessario, ad esempio a una singola risorsa Azure specifica. Ad esempio, puoi creare un Azure service principal che ha accesso basato sui ruoli a un’intera sottoscrizione o solo a una singola macchina virtuale Azure.
Considerazioni principali per la creazione di Azure Service Principals
Prima di creare un Azure service principal, è necessario conoscere i dettagli di base che è necessario pianificare. Questi dettagli possono sembrare semplici, ma renderanno la creazione di un Azure service principal efficiente e facile possibile.
Il nome visualizzato. Tutto inizia con un nome e un Azure service principal deve avere un nome. Non ci sono regole fisse, ma la tua organizzazione potrebbe avere una convenzione di denominazione prescritta.
- Il tipo di credenziale da utilizzare. Puoi scegliere di creare un Azure service principal che utilizzerà una password o un certificato per l’autenticazione. Questo non significa che puoi sceglierne solo uno, puoi usarli entrambi.
Per i service principal, il nome utente e la password sono più appropriatamente indicati come ID applicazione e chiave segreta.
- Il periodo di validità della/e credenziale/i. Sia che si stia assegnando una password o una credenziale di certificato, è necessario definire una data di inizio e di fine per la sua validità. La durata di validità di una credenziale dipende generalmente da quanto spesso si è disposti a ruotare/rinnovare certificati e password.
- L’ambito di accesso. Stai creando un Azure service principal che avrà accesso a una sottoscrizione, a un gruppo di risorse o a risorse selezionate?
- Il ruolo. Ci sono diversi ruoli disponibili, come Contributor, Reader e Owner, per citarne alcuni. È necessario definire quale ruolo sia “sufficiente” per il service principal.
Creazione di un Azure Service Principal con una chiave segreta assegnata automaticamente
Il cuore della creazione di un nuovo service principal in Azure è il cmdlet New-AzAdServicePrincipal
. In questo esempio, verrà creato un nuovo service principal con questi valori:
DisplayName: AzVM_Reader
Scope: AzVM1 (Macchina virtuale)
Ruolo: Reader
Password: <assegnato automaticamente>
Validità delle credenziali: 1 anno
Ottieni l’ID del target scope (macchina virtuale)
Come puoi vedere, lo scope di questo nuovo service principal è solo per la macchina virtuale chiamata AzVM1. Tuttavia, il parametro -Scope
non accetta solo il nome, ma l’intero ID della risorsa. Quindi, in questo esempio, la prima cosa da fare è ottenere l’ID della macchina virtuale AzVM1. Per farlo, utilizza il codice di seguito riportato.
Quando esegui il codice sopra riportato in PowerShell, dovresti vedere l’elenco dei nomi e degli ID delle macchine virtuali, simile alla schermata riportata di seguito.

Creazione dell’Azure Service Principal con chiave segreta
Ora che hai l’ID del target scope, che è l’ID della macchina virtuale AzVM1, puoi utilizzare il comando riportato di seguito per creare il nuovo service principal che ha il ruolo reader. Le proprietà del nuovo service principal verranno memorizzate nella variabile $sp
.
Come risultato del comando sopra riportato, il service principal è stato creato con questi valori riportati di seguito.

Decrittazione della chiave segreta
Ora hai l’ApplicationID e il Segreto, che sono il nome utente e la password del servizio principale. Tuttavia, il valore del Segreto viene mostrato come System.Security.SecureString. Per conoscere il segreto, utilizza il comando seguente per convertire il segreto in testo normale.
Il comando precedente converte il valore della stringa sicura $sp.Secret
in testo normale. Vedi l’immagine di seguito come riferimento.

Verifica dell’assegnazione del ruolo del servizio principale di Azure
Come puoi sapere se ha funzionato? Puoi verificare la lista di controllo degli accessi della risorsa utilizzando il portale di Azure. Ad esempio, nell’immagine di seguito, puoi vedere che il servizio principale AzVM_Reader ha ora l’accesso Reader alla macchina virtuale AzVM1.

Inoltre, puoi utilizzare il comando Get-AzRoleAssignment -ObjectID $sp.id
per ottenere le assegnazioni di ruolo del servizio principale di Azure. Vedi la schermata di seguito come esempio.

Creazione di un servizio principale di Azure con password
Se desideri avere un controllo maggiore sulla password o sulla chiave segreta assegnata al tuo servizio principale di Azure, utilizza il parametro -PasswordCredential
durante la creazione del servizio principale. Questo è particolarmente utile se la password deve soddisfare un requisito di complessità.
In questo esempio, il nuovo servizio principale di Azure verrà creato con i seguenti valori:
DisplayName: ATA_RG_Contributor
Ambito: ATA (Gruppo di risorse)
Ruolo: Contributore
Password: Lunghezza di 20 caratteri con 6 caratteri non alfanumerici
Validità delle credenziali: 5 anni
Ottieni l’ID dello Scope di destinazione (Gruppo di risorse)
Lo scope di questo nuovo servizio principale copre l’intero gruppo di risorse chiamato ATA. La prima cosa da fare è ottenere l’ID del gruppo di risorse ATA. Per farlo, utilizza il codice sottostante, ma assicurati di cambiare il valore del parametro -Name
con il nome del tuo gruppo di risorse.
In seguito, dovresti vedere l’ResourceID
del gruppo di risorse che è ora memorizzato nella variabile $Scope
.

Generazione della stringa di password
Il passaggio successivo consiste nella generazione della password che rispetta la complessità Lunghezza di 20 caratteri con 6 caratteri non alfanumerici. Per farlo, puoi utilizzare il metodo statico .NET GeneratePassword()
.
Nel codice sopra riportato GeneratePassword(20, 6)
, il primo valore indica la lunghezza della password e il secondo valore indica il numero di caratteri non alfanumerici da includere. Il risultato è mostrato nella schermata sottostante.

GeneratePassword()
static methodCreazione dell’oggetto di credenziali della password
Ora che hai la stringa della password, il passo successivo è creare l’oggetto Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential
. Questo oggetto conterrà la stringa della password memorizzata nella variabile $password
e il periodo di validità di 5 anni. Copia il codice sottostante ed eseguilo nella tua sessione Azure PowerShell.
Eseguendo il codice sopra in PowerShell, l’oggetto delle credenziali verrà memorizzato nella variabile $PasswordCredential
. Il risultato atteso sarà simile a quello mostrato di seguito.

Creazione del Service Principal con Password
Ora hai i valori dei parametri richiesti pronti per creare il service principal di Azure. Il codice sottostante creerà il service principal con il nome visualizzato di ATA_RG_Contributor utilizzando la password memorizzata nella variabile $PasswordCredential
.
Dopo aver eseguito il codice, il nuovo service principal dovrebbe essere creato e le proprietà verranno memorizzate nella variabile $sp
. Vedi l’esempio di risultato di seguito.

Assegnazione del Ruolo e Ambito
Il service principal di Azure è stato creato nella sezione precedente, ma senza Ruolo e Ambito. Questo perché i parametri -Role
e -Scope
non possono essere utilizzati insieme al parametro -PasswordCredential
. Ciò significa che è necessario un ulteriore passaggio per assegnare il ruolo e l’ambito al service principal.
Il codice qui sotto utilizza il cmdlet New-AzRoleAssignment
per assegnare lo scope e il ruolo del service principal di Azure.
Lo screenshot qui sotto mostra il risultato atteso dopo che il ruolo e lo scope sono stati assegnati al service principal di Azure.

Assicurarsi sempre di salvare la password del service principal perché non è possibile recuperarla se non è stata salvata o se è stata dimenticata.
Connettersi ad Azure con una password di Service Principal
Ora per mettere in uso il service principal. Invece di accedere ad Azure PowerShell utilizzando un account utente, il codice qui sotto utilizza invece le credenziali del service principal.
Dopo aver eseguito il codice sopra, dovresti aver effettuato l’accesso ad Azure PowerShell utilizzando il servizio principale ATA_RG_Contributor e le credenziali della password.

Creazione di un servizio principale di Azure con certificato
Oltre alle credenziali della password, un servizio principale di Azure può avere anche una credenziale basata su certificato. Il certificato associato può essere emesso da un’autorità di certificazione o essere autogenerato.
In questo esempio, il nuovo servizio principale di Azure verrà creato con i seguenti valori:
DisplayName: VSE3_SUB_OWNER
Scope: VSE3 (Sottoscrizione)
Ruolo: Proprietario
Validità del certificato: 2 anni
Ottieni l’ID del Target Scope (Sottoscrizione)
Il campo di azione di questo nuovo servizio principale copre la sottoscrizione di Azure denominata VSE3. La prima cosa da fare è ottenere l’ID della sottoscrizione VSE3. Per farlo, utilizza il codice seguente, ma assicurati di modificare il valore del parametro -SubscriptionName
con il nome del tuo gruppo di risorse.
Successivamente, specifica il nome del nuovo servizio principale di Azure e del certificato autogenerato da creare.
Creazione del certificato autogenerato
Il codice seguente crea la password auto-firmata nel deposito di certificati personali con il nome CN=VSE3_SUB_OWNER. La validità del certificato è impostata su due anni. Le proprietà del certificato sono salvate nella variabile $cert
.
Nella schermata sottostante viene mostrato che il certificato è stato creato.

Se desideri visualizzare il nuovo certificato in una vista più familiare (GUI), puoi trovarlo nella console dei certificati (certmgr.mmc). Fai riferimento all’immagine sottostante che mostra il certificato.

Successivamente, ottieni il valore codificato in Base64 del certificato auto-firmato e salvato nella variabile $keyValue
.
Creazione del Service Principal con Certificato
Ora che il certificato è stato creato, il passo successivo è creare il nuovo service principal di Azure. Il codice sottostante creerà il service principal di Azure che utilizzerà il certificato auto-firmato come credenziale. Il periodo di validità delle credenziali coincide con il periodo di validità del certificato.
Otterrai un output simile, come mostrato nell’immagine sottostante.

Assegnazione del Ruolo e Ambito
Il service principal di Azure è stato creato, ma non è ancora stato assegnato alcun Ruolo e Ambito. Ciò significa che è necessario un ulteriore passaggio per assegnare il ruolo e l’ambito al service principal.
Il codice qui sotto utilizza il cmdlet New-AzRoleAssignment
per assegnare il ruolo di proprietario alla sottoscrizione VSE3 del principale del servizio.
Quando viene eseguito il codice, lo screenshot sottostante mostra la conferma che l’assegnazione del ruolo è stata effettuata.

Connessione ad Azure con un certificato di principale del servizio
Ora hai creato il principale del servizio con una credenziale basata su certificato. Ciò significa che puoi usarlo per connetterti ad Azure senza utilizzare una password. Invece, userai il certificato disponibile nel tuo computer come metodo di autenticazione.
In questo esempio, il nome visualizzato del principale del servizio è VSE3_SUB_OWNER, e il nome del certificato è CN=VSE3_SUB_OWNER. Il codice qui sotto otterrà l’impronta digitale del certificato dallo store del certificato personale e la utilizzerà come credenziale di accesso.
Lo screenshot sottostante mostra che utilizzando il codice sopra, l’accesso ad Azure PowerShell è stato effettuato con successo utilizzando solo ApplicationID, Tenant e Certificate ThumbPrint.

Conclusioni
Azure Service Principals è il principale di sicurezza che deve essere preso in considerazione quando si creano credenziali per attività di automazione e strumenti che accedono alle risorse di Azure. L’ambito e il ruolo da applicare possono essere scelti per fornire le autorizzazioni di accesso “solo il necessario”.
In questo articolo, hai imparato come creare Azure Service Principals utilizzando solo PowerShell. Gli Azure Service Principals possono avere una password, una chiave segreta o credenziali basate su certificato. Ogni tipo di credenziale ha i suoi vantaggi e scenari di utilizzo applicabili.
I service principals con una password o una chiave segreta sono più portatili ma sono considerati meno sicuri perché la credenziale può essere condivisa come testo normale. D’altra parte, le credenziali basate su certificato sono l’opzione più sicura ma richiedono un po’ più di sforzo per mantenerle.
Le tecniche apprese in questo articolo coprono solo le basi per iniziare ad utilizzare gli Azure service principals nella tua automazione. Ci sono molti altri modi per configurare gli Azure service principals come aggiungere, rimuovere e reimpostare le credenziali. Spetta a te scoprirli man mano che procedi.
Grazie per aver letto!
Ulteriori risorse di apprendimento
Ecco alcune risorse che potrebbero esserti utili per accompagnare questo articolo.
- Connect-AzAccount: La tua porta d’accesso ad Azure con PowerShell
- Connect-AzAccount: La tua porta d’accesso ad Azure con PowerShell
- Come generare una password casuale con PowerShell
- Cos’è il controllo degli accessi basato sui ruoli di Azure (Azure RBAC)?
- Svelare i principali aspetti degli Azure AD Service Principals
- Come creare un Azure Service Principal tramite Azure CLI 2.0
- Come controllare l’accesso ai servizi di Office 365 con MFA
Source:
https://adamtheautomator.com/azure-service-principal/