Spring Cloud Azure-autentisering
Den här artikeln gäller för: ✔️ Version 4.14.0 ✔️ Version 5.8.0
I den här artikeln beskrivs alla Spring Cloud Azure-autentiseringsmetoder.
StandardAzureCredential
DefaultAzureCredential
Är lämpligt för de flesta scenarier där programmet är avsett att köras i Azure Cloud. Det beror på att kombinerar autentiseringsuppgifter som ofta används för att autentisera när de distribueras med autentiseringsuppgifter som används för att autentisera DefaultAzureCredential
i en utvecklingsmiljö.
Kommentar
DefaultAzureCredential
är avsedd att förenkla komma igång med SDK genom att hantera vanliga scenarier med rimliga standardbeteenden. Om du vill ha mer kontroll eller om ditt scenario inte hanteras av standardinställningarna bör du använda andra typer av autentiseringsuppgifter.
DefaultAzureCredential
försöker autentisera via följande mekanismer i turordning:
- Miljö –
DefaultAzureCredential
läser kontoinformation som anges via miljövariabler och använder den för att autentisera. - Hanterad identitet – om programmet distribueras till en Azure-värd med hanterad identitet aktiverat autentiserar
DefaultAzureCredential
med det kontot. - IntelliJ – Om du har autentiserat via Azure Toolkit for IntelliJ autentiseras
DefaultAzureCredential
med det kontot. - Visual Studio Code – Om du har autentiserats via plugin-programmet Visual Studio Code Azure-konto autentiseras
DefaultAzureCredential
med det kontot. - Azure CLI – Om du har autentiserat ett konto via Azure CLI-kommandot
az login
autentiserasDefaultAzureCredential
med det kontot.
Dricks
Kontrollera att säkerhetsobjektet har beviljats tillräcklig behörighet för att få åtkomst till Azure-resursen. Mer information finns i Auktorisera åtkomst med Microsoft Entra-ID.
Kommentar
Eftersom Spring Cloud Azure AutoConfigure 4.1.0 registreras en ThreadPoolTaskExecutor
böna med namnet springCloudAzureCredentialTaskExecutor
automatiskt som standard och hanterar alla trådar som skapats av Azure Identity. Namnet på varje tråd som hanteras av den här trådpoolen är prefixet med az-identity-
. Denna ThreadPoolTaskExecutor
böna är oberoende av bönan Executor
som tillhandahålls av Spring Boot.
Hanterade identiteter
En vanlig utmaning är hanteringen av hemligheter och autentiseringsuppgifter som används för att skydda kommunikationen mellan olika komponenter som utgör en lösning. Med hanterade identiteter behöver du inte hantera autentiseringsuppgifter. Hanterade identiteter tillhandahåller en identitet som program kan använda när de ansluter till resurser som stöder Microsoft Entra-autentisering. Program kan använda den hanterade identiteten för att hämta Microsoft Entra-token. Ett program kan till exempel använda en hanterad identitet för att komma åt resurser som Azure Key Vault där du kan lagra autentiseringsuppgifter på ett säkert sätt eller för att få åtkomst till lagringskonton.
Vi rekommenderar att du använder hanterad identitet i stället för att använda anslutningssträng eller nyckel i ditt program eftersom det är säkrare och sparar problem med att hantera hemligheter och autentiseringsuppgifter. I det här fallet DefaultAzureCredential
kan du bättre hantera scenariot med att utveckla lokalt med kontoinformation som lagras lokalt, sedan distribuera programmet till Azure Cloud och använda hanterad identitet.
Hanterade identitetstyper
Det finns två typer av hanterade identiteter:
- Systemtilldelad – Med vissa Azure-tjänster kan du aktivera en hanterad identitet direkt på en tjänstinstans. När du aktiverar en systemtilldelad hanterad identitet skapas en identitet i Microsoft Entra som är kopplad till livscykeln för den tjänstinstansen. Så när resursen tas bort tar Azure automatiskt bort identiteten åt dig. Det är bara den Azure-resursen som kan använda den här identiteten för att begära tokens från Microsoft Entra ID.
- Användartilldelad – Du kan också skapa en hanterad identitet som en fristående Azure-resurs. Du kan skapa en användartilldelad hanterad identitet och tilldela den till en eller flera instanser av en Azure-tjänst. Med användartilldelade hanterade identiteter hanteras identiteten separat från de resurser som använder den.
Kommentar
När du använder en användartilldelad hanterad identitet kan du ange klient-ID:t via spring.cloud.azure.credential.managed-identity-client-id
eller spring.cloud.azure.<azure-service>.credential.managed-identity-client-id
. Du behöver inte konfiguration av autentiseringsuppgifter om du använder en systemtilldelad hanterad identitet.
Dricks
Kontrollera att säkerhetsobjektet har beviljats tillräcklig behörighet för att få åtkomst till Azure-resursen. Mer information finns i Auktorisera åtkomst med Microsoft Entra-ID.
Mer information om hanterad identitet finns i Vad är hanterade identiteter för Azure-resurser?.
Andra typer av autentiseringsuppgifter
Om du vill ha mer kontroll eller om ditt scenario inte hanteras av standardinställningarna eller bör du använda andra typer av DefaultAzureCredential
autentiseringsuppgifter.
Autentisering och auktorisering med Microsoft Entra-ID
Med Microsoft Entra-ID kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja behörigheter till ett säkerhetsobjekt, som kan vara en användare eller ett huvudnamn för programtjänsten. När ett säkerhetsobjekt (en användare eller ett program) försöker komma åt en Azure-resurs, till exempel en Event Hubs-resurs, måste begäran auktoriseras. Med Microsoft Entra-ID är åtkomst till en resurs en tvåstegsprocess:
- Först autentiseras säkerhetsobjektets identitet och en OAuth 2.0-token returneras.
- Därefter skickas token som en del av en begäran till Azure-tjänsten för att auktorisera åtkomst till den angivna resursen.
Autentisera med Microsoft Entra ID
Om du vill ansluta program till resurser som stöder Microsoft Entra-autentisering kan du ange följande konfigurationer med prefixet spring.cloud.azure.credential
eller spring.cloud.azure.<azure-service>.credential
I följande tabell visas autentiseringsegenskaper:
Property | beskrivning |
---|---|
klient-ID | Det klient-ID som ska användas när du utför autentisering med tjänstens huvudnamn med Azure. |
klienthemlighet | Klienthemligheten som ska användas när du utför autentisering med tjänstens huvudnamn med Azure. |
client-certificate-path | Sökväg till en PEM-certifikatfil som ska användas när du utför autentisering med tjänstens huvudnamn med Azure. |
client-certificate-password | Lösenordet för certifikatfilen. |
användarnamn | Användarnamnet som ska användas när du utför autentisering med användarnamn/lösenord med Azure. |
password | Lösenordet som ska användas när du utför autentisering med användarnamn/lösenord med Azure. |
managed-identity-enabled | Om du vill aktivera hanterad identitet. |
Dricks
En lista över alla Spring Cloud Azure-konfigurationsegenskaper finns i Konfigurationsegenskaper för Spring Cloud Azure.
Programmet söker på flera platser för att hitta en tillgänglig autentiseringsuppgift och används DefaultAzureCredential
om inga egenskaper för autentiseringsuppgifter har konfigurerats. Om du vill använda specifika autentiseringsuppgifter kan du läsa följande exempel för vägledning.
I följande exempel visas hur du autentiserar med hjälp av en systemtilldelad hanterad identitet:
spring.cloud.azure:
credential:
managed-identity-enabled: true
I följande exempel visas hur du autentiserar med hjälp av en användartilldelad hanterad identitet:
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
I följande exempel visas hur du autentiserar med ett huvudnamn för tjänsten med en klienthemlighet:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Kommentar
De värden som tillåts för tenant-id
är: common
, organizations
, consumers
eller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.
I följande exempel visas hur du autentiserar med ett huvudnamn för tjänsten med ett PFX-klientcertifikat:
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>
Kommentar
De värden som tillåts för tenant-id
är: common
, organizations
, consumers
eller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.
I följande exempel visas hur du autentiserar med ett huvudnamn för tjänsten med klient-PEM-certifikat:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
Kommentar
De värden som tillåts för tenant-id
är: common
, organizations
, consumers
eller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.
I följande exempel visas hur du autentiserar med hjälp av en användarautentiseringsuppgift:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
I följande exempel visas hur du autentiserar med Key Vault med ett annat huvudnamn för tjänsten. Det här exemplet konfigurerar programmet med två autentiseringsuppgifter: en systemtilldelad hanterad identitet och ett huvudnamn för tjänsten. Key Vault Secret-klienten använder tjänstens huvudnamn, men alla andra komponenter använder hanterad identitet i stället.
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>
Kommentar
De värden som tillåts för tenant-id
är: common
, organizations
, consumers
eller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.
Auktorisera åtkomst med Microsoft Entra-ID
Auktoriseringssteget kräver att en eller flera Azure-roller tilldelas säkerhetsobjektet. De roller som tilldelas ett säkerhetsobjekt avgör vilka behörigheter som huvudkontot ska ha.
Dricks
En lista över alla inbyggda Azure-roller finns i Inbyggda Azure-roller.
I följande tabell visas de inbyggda Azure-rollerna för att auktorisera åtkomst till Azure-tjänster som stöds i Spring Cloud Azure:
Roll | beskrivning |
---|---|
Appkonfigurationsdataägare | Ger fullständig åtkomst till App Configuration-data. |
Dataläsare för appkonfiguration | Tillåter läsåtkomst till App Configuration-data. |
Azure Event Hubs-dataägare | Ger fullständig åtkomst till Azure Event Hubs-resurser. |
Azure Event Hubs-datamottagare | Tillåter åtkomst till Azure Event Hubs-resurser. |
Azure Event Hubs Data Sender | Tillåter sändningsåtkomst till Azure Event Hubs-resurser. |
Azure Service Bus-dataägare | Ger fullständig åtkomst till Azure Service Bus-resurser. |
Azure Service Bus-datamottagare | Tillåter åtkomst till Azure Service Bus-resurser. |
Azure Service Bus-datasändare | Tillåter att du skickar åtkomst till Azure Service Bus-resurser. |
Storage Blob Data-ägare | Ger fullständig åtkomst till Azure Storage-blobcontainrar och data, inklusive tilldelning av POSIX-åtkomstkontroll. |
Storage Blob Data-läsare | Läsa och lista Azure Storage-containrar och blobar. |
Dataläsare för lagringskö | Läsa och lista Azure Storage-köer och kömeddelanden. |
Redis Cache-deltagare | Hantera Redis-cacheminnen. |
Kommentar
När du använder Spring Cloud Azure Resource Manager för att hämta anslutningssträng för Event Hubs, Service Bus och Storage Queue, eller egenskaperna för Cache for Redis, tilldelar du den inbyggda Azure-rollen Contributor
. Azure Cache for Redis är speciellt och du kan även tilldela Redis Cache Contributor
rollen för att hämta Redis-egenskaperna.
Kommentar
En Key Vault-åtkomstprincip avgör om ett visst säkerhetsobjekt, nämligen en användare, ett program eller en användargrupp, kan utföra olika åtgärder på Key Vault-hemligheter, nycklar och certifikat. Du kan tilldela åtkomstprinciper med hjälp av Azure-portalen, Azure CLI eller Azure PowerShell. Mer information finns i Tilldela en key vault-åtkomstprincip.
Viktigt!
Azure Cosmos DB exponerar två inbyggda rolldefinitioner: Cosmos DB Built-in Data Reader
och Cosmos DB Built-in Data Contributor
. Stöd för rollhantering i Azure-portalen är dock inte tillgängligt ännu. Mer information om behörighetsmodellen, rolldefinitioner och rolltilldelning finns i Konfigurera rollbaserad åtkomstkontroll med Microsoft Entra-ID för ditt Azure Cosmos DB-konto.
SAS-token
Du kan också konfigurera tjänster för autentisering med signatur för delad åtkomst (SAS). spring.cloud.azure.<azure-service>.sas-token
är den egenskap som ska konfigureras. Använd till exempel spring.cloud.azure.storage.blob.sas-token
för att autentisera till Storage Blob-tjänsten.
Anslutningssträngar
Anslut ionssträng stöds av vissa Azure-tjänster för att tillhandahålla anslutningsinformation och autentiseringsuppgifter. Om du vill ansluta till dessa Azure-tjänster med hjälp av anslutningssträng konfigurerar du spring.cloud.azure.<azure-service>.connection-string
bara . Konfigurera till exempel spring.cloud.azure.eventhubs.connection-string
att ansluta till Event Hubs-tjänsten.