Udostępnij za pośrednictwem


Uwierzytelnianie dostępu do usługi Azure Databricks przy użyciu jednostki usługi przy użyciu protokołu OAuth (OAuth M2M)

W tym artykule wyjaśniono, jak utworzyć jednostkę usługi Azure Databricks i użyć jej do uwierzytelniania w jednostce docelowej za pomocą protokołu OAuth.

Krok 1. Tworzenie jednostki usługi

Administratorzy konta i administratorzy obszaru roboczego mogą tworzyć jednostki usługi. W tym kroku opisano tworzenie jednostki usługi w obszarze roboczym. Aby użyć konsoli konta, zobacz Zarządzanie jednostkami usługi na koncie.

Możesz również utworzyć jednostkę usługi zarządzanej identyfikatora entra firmy Microsoft i dodać ją do usługi Azure Databricks. Aby uzyskać więcej informacji, zobacz Databricks i Microsoft Entra ID jednostki usługi.

  1. Jako administrator obszaru roboczego zaloguj się do obszaru roboczego usługi Azure Databricks.
  2. Kliknij swoją nazwę użytkownika na górnym pasku obszaru roboczego usługi Azure Databricks i wybierz pozycję Ustawienia.
  3. Kliknij kartę Tożsamość i dostęp .
  4. Obok pozycji Jednostki usługi kliknij pozycję Zarządzaj.
  5. Kliknij pozycję Dodaj jednostkę usługi.
  6. Kliknij strzałkę listy rozwijanej w polu wyszukiwania, a następnie kliknij pozycję Dodaj nową.
  7. W obszarze Zarządzanie wybierz pozycję Zarządzane przez usługę Databricks.
  8. Wprowadź nazwę jednostki usługi.
  9. Kliknij przycisk Dodaj.

Jednostka usługi jest dodawana zarówno do obszaru roboczego, jak i do konta usługi Azure Databricks.

Krok 2. Przypisywanie uprawnień do jednostki usługi

  1. Kliknij nazwę jednostki usługi, aby otworzyć jej stronę szczegółów.
  2. Na karcie Konfiguracje zaznacz pole wyboru obok każdego uprawnienia, które ma mieć jednostka usługi dla tego obszaru roboczego, a następnie kliknij przycisk Aktualizuj.
  3. Na karcie Uprawnienia przyznaj dostęp wszystkim użytkownikom usługi Azure Databricks, jednostkom usługi i grupom, którymi chcesz zarządzać i używać tej jednostki usługi. Zobacz Zarządzanie rolami w jednostce usługi.

Krok 3. Tworzenie wpisu tajnego OAuth dla jednostki usługi

Przed użyciem protokołu OAuth do uwierzytelniania w usłudze Azure Databricks należy najpierw utworzyć wpis tajny OAuth, który może służyć do generowania tokenów dostępu OAuth. Jednostka usługi może mieć maksymalnie pięć wpisów tajnych protokołu OAuth. Administratorzy konta i administratorzy obszaru roboczego mogą utworzyć wpis tajny OAuth dla jednostki usługi.

  1. Na stronie szczegółów jednostki usługi kliknij kartę Wpisy tajne .

  2. W obszarze Wpisy tajne protokołu OAuth kliknij pozycję Generuj wpis tajny.

    Generowanie wpisu tajnego OAuth z obszaru roboczego

  3. Skopiuj wyświetlony wpis tajny i identyfikator klienta, a następnie kliknij przycisk Gotowe.

Wpis tajny zostanie ujawniony tylko raz podczas tworzenia. Identyfikator klienta jest taki sam jak identyfikator aplikacji jednostki usługi.

Administratorzy konta mogą również wygenerować wpis tajny OAuth na stronie szczegółów jednostki usługi w konsoli konta.

  1. Jako administrator konta zaloguj się do konsoli konta.

  2. Kliknij pozycję Ikona zarządzania użytkownikami konsoli konta Zarządzanie użytkownikami.

  3. Na karcie Jednostki usługi wybierz jednostkę usługi.

  4. W obszarze Wpisy tajne protokołu OAuth kliknij pozycję Generuj wpis tajny.

    Generowanie wpisu tajnego OAuth z obszaru roboczego

  5. Skopiuj wyświetlony wpis tajny i identyfikator klienta, a następnie kliknij przycisk Gotowe.

