Databricks Certified Generative AI Engineer Associate 教科書
第4章 アプリケーションの組み立てとデプロイ(Assembling and Deploying Applications, 22%)
🎯 この節の学習目標
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権限がなければアクセスできません。
UCの権限は「モデルというオブジェクト」への権限でした。これとは別に、デプロイ後のServingエンドポイント自体にもアクセス制御レベルがあります。
| 権限レベル | できること | 想定する対象者 |
|---|---|---|
| Can Manage | エンドポイントの設定変更・更新・削除・権限管理 | エンドポイントの所有者・MLOpsチーム |
| Can Query | エンドポイントへの推論リクエスト送信 | アプリケーション・利用ユーザー・サービスプリンシパル |
| Can View | エンドポイントのメタデータ閲覧のみ | 監査担当・閲覧のみのメンバー |
「モデル(UC)への権限」と「エンドポイントへの権限」は別レイヤーである点を区別してください。アプリの利用者はエンドポイントにCan Queryがあれば推論でき、背後のUCモデルへの直接権限は必要ありません。逆に、エンドポイントを構成・更新する人には、UC側のモデル権限とエンドポイントのCan Manageの両方が求められます。
本番アプリからエンドポイントを呼ぶとき、個人ユーザーのアカウントやパーソナルトークンを使うのはアンチパターンです。個人の退職・異動でアプリが停止し、監査上も「アプリのアクセス」と「個人のアクセス」が区別できなくなるためです。代わりに次の構成を取ります。
# シークレットの登録(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つはよく問われる即答パターンです。
RAGアプリでは、権限管理に固有の落とし穴があります。ユーザーが直接読む権限のない文書の内容が、ボットの回答経由で漏れてしまう問題です。
たとえば人事の給与規程(人事部限定)をインデックスに含めた社内ボットを全社員に公開すると、一般社員が「役員の報酬体系は?」と聞くだけで、本来アクセスできない情報が回答に含まれ得ます。ベクトル検索インデックスは元テーブルの行レベル権限を自動では引き継がないため、設計で整合を取る必要があります。代表的なアプローチは次の通りです。
| アプローチ | 内容 | 特徴 |
|---|---|---|
| インデックス分離 | 権限グループごとにインデックス(またはエンドポイント)を分け、ユーザーの所属に応じて使い分ける | シンプルで確実。グループ数が少ない場合に有効 |
| スコープ限定 | そもそも全員が読んでよい文書だけをインデックスに含める | 最も安全側。ナレッジの範囲は狭くなる |
| メタデータフィルタ | チャンクに権限属性を付与し、検索時にユーザー属性でフィルタする | 柔軟だがフィルタ漏れの実装ミスに注意 |
原則は「回答の到達範囲は、ソース文書の閲覧権限の範囲を超えてはならない」です。試験でも、機密文書を含むRAGの設計問題でこの観点が問われます。
権限設計の全体を貫くのが最小権限の原則(principle of least privilege)です。各主体(ユーザー、グループ、サービスプリンシパル)には、業務に必要な最小限の権限だけを付与します。
また、UCは監査ログにより「誰が・いつ・どのモデルやテーブルにアクセスしたか」を記録します。推論リクエストの内容そのものの記録(推論テーブル)と合わせて、事後の追跡・説明責任を担保します。運用監視の詳細は第6章で扱います。
✅ この節のまとめ
問1. ユーザーに prod.genai_apps.support_rag_chain モデルへのEXECUTE権限を付与したが、「アクセスできない」と報告された。最も可能性の高い原因はどれか。
正解:B
UCでは階層すべての権限が揃って初めてオブジェクトに到達できます。オブジェクト単体の権限だけ付与して上位のUSE権限を忘れるのが定番の原因です。Aのバージョンはアクセス可否と無関係、CはEXECUTEがモデル・関数に適用される点で誤り、Dのエイリアスは参照の仕組みであり権限とは無関係です。
問2. 社外向けWebアプリからModel Servingエンドポイントを呼び出す本番構成として、最も適切なものはどれか。
正解:B
本番アプリの呼び出しはサービスプリンシパル+最小権限(Can Query)+シークレット管理が定石です。Aは個人依存(退職でアプリ停止・監査の混同)というアンチパターン、Cは認証を外すことになり論外、Dは社外ユーザーへのアカウント発行が非現実的で権限管理も破綻します。
問3. 全社員向けの社内ナレッジRAGボットを構築する。ソース文書には全社公開の規程類と、人事部だけが閲覧できる給与関連文書が含まれる。適切な設計はどれか。
正解:B
原則は「回答の到達範囲はソース文書の閲覧権限を超えない」です。権限グループに応じたインデックス分離(またはメタデータフィルタ)で、検索段階からアクセス範囲を制御します。Aのプロンプト指示は強制力がなくプロンプトインジェクション等で破られ得ます。Cは漏えいリスクを放置し、Dは「検索されにくい」だけで漏えいを防げない不確実な手段です。
問4. ノートブック内に外部LLMプロバイダのAPIキーが平文でハードコードされているのを発見した。推奨される対応はどれか。
正解:B
認証情報はDatabricks Secretsで管理し、コードには参照だけを書くのが原則です。Aは共有・エクスポート・バージョン履歴から漏えいする経路が残ります。CのBase64は暗号化ではなく単なるエンコードで、誰でも復元できます。Dのテーブル保存はシークレット管理の仕組み(値のマスキング等)を持たず不適切です。