Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Databricks Apps obsługuje bezpieczne tworzenie aplikacji w usłudze Azure Databricks. Gdy aplikacje uzyskują dostęp do danych i usług w obszarze roboczym, muszą korzystać z mechanizmów uwierzytelniania i autoryzacji, które wymuszają kontrolę dostępu do danych i przestrzegają uprawnień użytkowników. Model autoryzacji usługi Databricks Apps jest oparty na protokole OAuth 2.0 i łączy uprawnienia przypisane do aplikacji z uprawnieniami użytkowników, którzy uzyskują do niej dostęp.
Aby obsługiwać tę strukturę, usługa Databricks Apps używa dwóch uzupełniających modeli tożsamości:
- Autoryzacja aplikacji zapewnia aplikacji własną tożsamość ze spójnym zestawem uprawnień.
- Autoryzacja użytkownika umożliwia aplikacji korzystanie z tożsamości i uprawnień użytkownika wchodzącego w interakcję z nią.
Autoryzacja aplikacji
Każda aplikacja Azure Databricks ma przypisaną dedykowaną jednostkę usługi, która pełni rolę jej tożsamości przy uzyskiwaniu dostępu do zasobów Azure Databricks. Zasada usługi jest unikatowa dla instancji aplikacji i nie może być ponownie użyta w różnych aplikacjach. Nie można zmienić jednostki usługi przypisanej do aplikacji ani określić istniejącej jednostki usługi podczas tworzenia aplikacji. Usługa Azure Databricks używa tej tożsamości do oceny uprawnień aplikacji niezależnie od dowolnego użytkownika, co zapewnia, że aplikacja może uzyskiwać dostęp tylko do zasobów jawnie udzielanych do niej, nawet poza kontekstem interakcji użytkownika.
Ta separacja pomaga wymusić granice zabezpieczeń, które umożliwiają inspekcję działań aplikacji i obsługują scenariusze, takie jak przetwarzanie w tle lub automatyczne zadania.
Podmiot usługi jest reprezentowany przez unikatowy identyfikator. Skopiuj go z zakładki Upoważnienia aplikacji:
Podczas tworzenia aplikacji usługa Azure Databricks automatycznie aprowizuje dedykowaną jednostkę usługi dla aplikacji. Jednostka usługi pozostaje taka sama we wszystkich wdrożeniach aplikacji. Po usunięciu aplikacji usługa Azure Databricks usunie jednostkę usługi.
Użyj jednostki usługi w przypadku akcji, które aplikacja wykonuje samodzielnie, bez konieczności używania kontekstu pojedynczego użytkownika. Typowe przypadki użycia to:
- Uruchamianie zadań w tle
- Odczytywanie lub zapisywanie udostępnionej konfiguracji lub metadanych
- Rejestrowanie aktywności lub metryk użycia
- Wywoływanie usług zewnętrznych za pośrednictwem bezpiecznych punktów końcowych
Wszystkie akcje inicjowane przez aplikację używają uprawnień jednostki usługi. Udziel jednostce usługi dostępu do określonych zasobów przy użyciu standardowych przypisań uprawnień. Nie obsługuje jednak kontroli dostępu na poziomie użytkownika. Wszyscy użytkownicy, którzy wchodzą w interakcję z aplikacją, mają te same uprawnienia zdefiniowane dla jednostki usługi, co uniemożliwia aplikacji wymuszanie precyzyjnych zasad na podstawie tożsamości poszczególnych użytkowników.
Poniższy przykład pokazuje, jak aplikacja używa swojego zaufanego serwisu do wykonywania zapytań o dane w katalogu Unity.
W takim przypadku główna usługa wymaga jawnego dostępu zarówno do magazynu SQL, jak i tabeli Unity Catalog, do których wykonuje zapytania.
Ten model działa dobrze, gdy chcesz, aby wszyscy użytkownicy aplikacji widzieli te same dane lub gdy aplikacja wykonuje operacje udostępnione, które nie są powiązane z kontrolą dostępu specyficzną dla użytkownika.
Pobieranie poświadczeń autoryzacji aplikacji
W przypadku autoryzacji aplikacji usługa Azure Databricks automatycznie wprowadza poświadczenia jednostki usługi do środowiska aplikacji. Następujące zmienne środowiskowe przechowują wymagane wartości klienta OAuth:
| Variable | Description |
|---|---|
DATABRICKS_CLIENT_ID |
Identyfikator klienta OAuth dla głównej usługi |
DATABRICKS_CLIENT_SECRET |
Klucz tajny klienta OAuth podmiotu usługi |
Usługa Azure Databricks automatycznie ustawia zmienne środowiskowe w środowisku uruchomieniowym aplikacji. Aplikacja używa tych zmiennych podczas uwierzytelniania się jako siebie.
Python
import os
client_id = os.getenv('DATABRICKS_CLIENT_ID')
client_secret = os.getenv('DATABRICKS_CLIENT_SECRET')
JavaScript
const clientId = process.env.DATABRICKS_CLIENT_ID;
const clientSecret = process.env.DATABRICKS_CLIENT_SECRET;
Note
Jeśli używasz zestawów SDK usługi Azure Databricks, zazwyczaj nie musisz ręcznie uzyskiwać dostępu do tych zmiennych środowiskowych. Zestawy SDK wykorzystują ujednolicone uwierzytelnianie i automatycznie wykrywają poświadczenia w środowisku.
Przykład: wykonywanie zapytań przy użyciu autoryzacji aplikacji
Python
W tym przykładzie użyto obiektu Config SDK, który pobiera poświadczenia jednostki usługi ze zmiennych środowiskowych i wykonuje uwierzytelnianie OAuth.
from databricks import sql
from databricks.sdk.core import Config
cfg = Config()
conn = sql.connect(
server_hostname=cfg.host,
http_path="<your-warehouse-http-path>",
credentials_provider=lambda: cfg.authenticate,
)
query = "SELECT * FROM main.sandbox.sales_customers LIMIT 1000"
with conn.cursor() as cursor:
cursor.execute(query)
df = cursor.fetchall_arrow().to_pandas()
print(df.head())
conn.close()
JavaScript
W tym przykładzie użyto zmiennych środowiskowych do uwierzytelniania za pomocą jednostki usługi przy użyciu protokołu OAuth i uruchomienia zapytania za pomocą sterownika SQL usługi Databricks dla Node.js.
import { DBSQLClient } from '@databricks/sql';
const client = new DBSQLClient();
const connection = await client.connect({
authType: 'databricks-oauth',
host: process.env.DATABRICKS_SERVER_HOSTNAME,
path: process.env.DATABRICKS_HTTP_PATH,
oauthClientId: process.env.DATABRICKS_CLIENT_ID,
oauthClientSecret: process.env.DATABRICKS_CLIENT_SECRET,
});
const query = 'SELECT * FROM main.sandbox.sales_customers LIMIT 1000';
const cursor = await connection.cursor(query);
const rows = [];
for await (const row of cursor) {
rows.push(row);
}
console.log(rows.slice(0, 5)); // Like df.head()
await connection.close();
Autoryzacja użytkownika
Important
Autoryzacja użytkownika jest dostępna w publicznej wersji zapoznawczej.
Autoryzacja użytkownika, czasami nazywana autoryzacją w imieniu użytkownika, umożliwia aplikacji Databricks Apps działanie przy użyciu tożsamości użytkownika aplikacji. Usługa Azure Databricks przekazuje token dostępu użytkownika do aplikacji, który używa tokenu w celu uzyskania dostępu do zasobów w imieniu użytkownika. Usługa Azure Databricks wymusza wszystkie uprawnienia na podstawie istniejących zasad Unity Catalog użytkownika.
Aby zarządzać zagrożeniami bezpieczeństwa aplikacji działających w imieniu użytkownika, usługa Azure Databricks używa zakresów, aby ograniczyć akcje, które aplikacja może wykonywać za pośrednictwem autoryzacji użytkownika.
Zastosuj autoryzację użytkownika, gdy aplikacja musi przestrzegać indywidualnych uprawnień użytkownika. Typowe przypadki użycia to:
- Wykonywanie zapytań dotyczących tabel lub woluminów
- Uzyskiwanie dostępu do magazynów SQL lub zasobów obliczeniowych
- Uruchamianie zadań lub przepływów pracy powiązanych z akcjami użytkownika
Wszystkie akcje używają istniejących uprawnień użytkownika z Unity Catalog.
Autoryzacja użytkownika umożliwia precyzyjną kontrolę dostępu przez zastosowanie funkcji Unity Catalog, takich jak filtry na poziomie wiersza i maski kolumn, w odniesieniu do aktywności aplikacji. Takie podejście zapewnia spójność kontroli dostępu z ładem obszaru roboczego i pozwala uniknąć trwałego kodowania logiki uprawnień w aplikacji.
Szczegółowe uprawnienia z autoryzacją użytkownika
Po dodaniu autoryzacji użytkownika w aplikacji wymusza istniejące uprawnienia Unity Catalog użytkownika, w tym:
- Filtry na poziomie wiersza w celu ograniczenia widocznych wierszy
- Maski kolumn w celu zredagowania lub przekształcania poufnych danych
Ponieważ usługa Azure Databricks ocenia żądania autoryzacji użytkownika przy użyciu tożsamości użytkownika, te zasady są stosowane automatycznie, gdy aplikacja uzyskuje dostęp do danych. Jeśli na przykład tabela zawiera filtr wierszy, który ogranicza widoczność według regionu, aplikacja zwraca tylko wiersze, które użytkownik może wykonać zapytanie. W aplikacji nie jest wymagana żadna dodatkowa logika filtrowania.
Takie podejście pozwala uniknąć duplikowania logiki kontroli dostępu w kodzie aplikacji i zapewnia spójność z ładem na poziomie obszaru roboczego. Gdy administratorzy aktualizują zasady Katalogu Unity, aplikacja automatycznie uwzględnia te zmiany.
Zabezpieczenia oparte na zakresie i eskalacja uprawnień
Aplikacje korzystające z autoryzacji użytkownika muszą zadeklarować określone zakresy autoryzacji, aby ograniczyć możliwości aplikacji w imieniu użytkownika. Zakresy ograniczają dostęp do określonych interfejsów API lub typów zasobów, takich jak:
-
sqldo wykonywania zapytań dotyczących magazynów SQL -
dashboards.geniedo zarządzania przestrzenią Genie -
files.filesdo zarządzania plikami i katalogami
Jeśli nie wybierzesz żadnych zakresów, usługa Azure Databricks przypisuje zestaw domyślny, który umożliwia aplikacji pobieranie podstawowych informacji o tożsamości użytkownika:
iam.access-control:readiam.current-user:read
Te wartości domyślne są wymagane do obsługi funkcji autoryzacji użytkownika, ale nie zezwalają na dostęp do danych ani zasobów obliczeniowych. Dodaj dodatkowe zakresy podczas tworzenia lub edytowania aplikacji.
Zakresy wymuszają zasadę najniższych uprawnień. Pamiętaj, aby skonfigurować aplikację tak, aby żądała tylko wymaganych zakresów. Usługa Azure Databricks blokuje dostęp do wszystkich funkcji poza zatwierdzonymi zakresami, nawet jeśli użytkownik ma uprawnienia. Jeśli na przykład aplikacja żąda tylko sql zakresu, nie może uzyskać dostępu do modelu obsługującego punkty końcowe, nawet jeśli użytkownik może poza aplikacją.
Gdy użytkownik po raz pierwszy uzyskuje dostęp do aplikacji, usługa Azure Databricks wyświetla monit o jawne autoryzowanie aplikacji do działania w żądanych zakresach. Administratorzy mogą opcjonalnie udzielać zgody w imieniu użytkowników w celu dostosowania dostępu do zasad organizacji.
Dodawanie zakresów do aplikacji
Important
Autoryzacja użytkownika jest dostępna w publicznej wersji zapoznawczej. Administrator obszaru roboczego musi go włączyć przed dodaniem zakresów do aplikacji.
Po włączeniu autoryzacji użytkownika przed dodaniem do nich zakresów należy ponownie uruchomić istniejące aplikacje. Jeśli wyłączysz autoryzację użytkownika, musisz ponownie uruchomić istniejące aplikacje, aby przestać używać tokenu dostępu bieżącego użytkownika w celu uzyskania dostępu do zasobów.
Konfigurowanie autoryzacji użytkownika podczas tworzenia lub edytowania aplikacji w interfejsie użytkownika usługi Azure Databricks.
W kroku Konfigurowanie kliknij pozycję +Dodaj zakres i wybierz zakresy definiujące, do których interfejsów API lub zasobów usługi Azure Databricks aplikacja może uzyskiwać dostęp w imieniu użytkownika. Usługa Azure Databricks wymusza te zakresy w czasie wykonywania i wymaga zgody użytkownika lub administratora przed udzieleniem dostępu.
Pełny przykład można znaleźć w pokazie autoryzacji usługi Databricks Apps w witrynie GitHub. Przykładowa aplikacja pokazuje, jak używać modeli autoryzacji aplikacji i użytkowników oraz zawiera instrukcje konfiguracji i przykładowe zapytania z autoryzacją użytkownika.
Pobieranie poświadczeń autoryzacji użytkownika
W przypadku autoryzacji użytkownika usługa Azure Databricks przekazuje tożsamość użytkownika i token dostępu do aplikacji w nagłówkach HTTP. Aplikacja musi wyodrębnić te nagłówki, aby działały w imieniu użytkownika.
Sposób pobierania tych nagłówków zależy od używanej platformy.
Streamlit
import streamlit as st
user_access_token = st.context.headers.get('x-forwarded-access-token')
Gradio
import gradio as gr
def query_fn(message, history, request: gr.Request):
access_token = request.headers.get("x-forwarded-access-token")
...
Gradio automatycznie wprowadza obiekt żądania do funkcji aplikacji, jeśli deklarujesz go jako parametr. Nie musisz tworzyć ani pobierać żądania ręcznie.
Dash i Flask
from flask import request
headers = request.headers
user_token = headers.get('x-forwarded-access-token')
Shiny
user_token = session.http_conn.headers.get('x-forwarded-access-token')
Ekspresowy
import express from 'express';
const userAccessToken = req.header('x-forwarded-access-token');
Przykład: zapytanie z autoryzacją użytkownika
W takim przypadku aplikacja przekazuje token dostępu użytkownika bezpośrednio do łącznika, a usługa Azure Databricks stosuje uprawnienia użytkownika do zapytania.
Python
from databricks import sql
from databricks.sdk.core import Config
from flask import request
cfg = Config()
user_token = request.headers.get("x-forwarded-access-token")
conn = sql.connect(
server_hostname=cfg.host,
http_path="<your-warehouse-http-path>",
access_token=user_token
)
query = "SELECT * FROM main.sandbox.sales_customers LIMIT 1000"
with conn.cursor() as cursor:
cursor.execute(query)
df = cursor.fetchall_arrow().to_pandas()
print(df.head())
conn.close()
JavaScript
import { DBSQLClient } from '@databricks/sql';
import express from 'express';
const app = express();
app.get('/', async (req, res) => {
const userToken = req.header('x-forwarded-access-token');
const client = new DBSQLClient();
const connection = await client.connect({
authType: 'access-token',
host: process.env.DATABRICKS_SERVER_HOSTNAME,
path: process.env.DATABRICKS_HTTP_PATH,
token: userToken,
});
const query = 'SELECT * FROM main.sandbox.sales_customers LIMIT 1000';
const cursor = await connection.cursor(query);
const rows = [];
for await (const row of cursor) {
rows.push(row);
}
console.log(rows.slice(0, 5));
await connection.close();
res.send('Query complete');
});
app.listen(3000);
Najlepsze rozwiązania dotyczące autoryzacji użytkowników
Podczas tworzenia aplikacji, które wykonują akcje w imieniu użytkowników, postępuj zgodnie z tymi najlepszymi rozwiązaniami, aby zapewnić bezpieczny i możliwy do inspekcji dostęp:
- Umieść kod aplikacji w folderach dostępnych tylko dla właściciela aplikacji lub małego zestawu zaufanych użytkowników.
- Udzielanie
CAN MANAGEuprawnień tylko zaufanym starszym deweloperom, którzy są odpowiedzialni za konserwację i przegląd aplikacji. PrzyznajCAN USEuprawnienia tylko określonym użytkownikom lub grupom zatwierdzonym do uruchamiania aplikacji. - Upewnij się, że tokeny nie są drukowane, rejestrowane ani zapisywane w plikach. Dotyczy to wszystkich instrukcji rejestrowania, narzędzi debugowania i procedur obsługi błędów. Na przykład zamiast
print(f"User token: {token}")użyjheaders = {"Authorization": f"Bearer {token}"}. - Skonfiguruj każdą aplikację, aby żądać tylko minimalnych wymaganych zakresów autoryzacji wymaganych do jej funkcjonalności.
- Podczas przeglądu kodu sprawdź, czy ustawienia zakresu i uprawnień są zgodne z wymaganiami dotyczącymi zabezpieczeń i nie udzielają niepotrzebnego dostępu.
- Zadbaj o recenzję kodu przez rówieśników dla całego kodu aplikacji przed wdrożeniem do środowisk produkcyjnych.
- Upewnij się, że kod aplikacji rejestruje ustrukturyzowane dzienniki inspekcji dla każdej akcji wykonywanej w imieniu użytkowników, w tym tożsamości użytkownika, typu akcji, zasobu docelowego i stanu.
Metody uwierzytelniania
Aby uzyskać tokeny dla usługi Databricks Apps, zarówno użytkownicy, jak i jednostki usługi uwierzytelniają się przy użyciu standardowych przepływów protokołu OAuth 2.0. Metoda zależy od tego, czy obiekt wywołujący jest użytkownikiem, czy zautomatyzowanym obciążeniem.
W przypadku logowania do obszaru roboczego (tylko użytkownicy):
- Logowanie jednokrotne (SSO): Użytkownicy uwierzytelniają się za pośrednictwem dostawcy tożsamości po skonfigurowaniu logowania jednokrotnego.
- Hasło jednorazowe (OTP): Użytkownicy otrzymują hasło tymczasowe, jeśli logowanie jednokrotne nie jest skonfigurowane.
W przypadku przepływów OAuth (aplikacje i obciążenia):
- Uwierzytelnianie OAuth typu użytkownik-komputer (U2M): Użytkownicy uwierzytelniają się, a wynikowe tokeny umożliwiają autoryzację użytkownika, aby aplikacja mogła działać w imieniu użytkownika.
- Protokół OAuth maszyny do maszyny (M2M): Jednostki usługi uwierzytelniają się przy użyciu poświadczeń klienta lub federacji. Te tokeny stanowią podstawę autoryzacji aplikacji, gdzie aplikacja działa jako sama zamiast użytkownika.
Aby uzyskać instrukcje dotyczące wywoływania aplikacji usługi Databricks przy użyciu uwierzytelniania tokenu, zobacz Nawiązywanie połączenia z aplikacją usługi API Databricks przy użyciu uwierzytelniania tokenu.
Porównywanie i łączenie modeli
Aplikacje usługi Databricks mogą używać autoryzacji aplikacji i użytkownika niezależnie lub razem. Te modele służą różnym celom i są przeznaczone do równoległej pracy.
| Model autoryzacji | Kiedy należy używać | Przykładowe przypadki użycia |
|---|---|---|
| Autoryzacja aplikacji | Gdy aplikacja wykonuje operacje, które nie zależą od tożsamości użytkownika | Pisanie dzienników, uzyskiwanie dostępu do konfiguracji udostępnionej, wywoływanie usług zewnętrznych |
| Autoryzacja użytkownika | Gdy aplikacja musi uzyskać dostęp do zasobów w kontekście bieżącego użytkownika | Wykonywanie zapytań do danych Unity Catalog, uruchamianie procesów obliczeniowych i egzekwowanie uprawnień na poziomie wiersza |
| Both | Gdy aplikacja wykonuje zarówno operacje współużytkowane, jak i specyficzne dla użytkownika | Rejestrowanie metryk przy użyciu tożsamości aplikacji, wykonywanie zapytań dotyczących filtrowanych danych przy użyciu tożsamości użytkownika |