クロスエンジン属性ベースアクセス制御(ABAC)
ベータ版
クロスエンジンABACはベータ版です。
外部エンジンは、属性ベースのアクセス制御 (ABAC) ポリシーが適用された Unity Catalog テーブルを読み取ることができます。これにより、Databricksの外部からクエリを実行する場合でも、動的に適用されるABAC行フィルターと列マスクを使用できます。
外部エンジンがABACポリシーがアタッチされたテーブルをクエリすると、Databricksは特殊なサーバレスコンピュートレイヤーを使用して、外部エンジンにフィルター処理されたサニタイズ済みデータを返します。
要件
外部エンジンからクエリされるテーブルにきめ細かなアクセス制御を適用するには、以下を完了する必要があります。
- Unity Catalog メタストアで外部データ アクセスを有効にする。
- クエリプリンシパルに
EXTERNAL USE SCHEMA権限を付与します。 - カタログコミット 付きのマネージドテーブル を使用します。
- OAuth マシン間 (M2M) または 個人用アクセストークン (PAT) を使用して認証する。
カタログコミットを使用してマネージドDeltaテーブルを作成します
カタログコミットを伴う新しいマネージド Delta テーブルを作成するには(Databricks Runtime 16.4 以降が必要です):
CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;
既存のマネージドテーブルをアップグレードするには(Databricks Runtime 18.0 以降が必要です):
ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');
テーブルの作成後、ABACポリシー、行フィルター、または列マスクを適用できます。
「ポリシーを作成する」または「手動で行フィルターと列マスクを適用する」を参照してください。
Apache Spark (Delta) を使用してテーブルを読み取る
Apache Spark を Delta-Spark 4.1 以降およびUnity Catalog Spark コネクタ 0.4 以降で構成します。
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.ServerSidePlanning.enabled": "true",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.jars.packages": "io.delta:delta-spark_4.0_2.13:4.1.0,io.delta:delta-iceberg_2.13:4.1.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.0,org.apache.hadoop:hadoop-aws:3.4.1"
外部エンジンからのきめ細かなアクセス制御の適用を有効にするには、ServerSidePlanning.enabledをtrueに設定します。
次の変数を置換します。
<uc-catalog-name>:Unity Catalog 内でテーブルを格納するカタログの名前です。<workspace-url>:Databricks ワークスペースのURL(ワークスペースIDを含みます)。<oauth-token-endpoint>:OAuth トークン エンドポイント URL。OAuthを使用したDatabricksへのサービスプリンシパル アクセスの承認を参照してください。<oauth-client-id>: 認証プリンシパル用のOAuth クライアントID<oauth-client-secret>:認証プリンシパルのOAuthクライアントシークレットです。
Apache Spark(Iceberg)でテーブルを読み取る
Iceberg-Spark 1.11 以降および Apache Spark 4.0 以降で Apache Spark を構成します。
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.<uc-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<uc-catalog-name>.type": "rest",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest/",
"spark.sql.catalog.<uc-catalog-name>.credential": "<oauth-client-id>:<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.oauth2-server-uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.warehouse": "<uc-catalog-name>",
"spark.sql.catalog.<uc-catalog-name>.cache-enabled": "false",
"spark.sql.defaultCatalog": "<uc-catalog-name>"
次の変数を置換します。
<uc-catalog-name>:Unity Catalog 内でテーブルを格納するカタログの名前です。<workspace-url>:Databricks ワークスペースのURL(ワークスペースIDを含みます)。<oauth-token-endpoint>:OAuth トークン エンドポイント URL。OAuthを使用したDatabricksへのサービスプリンシパル アクセスの承認を参照してください。<oauth-client-id>: 認証プリンシパル用のOAuth クライアントID<oauth-client-secret>:認証プリンシパルのOAuthクライアントシークレットです。
データのクエリ
Apache Spark SQL または DataFrame APIs を使用して、テーブルをクエリできます。Databricks は裏側できめ細かなアクセス ポリシーを適用します。
SELECT * FROM <uc-catalog-name>.<schema>.<table>;
クエリの計画中に並列書き込みが行われると、自己結合クエリや複数スキャンクエリにおいて、同じテーブルが異なるテーブルのスナップショットから読み取られることがあり、不正確な結果につながる可能性があります。
サーバレス コンピュートのコスト
クロスエンジンABACは、サーバレス コンピュート リソースを使用して、サーバー側で きめ細かい アクセス ポリシーを適用します。顧客はこれらのリソースに対して課金されます。価格情報については、 ベータ製品の価格を参照してください。
課金システムテーブルにアクセスできるユーザーは、請求額を確認するために system.billing.usage をクエリできます。例えば、以下のクエリではユーザー別のコンピュートコストの内訳を示します。
SELECT usage_date,
sku_name,
identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by cross-engine ABAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2026-06-01' AND '2026-07-01'
AND billing_origin_product = 'EXTERNAL_COMPATIBILITY'
GROUP BY 1, 2, 3 ORDER BY 1;
制限事項:
- 詳細なアクセス制御(FGAC)が適用されている場合、外部エンジンからは読み取りのみがサポートされます。記述するには、記述のプリンシパルをABACポリシーから免除する必要があります。
- ダイナミックビューはサポートされていません。
VARIANT列のプロジェクションはサポートされていません。BINARY列でのフィルタリングはサポートされていません。- 戻り値の型が元の列タイプと異なる列マスキング関数は、サポートされていません。
- 大規模な集計では、パフォーマンスの低下が発生する場合があります。