Dela via


Autentisera åtkomst till Azure Databricks med tjänstens huvudnamn med OAuth (OAuth M2M)

Den här artikeln beskriver hur du skapar ett Huvudnamn för Azure Databricks-tjänsten och använder den för att autentisera till en målentitet med OAuth.

Steg 1: Skapa ett huvudnamn för tjänsten

Kontoadministratörer och arbetsyteadministratörer kan skapa ett tjänsthuvudnamn. I det här steget beskrivs hur du skapar ett huvudnamn för tjänsten på en arbetsyta. Information om hur du använder kontokonsolen finns i Hantera tjänstens huvudnamn i ditt konto.

Du kan också skapa ett Microsoft Entra ID-hanterat tjänsthuvudnamn och lägga till det i Azure Databricks. Mer information finns i Databricks och Microsoft Entra ID-tjänstens huvudnamn.

  1. Som arbetsyteadministratör loggar du in på Azure Databricks-arbetsytan.
  2. Klicka på ditt användarnamn i det övre fältet på Azure Databricks-arbetsytan och välj Inställningar.
  3. Klicka på fliken Identitet och åtkomst .
  4. Bredvid Tjänstens huvudnamn klickar du på Hantera.
  5. Klicka på Lägg till tjänstens huvudnamn.
  6. Klicka på listrutepilen i sökrutan och klicka sedan på Lägg till ny.
  7. Under Hantering väljer du Hanterad Databricks.
  8. Ange ett namn för tjänstens huvudnamn.
  9. Klicka på Lägg till.

Tjänstens huvudnamn läggs till i både din arbetsyta och Azure Databricks-kontot.

Steg 2: Tilldela behörigheter till tjänstens huvudnamn

  1. Klicka på namnet på tjänstens huvudnamn för att öppna informationssidan.
  2. På fliken Konfigurationer markerar du kryssrutan bredvid varje berättigande som du vill att tjänstens huvudnamn ska ha för den här arbetsytan och klickar sedan på Uppdatera.
  3. På fliken Behörigheter beviljar du åtkomst till alla Azure Databricks-användare, tjänsthuvudnamn och grupper som du vill hantera och använda tjänstens huvudnamn. Se Hantera roller på ett huvudnamn för tjänsten.

Steg 3: Skapa en OAuth-hemlighet för tjänstens huvudnamn

Innan du kan använda OAuth för att autentisera till Azure Databricks måste du först skapa en OAuth-hemlighet som kan användas för att generera OAuth-åtkomsttoken. Ett huvudnamn för tjänsten kan ha upp till fem OAuth-hemligheter. Kontoadministratörer och arbetsyteadministratörer kan skapa en OAuth-hemlighet för tjänstens huvudnamn.

  1. På informationssidan för tjänstens huvudnamn klickar du på fliken Hemligheter .

  2. Under OAuth-hemligheter klickar du på Generera hemlighet.

    Generera OAuth-hemlighet från arbetsytan

  3. Kopiera det visade hemlighets - och klient-ID:t och klicka sedan på Klar.

Hemligheten avslöjas bara en gång under skapandet. Klient-ID:t är samma som tjänstens huvudnamns program-ID.

Kontoadministratörer kan också generera en OAuth-hemlighet från informationssidan för tjänstens huvudnamn i kontokonsolen.

  1. Logga in på kontokonsolen som kontoadministratör.

  2. Klicka på Användarhanteringsikon för kontokonsol Användarhantering.

  3. På fliken Tjänstens huvudnamn väljer du tjänstens huvudnamn.

  4. Under OAuth-hemligheter klickar du på Generera hemlighet.

    Generera OAuth-hemlighet från arbetsytan

  5. Kopiera det visade hemlighets - och klient-ID:t och klicka sedan på Klar.

Kommentar

För att tjänstens huvudnamn ska kunna använda kluster eller SQL-lager måste du ge tjänstens huvudnamn åtkomst till dem. Se Beräkningsbehörigheter eller Hantera ett SQL-lager.

Steg 4: Använda OAuth M2M-autentisering

