
READ UNREDACTED AI OBSERVABILITY EVENTS TABLE権限による会話履歴・フィードバックの取得制御を確認する
データ事業本部の鈴木です。
2026年4月24日から新しいアカウント権限としてREAD UNREDACTED AI OBSERVABILITY EVENTS TABLEが追加されました。
この変更により、権限が付与されていないロールによるSNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTSからの、ツールの入力と出力全体・会話テキスト全体・ユーザーフィードバックテキストが取得できなくなりました。
ちょうど私もCortex Agentsの会話履歴やフィードバックを確認する検証をしていたのですが、「あれっ、会話履歴やフィードバック内容が取れなくなったなー」と思っていました。
この権限を追加すれば見られるようになったので、付与の例をご紹介します。
Cortex Agentsの会話履歴・フィードバックを取得する
AI Observabilityの生データはSNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTSに保存されます。今回READ UNREDACTED AI OBSERVABILITY EVENTS TABLEが追加されたことで、今までの権限付与にプラスした、ツールの入力と出力全体・会話テキスト全体・ユーザーフィードバックテキストの取得に関するセキュリティ設定が可能になりました。
会話履歴・フィードバックはSQLではGET_AI_OBSERVABILITY_EVENTSで取得できます。
例えば、ユーザーフィードバックは以下のように取得できることが案内されています。
-- https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-monitor
SELECT *
FROM TABLE(SNOWFLAKE.LOCAL.GET_AI_OBSERVABILITY_EVENTS(
'<database_name>',
'<schema_name>',
'<agent_name>',
'CORTEX AGENT'
))
WHERE RECORD:name = 'CORTEX_AGENT_FEEDBACK';
今回は、READ UNREDACTED AI OBSERVABILITY EVENTS TABLEの権限有無で、クエリ結果がどのように変わるか確認します。
事前準備
ログを確認するためのエージェントをAI_OBSERVABILITY_TEST_AGENT1とAI_OBSERVABILITY_TEST_AGENT2の2つ作成しました。

それぞれ、会話とフィードバックを作成しておきました。
▼エージェント1


▼エージェント2

クエリのためのAI_OBSERVABILITY_ROLEロールを作成しました。
まずは一通りの権限を付与しました。
-- ロールを作成
USE ROLE SECURITYADMIN;
CREATE ROLE IF NOT EXISTS AI_OBSERVABILITY_ROLE;
-- Snowflake Cortexの機能へのアクセス権(デフォルトでPUBLICロールに付与)
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER
TO ROLE AI_OBSERVABILITY_ROLE;
-- エージェント1のMONITOR権
GRANT USAGE ON DATABASE エージェントのあるデータベース名 TO ROLE AI_OBSERVABILITY_ROLE;
GRANT USAGE ON SCHEMA エージェントのあるデータベース名.エージェントのあるスキーマ名 TO ROLE AI_OBSERVABILITY_ROLE;
GRANT MONITOR ON AGENT エージェントのあるデータベース名.エージェントのあるスキーマ名.AI_OBSERVABILITY_TEST_AGENT1
TO ROLE AI_OBSERVABILITY_ROLE;
-- READ UNREDACTED AI OBSERVABILITY EVENTS TABLE付与
USE ROLE ACCOUNTADMIN;
GRANT READ UNREDACTED AI OBSERVABILITY EVENTS TABLE
ON ACCOUNT
TO ROLE AI_OBSERVABILITY_ROLE;
以下のように付与されました。

GET_AI_OBSERVABILITY_EVENTSの実行結果
READ UNREDACTED AI OBSERVABILITY EVENTS TABLEの有無で、会話履歴・フィードバックの見え方が変わるか確認しました。
READ UNREDACTED AI OBSERVABILITY EVENTS TABLE権限を付与したとき
以下のように会話履歴・フィードバックが確認できました。
SELECT
*
FROM TABLE(
SNOWFLAKE.LOCAL.GET_AI_OBSERVABILITY_EVENTS(
'エージェントのあるデータベース名',
'エージェントのあるスキーマ名',
'エージェント名',
'CORTEX AGENT'
)
);

READ UNREDACTED AI OBSERVABILITY EVENTS TABLE権限を付与していないとき
以下でREAD UNREDACTED AI OBSERVABILITY EVENTS TABLEをREVOKEしてから試しました。
--READ UNREDACTED AI OBSERVABILITY EVENTS TABLEを取り消し
USE ROLE ACCOUNTADMIN;
REVOKE READ UNREDACTED AI OBSERVABILITY EVENTS TABLE
ON ACCOUNT
FROM ROLE AI_OBSERVABILITY_ROLE;
クエリ結果が変わり、会話履歴・フィードバックは表示されませんでした。

