0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【確認記録】Entra ID 認証を使用して、Databricks Unity Catalog から Snowflake へのカタログフェデレーションを 構成する

Last updated at Posted at 2025-08-07

はじめに

Entra ID 認証での手順がわかりにくかったので記録

手順のあらまし

  1. Entra ID リソース用のアプリケーションの作成
  2. OAuth クライアント用のアプリケーションの作成
    1. を呼び出す Snowflake セキュリティ統合の作成(この手順では既存の Power BI SSO 用のセキュリティ統合にaudienceを追加)
  3. Databricks から Snowflake に対する接続を作成する
  4. 外部カタログを作成する

docs:

前提となる環境の状態:
以下を構成済み

実施記録

1. Entra ID リソース用のアプリケーションの作成

  1. Entra ID 上でアプリを作成
    image.png

  2. API 公開画面で、追加 
    image.png

  3. 既定の URI で登録
    image.png

    ここでの URI は後続で使用するのでメモします。

    :

  4. スコープ追加。ここではスコープ名を snowflake 側で作成済みの ロール名にしておく
    image.png

2. OAuth クライアント用のアプリケーションの作成

  1. Entra ID 上でアプリを作成
    image.png

  2. API へのアクセス許可を追加する
    image.png
    image.png

  3. リダイレクト URI (WEB)を追加する。docsにならい、https:///login/oauth/snowflake.html の形式。
    image.png

  4. シークレットとテナント ID や クライアント ID をメモしておきます。

3. Snowflake セキュリティ統合の作成

ここではセキュリティ統合を作成するが、docs通りにやると、既存の Power BI SSO 用セキュリティ統合の存在により、以下の種類および同じテナント ID でのセキュリティ統合が作成されているため、エラーが発生する

type = external_oauth
external_oauth_type = azure

image.png

このような場合は、audience を追加することで対応

実際の SQL はこちら ※IDなどは別値

sql

create or replace security integration powerbi
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = 'https://sts.windows.net/tenant/'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake', 'https://analysis.windows.net/powerbi/connector/snowflake','api://aaaaaaaaaaaaaaaaaaaaaaaaa')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

4. Databricks から Snowflake に対する接続を作成する

  1. 接続作成画面に移動
    image.png
  2. 接続の基本
    image.png
  3. 接続を確立する
    先ほどメモした、 OAuth クライアント の情報や /.default offline_access を入力
    image.png
  4. 成功すると次の画面に進める
    image.png
  5. 接続で使用する Snowflake の WH とロールを設定して接続作成完了
    image.png

5. 外部カタログを作成する

続けて作成した場合のキャプチャ

  1. カタログ名とデータベースを指定する

    image.png

  2. Iceberg カタログフェデレーションをする際は認証パス(iceberg の配置先)と、ストレージの場所(iceberg 読取用のdelta log などのメタデータを生成する場所)を構成する

    20250807 現時点では、認証パスで設定されているようなマネージドiDを使用してのアクセスはできませんでした。

    image.png
    iceberg メタデータは blob.windows.net のエンドポイントを指す形で作成されるため、そこから生成される delta_log も blob エンドポイントを参照してしまうのですが、Unity Catalog は Blob エンドポイントをサポートしておらず、外部ロケーションとして構成・認証ができないためです。

    image.png

    https://learn.microsoft.com/ja-jp/azure/databricks/connect/unity-catalog/cloud-storage/#best-practices-azure

    回避策は現時点では、spark conf に認証情報を取得するほかなく、Unity Catalog 対応のサーバレスクラスターからのアクセスはできません。
    サーバレス SQL ウェアハウスであれば、データアクセスの構成による spark conf 設定が可

    参考:https://qiita.com/ryoma-nagata/items/39fd52ab81015e3c9527

  3. 接続のテストをします。このようにエラーが出たら権限が不足しています。
    image.png
    ログから操作内容を確認して不足権限を洗い出すといいです。
    image.png

  4. この環境では以下のように権限付与しました。テーブルはやりすぎたかもしれません。

    sql
    
    -- 1) ロール切り替え(SECURITYADMIN or 権限付与可能なロールで実行)
    USE ROLE SECURITYADMIN;
    
    -- 2) データベースへの参照権限
    GRANT USAGE, MONITOR
      ON DATABASE ICEBERG_ON_AZURE
      TO ROLE ANALYST;
    
    -- 3) スキーマへの参照権限
    GRANT USAGE
      ON SCHEMA ICEBERG_ON_AZURE.PUBLIC
      TO ROLE ANALYST;
    
    -- 4) 既存テーブルへの SELECT 権限
    GRANT SELECT
      ON ALL TABLES IN SCHEMA ICEBERG_ON_AZURE.PUBLIC
      TO ROLE ANALYST;
    
    -- 5) 今後作成されるテーブルへの自動 SELECT 権限
    GRANT SELECT
      ON FUTURE TABLES IN SCHEMA ICEBERG_ON_AZURE.PUBLIC
      TO ROLE ANALYST;
    
    -- 6) 外部ボリュームへの参照権限
    GRANT USAGE
      ON EXTERNAL VOLUME EXT_VOL_AZURE
      TO ROLE ANALYST;
    
    -- 7) ウェアハウスのモニター権限(クエリ実行用ウェアハウス)
    GRANT MONITOR
      ON WAREHOUSE compute_wh
      TO ROLE ANALYST;
    
    
  5. カタログが作成できたらカタログのアクセス権を設定します。
    image.png

  6. 必要に応じて tag なども設定
    image.png

カタログの確認

カタログ作成が成功したら画面更新をすると、テーブル情報が反映されます。

image.png

カタログへの反映の際、裏側ではこんなクエリが発生しています。

image.png

カタログフェデレーションの対象として、 iceberg であることが認識できるとこのような表示に

image.png

前述のデータアクセスの構成をして、blob.core のエンドポイントにサーバレス SQL WH が認証できるようにしています。

Iceberg テーブルのサンプルデータの表示は Databricks のコンピューティングにより実行されます。

image.png

ストレージの場所として選んだパスでは、このようにdelta log が生成されます。

image.png

ただし、前述のように、iceberg のメタデータをもとにしているため delta_log でも blob.core が使用され、これが認証の問題を起こします。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?