Om du vill använda OAuth M2M-autentisering måste du ange följande associerade miljövariabler, .databrickscfg fält, Terraform-fält eller Config fält:

  • Azure Databricks-värden, som anges som https://accounts.azuredatabricks.net för kontoåtgärder eller mål-URL per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net för arbetsyteåtgärder.
  • Azure Databricks-konto-ID för Azure Databricks-kontoåtgärder.
  • Klient-ID för tjänstens huvudnamn.
  • Tjänstens huvudhemlighet.

Om du vill utföra OAuth M2M-autentisering integrerar du följande i koden baserat på det deltagande verktyget eller SDK:n:

Environment

Information om hur du använder miljövariabler för en specifik Azure Databricks-autentiseringstyp med ett verktyg eller SDK finns i Autentisera åtkomst till Azure Databricks-resurser eller verktygets eller SDK:s dokumentation. Se även Miljövariabler och fält för klient enhetlig autentisering och Standardmetoder för klient enhetlig autentisering.

För åtgärder på kontonivå anger du följande miljövariabler:

  • DATABRICKS_HOST, ange till Azure Databricks-kontokonsolens URL, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

För åtgärder på arbetsytans nivå anger du följande miljövariabler:

  • DATABRICKS_HOSTanger du till URL:en för Azure Databricks per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Profil

Skapa eller identifiera en Azure Databricks-konfigurationsprofil med följande fält i .databrickscfg filen. Om du skapar profilen ersätter du platshållarna med lämpliga värden. Information om hur du använder profilen med ett verktyg eller SDK finns i Autentisera åtkomst till Azure Databricks-resurser eller verktygets eller SDK:s dokumentation. Se även Miljövariabler och fält för klient enhetlig autentisering och Standardmetoder för klient enhetlig autentisering.

För åtgärder på kontonivå anger du följande värden i .databrickscfg filen. I det här fallet är https://accounts.azuredatabricks.netAzure Databricks-kontokonsolens URL:

[<some-unique-configuration-profile-name>]
host          = <account-console-url>
account_id    = <account-id>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

För åtgärder på arbetsytenivå anger du följande värden i .databrickscfg filen. I det här fallet är värden URL:en för Azure Databricks per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net:

[<some-unique-configuration-profile-name>]
host          = <workspace-url>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

CLI

Gör något av följande för Databricks CLI:

  • Ange miljövariablerna enligt beskrivningen i avsnittet "Miljö".
  • Ange värdena i .databrickscfg filen enligt beskrivningen i avsnittet Profil i den här artikeln.

Miljövariabler har alltid företräde framför värden i filen .databrickscfg .

Se även OAuth-autentisering från dator till dator (M2M).

Anslut

Kommentar

OAuth M2M-autentisering stöds i följande Databricks Connect-versioner:

  • För Python, Databricks Connect för Databricks Runtime 14.0 och senare.
  • För Scala, Databricks Connect för Databricks Runtime 13.3 LTS och senare. Databricks SDK för Java som ingår i Databricks Connect för Databricks Runtime 13.3 LTS och senare måste uppgraderas till Databricks SDK för Java 0.17.0 eller senare.

För Databricks Connect kan du göra något av följande:

  • Ange värdena i .databrickscfg filen för åtgärder på Azure Databricks-arbetsytenivå enligt beskrivningen i den här artikelns avsnitt "Profil". Ange cluster_id även miljövariabeln i din profil till url:en per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net.
  • Ange miljövariablerna för åtgärder på Azure Databricks-arbetsytenivå enligt beskrivningen i den här artikelns "Miljö"-avsnitt. Ange DATABRICKS_CLUSTER_ID även miljövariabeln till url:en per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net.

Värden i .databrickscfg filen har alltid företräde framför miljövariabler.

Information om hur du initierar Databricks Connect-klienten med dessa miljövariabler eller värden i filen finns i .databrickscfg Beräkningskonfiguration för Databricks Connect.

VS Code

Gör följande för Databricks-tillägget för Visual Studio Code:

  1. Ange värdena i .databrickscfg filen för åtgärder på Azure Databricks-arbetsytenivå enligt beskrivningen i den här artikelns avsnitt "Profil".
  2. I fönstret Konfiguration i Databricks-tillägget för Visual Studio Code klickar du på Konfigurera Databricks.
  3. I kommandopaletten för Databricks Host anger du url:en per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.netoch trycker sedan på Enter.
  4. I kommandopaletten väljer du målprofilens namn i listan för din URL.

