Databricks、ガバナンスを維持しつつ構造化データと文書を統合するGenie Agentsの活用方法
本文の状態
日本語全文を表示中
詳細モードで約19分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
Databricks AI Engineering
Databricks は Genie Agents がエンドユーザーの権限を継承し、Unity Catalog を介して構造化・非構造化データへのアクセスを厳格に制御する仕組みを発表した。
Continue in AI NEW LAB
このニュースを、実務の判断につなげる
AI NEW LABで、試したことや先に確認したい条件を共有できます。まずはログインなしで読めます。
AI NEW LABで論点を見るAI深層分析を開く2026年8月11日 09:27
AI深層分析
キーポイント
エージェント実行時の権限継承
Genie Agents はエンドユーザーの認証情報で動作し、LLM がセキュリティ境界となる従来の手法とは異なり、データレイヤーで自動的にフィルタリングを行う。
Unity Catalog による自動ガバナンス
ID同期、オブジェクト権限、ABAC、行フィルター、カラムマスクなどの既存の Unity Catalog メカニズムがエージェントにも自動的に適用され、追加設定は不要である。
LLM をセキュリティ境界としない設計
プロンプトエンジニアリングに依存する従来手法ではモデルのハッキングやバイパスリスクがあるため、Databricks はデータレイヤーでの制御を徹底してセキュリティを担保する。
構造化・非構造化データの統合分析
単一のエージェントでテーブルとファイルの両方を扱うことが可能になり、従来必要だった数週間のシステム連携工数が不要となる。
Unity Catalog をセキュリティの境界として維持
モデルではなく Unity Catalog がセキュリティの境界となり、Genie はデータレイヤーでフィルタリングされた回答のみを返す。
重要な引用
Genie Agents run with the end user's credentials.
Unity Catalog enforces governance by default, ensuring that access to tables and volumes are tied directly to the end user's existing identity and permissions.
This effectively makes the LLM your security perimeter—a dangerous bet, given that models can be manipulated or bypassed.
"Telling an auditor that 'I added instructions that said to not to show restricted data' is not a defensible governance control."
編集コメントを表示
編集コメント
Genie Agents のセキュリティモデルが、LLM を信頼するのではなくデータレイヤーの権限を厳格に適用する点で業界標準のリスク管理に合致している。これは AI エージェントの実装において、プロンプト依存からの脱却とシステムレベルのガバナンス強化を促す重要な指針となる。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
単純な業務タスクを自動化するエージェントを構築するのは比較的容易です。しかし、自社のビジネスを理解し、既存のデータガバナンスを尊重するエージェントを作ることははるかに困難です。
長年、チームは構造化データと非構造化データを分析するために別々のシステムを使用する必要があり、両者を連携させるだけで数週間を費やすことも珍しくありませんでした。Genie エージェントは、テーブルや非構造化ファイルから直接分析を可能にすることでこのアーキテクチャを簡素化し、単一のエージェントに構造化データと非構造化データの両方を統合して活用できる基盤を提供します。
これらのデータを統合する際、重要な疑問が浮かび上がります。一つのエージェントがすべての情報にアクセスできるようになった場合、誰に何を伝えるべきかを誤らないようにどうすればよいのでしょうか?
幸いなことに、Databricks においては、その答えはすでに存在するデータガバナンスの基盤の中にあります。現在も信頼している Unity Catalog の仕組み(ID 同期、オブジェクト権限、ABAC、行レベルフィルタリング、列マスクなど)が、追加の設定なしで自動的に Genie エージェントを統制します。このシームレスな継承は、十分に設計されたガバナンス戦略に依存しており、これについては後ほど詳しく解説します。
これらの概念を実践的に理解してもらうため、架空のグローバルレンガ小売業者「Brickstore」の事例を用いて、具体的なシナリオを追っていきましょう。
ガバナンス契約:Genie エージェントはエンドユーザーの資格情報で実行される
中核となるアーキテクチャ原則はシンプルです。Genie エージェントは、エンドユーザー自身の資格情報(クレデンシャル)で動作します。Unity Catalog はデフォルトでガバナンスを適用し、テーブルやボリュームへのアクセス権限が、エンドユーザーの既存のアイデンティティとパーミッションに直接紐付けられるように保証します。
これは極めて重要です。多くの独自システムでは、エージェントに対して広範なアクセス権限を与え、モデル層でのプロンプトエンジニアリングによって結果をフィルタリングすることに依存しています。これは実質的に、LLM(大規模言語モデル)自体をセキュリティの境界線として機能させることを意味しますが、モデルが操作されたり迂回されたりする可能性がある以上、極めて危険な賭けです。「制限されたデータを表示しないよう指示を追加した」と監査担当者に説明しても、それは防御可能なガバナンス制御とは認められません。
本記事で概説したガバナンスフレームワークの下では、セキュリティの境界線はモデルではなく Unity Catalog であり、これは Databricks の他の領域と同様の仕組みです。Genie はデータに*どのように*クエリを投げるかを決定しますが、エンドユーザーが閲覧権限を持たないレコードを返すことはできません。すべての回答は、Lakehouse から出力される前にデータ層でフィルタリングされるためです。
ステップ 0:アイデンティティから始まる:自動アイデンティティ管理(AIM)とジョブ・イン・タイム(JIT)プロビジョニング
アーキテクチャの基盤は、エンタープライズ内のアイデンティティが正確かつ最新であることを保証することから始まります。
アクセス制御の信頼性は、評価されるアイデンティティそのものの正確さに依存します。「brickstore_apac のメンバーは APAC 関連の注文のみ閲覧可能」というポリシーも、Databricks 内のグループ所属情報が ID プロバイダー(IdP)の最新データと同期されていない状態では、実質的に意味をなしません。
Microsoft Entra ID や Okta 向けの「自動アイデンティティ管理 (Automatic Identity Management)」は、この課題を解決します。これを有効にすると、ユーザー、グループ、所属関係、サービスプリンシパルが、SCIM アプリケーションの設定不要で自動的に Databricks に同期されます。プロビジョニングは常時即時(Just-in-time)で行われるため、Databricks へのログイン履歴がないユーザーも、初回ログイン時に自動生成され、既存のグループ所属情報をそのまま引き継いで利用開始できます。
具体的なフローは以下の通りです。
- IdP が真実の源となる: APAC 営業組織に新メンバーが加わると、Identity Provider がその人を
brickstore_apacグループに割り当てます。 - AIM が Databricks に同期する: グループ所属情報も合わせて同期され、Genie One を初めて開いた瞬間にユーザーが Databricks 上に即時プロビジョニングされます。
- Unity Catalog ポリシーがグループを参照する: オブジェクト権限、ABAC ポリシー、行レベルフィルタ、カラムマスクはすべて、クエリ実行時にグループ所属情報を基に評価されます。
- ユーザーが Genie Agent に質問する: 回答内容は、そのユーザーのグループ権限で許容される範囲に厳密に制限され、それ以上でも以下でもありません。
最大のメリットは、ガバナンスが一度きりの設定ではなく、継続的に維持される点にあります。例えば、従業員が APAC 地域から AMER 地域へ異動した場合、IdP がグループ間の移動を処理し、同期が即座に反映されます。すると、その従業員が次に Genie に質問した瞬間には、すでに AMER 向けの表示が自動的に切り替わっています。誰かがチケットを発行したり、Genie エージェントの設定を手動で変更したりする必要はありません。同様に、従業員が退社した場合、IdP でアカウントを無効化すれば、Genie エージェントへのアクセス権限も即座に剥奪されます。
ステップ 1:構造化データの統合とアクセス制御の 4 レイヤー管理
アイデンティティが適切に確立されたら、次は各エージェントが何を閲覧できるかに焦点を当てましょう。構造化データに関しては、Genie エージェントは Unity Catalog に登録されたあらゆるデータ資産にアクセスできます。具体的にはテーブルやビュー、マテリアライズド・ビュー、メトリック・ビュー、ストリーミング・テーブルに加え、外部システムからフェデレーションされた外部テーブルも含まれます。
例えば、Delta テーブルは事実と次元のデータです。Brickstore ではこれが brickstore.sales.orders として表され、すべての注文情報に region(地域)などの属性が含まれています。
customer_email と brickstore.sales.products(ブリックカタログ)
メトリクスビューは、統制されたセマンティックレイヤーとして上位に位置し、ビジネス指標の定義(例:)をエンコードします。
「ネット収益」が何を指すか、「販売されたブロック数」の計算方法、そして何が「ベストセラーのブロック」とカウントされるかを、YAML で一度定義し、すべての利用者が同じ基準で計算できるようにします。
これらの資産の上には、人々が混同しがちな 4 つのアクセス制御層が存在します。
| レイヤー | 回答する質問 | メカニズム |
|---|---|---|
| オブジェクト権限 | どのリソースに対して、誰がどのようなレベルのアクセス権を持っていますか? | GRANT SELECT on the catalog/schema/table |
| 属性ベースのアクセス制御 (ABAC) | どのポリシーが適用され、何に適用されますか? | 一度設定して伝播するガバナンスタグ駆動型ポリシー(例:"PII"というタグが付いたすべての列は、特定のグループのみが利用可能) |
| 行フィルタ | ユーザーはどの*行*にアクセスできますか? | クエリ実行時に各行を評価する SQL ユーザー定義関数 (UDF)(関数が FALSE を返す行はクエリ結果から除外される) |
| 列マスキング | どの*列を*、どのようにマスキングすべきですか? | 列値を入力として受け取り、元の値またはマスクされたバージョンを返す SQL UDF |
権限管理の第一歩はオブジェクト権限です。SELECT 権限がないと、Genie はエンドユーザーに代わってテーブルを照会できません。ただし、テーブルへのアクセス権を与えるからといって、すべての権限を付与する必要はありません。その上で行フィルタや列マスクを重ねることで、地域マネージャーが注文テーブルを照会しても、自分の地域の行しか表示されず、顧客の生データであるメールアドレスを見ることもありません。これらの行・列制御は、すでに権限で使っているグループ(is_account_group_member('brickstore_apac') など)に基づいて動作します。
次に取り上げる ABAC はこれらを置き換えるものではなく、テーブルごとに設定するのではなく、ポリシーを通じて同じフィルタやマスクを適用するための仕組みです。
ABAC: ポリシーは一度定義すれば自動的に反映される
従来の行・列セキュリティはテーブル単位で実装するのが一般的でした。orders に対して行フィルタを書き付け、別のテーブルには列マスクを設定し、これを延々と繰り返すのです。個別のロジックにはまだ通用しますが、数百ものテーブルにわたって設定すると、見落としや不整合が生じるリスクが高まります。
現在、Unity Catalog で一般利用可能(GA)となった ABAC ポリシー(属性ベースアクセス制御ポリシー)は、管理タグと自動データ分類機能とともに、従来のアプローチを逆転させます。機密データには管理タグ(アカウントレベルでアクセス制御されたキー/バリューペア、例:pii:email)を付与し、「このタグが付与されている箇所には、必ずこの保護措置を適用する」というポリシーを 1 つだけ記述すればよいのです。新しいテーブルはタグが付けられた瞬間に自動的に保護されるため、テーブルごとの個別設定は不要です。
カタログ内のすべてのメール列を保護する、カラムマスクと ABAC ポリシーの組み合わせ(1 文で完結):
各マネージャーが所属グループに基づいて、自地域の注文のみを表示できるようにする、行フィルタと ABAC ポリシーの組み合わせ:
その結果、APAC 担当のマネージャーが注文に関する質問を投げかけると、Genie エージェントは APAC 地域の行のみを返しますが、customer_email はマスクされた状態で表示されます。一方、AMER 担当のマネージャーが同じテーブルを検索すると、AMER 地域の行だけが取得されます。
ステップ 2: ドキュメントへのガバナンス拡張
従来、構造化データとは異なり、非構造化データを扱う際のチームに対するガバナンス戦略はより困難でした。構造化データはデータウェアハウスやデータベース内で安全に管理される一方、ドキュメントは多くの場合、別の ACL(アクセス制御リスト)によって管理された孤立したストレージシステム内に保管されているのが実情です。
構造化データと同じガバナンス平面内にファイルを配置することが解決策です。ファイルを Unity Catalog Volumes に格納すれば、他のリソースと同様にセキュリティ管理対象となります。必要なグループやユーザーに対して GRANT READ VOLUME を実行し、Genie は同じアイデンティティ契約の下でこれらのデータを推論します。
エージェントを設計する前に知っておくべき動作があります。ボリュームを Genie エージェントにアタッチすると、それが必須のデータソースとして扱われます。つまり、エージェントが読み込まれる際にアタッチされたすべてのソースに対するアクセス権限を検証するため、READ VOLUME 権限を持たないユーザーは、そのエージェントを利用することさえできません。言い換えれば、文書へのアクセス権限は「エージェント利用の前提条件」として機能します。したがって、各エージェントが扱う文書ソースは、実際にそのエージェントを使用すべき対象者に限定する必要があります。もし異なるグループがそれぞれ別の文書を必要とする場合、それらのグループに別々の Genie エージェント(ユーザーが読み取り可能なボリュームのみをマウントする)を用意する必要があります。
また、Unity Catalog Volume はセキュリティ管理の最小単位である点にも注意が必要です。権限は個々のファイルではなく、ボリューム全体に対して適用されます。特定のファイルだけを共有して選択的にアクセスさせることはできず、ボリューム全体へのアクセス権を与えるか、全く与えないかの二者択一となります。
これらの考慮事項を踏まえると、Genie エージェントに知識源としてボリュームを追加する際、テーブルやビューの場合と同様に直接接続できます。Genie エージェントは PDF 以外のファイルも広く読み取ることができ、サポートされている形式には、PDF、画像ファイル(JPG、JPEG、PNG、TIFF、TIF)、Office ドキュメント(DOC、DOCX、PPT、PPTX)、およびプレーンテキストや Markdown が含まれます。つまり、スキャンされた契約書、スライド資料、仕様書など、きれいな PDF だけでなく多様なドキュメントを扱うことが可能です。(完全な形式リストと現在の制限については、Genie エージェントのボリュームに関するドキュメントをご覧ください。)
正確なルーティングと最適なパフォーマンスを実現するためには、ボリュームの設定において以下のベストプラクティスに従ってください。
明確な説明を追加する:ボリュームにどのようなコンテンツが含まれ、どのように構成されており、エージェントがそれをどう活用すべきかを具体的に記述してください。"地域別ファイル"といった汎用的なプレースホルダーは使用せず、例えば「APAC 市場レポート(同地域の需要要因、トレンド、注目項目)」のように詳細を明記します。Genie はこの説明に基づいて適切なボリュームを選択します。
重複するコンテンツを避ける:重複する情報を含む複数のボリュームを添付すると、エージェントが関連文書を取得しにくくなります。これはボリューム内の個々のファイルについても同様です。
無関係なファイルを排除する:エージェントのドメインに関連するファイルのみを含めてください。無関係なファイルはエージェントを混乱させます。
明確なファイル名を使用する:エージェントがファイルを区別できるよう、説明的なファイル名を使いましょう。
ステップ 3:本番環境における Genie エージェント——同じ質問でも異なる回答
この時点で、Genie エージェントは構造化データと非構造化データの両方に完全アクセスできる真のドメインエキスパートとして機能するようになります。基盤となるナレッジベースは、ユーザーごとの権限に基づいた行フィルタ、列マスク、ボリューム付与によって引き続き厳格に保護されています。
本番環境での実装をベンチマークするため、同じ質問に対して 2 人の異なるユーザーが回答を取得するテストを行います。この場合、正解はユーザーごとに一意であるべきです。
2 つの並行する Genie エージェントセッションを想定してください。どちらも同じ資産、すなわち orders テーブル、products カタログ、そして market_report 量に基づいて動作しています。
brickstore_apac に所属するリクエスト者と、brickstore_amer に所属するリクエスト者がいますが、両者とも全く同じクエリを送信しています。
「今四半期の売上トップ製品は何で、その需要を牽引している要因は何か?また、その売上の背後にある上位顧客とメールアドレスも一覧してください。」
APAC マネージャー向けの回答 1
AMER マネージャー向けの回答 2
ここで注目すべき点は三つあります。
数値は異なりますが、どちらも正しい結果です。両方のマネージャーが実行した「トップセラーのブロック」クエリは、同じテーブルからデータを取得しています。違いが生じるのは、各ユーザーがアクセスできる行の範囲のみであり、指標の計算方法に差異があるわけではありません。
このフィルタリングには、ユーザーごとのプロンプトエンジニアリングは一切必要ありません。「APAC 地域のユーザーなら他地域を非表示にする」といった指示を誰かが記述したわけではありません。エージェントへの指示は完全に統一されています。Unity Catalog がクエリ実行時にフィルタリングを担当し、行レベルと列レベル(マスク処理)の両方に対応しました。特に、個人情報保護のため「email」列にはマスキングが適用されている点にもご注ください。
- 構造化データに非構造化知識を融合させる。 地域ごとのドキュメントがなければ、Genie は「何」という問いには容易に答えられたかもしれませんが、需要を押し上げる要因を特定するのは難しかったでしょう。しかし、非構造化データを利用可能にすることで、Genie はビジネス全体を包括的に把握できるようになります。
注目のパターン
このブログで得た知見を実環境に適用する際に、特に注意すべきパターンをいくつか紹介します。
- タグ付けとポリシー定義はセットで。テーブル単位でのマスキングは避けるべきです。 眼前にある3つのテーブルだけをセキュリティ設定しようとする衝動を抑えましょう。データガバナンスの将来性を担保するため、管理されたタグとABAC(属性ベースアクセス制御)ポリシーを事前に定義してください。
- ボリュームごとに対象者を1つに絞る。 ボリュームが最小限の権限付与単位となるため、ドキュメントへのアクセス権はボリューム境界で決定する必要があります。2つのドキュメントで閲覧者が異なる場合は、それぞれ別々のボリュームとGenie Agentを用意し、レイアウト設計を事前に計画してください。
- MCPやAPI経由でGenie OneやGenie Agentsを外部公開する際は慎重に。 Databricks UI を介して実行する場合とは異なり、エンドユーザーのID(例:サービスプリンシパルによる認証時など)を引き継げないケースがあります。適切なパターンを採用し、Databricks の「Access Genie everywhere」で U2M、M2M、OBO 設定の詳細を確認してください。
- 監査ではなくなりすましテストを行う。 ポリシーを読み込んで「これで正しい」と納得するのではなく、各グループのメンバーが同じ質問をした際の回答を比較してガバナンスを検証してください。これは回帰テストとして位置づけ、ポリシーやグループ構成に変更があった際に必ず実行するようにしましょう。
重要なポイント
エージェントの構築自体は容易ですが、それを適切に管理するには本格的な設計が必要です。Databricks では、エンタープライズユーザーの身元を IdP から同期し、オブジェクト権限でアクセスを制限します。ABAC(属性ベースアクセス制御)とガバナンスタグによって大規模な保護を実現し、行フィルタや列マスクで返されるデータを細かく制御。さらに、ドキュメントもデータと同じシステム内に保持されます。
この構成により、Genie エージェントは追加設定なしで、すべてのガバナンス機能を自動的に継承します。
最初にガバナンス対応の Genie エージェントを構築するには、Genie ドキュメンテーション と ABAC ポリシー ドキュメンテーション をご覧ください。
原文を表示
Building an agent to automate simple business tasks can be easy. But creating one that actually understands your business and respects your existing data governance is much harder.
For a long time, teams had to use separate systems to analyze structured and unstructured data, often spending weeks just to bridge the two. By enabling analysis directly from tables and unstructured files, Genie Agents simplify this architecture, allowing you to ground a single agent with both structured and unstructured data.
As you consolidate this data, a critical question emerges: if one agent has access to everything, what stops it from telling the wrong person the wrong thing?
The good news is that with Databricks, the answer exists within the data governance foundation you already have. The same Unity Catalog mechanisms you rely on today (identity sync, object privileges, ABAC, row filters, and column masks) automatically govern Genie Agents without any additional setup. This seamless inheritance relies on a well-architected governance strategy, which we will explore in detail.
To bring these concepts to life, we will walk through these scenarios using examples from Brickstore, a fictional global brick retailer, as a reference point.
The governance contract: Genie Agents run with the end user’s credentials
The core architectural principle is simple: Genie Agents run with the end user’s credentials. Unity Catalog enforces governance by default, ensuring that access to tables and volumes are tied directly to the end user's existing identity and permissions.
This is critical, because many homegrown systems grant agents broad access and rely on prompt engineering to filter results at the model layer. This effectively makes the LLM your security perimeter—a dangerous bet, given that models can be manipulated or bypassed. Telling an auditor that "I added instructions that said to not to show restricted data" is not a defensible governance control.
With the governance framework outlined in this article, Unity Catalog, not the model, remains your security perimeter, just as it does across the rest of Databricks. While Genie determines *how* to query the data, it is incapable of returning a record the end-user is not authorized to see, as every answer is filtered at the data layer before it ever leaves the Lakehouse.
Step 0: It starts with identity: Automatic Identity Management (AIM) and Just-in-Time (JIT) provisioning
The architectural foundation begins with ensuring your enterprise identities are both precise and current.
Access controls are fundamentally only as reliable as the identities they evaluate. A policy that says "members of brickstore_apac can only see APAC orders" is meaningless if your group memberships in Databricks are a stale, hand-maintained copy of what's in your identity provider.
Automatic Identity Management for Microsoft Entra ID and Okta closes that gap. When enabled, users, groups, group memberships, and service principals sync from those identity providers into Databricks automatically, with no SCIM application required. Just-in-time provisioning is always on, so a user who has never logged into Databricks is provisioned on first login and arrives already carrying their existing group memberships.
Here is the flow step-by-step:
- IdP is the source of truth. Someone joins the APAC sales org; your Identity Provider puts them in the brickstore_apac group.
- AIM syncs that into Databricks — including the group membership. JIT provisions the user on Databricks the first time they open Genie One.
- Unity Catalog policies key off those groups — object privileges, ABAC policies, row filters, and column masks all evaluate group membership at query time.
- The user asks a Genie Agent a question, and the answer is shaped exactly by what their group permission allows. No more, no less.
The payoff is that governance is *continuous*, not a point-in-time setup. When an employee transfers from APAC to AMER, the IdP moves them between groups, the sync propagates it, and the very next question they ask Genie returns the AMER view — without anyone filing a ticket or making changes to the Genie Agent. When the employee leaves the company, they are deactivated from the IdP and their access to every Genie Agent is immediately removed.
Step 1: Grounding structured data and controlling four layers of access
Once identities are properly established, we can now focus on what they’re allowed to see. For structured data, a Genie Agent can access any Unity Catalog data asset—tables, views, materialized views, metric views, streaming tables, and even foreign tables federated from external systems.
For example, Delta tables are the facts and dimensions. In Brickstore that's brickstore.sales.orders (every order, with a region and a customer_email) and brickstore.sales.products (the brick catalog). Metric Views are the governed semantic layer on top — they encode the *definitions* of your business metrics (e.g. what "net revenue" means, how "bricks sold" is calculated, what counts as a "top-selling brick") once, in YAML, so every consumer computes them the same way.
On top of those assets sit four layers of access control that people routinely blur together:
| Layer | Question it answers | Mechanism |
|---|---|---|
| Object Privileges | Who has what level of access to what resource? | GRANT SELECT on the catalog/schema/table |
| Attribute-Based Access Control (ABAC) | Which policy applies, and to what? | Governed-tag-driven policies that attach once and propagate (ex: any column with the tag "PII" is only available to certain groups) |
| Row filters | Which *rows* does a user have access to? | SQL user-defined function (UDF) that evaluates each row at query time (rows where the function returns FALSE are excluded from query results) |
| Column Masks | Which *columns should be masked and how?* | SQL UDF that takes the column value as input and returns the original value or a masked version |
Object privileges is the first layer of access: without SELECT, Genie can't query the table on the end user’s behalf. But granting access to a table doesn't mean you need to grant *all* of it. You layer row filters and column masks on top of those grants, so a regional manager can query the orders table while only ever seeing their own region's rows and never the raw customer email. Those row and column controls key off the very same groups your grants already use — is_account_group_member('brickstore_apac') and the like. ABAC, up next, doesn't replace any of this; it's just a way to *attach* the same filters and masks by a policy instead of table-by-table.
ABAC: define the policy once, let it propagate
The old way to do row and column security was per-table: write a row filter, attach it to orders; write a column mask, attach it to another table; repeat forever. It still fits one-off logic, but across hundreds of tables it's a gap-prone configuration.
ABAC policies, which are now GA in Unity Catalog along with governed tags and automated data classification, invert that. You tag sensitive data with governed tags (account-level, access-controlled key/value pairs like pii:email), and you write *one* policy that says "wherever this tag appears, apply this protection." New tables inherit the protection the moment they're tagged, so there is no per-table work.
A column mask + ABAC Policy that protects every email column in the catalog, in one statement:
And a row filter + ABAC Policy so each manager sees only their region's orders, driven by group membership:
The result: the APAC manager asks a question about orders and the Genie Agent returns APAC rows only, with customer_email masked. The AMER manager queries the same table and gets AMER rows.
Step 2: Extending the same governance to documents
Historically, the governance strategy for teams has been more challenging when dealing with unstructured data. While structured data is securely managed in a data warehouse or a database, documents are often kept in an isolated storage system governed by separate ACLs.
The fix is to keep files *inside* the same governance plane as your structured data. You can land them in Unity Catalog Volumes and they become securables like everything else. You GRANT READ VOLUME to the groups and users that should see them, and Genie reasons over them under the same identity contract:
One behavior is worth understanding before you design your agent: when you attach a volume to a Genie Agent, it becomes a required source. This means that the agent validates access to *every* attached source when it loads, so a user who lacks READ VOLUME on an attached volume can't use that agent at all. In other words, volume grants govern documents as a prerequisite to using the agent so make sure to scope each agent's document sources to the audience that should use that agent. If two audiences need different documents, you may need to give them different Genie Agents (each mounting only the volumes that the user can read).
Also keep in mind that a Unity Catalog Volume is the smallest securable unit, so permissions apply to the entire volume rather than to individual files. You cannot pick and choose specific files to share; you must grant access to the entire volume or none of it.
With these considerations in mind, volumes can be attached directly to Genie Agents as a knowledge source in the same way you would do so for a table or view. Genie Agents read well beyond PDFs — supported formats include PDF, image files (JPG, JPEG, PNG, TIFF, TIF), and Office documents (DOC, DOCX, PPT, PPTX), along with plain text and Markdown. In practice that means scanned contracts, slide decks, and spec sheets are all fair game, not just clean PDFs. (See the Genie Agents volumes documentation for the full list and current limits.)
To ensure accurate routing and optimal performance, follow these best practices for configuring your volumes:
- Add a clear description: Describe exactly what content the volume contains, how it is organized, and how the agent should use it. Do not use generic placeholders. For example, instead of "regional files," use "APAC market report — demand drivers, trends, and watch items for the APAC region." Genie relies on this description to select the right volume.
- Avoid duplicate content: Attaching multiple volumes that contain overlapping information makes it harder for the agent to retrieve relevant documents. The same applies to individual files within a volume.
- Avoid irrelevant files: Include only files that are relevant to the agent's domain. Irrelevant files can confuse the agent.
- Use clear file names: Use descriptive file names so the agent can distinguish between files.
Step 3: Genie Agents in production: Same question, different answers
At this point, the Genie Agent is fully empowered to act as a true domain expert - with full access to both structured and unstructured data. The underlying knowledge base is still thoroughly protected by row-filters, column masks, and volume grants based on per-user permissions.
We benchmark our implementation by testing it with two different users asking the exact same question, which should yield two uniquely correct responses.
Consider two concurrent Genie Agent sessions, both grounded in the identical assets—the orders table, the products catalog, and the market_report volume. While one requester belongs to brickstore_apac and the other to brickstore_amer, they both submit the exact same query:
*"Which product is our top seller this quarter and what's driving that demand? Also list the top customers behind those sales and their emails."*
Response 1 - for the APAC Manager
Response 2 - for the AMER Manager
There are three things worth pointing out:
- The numbers are different, and both are correct. Both managers' "top-selling bricks" query pull data from the same tables — the difference is purely the rows each is entitled to, not a difference in how the metric was computed.
- The difference required zero per-user prompt engineering. Nobody wrote "if the user is APAC, hide other regions." The agent's instructions are identical. Unity Catalog did the filtering at query time — both on the rows and the masked column. Notice that the email column is masked to protect PII.
- Structured data, enriched by unstructured knowledge. Without the regional docs, Genie may have been able to identify the “what” question easily, but would’ve struggled to figure out what factors are fueling the demand. With unstructured data available, Genie has full context into the business.
Patterns to watch for
A few patterns to watch out for as you push the learnings from this blog to production:
- Tag, then policy. Don't mask table-by-table. The instinct is to secure the three tables in front of you. Resist it. Define governed tags and ABAC policies to future-proof your data governance.
- One audience per volume. Because the volume is the smallest grantable unit, decide document access at the volume boundary. If two documents need different readers, they need different volumes and different Genie Agents — plan the layout upfront.
- Be careful when surfacing Genie One or Genie Agents externally via MCP or API - you must handle identity carefully. Unlike running it through the Databricks UI, you are not always granted to use the end user’s identity (ex: when using a Service Principal for auth). There are specific patterns to adopt, and Databricks details the U2M, M2M, and OBO configurations in Access Genie everywhere.
- Test by impersonation, not inspection. Don't validate governance by reading the policy and convincing yourself it's right — ask the same question as a member of each group and compare the responses. Make it a regression test and run it whenever policies or groupings change.
The takeaway
Building an agent can be easy, but governing it takes real design work. In Databricks, Enterprise identities are synced from the IdP, object privileges gate access, ABAC and governed tags apply protection at scale, row filters and column masks control what comes back, and documents are kept in the same system as the data.
With this setup, Genie Agents inherit all of the governance without any additional configuration.
To get started building your first governed Genie Agent, visit the Genie documentation and theABAC policies documentation.
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み