Hämta Azure AD-token med hjälp av ett huvudnamn för tjänsten

Den här artikeln beskriver hur ett huvudnamn för tjänsten som definieras i Azure Active Directory (Azure AD) också kan fungera som huvudnamn för vilka autentiserings- och auktoriseringsprinciper kan tillämpas i Azure Databricks. Tjänsthuvud namn på en Azure Databricks-arbetsyta kan ha annan detaljerad åtkomstkontroll än vanliga användare (användarens huvudnamn).

Ett tjänsthuvudnamn fungerar som en klientroll och använder flödet för OAuth 2.0-klientautentiseringsuppgifter för att auktorisera åtkomst till Azure Databricks resurser.

Du kan hantera tjänstens huvudnamn med hjälp av Databricks SCIM API 2.0 (ServicePrincipals) API eller genom att använda följande procedur från Azure Portal.

Du kan också använda Microsoft Authentication Library (MSAL) för att programmatiskt hämta en Azure AD-åtkomsttoken för en användare i stället för ett huvudnamn för tjänsten. Se Hämta Azure AD-token med hjälp av Microsoft Authentication Library.

Etablera ett huvudnamn för tjänsten i Azure Portal

  1. Logga in på Azure-portalen.

    Anteckning

    Vilken portal som ska användas beror på om ditt Azure AD-program körs i det offentliga Azure-molnet eller i ett nationellt eller nationellt moln. Mer information finns i Nationella moln.

  2. Om du har åtkomst till flera klienter, prenumerationer eller kataloger klickar du på ikonen Kataloger + prenumerationer (katalog med filter) på den översta menyn för att växla till den katalog där du vill etablera tjänstens huvudnamn.

  3. Sök efter och välj Azure Active Directory.

  4. I Hanteraklickar du på Appregistreringar Ny registrering.

  5. I Namnanger du ett namn för programmet.

  6. I avsnittet Kontotyper som stöds väljer du Endast konton i den här organisationskatalogen (enskild klient).

  7. I avsnittet Omdirigerings-URI (valfritt) för Välj en plattform väljer du Offentlig klient/intern (mobile desktop) och anger en omdirigerings-URI. I följande exempel är omdirigerings-URI-värdet http://localhost .

    Register app

  8. Klicka på Registrera.

  9. I Hantera klickardu på Certifikathemligheter.

  10. På fliken Klienthemligheter klickar du på Ny klienthemlighet.

    New client secret

  11. I fönstret Lägg till en klienthemlighet anger duen beskrivning för klienthemligheten för Beskrivning.

  12. För Upphör attgälla väljer du en förfallotid för klienthemligheten och klickar sedan på Lägg till.

  13. Kopiera och lagra klienthemlighetens värde på en säker plats eftersom den här klienthemligheten är lösenordet för ditt program.

  14. På sidan Översikt på programsidan i avsnittet Essentials kopierar du följande värden:

    • Program-ID (klient)
    • Katalog-ID (klient)

    Azure registered app overview

Hämta en Azure AD-åtkomsttoken

För att komma åt Databricks REST API med tjänstens huvudnamn hämtar du och använder sedan en Azure AD-åtkomsttoken för tjänstens huvudnamn. Mer information finns i Första fallet: Begäran om åtkomsttoken med en delad hemlighet.

  1. Samla in följande information:

    Parameter Beskrivning
    Klientorganisations-ID Katalog-ID (klient) för programmet som registrerats i Azure AD i Etablera ett tjänsthuvudnamn i Azure Portal.
    Klient-ID Program-ID (klient) för det program som registrerats i Azure AD.
    Klienthemlighet Värdet för klienthemligheten för programmet som registrerats i Azure AD, som du skapade i Etablera ett huvudnamn för tjänsten i Azure Portal.
  2. Använd föregående information tillsammans med curl för att hämta Azure AD-åtkomsttoken.

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token \
    -d 'client_id=<client-id>' \
    -d 'grant_type=client_credentials' \
    -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \
    -d 'client_secret=<client-secret>'
    

    Ersätt:

    • <tenant-id> med det registrerade programmets klientorganisations-ID.
    • <client-id> med det registrerade programmets klient-ID.
    • <client-secret> med det registrerade programmets klienthemlighetsvärde.

    Ändra inte värdet för scope parametern. Den representerar programmatiskt ID för Azure Databricks ( ) tillsammans med 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d standardomfånget ( /.default , URL-kodad som %2f.default ).

    Ett exempel:

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/v2.0/token \
    -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \
    -d 'grant_type=client_credentials' \
    -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \
    -d 'client_secret=abc1D~Ef...2ghIJKlM3'
    

    Azure AD-åtkomsttoken finns access_token i värdet i utdata för anropet.

