Hämta Azure AD token för tjänstens huvudnamn

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

Ett huvudnamn för tjänsten fungerar som en klientroll och använder OAuth 2.0-klientens autentiseringsuppgifter 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) för arbetsyte-API:et eller med hjälp av 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 för användare med hjälp av MSAL.

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

  1. Logga in på Azure-portalen.

    Anteckning

    Portalen som ska användas skiljer sig åt beroende 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 Hantera klickar du på Appregistreringar > Ny registrering.

  5. För Namn anger du ett namn för programmet.

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

  7. Klicka på Registrera.

  8. I Hantera klickar du på Certifikathemligheter&.

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

    Ny klienthemlighet

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

  11. För Förfaller väljer du en förfallotid för klienthemligheten och klickar sedan på Lägg till.

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

  13. På programsidans översiktssida i avsnittet Essentials kopierar du följande värden:

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

    Översikt över Azure-registrerad app

Etablera ett huvudnamn för tjänsten med Azure CLI

Se Skapa ett huvudnamn för Azure-tjänsten med Azure CLI.

Hämta en Azure AD-åtkomsttoken med Microsofts identitetsplattform REST API

För att få åtkomst till Databricks REST API med tjänstens huvudnamn får 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.

Tips

Mer detaljerade stegvisa instruktioner om hur du hämtar en Azure AD åtkomsttoken finns i Tjänstens huvudnamn för Azure Databricks-automatisering.

Du kan också använda Azure CLI för att hämta Azure AD åtkomsttoken. Se Hämta en Azure AD-åtkomsttoken med Azure CLI.

  1. Samla in följande information:

    Parameter Beskrivning
    Klient-ID:t Katalog-ID (klient) för programmet som registrerats i Azure AD.
    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.
  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 parametern scope . Den representerar programmatiskt ID för Azure Databricks (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d) tillsammans med standardomfånget (/.defaultURL-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'
    

    Den Azure AD åtkomsttoken finns i värdet i access_token anropets utdata.

Hämta en Azure AD-åtkomsttoken med Azure CLI

För att få åtkomst till Databricks REST API med tjänstens huvudnamn får du och använder sedan en Azure AD åtkomsttoken för tjänstens huvudnamn.

  1. Samla in följande information:

    Parameter Beskrivning
    Klient-ID:t Katalog-ID (klient) för programmet som registrerats i Azure AD.
    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.
  2. Logga in på Azure med hjälp av Azure CLI för att köra kommandot az login . --service-principal Använd alternativet tillsammans med att ange värdena för parametrarna för klientorganisations-ID (katalog-ID), klient-ID (program-ID) och klienthemlighet (värde) för det program som registrerats i Azure AD. --output Använd alternativet för att inaktivera kommandots utdata i ett annat format (i det här fallet en tabell i stället för JSON) för bättre läsbarhet.

    az login \
    --service-principal \
    --tenant <Tenant-ID>
    --username <Client-ID> \
    --password <Client-secret> \
    --output table
    
  3. Bekräfta att du är inloggad på rätt prenumeration som du vill skapa Azure AD åtkomsttoken för den inloggade Azure AD tjänstens huvudnamn för. Det gör du genom att i kommandots az login utdata leta efter tabellraden där IsDefault är inställd på True. Prenumerationens Name anger den aktuella prenumerationen. Se även Hämta prenumerations- och klientorganisations-ID:t i Azure Portal.

    Om du behöver växla till en annan prenumeration kör du kommandot az account set . --name Använd alternativet eller --subscription för att ange önskat prenumerationsnamn eller ID. Du kan hämta prenumerations-ID:t för en Azure Databricks-arbetsyta genom att klicka på Azure-portalen i arbetsytans navigeringsfält och leta Resource ID: /subscriptions/00000000-0000-0000-0000-000000000000efter , där 00000000-0000-0000-0000-000000000000 är prenumerations-ID:t.

    az account set --name "<subscription-name>"
    
    # Or ...
    
    az account set --subscription <subscription-id>
    

    Om följande meddelande visas är du inloggad på fel klientorganisation: The subscription of '<subscription-id>' doesn't exist in cloud 'AzureCloud'. Om du vill logga in på rätt klient måste du köra az login kommandot igen med hjälp av --tenant alternativet för att ange rätt klientorganisations-ID. Du kan klientorganisations-ID:t för en Azure Databricks-arbetsyta genom att köra kommandot curl -v <per-workspace-URL>/aad/auth och leta i utdata < location: https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000, där 00000000-0000-0000-0000-000000000000 är klientorganisations-ID:t. Se även Hämta prenumerations- och klientorganisations-ID:t i Azure Portal.

    az login --tenant <tenant-id> --output table
    
  4. Generera Azure AD åtkomsttoken för det inloggade Azure AD-tjänstens huvudnamn genom att köra kommandot az account get-access-token. --resource Använd alternativet för att ange det unika resurs-ID:t för Azure Databricks-tjänsten, som är 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d. Du kan bara visa värdet för Azure AD token i kommandots utdata med hjälp --query av alternativen och --output .

    az account get-access-token \
    --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \
    --query "accessToken" \
    --output tsv
    

Använda tjänstens huvudnamns Azure AD åtkomsttoken för att få åtkomst till Databricks REST API

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

API-åtkomst för tjänsthuvudnamn som är Azure Databricks-arbetsyteanvändare och administratörer

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

curl -X POST \
-H 'Authorization: Bearer <access-token>' \
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
}

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

  • Du vill inte lägga till tjänstens huvudnamn på Azure Databricks-arbetsytan.
  • Tjänstens huvudnamn har lagts till på Azure Databricks-arbetsytan. Men databricks REST-API:et som du vill anropa kräver 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 Den Azure AD åtkomsttoken som returneras från begäran i Hämta en Azure AD-åtkomsttoken med Microsofts identitetsplattform REST API eller Hämta en Azure AD-åtkomsttoken med Azure CLI.
  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 URL:en per arbetsyta för din Azure Databricks-distribution.
    • GET och /api/2.0/clusters/list med lämplig HTTP-åtgärd och slutpunkt för Databricks REST API-målet.

    Ett exempel:

    curl -X GET \
    -H 'Authorization: Bearer <access-token>' \
    https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list
    

