Autenticazione di Spring Cloud in Azure
Questo articolo si applica a: ✔️ Versione 4.14.0 ✔️ versione 5.8.0
Questo articolo descrive tutti i metodi di autenticazione di Spring Cloud di Azure.
DefaultAzureCredential
DefaultAzureCredential
È appropriato per la maggior parte degli scenari in cui l'applicazione deve essere eseguita nel cloud di Azure. Ciò è dovuto al fatto che combina DefaultAzureCredential
le credenziali comunemente usate per l'autenticazione quando vengono distribuite con le credenziali usate per l'autenticazione in un ambiente di sviluppo.
Nota
DefaultAzureCredential
è destinato a semplificare l'avvio dell'uso dell'SDK gestendo scenari comuni con comportamenti predefiniti ragionevoli. Se si vuole un maggiore controllo o lo scenario non viene gestito dalle impostazioni predefinite, è consigliabile usare altri tipi di credenziali.
La classe DefaultAzureCredential
tenterà di eseguire l'autenticazione tramite i meccanismi seguenti nell'ordine indicato:
- Ambiente:
DefaultAzureCredential
leggerà le informazioni sull'account specificate tramite le variabili di ambiente e le userà per l'autenticazione. - Identità gestita: se l'applicazione viene distribuita in un host di Azure con identità gestita abilitata,
DefaultAzureCredential
eseguirà l'autenticazione con tale account. - IntelliJ: se è stata eseguita l'autenticazione tramite Azure Toolkit for IntelliJ, eseguirà l'autenticazione
DefaultAzureCredential
con tale account. - Visual Studio Code: se è stata eseguita l'autenticazione tramite il plug-in dell'account Azure di Visual Studio Code, l'autenticazione
DefaultAzureCredential
verrà eseguita con tale account. - Interfaccia della riga di comando di Azure: se è stato autenticato un account tramite il comando dell'interfaccia della riga di comando di Azure
az login
, eseguirà l'autenticazioneDefaultAzureCredential
con tale account.
Suggerimento
Assicurarsi che all'entità di sicurezza sia stata concessa un'autorizzazione sufficiente per accedere alla risorsa di Azure. Per altre informazioni, vedere Autorizzare l'accesso con Microsoft Entra ID.
Nota
Poiché Spring Cloud Azure AutoConfigure 4.1.0, un ThreadPoolTaskExecutor
bean denominato springCloudAzureCredentialTaskExecutor
verrà registrato automaticamente per impostazione predefinita e gestirà tutti i thread creati da Azure Identity. Il nome di ogni thread gestito da questo pool di thread è preceduto az-identity-
da . Questo ThreadPoolTaskExecutor
bean è indipendente dal Executor
bean fornito da Spring Boot.
Identità gestite
Una sfida comune è la gestione dei segreti e delle credenziali usate per proteggere la comunicazione tra diversi componenti che costituiscono una soluzione. Le identità gestite eliminano la necessità di gestire le credenziali. Le identità gestite forniscono un'identità per le applicazioni da usare per la connessione alle risorse che supportano l'autenticazione di Microsoft Entra. Le applicazioni possono usare l'identità gestita per ottenere i token di Microsoft Entra. Ad esempio, un'applicazione può usare un'identità gestita per accedere a risorse come Azure Key Vault in cui è possibile archiviare le credenziali in modo sicuro o per accedere agli account di archiviazione.
È consigliabile usare l'identità gestita invece di usare stringa di connessione o chiave nell'applicazione perché è più sicura e salverà i problemi di gestione dei segreti e delle credenziali. In questo caso, DefaultAzureCredential
potrebbe servire meglio lo scenario di sviluppo in locale usando le informazioni sull'account archiviate in locale, quindi distribuendo l'applicazione nel cloud di Azure e usando l'identità gestita.
Tipi di identità gestita
Sono disponibili due tipi di identità gestite:
- Assegnata dal sistema: alcuni servizi di Azure consentono di abilitare un'identità gestita direttamente in un'istanza del servizio. Quando si abilita un'identità gestita assegnata dal sistema, viene creata un'identità in Microsoft Entra associata al ciclo di vita di quell'istanza del servizio. Quindi quando la risorsa viene eliminata, Azure elimina automaticamente anche l'identità. Per impostazione predefinita, solo questa specifica risorsa di Azure può usare questa identità per richiedere token ad Microsoft Entra ID.
- Assegnata dall'utente : è anche possibile creare un'identità gestita come risorsa di Azure autonoma. È possibile creare un'identità gestita assegnata dall'utente e assegnarla a una o più istanze di un servizio di Azure. Le identità gestite assegnate dall'utente vengono gestite separatamente rispetto alle risorse che le usano.
Nota
Quando si usa un'identità gestita assegnata dall'utente, è possibile specificare l'ID client tramite spring.cloud.azure.credential.managed-identity-client-id
o spring.cloud.azure.<azure-service>.credential.managed-identity-client-id
. Non è necessaria la configurazione delle credenziali se si usa un'identità gestita assegnata dal sistema.
Suggerimento
Assicurarsi che all'entità di sicurezza sia stata concessa un'autorizzazione sufficiente per accedere alla risorsa di Azure. Per altre informazioni, vedere Autorizzare l'accesso con Microsoft Entra ID.
Per altre informazioni sull'identità gestita, vedere Che cosa sono le identità gestite per le risorse di Azure?.
Altri tipi di credenziali
Se si vuole un maggiore controllo o lo scenario non viene gestito dalle DefaultAzureCredential
impostazioni predefinite o , è consigliabile usare altri tipi di credenziali.
Autenticazione e autorizzazione con Microsoft Entra ID
Con Microsoft Entra ID è possibile usare il controllo degli accessi in base al ruolo di Azure per concedere le autorizzazioni a un'entità di sicurezza, che può essere un utente o un'entità servizio dell'applicazione. Quando un'entità di sicurezza (un utente o un'applicazione) tenta di accedere a una risorsa di Azure, ad esempio una risorsa di Hub eventi, la richiesta deve essere autorizzata. Con Microsoft Entra ID, l'accesso a una risorsa è un processo in due passaggi:
- Viene prima di tutto autenticata l'identità dell'entità di sicurezza e viene restituito un token OAuth 2.0.
- Il token viene quindi passato come parte di una richiesta al servizio di Azure per autorizzare l'accesso alla risorsa specificata.
Eseguire l'autenticazione con ID Microsoft Entra
Per connettere le applicazioni alle risorse che supportano l'autenticazione di Microsoft Entra, è possibile impostare le configurazioni seguenti con il prefisso spring.cloud.azure.credential
o spring.cloud.azure.<azure-service>.credential
Nella tabella seguente sono elencate le proprietà di autenticazione:
Proprietà | Descrizione |
---|---|
client-id | ID client da usare quando si esegue l'autenticazione dell'entità servizio con Azure. |
client-secret | Segreto client da usare quando si esegue l'autenticazione dell'entità servizio con Azure. |
client-certificate-path | Percorso di un file di certificato PEM da usare quando si esegue l'autenticazione dell'entità servizio con Azure. |
client-certificate-password | Password del file di certificato. |
username | Nome utente da usare quando si esegue l'autenticazione con nome utente/password con Azure. |
password | Password da usare quando si esegue l'autenticazione con nome utente/password con Azure. |
managed-identity-enabled | Indica se abilitare l'identità gestita. |
Suggerimento
Per l'elenco di tutte le proprietà di configurazione di Spring Cloud Azure, vedere Proprietà di configurazione di Spring Cloud Azure.
L'applicazione cercherà in diverse posizioni per trovare una credenziale disponibile e userà DefaultAzureCredential
se non sono configurate proprietà delle credenziali. Per usare credenziali specifiche, vedere gli esempi seguenti per indicazioni.
L'esempio seguente illustra come eseguire l'autenticazione usando un'identità gestita assegnata dal sistema:
spring.cloud.azure:
credential:
managed-identity-enabled: true
L'esempio seguente illustra come eseguire l'autenticazione usando un'identità gestita assegnata dall'utente:
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
L'esempio seguente illustra come eseguire l'autenticazione usando un'entità servizio con un segreto client:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Nota
I valori consentiti per tenant-id
sono: common
, organizations
, consumers
o l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.
L'esempio seguente illustra come eseguire l'autenticazione usando un'entità servizio con un certificato PFX client:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
Nota
I valori consentiti per tenant-id
sono: common
, organizations
, consumers
o l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.
L'esempio seguente illustra come eseguire l'autenticazione usando un'entità servizio con certificato PEM client:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
Nota
I valori consentiti per tenant-id
sono: common
, organizations
, consumers
o l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.
L'esempio seguente illustra come eseguire l'autenticazione usando credenziali utente:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
L'esempio seguente illustra come eseguire l'autenticazione con Key Vault usando un'entità servizio diversa. Questo esempio configura l'applicazione con due credenziali: un'identità gestita assegnata dal sistema e un'entità servizio. Il client segreto dell'insieme di credenziali delle chiavi userà l'entità servizio, ma tutti gli altri componenti useranno invece l'identità gestita.
spring.cloud.azure:
credential:
managed-identity-enabled: true
keyvault.secret:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Nota
I valori consentiti per tenant-id
sono: common
, organizations
, consumers
o l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.
Autorizzare l'accesso con Microsoft Entra ID
Il passaggio di autorizzazione richiede l'assegnazione di uno o più ruoli di Azure all'entità di sicurezza. I ruoli assegnati a un'entità di sicurezza determinano le autorizzazioni che l'entità avrà.
Suggerimento
Per l'elenco di tutti i ruoli predefiniti di Azure, vedere Ruoli predefiniti di Azure.
La tabella seguente elenca i ruoli predefiniti di Azure per autorizzare l'accesso ai servizi di Azure supportati in Spring Cloud Azure:
Ruolo | Descrizione |
---|---|
Proprietario dei dati di Configurazione dell'app | Consente l'accesso completo ai dati di Configurazione dell'app. |
Ruolo con autorizzazioni di lettura per i dati di Configurazione dell'app | Consente l'accesso in lettura ai dati di Configurazione dell'app. |
Proprietario dei dati di Hub eventi di Azure | Consente l'accesso completo alle risorse Hub eventi di Azure. |
Ricevitore dei dati di Hub eventi di Azure | Consente l'accesso per la ricezione alle risorse dell'Hub eventi di Azure. |
Mittente dei dati di Hub eventi di Azure | Consente l'accesso per l'invio alle risorse dell'Hub eventi di Azure. |
Proprietario dei dati del bus di servizio di Azure | Consente l'accesso completo alle risorse di bus di servizio di Azure. |
Ricevitore dei dati del bus di servizio di Azure | Consente di ricevere l'accesso alle risorse di bus di servizio di Azure. |
Mittente dei dati del bus di servizio di Azure | Consente di inviare l'accesso alle risorse di bus di servizio di Azure. |
Proprietario dei dati del BLOB di archiviazione | Concede l'accesso completo ai contenitori e ai dati dei BLOB di Archiviazione di Azure, inclusa l'assegnazione del controllo di accesso POSIX. |
Lettore dei dati del BLOB di archiviazione | Consente di leggere ed elencare i contenitori e i BLOB di archiviazione di Azure. |
Ruolo con autorizzazioni di lettura per i dati della coda di archiviazione | Consente di leggere ed elencare le code e i messaggi delle code di Azure. |
Collaboratore cache Redis | Gestire le cache Redis. |
Nota
Quando si usa Spring Cloud Azure Resource Manager per ottenere le stringa di connessione per Hub eventi, bus di servizio e coda Archiviazione oppure le proprietà di Cache per Redis, assegnare il ruolo Contributor
predefinito di Azure . cache di Azure per Redis è speciale ed è anche possibile assegnare il Redis Cache Contributor
ruolo per ottenere le proprietà Redis.
Nota
I criteri di accesso di Key Vault determinano se una determinata entità di sicurezza, vale a dire un utente, un'applicazione o un gruppo di utenti, può eseguire operazioni diverse su segreti, chiavi e certificati di Key Vault. È possibile assegnare i criteri di accesso usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Per altre informazioni, vedere Assegnare un criterio di accesso a Key Vault.
Importante
Azure Cosmos DB espone due definizioni di ruolo predefinite: Cosmos DB Built-in Data Reader
e Cosmos DB Built-in Data Contributor
. Tuttavia, portale di Azure supporto per la gestione dei ruoli non è ancora disponibile. Per altre informazioni sul modello di autorizzazione, sulle definizioni dei ruoli e sull'assegnazione di ruolo, vedere Configurare il controllo degli accessi in base al ruolo con l'ID Entra di Microsoft per l'account Azure Cosmos DB.
Token di firma di accesso condiviso
È anche possibile configurare i servizi per l'autenticazione con firma di accesso condiviso.You can also configure services for authentication with Shared Access Signature (SAS). spring.cloud.azure.<azure-service>.sas-token
è la proprietà da configurare. Ad esempio, usare spring.cloud.azure.storage.blob.sas-token
per eseguire l'autenticazione per Archiviazione servizio BLOB.
Stringhe di connessione
Connessione stringa è supportata da alcuni servizi di Azure per fornire informazioni di connessione e credenziali. Per connettersi a tali servizi di Azure usando stringa di connessione, è sufficiente configurare spring.cloud.azure.<azure-service>.connection-string
. Ad esempio, configurare spring.cloud.azure.eventhubs.connection-string
per connettersi al servizio Hub eventi.
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