Använd tjänstens huvudnamns Azure AD-åtkomsttoken för att komma åt Databricks-REST API

Vilken metod du använder för att använda tjänstens huvudnamn och Azure AD-åtkomsttoken för att få åtkomst till Databricks REST API beror på om tjänstens huvudnamn läggs till i Azure Databricks-målarbetsytan och om tjänstens huvudnamn har administratörsåtkomst till arbetsytan.

API-åtkomst för tjänstens huvudnamn som Azure Databricks användare och administratörer för arbetsytan

För att slutföra den här proceduren måste du först lägga till tjänstens huvudnamn Azure Databricks arbetsytan med hjälp av slutpunkten för tjänstens huvudnamn, till exempel:

curl -X POST \
-H 'Authorization: Bearer dapi1234...ab123c45' \
https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/preview/scim/v2/ServicePrincipals \
-H 'Content-type: application/scim+json' \
-d @create-service-principal.json

create-service-principal.json:

{
  "displayName": "My Service Principal",
  "applicationId": "12a34b56-789c-0d12-e3fa-b456789c0123",
  "entitlements": [
    {
      "value": "allow-cluster-create"
    }
  ],
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
  ],
  "active": true
}

Gå vidare till API-åtkomst för tjänstens huvudnamn som inte är arbetsyteanvändare om något av följande stämmer:

  • Du vill inte lägga till tjänstens huvudnamn Azure Databricks arbetsytan.
  • Tjänstens huvudnamn har lagts till i Azure Databricks arbetsytan. Databricks-REST API som du vill anropa kräver dock administratörsåtkomst och tjänstens huvudnamn har för närvarande inte administratörsåtkomst till arbetsytan.
  1. Samla in följande information.

    Parameter Beskrivning
    Azure AD-åtkomsttoken Azure AD-åtkomsttoken som returnerades från begäran i Hämta en Azure AD-åtkomsttoken.
  2. Använd Azure AD-åtkomsttoken tillsammans med curl för att anropa Databricks-REST API. Ett exempel:

    curl -X GET \
    -H 'Authorization: Bearer <access-token>' \
    https://<databricks-instance>/api/2.0/clusters/list
    

    Ersätt:

    • <access-token> med Azure AD-åtkomsttoken.
    • <databricks-instance> med <databricks-instance> för Azure Databricks distributionen.
    • GET och /api/2.0/clusters/list med lämplig HTTP-åtgärd och slutpunkt för Databricks-REST API.

    Ett exempel:

    curl -X GET \
    -H 'Authorization: Bearer abC1dE...fgHi23jk' \
    https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list
    

API-åtkomst för tjänstens huvudnamn som inte är arbetsyteanvändare

Följ den här proceduren om något av följande stämmer:

  • Tjänstens huvudnamn har inte redan lagts till i målarbetsytan Azure Databricks med hjälp av slutpunkten lägg till tjänstens huvudnamn.
  • Tjänstens huvudnamn har lagts till i Azure Databricks arbetsytan. Databricks-REST API som du vill anropa kräver dock administratörsåtkomst och tjänstens huvudnamn har för närvarande inte administratörsåtkomst till arbetsytan.

