
Cortex Agentsに問い合わせする際に、集計ポリシーがロールに応じて適用されるか確認する
データ事業本部の鈴木です。
データ保護ポリシーの例として集計ポリシーを題材に、Cortex Agentsを介して実行されるクエリにも適用されるか検証をしました。
はじめに
Snowflakeではデータ保護ポリシーにより、ロールに応じてデータの利用を制御することが可能です。
例えば以下のように集計ポリシーなどがあります。
これらの用途は長らく人間のアナリストを意識したものでしたが、SnowflakeではCortex Agentsなど非常に強力なデータ分析向けAIエージェント機能が備わっており、ここ数年でAI向けのデータ保護も考える必要がでてきました。
Cortex AgentsはAPIやMCPサーバーからでも問い合わせできますが、Snowflake CoWork(旧Snowflake Intelligence)から利用するとUIの用意も不要で便利です。
この場合、Snowflake CoWork側のユーザーの認証情報に関連づけられたロールベースのアクセス制御およびデータマスキングポリシーが適用されると以下のガイドに記載があります。
集計ポリシーも適用されるのかは分からなかったため簡単に検証をしてみました。
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以外のロールから集約クエリを実行したとき


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

CM_NAYUTSからも使えるようにSELECTを付与しました。
GRANT SELECT ON SEMANTIC VIEW <検証向けデータベース名>.<検証向けスキーマ名>.PRIVATE_DATA_SEMANTIC_VIEW TO ROLE CM_NAYUTS;
ちなみに、今回のような作り方をするとセマンティックビューのサンプル値に生の値が入るため気をつけましょう。

以下のガイドにも記載があります。
4. Cortex Agentsでエージェントの作成
準備の最終段階として、エージェントを作成し、セマンティックビューを利用できるようCortex Analystツールを設定しました。


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

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

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

SnowSightからの検証(補足)
APIなどからCortex Agentsにリクエストすることもあるため、SnowSightから直接Cortex Agentsを使う例も確認しました。
1. Cortex Agentsからツールを利用する際の権限
Snowflake CoWorkの場合と同様と考えられますが、記事執筆時点ではドキュメント上はSnowSightでスイッチしているロールを使うと明記自体はされていません。
ただし、以下のガイドにCortex Agentsがツールを利用する際に必要な呼び出し元のユーザーの権限は明記されています。
Cortex Searchサービスは呼び出し元のロールにUSAGE権限が必要でした。Cortex Analystの場合はセマンティックビューの元となっているテーブルにもUSAGEが必要でした。
今回の検証用のロールにはこれらを付与しておきました。
2. 集計ポリシーの検証
Cortex Agentsの動作確認用のチャット機能で集計ポリシーが適用されるか確認しました。
こちらもSnowflake CoWorkのときと同様に集計ポリシーが適用されました。
▼SYSADMINのときは集計ポリシーを適用しない分析ができた

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

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





