第4章 アプリケーションの組み立てとデプロイ / 想定学習時間:30〜40分 / 最終確認:2026年8月

4-3. アクセス制御・権限管理(Unity Catalogのガバナンス機能との連携)

🎯 この節の学習目標

1. Unity Catalogの権限モデルの基本

Unity Catalogでは、カタログ→スキーマ→オブジェクト(テーブル・モデル・関数・ボリュームなど)という階層のそれぞれに対して、GRANT文で権限を付与します。生成AIアプリに関係する主な権限は次の通りです。

権限対象意味
USE CATALOGカタログカタログ内のオブジェクトへ到達するための前提権限
USE SCHEMAスキーマスキーマ内のオブジェクトへ到達するための前提権限
SELECTテーブル・ビューデータの読み取り(RAGのソーステーブルなど)
EXECUTE登録モデル・関数モデルのロード・推論や関数の実行
READ VOLUMEボリュームボリューム内ファイル(PDF等)の読み取り
CREATE MODELスキーマスキーマ内へのモデル登録

重要なのは、階層のすべてで権限が揃って初めてアクセスできることです。たとえばモデルprod.genai_apps.support_rag_chainを使うには、prodへのUSE CATALOG、genai_appsへのUSE SCHEMA、モデルへのEXECUTEの3つが必要です。

-- モデル利用チームへの権限付与の例
GRANT USE CATALOG ON CATALOG prod TO `app-team`;
GRANT USE SCHEMA  ON SCHEMA  prod.genai_apps TO `app-team`;
GRANT EXECUTE     ON MODEL   prod.genai_apps.support_rag_chain TO `app-team`;

📝 試験のポイント

「モデルにアクセスできない」系のトラブルシューティング問題では、USE CATALOG / USE SCHEMAの前提権限の欠落が定番の原因です。オブジェクト単体のEXECUTEやSELECTだけ付与しても、上位階層のUSE権限がなければアクセスできません。

2. Model Servingエンドポイント自体の権限

UCの権限は「モデルというオブジェクト」への権限でした。これとは別に、デプロイ後のServingエンドポイント自体にもアクセス制御レベルがあります。

権限レベルできること想定する対象者
Can Manageエンドポイントの設定変更・更新・削除・権限管理エンドポイントの所有者・MLOpsチーム
Can Queryエンドポイントへの推論リクエスト送信アプリケーション・利用ユーザー・サービスプリンシパル
Can Viewエンドポイントのメタデータ閲覧のみ監査担当・閲覧のみのメンバー

「モデル(UC)への権限」と「エンドポイントへの権限」は別レイヤーである点を区別してください。アプリの利用者はエンドポイントにCan Queryがあれば推論でき、背後のUCモデルへの直接権限は必要ありません。逆に、エンドポイントを構成・更新する人には、UC側のモデル権限とエンドポイントのCan Manageの両方が求められます。

3. サービスプリンシパルとシークレット管理

本番アプリからエンドポイントを呼ぶとき、個人ユーザーのアカウントやパーソナルトークンを使うのはアンチパターンです。個人の退職・異動でアプリが停止し、監査上も「アプリのアクセス」と「個人のアクセス」が区別できなくなるためです。代わりに次の構成を取ります。

# シークレットの登録(CLI)
# databricks secrets create-scope genai-app
# databricks secrets put-secret genai-app openai-api-key

# ノートブック/ジョブからの参照
api_key = dbutils.secrets.get(scope="genai-app", key="openai-api-key")

# 外部モデル用エンドポイント設定などでは
# {{secrets/genai-app/openai-api-key}} の形式で参照できる

💼 例:社外向けチャットアプリの呼び出し構成

Webアプリのバックエンドには、サービスプリンシパルのOAuthトークン(またはそのサービスプリンシパルが発行したトークン)を使わせ、そのサービスプリンシパルにエンドポイントのCan Queryだけを付与します。トークンや外部APIキーはDatabricks Secretsに保管し、コード・ノートブック・リポジトリには一切書きません。これで「アプリは推論だけできる」「個人アカウントに依存しない」「キーが漏洩経路に乗らない」の3点が同時に満たせます。

📝 試験のポイント

「APIキーをノートブックにハードコードしている。どうすべきか?」→ Databricks Secretsに移す。「本番アプリの認証は?」→ 個人トークンではなくサービスプリンシパル。この2つはよく問われる即答パターンです。

4. RAG特有の考慮:文書の権限と回答の権限の整合

RAGアプリでは、権限管理に固有の落とし穴があります。ユーザーが直接読む権限のない文書の内容が、ボットの回答経由で漏れてしまう問題です。

たとえば人事の給与規程(人事部限定)をインデックスに含めた社内ボットを全社員に公開すると、一般社員が「役員の報酬体系は?」と聞くだけで、本来アクセスできない情報が回答に含まれ得ます。ベクトル検索インデックスは元テーブルの行レベル権限を自動では引き継がないため、設計で整合を取る必要があります。代表的なアプローチは次の通りです。

