Dela via


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:

Diagram showing the authentication mechanism for `DefaultAzureCredential`.

  • 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 autentiseras DefaultAzureCredential 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:

  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.

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, consumerseller 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, consumerseller 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, consumerseller 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, consumerseller 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-stringbara . Konfigurera till exempel spring.cloud.azure.eventhubs.connection-string att ansluta till Event Hubs-tjänsten.