Uwaga

Aby umożliwić jednostce usługi korzystanie z klastrów lub magazynów SQL, należy przyznać jednostce usługi dostęp do nich. Zobacz Uprawnienia obliczeniowe lub Zarządzanie usługą SQL Warehouse.

Krok 4. Korzystanie z uwierzytelniania OAuth M2M

Aby użyć uwierzytelniania OAuth M2M, należy ustawić następujące skojarzone zmienne środowiskowe, .databrickscfg pola, pola programu Terraform lub Config pola:

  • Host usługi Azure Databricks określony jako https://accounts.azuredatabricks.net operacje konta lub docelowy adres URL dla obszaru roboczego, na przykład https://adb-1234567890123456.7.azuredatabricks.net w przypadku operacji obszaru roboczego.
  • Identyfikator konta usługi Azure Databricks dla operacji konta usługi Azure Databricks.
  • Identyfikator klienta jednostki usługi.
  • Wpis tajny jednostki usługi.

Aby przeprowadzić uwierzytelnianie OAuth M2M, zintegruj następujące elementy w kodzie na podstawie uczestniczących narzędzi lub zestawu SDK:

Środowisko

Aby użyć zmiennych środowiskowych dla określonego typu uwierzytelniania usługi Azure Databricks za pomocą narzędzia lub zestawu SDK, zobacz Uwierzytelnianie dostępu do zasobów usługi Azure Databricks lub dokumentacji narzędzia lub zestawu SDK. Zobacz również Zmienne środowiskowe i pola dla ujednoliconego uwierzytelniania klienta oraz domyślne metody ujednoliconego uwierzytelniania klienta.

W przypadku operacji na poziomie konta ustaw następujące zmienne środowiskowe:

  • DATABRICKS_HOST, ustaw adres URL konsoli konta usługi Azure Databricks, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

W przypadku operacji na poziomie obszaru roboczego ustaw następujące zmienne środowiskowe:

  • DATABRICKS_HOST, ustaw adres URL usługi Azure Databricks na obszar roboczy, na przykład https://adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Profil

Utwórz lub zidentyfikuj profil konfiguracji usługi Azure Databricks z następującymi polami w .databrickscfg pliku. Jeśli utworzysz profil, zastąp symbole zastępcze odpowiednimi wartościami. Aby użyć profilu za pomocą narzędzia lub zestawu SDK, zobacz Uwierzytelnianie dostępu do zasobów usługi Azure Databricks lub dokumentacji narzędzia lub zestawu SDK. Zobacz również Zmienne środowiskowe i pola dla ujednoliconego uwierzytelniania klienta oraz domyślne metody ujednoliconego uwierzytelniania klienta.

W przypadku operacji na poziomie konta ustaw następujące wartości w .databrickscfg pliku. W takim przypadku adres URL konsoli konta usługi Azure Databricks to https://accounts.azuredatabricks.net:

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

W przypadku operacji na poziomie obszaru roboczego ustaw następujące wartości w .databrickscfg pliku. W takim przypadku hostem jest adres URL usługi Azure Databricks dla obszaru roboczego, na przykład 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

W przypadku interfejsu wiersza polecenia usługi Databricks wykonaj jedną z następujących czynności:

  • Ustaw zmienne środowiskowe zgodnie z opisem w sekcji "Środowisko" tego artykułu.
  • Ustaw wartości w pliku zgodnie z opisem w .databrickscfg sekcji "Profil" tego artykułu.

Zmienne środowiskowe zawsze mają pierwszeństwo przed wartościami w .databrickscfg pliku.

Zobacz również uwierzytelnianie maszyny do maszyny OAuth (M2M).

Połącz

Uwaga