アプローチ内容特徴
インデックス分離権限グループごとにインデックス(またはエンドポイント)を分け、ユーザーの所属に応じて使い分けるシンプルで確実。グループ数が少ない場合に有効
スコープ限定そもそも全員が読んでよい文書だけをインデックスに含める最も安全側。ナレッジの範囲は狭くなる
メタデータフィルタチャンクに権限属性を付与し、検索時にユーザー属性でフィルタする柔軟だがフィルタ漏れの実装ミスに注意

原則は「回答の到達範囲は、ソース文書の閲覧権限の範囲を超えてはならない」です。試験でも、機密文書を含むRAGの設計問題でこの観点が問われます。

5. 最小権限の原則と監査

権限設計の全体を貫くのが最小権限の原則(principle of least privilege)です。各主体(ユーザー、グループ、サービスプリンシパル)には、業務に必要な最小限の権限だけを付与します。

また、UCは監査ログにより「誰が・いつ・どのモデルやテーブルにアクセスしたか」を記録します。推論リクエストの内容そのものの記録(推論テーブル)と合わせて、事後の追跡・説明責任を担保します。運用監視の詳細は第6章で扱います。

✅ この節のまとめ

練習問題

問1. ユーザーに prod.genai_apps.support_rag_chain モデルへのEXECUTE権限を付与したが、「アクセスできない」と報告された。最も可能性の高い原因はどれか。

  1. モデルのバージョンが古い
  2. prodカタログへのUSE CATALOG、genai_appsスキーマへのUSE SCHEMA権限が付与されていない
  3. EXECUTE権限はテーブル専用でモデルには使えない
  4. エイリアスが設定されていない
解答と解説を見る

正解:B

UCでは階層すべての権限が揃って初めてオブジェクトに到達できます。オブジェクト単体の権限だけ付与して上位のUSE権限を忘れるのが定番の原因です。Aのバージョンはアクセス可否と無関係、CはEXECUTEがモデル・関数に適用される点で誤り、Dのエイリアスは参照の仕組みであり権限とは無関係です。

問2. 社外向けWebアプリからModel Servingエンドポイントを呼び出す本番構成として、最も適切なものはどれか。

  1. 開発リーダーのパーソナルアクセストークンをアプリの環境変数に設定する
  2. サービスプリンシパルを作成してエンドポイントのCan Queryを付与し、その認証情報をDatabricks Secrets等の安全な仕組みで管理する
  3. エンドポイントを認証不要の公開設定にする
  4. アプリ利用者全員にDatabricksアカウントを発行し、各自のトークンで呼び出させる
解答と解説を見る

正解:B

本番アプリの呼び出しはサービスプリンシパル+最小権限(Can Query)+シークレット管理が定石です。Aは個人依存(退職でアプリ停止・監査の混同)というアンチパターン、Cは認証を外すことになり論外、Dは社外ユーザーへのアカウント発行が非現実的で権限管理も破綻します。

問3. 全社員向けの社内ナレッジRAGボットを構築する。ソース文書には全社公開の規程類と、人事部だけが閲覧できる給与関連文書が含まれる。適切な設計はどれか。

  1. すべての文書を1つのインデックスに入れ、LLMへのプロンプトで「機密情報は答えないで」と指示する
  2. 全社公開文書のインデックスと人事限定文書のインデックスを分離し、ユーザーの権限に応じて検索対象を制御する
  3. すべての文書を1つのインデックスに入れ、回答速度を優先する
  4. 給与関連文書だけ埋め込みモデルを変えて検索されにくくする
解答と解説を見る

正解:B

原則は「回答の到達範囲はソース文書の閲覧権限を超えない」です。権限グループに応じたインデックス分離(またはメタデータフィルタ)で、検索段階からアクセス範囲を制御します。Aのプロンプト指示は強制力がなくプロンプトインジェクション等で破られ得ます。Cは漏えいリスクを放置し、Dは「検索されにくい」だけで漏えいを防げない不確実な手段です。

問4. ノートブック内に外部LLMプロバイダのAPIキーが平文でハードコードされているのを発見した。推奨される対応はどれか。

  1. ノートブックの閲覧権限を絞れば、そのままでよい
  2. APIキーをDatabricks Secretsのシークレットスコープに保存し、コードからはdbutils.secrets.get()等で実行時に参照する
  3. APIキーをBase64エンコードしてから記載する
  4. APIキーをUnity Catalogのテーブルに保存する
解答と解説を見る

正解:B

認証情報はDatabricks Secretsで管理し、コードには参照だけを書くのが原則です。Aは共有・エクスポート・バージョン履歴から漏えいする経路が残ります。CのBase64は暗号化ではなく単なるエンコードで、誰でも復元できます。Dのテーブル保存はシークレット管理の仕組み(値のマスキング等)を持たず不適切です。