Cortex Agentsに問い合わせする際に、集計ポリシーがロールに応じて適用されるか確認する

Cortex Agentsに問い合わせする際に、集計ポリシーがロールに応じて適用されるか確認する

Snowflakeのデータ保護ポリシーがCortex Agentsを介したクエリにも適用されるか、集計ポリシーを例に検証してみました。
2026.06.08

データ事業本部の鈴木です。
データ保護ポリシーの例として集計ポリシーを題材に、Cortex Agentsを介して実行されるクエリにも適用されるか検証をしました。

はじめに

Snowflakeではデータ保護ポリシーにより、ロールに応じてデータの利用を制御することが可能です。
例えば以下のように集計ポリシーなどがあります。

https://docs.snowflake.com/ja/user-guide/aggregation-policies

これらの用途は長らく人間のアナリストを意識したものでしたが、SnowflakeではCortex Agentsなど非常に強力なデータ分析向けAIエージェント機能が備わっており、ここ数年でAI向けのデータ保護も考える必要がでてきました。

Cortex AgentsはAPIやMCPサーバーからでも問い合わせできますが、Snowflake CoWork(旧Snowflake Intelligence)から利用するとUIの用意も不要で便利です。
この場合、Snowflake CoWork側のユーザーの認証情報に関連づけられたロールベースのアクセス制御およびデータマスキングポリシーが適用されると以下のガイドに記載があります。

https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-cowork/deploy-agents

集計ポリシーも適用されるのかは分からなかったため簡単に検証をしてみました。

Snowflake CoWorkから検証

1. データの準備

まずはリソースを作成しました。
以下のようにサンプルデータをSnowsightから、作成済みのスキーマにSYSADMINでアップロードしました。テーブル名はPRIVATE_DATAとしました。データはGPT-5.5 Thinkingでダミーのものを生成しました。
今回はこのデータに含まれる出社日数(OFFICE_DAYS)を集計します。

利用するダミーデータ

CM_NAYUTSという検証向けのロールにアクセス権を付与しました。

use role sysadmin;
grant usage on database <検証向けデータベース名> to role CM_NAYUTS;
grant usage on schema <検証向けデータベース名>.<検証向けスキーマ名> to role CM_NAYUTS;
grant select on table <検証向けデータベース名>.<検証向けスキーマ名>.PRIVATE_DATA to role CM_NAYUTS;

2. 集計ポリシーの作成と適用

SYSADMINで以下のように集計ポリシーを作成し、テーブルに付与しました。

create or replace aggregation policy sample_policy
  as () returns aggregation_constraint ->
    case
      when current_role() in ('SYSADMIN', 'ACCOUNTADMIN')
        then no_aggregation_constraint()
      else
        aggregation_constraint(min_group_size => 3)
    end;

alter table <検証向けデータベース名>.<検証向けスキーマ名>.PRIVATE_DATA
  set aggregation policy agg_sales_sample_policy
  entity key (PERSON_ID);

これで集計ポリシーが適用され、以下のようにロールによって集計時に制約が適用されるようになりました。

▼SYSADMINから集約クエリを実行したとき

SYSADMINから集約クエリを実行したとき

SYSADMINからSELECTクエリを実行したとき

▼SYSADMIN以外のロールから集約クエリを実行したとき

SYSADMIN以外のロールから集約クエリを実行したとき

SYSADMIN以外のロールからSELECTクエリを実行したとき

3. セマンティックビューの作成

続いて、セマンティックビューを作成しました。今回はSYSADMINでAuto Pilotから作成しました。

セマンティックビューを作成

CM_NAYUTSからも使えるようにSELECTを付与しました。

GRANT SELECT ON SEMANTIC VIEW <検証向けデータベース名>.<検証向けスキーマ名>.PRIVATE_DATA_SEMANTIC_VIEW TO ROLE CM_NAYUTS;

ちなみに、今回のような作り方をするとセマンティックビューのサンプル値に生の値が入るため気をつけましょう。

セマンティックビューのサンプル値

以下のガイドにも記載があります。

https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-dev#limit-access-with-masking-policies-and-row-access-policies

4. Cortex Agentsでエージェントの作成

準備の最終段階として、エージェントを作成し、セマンティックビューを利用できるようCortex Analystツールを設定しました。

エージェントを作成

セマンティックビューをツールとして設定

5. 集計ポリシーの検証

ついにクエリをする用意ができたので、Snowflake CoWorkから集計ポリシーが適用されるのか確認しました。
CoWorkの画面で、SYSADMINとCM_NAYUTSでロールを切り替えてそれぞれ問い合わせを実行しました。

▼SYSADMINのときは集計ポリシーを適用しない分析ができた

SYSADMINのとき

▼SYSADMINではないときは集計ポリシーが適用された

SYSADMINではないとき

なお、ロールはSnowflake CoWorkの設定メニューで切り替えをしました。

Snowflake CoWorkの設定メニュー

SnowSightからの検証(補足)

APIなどからCortex Agentsにリクエストすることもあるため、SnowSightから直接Cortex Agentsを使う例も確認しました。

1. Cortex Agentsからツールを利用する際の権限

Snowflake CoWorkの場合と同様と考えられますが、記事執筆時点ではドキュメント上はSnowSightでスイッチしているロールを使うと明記自体はされていません。
ただし、以下のガイドにCortex Agentsがツールを利用する際に必要な呼び出し元のユーザーの権限は明記されています。

https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents#access-control-requirements

https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents#cortex-search-service

Cortex Searchサービスは呼び出し元のロールにUSAGE権限が必要でした。Cortex Analystの場合はセマンティックビューの元となっているテーブルにもUSAGEが必要でした。
今回の検証用のロールにはこれらを付与しておきました。

2. 集計ポリシーの検証

Cortex Agentsの動作確認用のチャット機能で集計ポリシーが適用されるか確認しました。
こちらもSnowflake CoWorkのときと同様に集計ポリシーが適用されました。

▼SYSADMINのときは集計ポリシーを適用しない分析ができた

SYSADMINのとき

▼SYSADMINではないときは集計ポリシーが適用された

SYSADMINではないとき

最後に

Cortex Agentsを介して実行されるクエリに集計ポリシーが適用されるか検証をしました。
参考になりましたら幸いです。


Snowflakeの導入支援はクラスメソッドに!

クラスメソッドでは Snowflake の導入を支援しております。
製品の詳細や支援の内容についてお気軽にお問い合わせください。

Snowflakeの詳細を見る

この記事をシェアする

関連記事