API-åtkomst för tjänsthuvudnamn 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 på Azure Databricks-målarbetsytan med hjälp av slutpunkten Lägg till tjänstens huvudnamn .
  • Tjänstens huvudnamn har lagts till på Azure Databricks-arbetsytan. Men databricks REST-API:et som du vill anropa kräver administratörsåtkomst och tjänstens huvudnamn har för närvarande inte administratörsåtkomst till arbetsytan.

Annars kan du gå tillbaka till API-åtkomsten för tjänsthuvudnamn som är användare och administratörer på Azure Databricks-arbetsytan.

  1. Kontrollera att tjänstens huvudnamn har tilldelats rollen Deltagare eller Ägare för 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 efter tjänsttypen Azure Databricks och annan information i Azure som du känner till om Azure Databricks-målarbetsytan.

  2. Samla in följande information:

    Parameter Beskrivning
    Klient-ID:t Katalog-ID (klient) för det program som registrerats i Azure AD i Etablera ett huvudnamn för tjänsten 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 det program som registrerats i Azure AD, som du skapade i Etablera ett huvudnamn för tjänsten i Azure Portal.
    Azure AD åtkomsttoken Den Azure AD åtkomsttoken som returneras från begäran i Hämta en Azure AD-åtkomsttoken med Microsofts identitetsplattform REST API eller Hämta en Azure AD-åtkomsttoken med Azure CLI.
    Prenumerations-ID:t ID:t (inte namnet) för Den Azure-prenumeration som är associerad med Azure Databricks-målarbetsytan. Information om hur du kommer åt detta och följande information finns i Öppna resurser. Om du vill öppna målresursen kan du söka efter tjänsttypen Azure Databricks och annan information i Azure som du känner till om Azure Databricks-målarbetsytan.
    Namn på resursgrupp Namnet på den Azure-resursgrupp som är associerad med Azure Databricks-målarbetsytan.
    Namn på arbetsyta Namnet på Azure Databricks-målarbetsytan i Azure.
  3. Använd en del av föregående information tillsammans med curl för att 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 parametern resource . Den representerar den 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 finns i värdet i access_token utdata för anropet.

  4. Använd åtkomsttoken för Azure AD-hanteringsslutpunkt tillsammans med resten av föregående information och curl anropa 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 åtkomsttoken för Azure AD-hanteringsslutpunkt.
    • <subscription-id> med ID:t för prenumerationen som är associerad med Azure Databricks-målarbetsytan.
    • <resource-group-name> med namnet på resursgruppen som är associerad med Azure Databricks-målarbetsytan.
    • <workspace-name> med namnet på Azure Databricks-målarbetsytan.
    • <databricks-instance> med URL:en per arbetsyta för din Azure Databricks-distribution.
    • GET och /api/2.0/clusters/list med lämplig HTTP-åtgärd och slutpunkt för Databricks REST API-målet.

    Ett exempel:

    curl -X GET \
    -H 'Authorization:Bearer <access-token>' \
    -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