要約版:専門用語を控えて説明しています
どんな仕組みか
たとえば「前四半期にテキサス州で最も売れた商品5つは?」と聞くと、Snowflake内のAIが質問をデータベース用の命令(SQL)に直し、その場で実行します。
AIが広い権限を持つ共通アカウントを使うと、見られないはずのデータが見えてしまう恐れがあります。今回の方法は、利用者ごとの認証を使ってこれを避けます。
使う前に知っておくこと
この方法は、独自のAIエージェントを作る開発者向けです。標準的な直接接続には、別の共同ソリューションが案内されています。
元のテーブルに対する閲覧権限も必要です。足りないと、実行時にエラーになります。
Snowflakeを使っている企業の開発者やデータ担当者は、Gemini Enterpriseのエージェントから、社内データに自然言語で質問できる仕組みを自分たちで組めます。クエリは認証済みユーザーのOAuthセッションとロール権限で実行されるため、権限を考慮したアクセス管理ができます。関係するのは、Google CloudでAIエージェントを開発する人です。
Snowflakeは、企業の売上や顧客データを集めて分析するデータウェアハウス(分析用のデータ倉庫)です。Google Cloud公式ブログの日本語版(原文は米国時間10月28日)は、この倉庫とGemini Enterpriseをつなぐ手順を示しました。
画像:Google Cloud(公式発表)標準の直接接続とは別の、独自開発向けの方法
ブログによると、今回の構成は「高度なカスタム オーケストレーション パターン」にあたります。たとえば、Snowflakeの分析結果を外部の業務ツールと組み合わせる流れや、複数のエージェントが連携する仕組みを作る場合です。
Gemini EnterpriseをSnowflakeに直接つなぐ標準的な使い方には、別の共同ソリューションが案内されています。まずそちらで足りるかを確かめるとよいでしょう。
今回の方法では、Gemini Enterprise側からSnowflakeのデータを呼び出します。Googleの料金ページでは、ADKで構築した独自エージェントの導入は、Standard / Plusエディションの機能として案内されています。
SQLの生成も実行もSnowflake側で行う
質問は、Google Agent Development Kit(ADK、エージェントを作るための開発キット)で作ったエージェントが受け取ります。エージェントはそれをMCP(AIが外部のツールを呼び出すための共通の規格)のサーバー経由で、Snowflake側のCortex Agentに渡します。
Cortex Agentは、質問をSQLに変換します。そのSQLは、認証済みユーザーのOAuthセッションとロール権限で、Snowflake内で直接実行されます。結果は構造化された形でエージェントに返ります。
ブログは、この方式でスキーマのハルシネーション(存在しない表や列を作ってしまう誤り)と、検証されていないSQLの実行のリスクが軽くなると説明しています。変換は、企業が定義したセマンティックビュー(指標や表の意味を定めた層)に基づきます。
設定の7ステップと権限の注意点
手順は次の7つです。
- Snowflakeで、OAuthの機密クライアントとなるセキュリティインテグレーションを作ります。更新トークンの有効期間は、Snowflakeの上限の90日(7776000秒)に設定します。
- エージェント専用のロールを作り、最小権限で必要なデータベース、スキーマ、ウェアハウスの利用権を与えます。
- セマンティックビュー上でCortex Agentを作り、CORTEX_AGENT_RUNのツールとして公開するMCPサーバーを用意します。
- エージェントとMCPサーバーの利用権を与え、DESCRIBE MCP SERVERでエンドポイントのURLを調べます。
- PythonでADKのエージェントを書きます。モデルにはgemini-2.5-flashを使っています。
- 指定のフォルダー構成にして、agents-cli deployで、Agent Platform上のAgent Runtimeにデプロイします。
- Google CloudコンソールのGemini Enterpriseのページで、カスタムエージェントを登録し、OAuthの情報を設定します。
特に注意が要る点が3つあります。
- セマンティックビューだけに権限を与えても足りません。元の物理テーブルへのSELECT権限がないと、実行時にエラーになります。
- 元のテーブルへの直接アクセスをセキュリティ方針で禁じている場合は、その上にセキュアビューを置き、さらにその上にセマンティックビューを作ります。利用者のロールには、セキュアビューとセマンティックビューへの権限だけを与えます。
- OAuthトークンは、認可した時点のデフォルトのロールとウェアハウスに固定されます。認可の前に、ALTER USERでデフォルトを設定しておく必要があります。認可のあとは、元の設定に戻せます。
SYSTEM_EXECUTE_SQLのような、未加工のSQL実行ツールは外部のクライアントに公開しないよう、ブログは求めています。公開すると、Cortex Agentによる一元管理を迂回できてしまうためです。
判断ガイド
標準の接続と独自開発、どちらにするか
状況ごとのおすすめと理由です。どれを選ぶかは、ご自身の状況で決めてください。
Gemini EnterpriseとSnowflakeを、この方法でつなぐべき?
- 状況
- 標準的な直接接続で足りる場合
- おすすめ
- まず共同ソリューションの案内を確認する
- 理由
- ブログは、基本的なユースケースには共同ソリューションを使うよう案内しています。この方法は、分析結果を外部ツールと組み合わせる高度な構成向けです。
- 出どころ
- 出典・cloud.google.com
- 状況
- 複数のエージェントや外部ツールと組み合わせて独自に作る場合
- おすすめ
- この7手順の構成を検討する価値がある
- 理由
- 独自のエージェントを開発する人向けの構成です。ブログのコードは標準版で、エラー処理や構造化スキーマは自社の要件に合わせて足すことが勧められています。
- 出どころ
- 出典・cloud.google.com
元のテーブルへの直接の権限を与えるべき?
- 状況
- 元テーブルの直接アクセスをセキュリティ方針で禁じている
- おすすめ
- セキュアビューを挟む方針を検討する
- 理由
- セキュアビューはオーナーの権限で実行され、利用者はセキュアビューとセマンティックビューへの権限だけで済むとされています。セマンティックビューだけでは実行時エラーになります。
- 出どころ
- 出典・cloud.google.com
不安Q&A
権限は本人のまま?見えすぎない?
Q見せてはいけないデータまで、AIの答えに出てしまわない?▾
答えは、質問した本人のOAuthセッションとロール権限で、Snowflake内で実行されたSQLの結果だけです。本人の権限の範囲でしか答えが返らない仕組みだと書かれています。
出典・cloud.google.com今できることSnowflakeの利用者ロールには、本人が見てよいテーブルとビューへの権限だけを与えているか確かめる
Q承認したあとで、クエリが失敗することはある?▾
あります。承認の時点のデフォルトのロールとウェアハウスにトークンが固定されるため、デフォルトが未設定のまま承認すると、必要な権限のないロールに固定されてエラーになると書かれています。
出典・cloud.google.com今できることGemini Enterpriseで承認する前に、ALTER USERでデフォルトのロールとウェアハウスを設定しておく
Q接続の鍵(更新トークン)は、いつまで有効?▾
更新トークンの有効期間は最大90日(7776000秒)と書かれています。期限が切れたあとにどう再認可するかは、このページには書かれていません。
出典・cloud.google.com今できることセキュリティインテグレーションの設定で、OAUTH_REFRESH_TOKEN_VALIDITY の値を確かめておく
Q未加工のSQLを、外から実行されてしまう心配は?▾
ブログは、SYSTEM_EXECUTE_SQLのような未加工のSQL実行ツールを外部のクライアントに公開しないよう求めています。公開すると、Cortex Agentによる一元管理を迂回できてしまうためです。
出典・cloud.google.com今できることMCPサーバーに公開するツールは CORTEX_AGENT_RUN だけにし、未加工のSQL実行ツールは含めない
日本での提供と料金はどこまで分かる?
- ブログには、Gemini Enterpriseのカスタムエージェント機能の日本での提供については書かれていません。
- この構成で発生する追加料金は、ブログには記載されていません。Googleの日本向け料金ページでは、Gemini EnterpriseのBusinessエディションは1ライセンス月額$21から、ADKで構築した独自エージェントを導入できるStandard / Plusエディションは1ライセンス月額$30からと案内されています。
料金の詳しい比較は Geminiの有料プランは月額¥725から。無料との違いを料金で確認 へ
OAuthの認可名とURIを確認する
OAuthの認可画面の設定では、ADKのコードに書いたAUTH_ID(例はsnowflake_oauth_conn)と同じ名前を、認可名に入力します。Client IDとClient secretは、SYSTEM$SHOW_OAUTH_CLIENT_SECRETSで取得します。Token URIとAuthorization URIは、DESCRIBE SECURITY INTEGRATIONの結果から取ります。
Authorization URIには、認可コードフローに必要なresponse_type=codeを追加します。ほかのパラメータがある場合は「&response_type=code」、ない場合は「?response_type=code」です。
ブログのコードは標準版です。エラー処理や構造化スキーマなどは、自社の要件に合わせて足すことが勧められています。