補足
MONITORを付与していないときの挙動
先の例はMONITOR権限があるエージェントに対するREAD UNREDACTED AI OBSERVABILITY EVENTS TABLEの有無でのクエリ結果の違いを確認しましたが、READ UNREDACTED AI OBSERVABILITY EVENTS TABLEがある場合にMONITOR権限などの有無で表示される情報が変わるかも確認しておきます。
エージェント2はMONITORを付与していないため、READ UNREDACTED AI OBSERVABILITY EVENTS TABLEがあっても、ログはクエリできませんでした。

USAGEを付与してもクエリできませんでした。
-- エージェント AI_OBSERVABILITY_TEST_AGENT2 向けのUSAGE権限
GRANT USAGE ON AGENT DA_ML_DB.SAMPLE_SCHEMA.AI_OBSERVABILITY_TEST_AGENT2
TO ROLE AI_OBSERVABILITY_ROLE;

このとき、Snowsightだと、エージェントのMonitoringタブではMONITORかOWNERSHIPを付与するように表示されました。

MONITORを付与すれば表示されました。
-- エージェント AI_OBSERVABILITY_TEST_AGENT2 向けのUSAGE権限
GRANT MONITOR ON AGENT データべース名.スキーマ名.AI_OBSERVABILITY_TEST_AGENT2
TO ROLE AI_OBSERVABILITY_ROLE;

特定エージェントの会話履歴を取得するクエリ
ここまでの例では、SNOWFLAKE.LOCAL.GET_AI_OBSERVABILITY_EVENTSのクエリ結果が取得できるかだけを確認しましたが、もう少し実運用向けの加工をしたクエリもご紹介します。
例えば、以下のようにすると良い感じに会話履歴を取得できました。
WITH src AS (
SELECT
TIMESTAMP,
RECORD:name::STRING AS event_name,
RECORD_TYPE,
RECORD_ATTRIBUTES:"snow.ai.observability.agent.thread_id"::NUMBER AS thread_id,
PARSE_JSON(VALUE:"snow.ai.observability.response") AS response_json,
VALUE:"snow.ai.observability.request_body" AS request_body
FROM TABLE(
SNOWFLAKE.LOCAL.GET_AI_OBSERVABILITY_EVENTS(
'データベース名',
'スキーマ名',
'エージェント名',
'CORTEX AGENT'
)
)
WHERE RECORD_ATTRIBUTES:"snow.ai.observability.agent.thread_id" IS NOT NULL
AND event_name = 'CORTEX_AGENT_REQUEST'
)
SELECT
TIMESTAMP,
thread_id,
request_body:messages[0]:content[0]:text::string AS input_text,
f.value:text::STRING AS output_text
FROM src,
LATERAL FLATTEN(input => response_json:content) f
WHERE f.value:type::STRING = 'text'
ORDER BY TIMESTAMP DESC;

READ UNREDACTED AI OBSERVABILITY EVENTS TABLEが不足するとレコードが表示されませんでした。

特定エージェントのフィードバックを取得するクエリ
例えば、以下のようにすると良い感じに会話履歴を取得できました。
WITH base AS (
SELECT
*
FROM TABLE(
SNOWFLAKE.LOCAL.GET_AI_OBSERVABILITY_EVENTS(
'データベース名',
'スキーマ名',
'エージェント名',
'CORTEX AGENT'
)
)
WHERE RECORD_ATTRIBUTES:"snow.ai.observability.agent.thread_id" IS NOT NULL
)
SELECT
TIMESTAMP AS feedback_timestamp,
RECORD_ATTRIBUTES:"ai.observability.record_id"::STRING AS feedback_record_id,
RECORD_ATTRIBUTES:"snow.ai.observability.agent.thread_id"::NUMBER AS thread_id,
RECORD_ATTRIBUTES:"snow.ai.observability.user.name"::STRING AS feedback_user_name,
VALUE:"positive"::BOOLEAN AS positive,
VALUE:"feedback_message"::STRING AS feedback_message
FROM base
WHERE RECORD:name::STRING = 'CORTEX_AGENT_FEEDBACK';

READ UNREDACTED AI OBSERVABILITY EVENTS TABLEが不足するとフィードバック内容が表示されませんでした。

最後に
2026年4月24日から新しく追加されたアカウント権限のREAD UNREDACTED AI OBSERVABILITY EVENTS TABLEの紹介でした。
参考になりましたら幸いです。