Uwierzytelnianie OAuth M2M jest obsługiwane w następujących wersjach programu Databricks Connect:

  • W przypadku języka Python usługa Databricks Connect dla środowiska Databricks Runtime 14.0 lub nowszego.
  • W przypadku języka Scala usługa Databricks Connect dla środowiska Databricks Runtime 13.3 LTS lub nowszego. Zestaw SDK usługi Databricks dla języka Java dołączony do programu Databricks Connect dla środowiska Databricks Runtime 13.3 LTS lub nowszego musi zostać uaktualniony do zestawu SDK usługi Databricks dla języka Java 0.17.0 lub nowszego.

W przypadku usługi Databricks Connect można wykonać jedną z następujących czynności:

Wartości w .databrickscfg pliku zawsze mają pierwszeństwo przed zmiennymi środowiskowymi.

Aby zainicjować klienta usługi Databricks Connect przy użyciu tych zmiennych środowiskowych lub wartości w .databrickscfg pliku, zobacz jedną z następujących opcji:

VS Code

W przypadku rozszerzenia usługi Databricks dla programu Visual Studio Code wykonaj następujące czynności:

  1. Ustaw wartości w .databrickscfg pliku dla operacji na poziomie obszaru roboczego usługi Azure Databricks zgodnie z opisem w sekcji "Profil" tego artykułu.
  2. W okienku Konfiguracja rozszerzenia usługi Databricks dla programu Visual Studio Code kliknij pozycję Konfiguruj usługę Databricks.
  3. W palecie poleceń w polu Host usługi Databricks wprowadź adres URL obszaru roboczego, na przykład https://adb-1234567890123456.7.azuredatabricks.net, a następnie naciśnij Enter.
  4. W palecie poleceń wybierz nazwę profilu docelowego na liście adresu URL.

Aby uzyskać więcej informacji, zobacz Konfigurowanie uwierzytelniania dla rozszerzenia usługi Databricks dla programu Visual Studio Code.

Terraform

W przypadku operacji na poziomie konta dla uwierzytelniania domyślnego:

provider "databricks" {
  alias = "accounts"
}

W przypadku konfiguracji bezpośredniej (zastąp retrieve symbole zastępcze własną implementacją, aby pobrać wartości z konsoli lub innego magazynu konfiguracji, takiego jak HashiCorp Vault. Zobacz też Dostawca magazynu). W takim przypadku adres URL konsoli konta usługi Azure Databricks to https://accounts.azuredatabricks.net:

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

W przypadku operacji na poziomie obszaru roboczego dla uwierzytelniania domyślnego:

provider "databricks" {
  alias = "workspace"
}

W przypadku konfiguracji bezpośredniej (zastąp retrieve symbole zastępcze własną implementacją, aby pobrać wartości z konsoli lub innego magazynu konfiguracji, takiego jak HashiCorp Vault. Zobacz też Dostawca magazynu). W takim przypadku hostem jest adres URL usługi Azure Databricks dla obszaru roboczego, na przykład https://adb-1234567890123456.7.azuredatabricks.net:

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

Aby uzyskać więcej informacji na temat uwierzytelniania za pomocą dostawcy narzędzia Terraform usługi Databricks, zobacz Authentication (Uwierzytelnianie).

Python

W przypadku operacji na poziomie konta użyj następujących elementów do uwierzytelniania domyślnego:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

W przypadku konfiguracji bezpośredniej użyj następującej metody, zastępując retrieve symbole zastępcze własną implementacją, aby pobrać wartości z konsoli lub innego magazynu konfiguracji, takiego jak Azure KeyVault. W takim przypadku adres URL konsoli konta usługi Azure Databricks to https://accounts.azuredatabricks.net:

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()
)
# ...

W przypadku operacji na poziomie obszaru roboczego, w szczególności uwierzytelniania domyślnego:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

W przypadku konfiguracji bezpośredniej retrieve zastąp symbole zastępcze własną implementacją, aby pobrać wartości z konsoli lub innego magazynu konfiguracji, takiego jak Azure KeyVault. W takim przypadku hostem jest adres URL usługi Azure Databricks dla obszaru roboczego, na przykład 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()
)
# ...

Aby uzyskać więcej informacji na temat uwierzytelniania za pomocą narzędzi i zestawów SDK usługi Databricks korzystających z języka Python i implementowania ujednoliconego uwierzytelniania klienta usługi Databricks, zobacz:

Uwaga

Rozszerzenie usługi Databricks dla programu Visual Studio Code używa języka Python, ale nie zaimplementowało jeszcze uwierzytelniania OAuth M2M.

Java

W przypadku operacji na poziomie obszaru roboczego dla uwierzytelniania domyślnego:

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

W przypadku konfiguracji bezpośredniej (zastąp retrieve symbole zastępcze własną implementacją w celu pobrania wartości z konsoli programu lub innego magazynu konfiguracji, takiego jak Azure KeyVault). W takim przypadku hostem jest adres URL usługi Azure Databricks dla obszaru roboczego, na przykład 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);
// ...

Aby uzyskać więcej informacji na temat uwierzytelniania za pomocą narzędzi usługi Databricks i zestawów SDK korzystających z języka Java i implementowania ujednoliconego uwierzytelniania klienta usługi Databricks, zobacz:

Go

W przypadku operacji na poziomie konta dla uwierzytelniania domyślnego:

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

W przypadku konfiguracji bezpośredniej (zastąp retrieve symbole zastępcze własną implementacją w celu pobrania wartości z konsoli programu lub innego magazynu konfiguracji, takiego jak Azure KeyVault). W takim przypadku adres URL konsoli konta usługi Azure Databricks to https://accounts.azuredatabricks.net:

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

W przypadku operacji na poziomie obszaru roboczego dla uwierzytelniania domyślnego:

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

W przypadku konfiguracji bezpośredniej (zastąp retrieve symbole zastępcze własną implementacją w celu pobrania wartości z konsoli programu lub innego magazynu konfiguracji, takiego jak Azure KeyVault). W takim przypadku hostem jest adres URL usługi Azure Databricks dla obszaru roboczego, na przykład 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(),
}))
// ...

Aby uzyskać więcej informacji na temat uwierzytelniania za pomocą narzędzi i zestawów SDK usługi Databricks korzystających z języka Go i implementujących ujednolicone uwierzytelnianie klienta usługi Databricks, zobacz Uwierzytelnianie zestawu SDK usługi Databricks dla języka Go przy użyciu konta lub obszaru roboczego usługi Azure Databricks.

Ręczne generowanie i używanie tokenów dostępu do uwierzytelniania OAuth M2M

Narzędzia i zestawy SDK usługi Azure Databricks, które implementują ujednolicony standard uwierzytelniania klienta usługi Databricks, automatycznie będą generować, odświeżać i używać tokenów dostępu OAuth usługi Azure Databricks w Twoim imieniu zgodnie z potrzebami w przypadku uwierzytelniania OAuth M2M.

Usługa Databricks zaleca używanie ujednoliconego uwierzytelniania klienta, jednak jeśli musisz ręcznie wygenerować, odświeżyć lub użyć tokenów dostępu OAuth usługi Azure Databricks, postępuj zgodnie z instrukcjami w tej sekcji.

Użyj identyfikatora klienta jednostki usługi i wpisu tajnego OAuth, aby zażądać tokenu dostępu OAuth w celu uwierzytelnienia zarówno interfejsów API REST na poziomie konta, jak i interfejsów API REST na poziomie obszaru roboczego. Token dostępu wygaśnie w ciągu jednej godziny. Po wygaśnięciu należy zażądać nowego tokenu dostępu OAuth. Zakres tokenu dostępu OAuth zależy od poziomu tworzonego tokenu. Token można utworzyć na poziomie konta lub na poziomie obszaru roboczego w następujący sposób:

Ręczne generowanie tokenu dostępu na poziomie konta