Annars går du tillbaka till API-åtkomst för tjänstens huvudnamn som är Azure Databricks och administratörer för arbetsytan.

  1. Kontrollera att tjänstens huvudnamn har tilldelats rollen Deltagare eller Ägare på målarbetsytans resurs i Azure. Se Tilldela Azure-roller med hjälp av Azure-portalen. Information om hur du kommer till den här resursen finns i Öppna resurser. Om du vill öppna målresursen kan du söka på Azure Databricks tjänsttyp och annan information i Azure som du känner till om Azure Databricks arbetsytan.

  2. Samla in följande information:

    Parameter Beskrivning
    Klientorganisations-ID Katalog-ID (klient) för programmet som registrerats i Azure AD i Etablera ett tjänsthuvudnamn i Azure Portal.
    Klient-ID Program-ID (klient) för det program som registrerats i Azure AD.
    Klienthemlighet Värdet för klienthemligheten för programmet som registrerats i Azure AD, som du skapade i Etablera ett huvudnamn för tjänsten i Azure Portal.
    Azure AD-åtkomsttoken Azure AD-åtkomsttoken som returnerades från begäran i Hämta en Azure AD-åtkomsttoken.
    Prenumerations-ID:t ID:t (inte namnet) för den Azure-prenumeration som är associerad med mål-Azure Databricks arbetsytan. Information om hur du kommer till detta och följande information finns i Öppna resurser. Om du vill öppna målresursen kan du söka på Azure Databricks tjänsttyp och annan information i Azure som du känner till om Azure Databricks arbetsytan.
    Namn på resursgrupp Namnet på den Azure-resursgrupp som är associerad med målarbetsytan Azure Databricks målresursen.
    Namn på arbetsyta Namnet på målarbetsytan i Azure Azure Databricks målarbetsytan.
  3. Använd en del av föregående information tillsammans med för att curl hämta en åtkomsttoken för azure AD-hanteringsslutpunkt.

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/<tenant-id>/oauth2/token \
    -d 'client_id=<client-id>' \
    -d 'grant_type=client_credentials' \
    -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \
    -d 'client_secret=<client-secret>'
    

    Ersätt:

    • <tenant-id> med det registrerade programmets klientorganisations-ID.
    • <client-id> med det registrerade programmets klient-ID.
    • <client-secret> med det registrerade programmets klienthemlighetsvärde.

    Ändra inte värdet för resource parametern. Den representerar Azure AD-hanteringsslutpunkten ( https://management.core.windows.net/ , URL-kodad som https%3A%2F%2Fmanagement.core.windows.net%2F ).

    Ett exempel:

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/token \
    -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \
    -d 'grant_type=client_credentials' \
    -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \
    -d 'client_secret=abc1D~Ef...2ghIJKlM3'
    

    Åtkomsttoken för Azure AD-hanteringsslutpunkt access_token finns i värdet i utdata för anropet.

  4. Använd azure AD-hanteringsslutpunktens åtkomsttoken tillsammans med resten av föregående information och för att anropa curl Databricks-REST API, till exempel:

    curl -X GET \
    -H 'Authorization: Bearer <access-token>' \
    -H 'X-Databricks-Azure-SP-Management-Token: <management-access-token>' \
    -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/workspaces/<workspace-name>' \
    https://<databricks-instance>/api/2.0/clusters/list
    

    Ersätt:

    • <access-token> med Azure AD-åtkomsttoken.
    • <management-access-token> med azure AD-hanteringsslutpunktens åtkomsttoken.
    • <subscription-id> med ID:t för prenumerationen som är associerad med Azure Databricks arbetsytan.
    • <resource-group-name> med namnet på den resursgrupp som är associerad med målarbetsytan Azure Databricks målarbetsytan.
    • <workspace-name> med namnet på målarbetsytan Azure Databricks målarbetsytan.
    • <databricks-instance> med <databricks-instance> för Azure Databricks distributionen.
    • GET och /api/2.0/clusters/list med lämplig HTTP-åtgärd och slutpunkt för Databricks-REST API.

    Ett exempel:

    curl -X GET \
    -H 'Authorization:Bearer abC1dE...fgHi23jk' \
    -H 'X-Databricks-Azure-SP-Management-Token: abC1dE...ghIj23kl' \
    -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/12a345...bcd6789e/resourceGroups/my-resource-group/providers/Microsoft.Databricks/workspaces/my-workspace' \
    https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list