Łączenie z zewnętrznymi usługami chmurowymi przy użyciu poświadczeń usługi Unity Catalog

W tym artykule opisano, jak używać poświadczenia usługi w Unity Catalog do łączenia się z zewnętrznymi usługami chmurowymi. Obiekt poświadczeń usługi w Unity Catalog obejmuje długoterminowe poświadczenie dostępu do chmury, które zapewnia dostęp do zewnętrznej usługi chmurowej, z którą użytkownicy muszą łączyć się z poziomu Azure Databricks.

Zobacz też:

Zanim rozpoczniesz

Aby można było użyć poświadczeń usługi do nawiązania połączenia z zewnętrzną usługą w chmurze, musisz mieć następujące elementy:

  • Obszar roboczy usługi Azure Databricks z włączonym Unity Catalog.

  • Zasób obliczeniowy, który znajduje się w środowisku Databricks Runtime 16.2 lub nowszym.

    Magazyny SQL nie są obsługiwane do bezpośredniego używania poświadczeń usługowych. Zobacz Użyj poświadczenia serwisowego w Python UDF.

    Publiczna wersja zapoznawcza poświadczeń usługi jest dostępna w środowisku Databricks Runtime 15.4 LTS i nowszym z obsługą języka Python, ale bez obsługi języka Scala.

  • Dane uwierzytelniające usługi utworzone w magazynie metadanych Unity Catalog, zapewniające dostęp do usługi chmurowej.

  • Uprawnienie ACCESS dotyczące poświadczenia usługi lub bycie właścicielem poświadczenia usługi.

Użyj danych logowania konta usługi w swoim kodzie

Ta sekcja zawiera przykłady użycia poświadczeń usługi w notesie. Zamień wartości zastępcze. Te przykłady niekoniecznie pokazują instalację wymaganych bibliotek, które zależą od usługi klienta, do której chcesz uzyskać dostęp.

Obsługiwany jest tylko Python.

Użyj poświadczenia serwisowego w Python UDF

W funkcjach zdefiniowanych przez użytkownika użyj databricks.service_credentials.getServiceCredentialsProvider() do uzyskania dostępu do danych uwierzytelniających usługę. Funkcja dbutils.credentials.getServiceCredentialsProvider() używana w notatnikach nie jest dostępna w kontekstach wykonywania UDF.

Wymagania zależą od rodzaju UDF:

Typ UDF Wymagania
Skalarna funkcja UDF PySpark o zakresie sesji Databricks Runtime 17.1 lub nowszy w klasycznych zasobach obliczeniowych albo notebook bezserwerowy lub sesja zadania działające w środowisku w wersji 3 lub nowszej.
Batch Unity Catalog Python UDF Databricks Runtime 16.3 lub nowszy na klasycznym poziomie obliczeniowym; obliczenia serwerowe; magazyny SQL pro i serverless. Wersja środowiska 6 nie jest wymagana.
Scalar Unity Catalog Python UDF Databricks Runtime 18.1 lub nowszy na klasycznym komputerze. W środowisku serverless compute oraz w hurtowniach SQL typu pro i serverless jawnie ustaw parametr environment_version funkcji UDF na 6 lub wyższą wartość. Pominięcie całej ENVIRONMENT klauzuli lub ustawienia environment_version = 'None' nie umożliwia tej funkcji na tych typach obliczeń. Klasyczne obliczenia nie wymagają środowiska w wersji 6.

Aby wykonywać połączenia wychodzące ze skalarnego lub partiowego UDF języka Python usługi Unity Catalog w bezserwerowym magazynie SQL, włącz Public Preview funkcji Enable networking for isolated workloads in Serverless SQL Warehouses na stronie Previews swojego obszaru roboczego. Pro SQL magazyny nie wymagają takiego podglądu.

Aby utworzyć UDF katalogu Unity, która deklaruje poświadczenie usługi, autor funkcji musi mieć ACCESS do tego poświadczenia. W przypadku obliczeń bezserwerowych, magazynów SQL Pro i bezserwerowych oraz obliczeń w standardowym trybie dostępu podmioty wywołujące potrzebują zwykłych uprawnień do funkcji, w tym EXECUTE, ale nie potrzebują ACCESS dla poświadczenia. W środowisku obliczeniowym w trybie dostępu dedykowanego wywołujący muszą również mieć ACCESS.

Sesyjne UDF-y PySpark korzystają z uprawnień wywołującego. Wywołujący musi mieć ACCESS w poświadczeniach usługi; w środowisku obliczeniowym w trybie dedykowanego dostępu wywołujący musi mieć MANAGE.

Zobacz wersje środowiska i niestandardowe wymagania dotyczące zależności.

przykład języka Python: konfigurowanie klienta zestawu Azure SDK w celu użycia określonego poświadczenia usługi

from azure.keyvault.secrets import SecretClient # example Azure SDK client

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Określanie domyślnego poświadczenia usługi dla zasobu obliczeniowego

Opcjonalnie można określić domyślne poświadczenia usługi dla klastra obliczeniowego typu all-purpose lub jobs, ustawiając zmienną środowiskową. Domyślnie pakiet SDK używa poświadczeń tej usługi, jeśli nie podano żadnych danych uwierzytelniających. Użytkownicy nadal potrzebują ACCESS dla tego poświadczenia usługi, aby łączyć się z zewnętrzną usługą chmurową. Databricks nie zaleca tego podejścia, ponieważ sprawia ono, że kod jest mniej przenośny niż w przypadku nazwania poświadczenia usługi w kodzie.

Uwaga

Bezserwerowe obliczenia i magazyny SQL nie obsługują zmiennych środowiskowych, dlatego nie obsługują domyślnych poświadczeń usługi.

  1. Otwórz stronę edycji klastra.

    Zobacz Zarządzanie klasycznymi obliczeniami.

  2. Kliknij pozycję Zaawansowane w dolnej części strony i przejdź do karty Spark .

  3. Dodaj następujący wpis do Zmienne środowiskowe, zastępując <your-service-credential>:

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

Poniższe przykłady kodu nie określają poświadczenia usługi. Zamiast tego używają poświadczeń usługi określonych w zmiennej środowiskowej DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME:

Python

Jeśli używasz domyślnych poświadczeń usługi, nie musisz podawać poświadczeń w argumentach.

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

pl-PL: Porównaj to z przykładem w Pythonie : skonfiguruj klienta zestawu Azure SDK, aby używał określonych poświadczeń usługi, który nie importuje DefaultAzureCredential i dodaje specyfikację poświadczeń.

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')