Token dostępu OAuth utworzony na podstawie poziomu konta może być używany względem interfejsów API REST usługi Databricks na koncie, a w dowolnym obszarze roboczym jednostka usługi ma dostęp.

  1. Jako administrator konta zaloguj się do konsoli konta.

  2. Kliknij strzałkę w dół obok swojej nazwy użytkownika w prawym górnym rogu.

  3. Skopiuj identyfikator konta.

  4. Skonstruuj adres URL punktu końcowego tokenu, zastępując <my-account-id> ciąg w poniższym adresie URL skopiowanymi identyfikatorami konta.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. Użyj klienta, takiego jak curl , aby zażądać tokenu dostępu OAuth z adresem URL punktu końcowego tokenu, identyfikatorem klienta jednostki usługi (znanym również jako identyfikator aplikacji) i utworzonym wpisem tajnym OAuth jednostki usługi. Zakres all-apis żąda tokenu dostępu OAuth, który może służyć do uzyskiwania dostępu do wszystkich interfejsów API REST usługi Databricks, do których udzielono dostępu jednostce usługi.

    • Zastąp element <token-endpoint-URL> poprzednim adresem URL punktu końcowego tokenu.
    • Zastąp <client-id> element identyfikatorem klienta jednostki usługi, który jest również nazywany identyfikatorem aplikacji.
    • Zastąp element <client-secret> wpisem tajnym OAuth jednostki usługi, który został utworzony.
    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'
    

    Spowoduje to wygenerowanie odpowiedzi podobnej do:

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

    Skopiuj element access_token z odpowiedzi.

Ręczne generowanie tokenu dostępu na poziomie obszaru roboczego

Token dostępu OAuth utworzony na poziomie obszaru roboczego może uzyskiwać dostęp tylko do interfejsów API REST w tym obszarze roboczym, nawet jeśli jednostka usługi jest administratorem konta lub jest członkiem innych obszarów roboczych.

  1. Skonstruuj adres URL punktu końcowego tokenu, zastępując ciąg https://<databricks-instance> adresem URL obszaru roboczego wdrożenia usługi Azure Databricks:

    https://<databricks-instance>/oidc/v1/token
    
  2. Użyj klienta, takiego jak curl , aby zażądać tokenu dostępu OAuth z adresem URL punktu końcowego tokenu, identyfikatorem klienta jednostki usługi (znanym również jako identyfikator aplikacji) i utworzonym wpisem tajnym OAuth jednostki usługi. Zakres all-apis żąda tokenu dostępu OAuth, który może służyć do uzyskiwania dostępu do wszystkich interfejsów API REST usługi Databricks, do których jednostka usługi uzyskała dostęp w obszarze roboczym, z którego żądasz tokenu.

    • Zastąp element <token-endpoint-URL> poprzednim adresem URL punktu końcowego tokenu.
    • Zastąp <client-id> element identyfikatorem klienta jednostki usługi, który jest również nazywany identyfikatorem aplikacji.
    • Zastąp element <client-secret> wpisem tajnym OAuth jednostki usługi, który został utworzony.
    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'
    

    Spowoduje to wygenerowanie odpowiedzi podobnej do:

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

    Skopiuj element access_token z odpowiedzi.

Wywoływanie interfejsu API REST usługi Databricks

Teraz możesz użyć tokenu dostępu OAuth do uwierzytelniania w interfejsach API REST na poziomie konta usługi Azure Databricks i interfejsów API REST na poziomie obszaru roboczego. Jednostka usługi musi być administratorem konta, aby wywoływać interfejsy API REST na poziomie konta.

Token można dołączyć do nagłówka przy użyciu Bearer uwierzytelniania. Możesz użyć tego podejścia z dowolnym klientem curl lub dowolnym klientem, który tworzysz.

Przykładowe żądanie interfejsu API REST na poziomie konta

W tym przykładzie użyto Bearer uwierzytelniania, aby uzyskać listę wszystkich obszarów roboczych skojarzonych z kontem.

  • Zastąp element <oauth-access-token> tokenem dostępu OAuth jednostki usługi skopiowany w poprzednim kroku.
  • Zastąp <account-id> ciąg swoim identyfikatorem konta.
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'

Przykładowe żądanie interfejsu API REST na poziomie obszaru roboczego

W tym przykładzie użyto Bearer uwierzytelniania, aby wyświetlić listę wszystkich dostępnych klastrów w określonym obszarze roboczym.

  • Zastąp element <oauth-access-token> tokenem dostępu OAuth jednostki usługi skopiowany w poprzednim kroku.
  • Zastąp <workspace-URL> ciąg adresem URL podstawowego obszaru roboczego, który ma postać podobną do 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'

Dodatkowe zasoby