Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Databricks Apps, Azure Databricks'te güvenli uygulama geliştirmeyi destekler. Uygulamalar çalışma alanı içindeki verilere ve hizmetlere eriştıkça, veri erişim denetimlerini zorunlu kılan ve kullanıcı izinlerine saygı gösteren kimlik doğrulama ve yetkilendirme mekanizmaları kullanmalıdır. Databricks Apps yetkilendirme modeli OAuth 2.0'ı temel alır ve uygulamaya atanan izinleri erişen kullanıcının izinleriyle birleştirir.
Databricks Apps bu çerçeveyi desteklemek için iki tamamlayıcı kimlik modeli kullanır:
- Uygulama yetkilendirme, uygulamaya tutarlı bir izin kümesiyle kendi kimliğini verir.
- Kullanıcı yetkilendirmesi , uygulamanın kendisiyle etkileşim kuran kullanıcının kimliğini ve izinlerini kullanmasına olanak tanır.
Uygulama yetkilendirme
Her Azure Databricks uygulaması, Azure Databricks kaynaklarına eriştiğinde kimliği gibi davranan ayrılmış bir hizmet sorumlusuna sahiptir. Bu hizmet sorumlusu uygulama örneğine özgüdür ve uygulamalar arasında yeniden kullanılamaz. Uygulama oluşturma sırasında bir uygulamaya atanan hizmet sorumlusunu değiştiremez veya mevcut bir hizmet sorumlusunu belirtemezsiniz. Azure Databricks, uygulamanın izinlerini herhangi bir kullanıcıdan bağımsız olarak değerlendirmek için bu kimliği kullanır ve bu sayede kullanıcı etkileşimi bağlamı dışında bile uygulamanın yalnızca kendisine açıkça verilen kaynaklara erişebilmesini sağlar.
Bu ayrım, uygulama etkinliğinin denetlenebilmesini sağlayan ve arka plan işleme veya otomatik görevler gibi senaryoları destekleyen güvenlik sınırlarının uygulanmasına yardımcı olur.
Hizmet sorumlusu benzersiz bir kimlikle temsil edilir. Uygulamanın Yetkilendirme sekmesinden kopyalayın:
Bir uygulama oluşturduğunuzda, Azure Databricks uygulama için otomatik olarak ayrılmış bir hizmet sorumlusu sağlar. Hizmet sorumlusu, uygulamanın tüm dağıtımlarında aynı kalır. Uygulamayı sildiğinizde Azure Databricks hizmet sorumlusunu siler.
Uygulamanın tek bir kullanıcının bağlamını gerektirmeden kendi başına gerçekleştirdiği eylemler için hizmet sorumlusunu kullanın. Yaygın kullanım örnekleri şunlardır:
- Arka plan görevlerini çalıştırma
- Paylaşılan yapılandırmayı veya meta verileri okuma veya yazma
- Kayıt etkinliği veya kullanım ölçümleri
- Güvenli uç noktalar aracılığıyla dış hizmetleri çağırma
Uygulama tarafından başlatılan tüm eylemler hizmet sorumlusunun izinlerini kullanır. Standart izin atamalarını kullanarak hizmet sorumlusuna belirli kaynaklara erişim verin. Ancak, kullanıcı düzeyinde erişim denetimini desteklemez. Uygulamayla etkileşim kuran tüm kullanıcılar, hizmet sorumlusu için tanımlanan izinleri paylaşır ve bu da uygulamanın tek tek kullanıcı kimliğine göre ayrıntılı ilkeler uygulamasını önler.
Aşağıdaki örnekte, bir uygulamanın Unity Kataloğu'ndaki verileri sorgulamak için hizmet sorumlusunu nasıl kullandığı gösterilmektedir:
Bu durumda, hizmet sorumlusunun hem SQL ambarı hem de sorgularındaki Unity Kataloğu tablosuna açık erişime ihtiyacı vardır.
Bu model, uygulamanın tüm kullanıcılarının aynı verileri görmesini istediğinizde veya uygulama kullanıcıya özgü erişim denetimlerine bağlı olmayan paylaşılan işlemler gerçekleştirdiğinde iyi çalışır.
Uygulama yetkilendirme kimlik bilgilerini alma
Azure Databricks, uygulama yetkilendirmesi için hizmet sorumlusu kimlik bilgilerini otomatik olarak uygulamanın ortamına ekler. Aşağıdaki ortam değişkenleri gerekli OAuth istemci değerlerini barındırıyor:
| Variable | Description |
|---|---|
DATABRICKS_CLIENT_ID |
Hizmet sorumlusu OAuth istemci kimliği |
DATABRICKS_CLIENT_SECRET |
Hizmet asıl kimliği OAuth istemci sırrı |
Azure Databricks, uygulama çalışma zamanında ortam değişkenlerini otomatik olarak ayarlar. Uygulama kendi kimliğini doğruladığında bu değişkenleri kullanır.
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
Databricks SDK'larını kullanıyorsanız genellikle bu ortam değişkenlerine el ile erişmeniz gerekmez. SDK'lar birleşik kimlik doğrulamasını izler ve ortamdaki kimlik bilgilerini otomatik olarak algılar.
Örnek: Uygulama yetkilendirmeli sorgu
Python
Bu örnekte, ortam değişkenlerinden hizmet sorumlusu kimlik bilgilerini çeken ve OAuth yetkilendirmesi gerçekleştiren SDK Config nesnesi kullanılır.
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
Bu örnek, OAuth kullanarak hizmet sorumlusuyla kimlik doğrulaması yapmak ve Node.jsiçin Databricks SQL Sürücüsü ile bir sorgu çalıştırmak için ortam değişkenlerini kullanır.
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();
Kullanıcı yetkilendirmesi
Important
Kullanıcı yetkilendirmesi Genel Önizleme aşamasındadır.
Bazen kullanıcı adına yetkilendirme olarak da adlandırılan kullanıcı yetkilendirmesi, Databricks Apps uygulamasının uygulama kullanıcısının kimliğiyle hareket etmesine olanak tanır. Azure Databricks, kullanıcının erişim token'ını uygulamaya iletir ve uygulama, kullanıcı adına kaynaklara erişmek için token'ı kullanır. Azure Databricks, kullanıcının mevcut Unity Kataloğu ilkelerine göre tüm izinleri zorunlu kılar.
Azure Databricks, bir kullanıcının adına hareket eden uygulamaların güvenlik risklerini yönetmek için kapsamları kullanarak bir uygulamanın kullanıcı yetkilendirmesi aracılığıyla gerçekleştirebileceği eylemleri sınırlar.
Uygulamanın tek tek kullanıcı izinlerine saygı duyması gerektiğinde kullanıcı yetkilendirmesi uygulayın. Tipik kullanım örnekleri şunlardır:
- Tabloları veya birimleri sorgulama
- SQL ambarlarına veya hesaplamaya erişme
- Kullanıcı eylemlerine bağlı işleri veya iş akışlarını çalıştırma
Tüm eylemler kullanıcının mevcut Unity Kataloğu izinlerini kullanır:
Kullanıcı yetkilendirmesi, uygulama etkinliğine satır düzeyi filtreler ve sütun maskeleri gibi Unity Kataloğu özelliklerini uygulayarak ayrıntılı erişim denetimi sağlar. Bu yaklaşım, erişim denetimini çalışma alanı yönetimiyle tutarlı tutar ve izin mantığını uygulamaya sabit olarak kodlamaktan kaçınır.
Kullanıcı yetkilendirmesi ile ayrıntılı izinler
Bir uygulamaya kullanıcı yetkilendirmesi eklediğinizde, aşağıdakiler de dahil olmak üzere kullanıcının mevcut Unity Kataloğu izinlerini zorlar:
- Görünür satırları kısıtlamak için satır düzeyi filtreler
- Hassas verileri maskelemek veya dönüştürmek için sütun maskeleri kullanan.
Azure Databricks kullanıcı yetkilendirme isteklerini kullanıcının kimliğiyle değerlendirdiğinden, uygulama verilere eriştiğinde bu ilkeler otomatik olarak uygulanır. Örneğin, tablo görünürlüğü bölgeye göre sınırlayan bir satır filtresi içeriyorsa, uygulama yalnızca kullanıcının sorgulamasına izin verilen satırları döndürür. Uygulamada ek filtreleme mantığı gerekmez.
Bu yaklaşım, uygulama kodunda erişim denetimi mantığının çoğaltılmasını önler ve çalışma alanı düzeyinde idare ile tutarlılık sağlar. Yöneticiler Unity Kataloğu ilkelerini güncelleştirdiğinde, uygulama bu değişikliklere otomatik olarak saygı gösterir.
Kapsam tabanlı güvenlik ve ayrıcalık yükseltme
Kullanıcı yetkilendirmesi kullanan uygulamaların, uygulamanın kullanıcı adına yapabileceklerini sınırlamak için belirli yetkilendirme kapsamları bildirmesi gerekir. Kapsamlar, belirli API'lere veya kaynak türlerine erişimi kısıtlar, örneğin:
-
sqlSQL ambarlarını sorgulamak için -
dashboards.genieGenie alanınızı yönetmek için -
files.filesdosyalarınızı ve dizinlerinizi yönetmek için
Herhangi bir kapsam seçmezseniz Azure Databricks, uygulamanın temel kullanıcı kimliği bilgilerini almasına izin veren bir varsayılan küme atar:
iam.access-control:readiam.current-user:read
Bu varsayılanlar kullanıcı yetkilendirme işlevselliğini desteklemek için gereklidir, ancak verilere veya işlem kaynaklarına erişime izin vermez. Uygulamayı oluştururken veya düzenlerken ek kapsamlar ekleyin.
Kapsamlar, en az ayrıcalık ilkesinin uygulanmasını sağlar. Uygulamayı yalnızca ihtiyaç duyduğu kapsamları istemek üzere yapılandırdığından emin olun. Azure Databricks, kullanıcının izni olsa bile onaylanan kapsamların dışındaki işlevlere erişimi engeller. Örneğin, uygulama yalnızca sql kapsamı isterse, kullanıcı uygulamanın dışında olsa bile uç noktaları sunan modele erişemez.
Kullanıcı bir uygulamaya ilk kez eriştiğinde Azure Databricks, istenen kapsamlar içinde işlem yapmak için uygulamayı açıkça yetkilendirmesini ister. Onay verdikten sonra kullanıcılar bu izni iptal edemez. Yöneticiler isteğe bağlı olarak, erişimi kuruluş ilkeleriyle uyumlu hale getirmek için kullanıcılar adına onay verebilir.
Uygulamaya kapsam ekleme
Important
Kullanıcı yetkilendirmesi Genel Önizleme aşamasındadır. Uygulamanıza kapsam ekleyebilmeniz için önce çalışma alanı yöneticinizin bunu etkinleştirmesi gerekir.
Kullanıcı yetkilendirmesini etkinleştirdikten sonra, kapsam ekleyebilmek için önce mevcut uygulamaları yeniden başlatmanız gerekir. Kullanıcı yetkilendirmesini devre dışı bırakırsanız, mevcut uygulamaların kaynaklara erişmek için geçerli kullanıcının erişim belirtecini kullanmayı durdurması için mevcut uygulamaları yeniden başlatmanız gerekir.
Azure Databricks kullanıcı arabiriminde uygulama oluştururken veya düzenlerken kullanıcı yetkilendirmesini yapılandırın.
Yapılandır adımında +Kapsam ekle'ye tıklayın ve uygulamanın kullanıcı adına erişebileceği Azure Databricks API'lerini veya kaynaklarını tanımlayan kapsamları seçin. Azure Databricks bu kapsamları çalışma zamanında zorunlu kılar ve erişim vermeden önce kullanıcı veya yönetici onayı gerektirir.
Tam bir örnek için GitHub'da Databricks Apps yetkilendirme tanıtımına bakın. Örnek uygulama hem uygulama hem de kullanıcı yetkilendirme modellerinin nasıl kullanılacağını gösterir ve kurulum yönergelerini ve kullanıcı yetkilendirmesine sahip örnek sorguları içerir.
Kullanıcı yetkilendirme kimlik bilgilerini alma
Kullanıcı yetkilendirmesi için Azure Databricks, kullanıcının kimliğini ve erişim belirtecini HTTP üst bilgilerinde uygulamaya iletir. Uygulamanın, kullanıcı adına işlem yapmak için bu üst bilgileri ayıklaması gerekir.
Bu üst bilgileri nasıl aldığınız, kullandığınız çerçeveye bağlıdır.
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, istek nesnesini parametre olarak bildirirseniz uygulamanızın işlevine otomatik olarak ekler. İsteği el ile oluşturmanız veya getirmeniz gerekmez.
Dash ve 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')
Express
import express from 'express';
const userAccessToken = req.header('x-forwarded-access-token');
Örnek: Kullanıcı yetkilendirmeli sorgu
Bu durumda, uygulama kullanıcının erişim belirtecini doğrudan bağlayıcıya geçirir ve Azure Databricks kullanıcının izinlerini sorguya uygular.
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);
Kullanıcı yetkilendirmesi için en iyi yöntemler
Kullanıcılar adına eylemler gerçekleştiren uygulamalar oluştururken, güvenli ve denetlenebilir erişim sağlamak için şu en iyi yöntemleri izleyin:
- Uygulama kodunu yalnızca uygulama sahibi veya küçük bir güvenilir kullanıcı kümesi tarafından erişilebilen klasörlerde depolayın.
- Yalnızca
CAN MANAGEuygulama bakımı ve gözden geçirmeden sorumlu olan güvenilir üst düzey geliştiricilere izin verin. Yalnızca uygulamayı çalıştırması onaylanan belirli kullanıcılara veya gruplara izin verinCAN USE. - Belirteçlerin yazdırılmadığından, günlüğe kaydedilmediğinden veya dosyalara yazılmadığından emin olun. Bu, tüm günlük deyimleri, hata ayıklama araçları ve hata işleyicileri için geçerlidir. Örneğin,
print(f"User token: {token}")yerine kullanınheaders = {"Authorization": f"Bearer {token}"}. - Her uygulamayı yalnızca işlevselliği için gereken en düşük yetkilendirme kapsamlarını istemek üzere yapılandırın.
- Kod gözden geçirmesi sırasında kapsam ve izin ayarlarının güvenlik gereksinimleriyle uyumlu olduğunu ve gereksiz erişim vermediğini doğrulayın.
- Üretim ortamlarına dağıtmadan önce tüm uygulama kodları için eş gözden geçirmeyi zorunlu kılma.
- Uygulama kodunuzun kullanıcı kimliği, eylem türü, hedef kaynak ve durum gibi kullanıcılar adına gerçekleştirilen her eylem için yapılandırılmış denetim günlüklerini kaydettiğinden emin olun.
Kimlik doğrulama yöntemleri
Databricks Uygulamalarına yönelik belirteçleri almak için hem kullanıcılar hem de hizmet sorumluları standart OAuth 2.0 akışlarını kullanarak kimlik doğrulaması yapar. yöntemi, çağıranın bir kullanıcı mı yoksa otomatik bir iş yükü mü olduğuna bağlıdır.
Çalışma alanı oturum açma bilgileri için (yalnızca kullanıcılar):
- Çoklu oturum açma (SSO): Çoklu oturum açma (SSO) yapılandırıldığında kullanıcılar kimlik sağlayıcınız üzerinden kimlik doğrulaması yapar.
- Tek seferlik parola (OTP): SSO yapılandırılmamışsa kullanıcılar geçici bir parola alır.
OAuth akışları (uygulamalar ve iş yükleri) için:
- Kullanıcıdan makineye (U2M) OAuth: Kullanıcılar kimlik doğrulaması yapar ve sonuçta elde edilen belirteçler, uygulamanın kullanıcı adına hareket edebilmesi için kullanıcı yetkilendirmesini etkinleştirir.
- Makineden makineye (M2M) OAuth: Hizmet sorumluları istemci kimlik bilgilerini veya federasyonu kullanarak kimlik doğrulaması yapar. Bu belirteçler, uygulamanın bir kullanıcı yerine kendisi olarak davrandığı uygulama yetkilendirmesini destekler.
Belirteç kimlik doğrulaması kullanarak Databricks uygulamasını çağırma yönergeleri için bkz. Belirteç kimlik doğrulaması kullanarak API Databricks uygulamasına bağlanma.
Modelleri karşılaştırma ve birleştirme
Databricks Uygulamaları, uygulama ve kullanıcı yetkilendirmesini bağımsız olarak veya birlikte kullanabilir. Bu modeller farklı amaçlara hizmet eder ve paralel çalışacak şekilde tasarlanmıştır.
| Yetkilendirme modeli | Ne zaman kullanılır? | Kullanım örnekleri |
|---|---|---|
| Uygulama yetkilendirme | Uygulama kullanıcının kimliğine bağlı olmayan işlemler gerçekleştirdiğinde | Günlükleri yazma, paylaşılan yapılandırmaya erişme, dış hizmetleri çağırma |
| Kullanıcı yetkilendirmesi | Uygulamanın geçerli kullanıcı bağlamında kaynaklara erişmesi gerektiğinde | Unity Kataloğu verilerini sorgulama, işlem başlatma, satır düzeyi izinleri zorlama |
| Both | Uygulama hem paylaşılan hem de kullanıcıya özgü işlemler gerçekleştirdiğinde | Uygulama kimliğiyle ölçümleri günlüğe kaydetme, filtrelenmiş verileri kullanıcı kimliğiyle sorgulama |