Mer information finns i Autentiseringskonfiguration för Databricks-tillägget för Visual Studio Code.

Terraform

För åtgärder på kontonivå för standardautentisering:

provider "databricks" {
  alias = "accounts"
}

För direkt konfiguration (ersätt retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel HashiCorp Vault. Se även Valvprovider). I det här fallet är https://accounts.azuredatabricks.netAzure Databricks-kontokonsolens URL:

provider "databricks" {
  alias         = "accounts"
  host          = <retrieve-account-console-url>
  account_id    = <retrieve-account-id>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

För åtgärder på arbetsytenivå för standardautentisering:

provider "databricks" {
  alias = "workspace"
}

För direkt konfiguration (ersätt retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel HashiCorp Vault. Se även Valvprovider). I det här fallet är värden URL:en för Azure Databricks per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net:

provider "databricks" {
  alias         = "workspace"
  host          = <retrieve-workspace-url>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Mer information om autentisering med Databricks Terraform-providern finns i Autentisering.

Python

För åtgärder på kontonivå använder du följande för standardautentisering:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

För direkt konfiguration använder du följande och ersätter retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel Azure KeyVault. I det här fallet är https://accounts.azuredatabricks.netAzure Databricks-kontokonsolens URL:

from databricks.sdk import AccountClient

a = AccountClient(
  host          = retrieve_account_console_url(),
  account_id    = retrieve_account_id(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

För åtgärder på arbetsytenivå, särskilt standardautentisering:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

För direkt konfiguration ersätter du retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel Azure KeyVault. I det här fallet är värden URL:en för Azure Databricks per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host          = retrieve_workspace_url(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

Mer information om autentisering med Databricks-verktyg och SDK:er som använder Python och implementerar enhetlig autentisering med Databricks-klienten finns i:

Kommentar

Databricks-tillägget för Visual Studio Code använder Python men har ännu inte implementerat OAuth M2M-autentisering.

Java

För åtgärder på arbetsytenivå för standardautentisering:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

För direkt konfiguration (ersätt retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel Azure KeyVault). I det här fallet är värden URL:en för Azure Databricks per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net:

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
  .setClientId(retrieveClientId())
  .setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

Mer information om autentisering med Databricks-verktyg och SDK:er som använder Java och implementerar enhetlig autentisering för Databricks-klienten finns i:

Go

För åtgärder på kontonivå för standardautentisering:

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

För direkt konfiguration (ersätt retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel Azure KeyVault). I det här fallet är https://accounts.azuredatabricks.netAzure Databricks-kontokonsolens URL:

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host:         retrieveAccountConsoleUrl(),
  AccountId:    retrieveAccountId(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

För åtgärder på arbetsytenivå för standardautentisering:

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

För direkt konfiguration (ersätt retrieve platshållarna med din egen implementering för att hämta värdena från konsolen eller något annat konfigurationsarkiv, till exempel Azure KeyVault). I det här fallet är värden URL:en för Azure Databricks per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net:

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:         retrieveWorkspaceUrl(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

Mer information om autentisering med Databricks-verktyg och SDK:er som använder Go och som implementerar enhetlig autentisering för Databricks-klienten finns i Autentisera Databricks SDK för Go med ditt Azure Databricks-konto eller din arbetsyta.

Generera och använda åtkomsttoken manuellt för OAuth M2M-autentisering

Azure Databricks-verktyg och SDK:er som implementerar Databricks-klientens enhetliga autentiseringsstandard genererar, uppdaterar och använder azure Databricks OAuth-åtkomsttoken åt dig efter behov för OAuth M2M-autentisering.

Databricks rekommenderar att du använder klientad autentisering, men om du måste generera, uppdatera eller använda Azure Databricks OAuth-åtkomsttoken manuellt följer du anvisningarna i det här avsnittet.

Använd tjänstens huvudnamns klient-ID och OAuth-hemlighet för att begära en OAuth-åtkomsttoken för att autentisera till både REST-API:er på kontonivå och REST-API:er på arbetsytenivå. Åtkomsttoken upphör att gälla om en timme. Du måste begära en ny OAuth-åtkomsttoken efter förfallodatumet. Omfånget för OAuth-åtkomsttoken beror på vilken nivå du skapar token från. Du kan skapa en token på antingen kontonivå eller arbetsytenivå enligt följande:

Generera en åtkomsttoken på kontonivå manuellt

En OAuth-åtkomsttoken som skapats från kontonivån kan användas mot Databricks REST-API:er i kontot och på alla arbetsytor som tjänstens huvudnamn har åtkomst till.

  1. Logga in på kontokonsolen som kontoadministratör.

  2. Klicka på nedåtpilen bredvid ditt användarnamn i det övre högra hörnet.

  3. Kopiera ditt konto-ID.

  4. Konstruera tokenslutpunkts-URL:en genom att <my-account-id> ersätta i följande URL med det konto-ID som du kopierade.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. Använd en klient, till exempel curl för att begära en OAuth-åtkomsttoken med tokenslutpunktens URL, tjänstens huvudnamns klient-ID (även kallat program-ID) och tjänstens huvudnamns OAuth-hemlighet som du skapade. Omfånget all-apis begär en OAuth-åtkomsttoken som kan användas för att komma åt alla Databricks REST-API:er som tjänstens huvudnamn har beviljats åtkomst till.

    • Ersätt <token-endpoint-URL> med den föregående tokenslutpunkts-URL:en.
    • Ersätt <client-id> med tjänstens huvudnamns klient-ID, som även kallas program-ID.
    • Ersätt <client-secret> med tjänstens huvudnamns OAuth-hemlighet som du skapade.
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    Detta genererar ett svar som liknar:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    access_token Kopiera från svaret.

Generera en åtkomsttoken på arbetsytans nivå manuellt

En OAuth-åtkomsttoken som skapats från arbetsytenivån kan bara komma åt REST-API:er på den arbetsytan, även om tjänstens huvudnamn är kontoadministratör eller är medlem i andra arbetsytor.

  1. Skapa tokenslutpunkts-URL:en genom att https://<databricks-instance> ersätta med arbetsytans URL för din Azure Databricks-distribution:

    https://<databricks-instance>/oidc/v1/token
    
  2. Använd en klient, till exempel curl för att begära en OAuth-åtkomsttoken med tokenslutpunktens URL, tjänstens huvudnamns klient-ID (även kallat program-ID) och tjänstens huvudnamns OAuth-hemlighet som du skapade. Omfånget all-apis begär en OAuth-åtkomsttoken som kan användas för att komma åt alla Databricks REST-API:er som tjänstens huvudnamn har beviljats åtkomst till på arbetsytan som du begär token från.

    • Ersätt <token-endpoint-URL> med den föregående tokenslutpunkts-URL:en.
    • Ersätt <client-id> med tjänstens huvudnamns klient-ID, som även kallas program-ID.
    • Ersätt <client-secret> med tjänstens huvudnamns OAuth-hemlighet som du skapade.
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    Detta genererar ett svar som liknar:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    access_token Kopiera från svaret.

Anropa ett Databricks REST API

Nu kan du använda OAuth-åtkomsttoken för att autentisera till REST-API:er på Azure Databricks-kontonivå och REST-API:er på arbetsytenivå. Tjänstens huvudnamn måste vara kontoadministratör för att anropa REST-API:er på kontonivå.

Du kan inkludera token i huvudet med hjälp av Bearer autentisering. Du kan använda den här metoden med curl eller någon klient som du skapar.

Exempel på REST API-begäran på kontonivå

I det här exemplet används Bearer autentisering för att hämta en lista över alla arbetsytor som är associerade med ett konto.

  • Ersätt <oauth-access-token> med tjänstens huvudnamns OAuth-åtkomsttoken som du kopierade i föregående steg.
  • Ersätt <account-id> med ditt konto-ID.
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces'

Exempel på REST API-begäran på arbetsytenivå

I det här exemplet används Bearer autentisering för att lista alla tillgängliga kluster på den angivna arbetsytan.

  • Ersätt <oauth-access-token> med tjänstens huvudnamns OAuth-åtkomsttoken som du kopierade i föregående steg.
  • Ersätt <workspace-URL> med din grundläggande arbetsyte-URL, som har formuläret som liknar dbc-a1b2345c-d6e7.cloud.databricks.com.
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'

Ytterligare resurser