Dela via


Spring Cloud Azure-autentisering

I den här artikeln beskrivs alla Spring Cloud Azure-autentiseringsmetoder.

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:

  1. Först autentiseras säkerhetsobjektets identitet och en OAuth 2.0-token returneras.
  2. Därefter skickas token som en del av en begäran till Azure-tjänsten för att auktorisera åtkomst till den angivna resursen.

Typer av autentiseringsuppgifter

Med Spring Cloud Azure kan du konfigurera olika typer av autentiseringsuppgifter, till exempel DefaultAzureCredential, WorkloadIdentityCredential, ManagedIdentityCredential, ClientSecretCredential, AzureCliCredentialoch så vidare.

StandardAzureCredential

DefaultAzureCredential är lämpligt för de flesta scenarier där programmet är avsett att köras i Azure Cloud, eftersom det kombinerar följande autentiseringsuppgifter:

  • Autentiseringsuppgifter som ofta används för att autentisera när de distribueras.
  • Autentiseringsuppgifter som används för att autentisera i en utvecklingsmiljö.

Not

DefaultAzureCredential är avsett att förenkla komma igång med Azure SDK genom att hantera vanliga scenarier med rimliga standardbeteenden. Om du vill ha mer kontroll eller om standardinställningarna inte stöder ditt scenario bör du använda andra typer av autentiseringsuppgifter.

DefaultAzureCredential försöker autentisera via följande mekanismer i ordning:

diagram som visar autentiseringsmekanismen för

  • Miljö – DefaultAzureCredential försöker läsa kontoinformation som anges via miljövariabler och använda den för att autentisera.
  • Hanterad identitet – Om programmet distribueras till en Azure-värd med hanterad identitet aktiverad försöker DefaultAzureCredential autentisera med det kontot.
  • Arbetsbelastningsidentitet – Om programmet distribueras till en virtuell dator (VM) försöker DefaultAzureCredential autentisera med det kontot.
  • Cache för delad token – Om du autentiserade via Visual Studio försöker DefaultAzureCredential autentisera med det kontot.
  • IntelliJ – Om du autentiserade via Azure Toolkit for IntelliJ försöker DefaultAzureCredential autentisera med det kontot.
  • Azure CLI – Om du autentiserade ett konto via kommandot Azure CLI az login försöker DefaultAzureCredential autentisera med det kontot.
  • Azure PowerShell – Om du autentiserade via Azure PowerShell försöker DefaultAzureCredential autentisera med det kontot.
  • Azure Developer CLI – Om du autentiserade via Azure Developer CLI försöker DefaultAzureCredential autentisera med det kontot.

Dricks

Kontrollera att säkerhetsobjektet har tillräcklig behörighet för att få åtkomst till Azure-resursen. Mer information finns i Auktorisera åtkomst med Microsoft Entra-ID.

Not

Sedan Spring Cloud Azure AutoConfigure 4.1.0 måste du registrera en ThreadPoolTaskExecutor böna med namnet springCloudAzureCredentialTaskExecutor för att hantera 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 den Executor böna 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. Hanterade identiteter eliminerar behovet av att 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 kan DefaultAzureCredential bättre hantera scenariot att utveckla lokalt med hjälp av kontoinformation som lagras lokalt och sedan distribuera programmet till Azure Cloud och använda hanterad identitet.

Hanterade identitetstyper

Det finns två typer av hanterade identiteter:

  • Systemtilldelade – 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 bunden till livscykeln för den tjänstinstansen. När resursen tas bort tar Azure automatiskt bort identiteten åt dig. Avsiktligt kan endast den Azure-resursen använda den här identiteten för att begära token från Microsoft Entra-ID.
  • användartilldelade – 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.

Not

När du använder en användartilldelad hanterad identitet kan du ange klient-ID:t via spring.cloud.azure.credential.client-id eller spring.cloud.azure.<azure-service>.credential.client-id. Du behöver inte konfiguration av autentiseringsuppgifter om du använder en systemtilldelad hanterad identitet.

Dricks

Kontrollera att säkerhetsobjektet har 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 än vad som tillhandahålls av DefaultAzureCredential, eller om standardinställningarna inte stöder ditt scenario, bör du använda andra typer av autentiseringsuppgifter.

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:

Egenskap 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.
klient-certifikat-sökväg Sökväg till en PEM-certifikatfil som ska användas när du utför autentisering med tjänstens huvudnamn med Azure.
klient-certifikat-lösenord 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.
lösenord Lösenordet som ska användas när du utför autentisering med användarnamn/lösenord med Azure.
hanterad-identitet aktiverad Om du vill aktivera hanterad identitet.
token-credential-bean-name (token-credential-bean-name) Bönnamnet av typen TokenCredential att använda när du utför autentisering med Azure.

Dricks

En lista över alla Spring Cloud Azure-konfigurationsegenskaper finns i Azure-konfigurationsegenskaper för Spring Cloud.

Programmet söker på flera platser för att hitta en tillgänglig autentiseringsuppgift. Varje Azure SDK-klientbyggarefabrik använder en anpassad böna av typen TokenCredential först om egenskapen token-credential-bean-name anges och återgår till att använda DefaultAzureCredential om inga egenskaper för autentiseringsuppgifter har konfigurerats.

Autentisera med en anpassad TokenCredential-böna

I följande exempel visas hur du definierar en anpassad TokenCredential böna för att utföra autentiseringen:

@Bean
TokenCredential myTokenCredential() {
    // Your concrete TokenCredential instance
}
spring.cloud.azure:
  credential:
    token-credential-bean-name: myTokenCredential

Autentisera med en systemtilldelad hanterad identitet

I följande exempel visas hur du autentiserar med hjälp av en systemtilldelad hanterad identitet:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true

Autentisera med hjälp av en användartilldelad hanterad identitet

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}

Autentisera med tjänstens huvudnamn med klienthemlighet

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>

Not

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använt 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 enklientapp till flera klientorganisationer på Microsoft Entra-ID.

Autentisera med tjänstens huvudnamn med klientcertifikat

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>

Not

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använt 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 enklientapp 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>

Not

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använt 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 enklientapp till flera klientorganisationer på Microsoft Entra-ID.

Autentisera med hjälp av en användarautentiseringsuppgift

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}

Autentisera en tjänst med en annan autentiseringsuppgift än andra

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>

Not

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använt 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 enklientapp 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 har tilldelats ett säkerhetsobjekt avgör vilka behörigheter som huvudkontot har.

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
Ägare av Конфиг� Ger fullständig åtkomst till App Configuration-data.
Läsare av Конфиг� 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.
Avsändare av Azure Event Hubs-data 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- 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.
Läsare av lagringsblobdata 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.

Not

När du använder Spring Cloud Azure Resource Manager för att hämta anslutningssträngarna 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 roll för att hämta Redis-egenskaperna.

Not

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.

Viktig

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.

Autentisera med 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 Service.

Autentisera med anslutningssträngar

Vissa Azure-tjänster stöder anslutningssträng för att tillhandahålla anslutningsinformation och autentiseringsuppgifter. Om du vill ansluta till dessa Azure-tjänster med hjälp av anslutningssträngen konfigurerar du bara spring.cloud.azure.<azure-service>.connection-string. Konfigurera till exempel spring.cloud.azure.eventhubs.connection-string för att ansluta till Event Hubs-tjänsten.