外部トークン化について

このトピックでは、外部トークン化機能の概要について説明します。

重要

外部トークン化には、Snowflake Standard Edition に含まれている 外部関数 が必要です。また、トークン化プロバイダー(つまり、Protegrity)で外部関数を使用できます。

ただし、トークン化プロバイダーをSnowflake 外部トークン化 統合することを選択した場合は、 Enterprise Edition またはそれ以上にアップグレードする必要があります。

アップグレードについては、 Snowflakeサポート にお問い合わせください。

外部トークン化とは

外部トークン化により、アカウントはデータをSnowflakeにロードする前にトークン化し、クエリ実行時にデータをトークン解除できます。トークン化とは、機密データを解読不能なトークンに置き換えて機密データを削除するプロセスです。外部トークン化は、 外部関数 でマスキングポリシーを利用します。

Snowflakeでは、マスキングポリシーはスキーマレベルのオブジェクトです。つまり、マスキングポリシーを列に適用する前に、Snowflakeにデータベースとスキーマが存在している必要があります。現在、Snowflakeは、テーブルとビューでの動的データマスキングの使用をサポートしています。

クエリの実行時に、マスキングポリシーは、列が表示されるすべての場所で列に適用されます。マスキングポリシーの条件、 SQL 実行コンテキスト、およびロール階層に応じて、Snowflakeクエリオペレーターは、プレーンテキスト値、部分的にマスクされた値、または完全にマスクされた値を表示する場合があります。

クエリ実行時の動作、ポリシーの作成、テーブルとビューでの使用、マスキングポリシーを使用した管理アプローチなど、マスキングポリシーの仕組みの詳細については、 列レベルのセキュリティについて をご参照ください。

SQL 実行コンテキストとロール階層の影響の詳細については、 高度な列レベルのセキュリティトピック をご参照ください。

Snowflakeにロードする前にデータをトークン化することで、機密データが不必要に公開されることがなくなります。外部関数でマスキングポリシーを使用すると、クエリの実行時に適切な対象者だけがトークン化されていないデータを表示できるようになります。

現在、Snowflakeは、Protegrityを使用して、組織内のすべてのデータストア(テーブル、データベース、データウェアハウスなど)の機密データのトークン化を管理することをサポートしています。Snowflakeがマスキングポリシーで外部関数を呼び出すと、 REST API 呼び出しが Protegrity Data Security Gateway (DSG)に対して行われます。

外部関数はSnowflakeでは実行されないため、ご使用の環境でAmazon API Gatewayを有効にし、Snowflakeとそのデータをトークン化するサーバーの間に REST API 統合を作成する必要があります。クエリの実行時に、外部関数を使用したマスキングポリシーが適用される1つ以上の列をクエリが呼び出す場合、Protegrityは列データをトークン化解除してSnowflakeに送り返します。マスキングポリシーにより、指定されたロールのメンバーであるユーザーのみが非トークン化データを表示できるようになります。

外部トークン化の利点

以下は、外部トークン化の主な利点のいくつかをまとめたものです。

トークン化されたデータのプリロード

トークン化プロバイダーを使用して、トークン化されたデータがSnowflakeにプリロードされます。したがって、テーブルまたはビューの列にマスキングポリシーを適用しなくても、実際のデータ値は表示されません。これにより、組織内で最も機密性の高いデータに対するデータセキュリティが強化されます。

使いやすさ

ポリシーを1回記述して、データベースやスキーマ全体の数千の列に適用することができます。

データ管理と SoD

セキュリティまたはプライバシー担当者は、オブジェクト所有者ではなく、保護する列を決定します。マスキングポリシーは管理が容易であり、集中管理モデルと分散管理モデルをサポートします。

データの認証とガバナンス

ロールまたはカスタム資格によるコンテキストデータアクセス。

セキュリティまたはプライバシー担当者が実装するデータガバナンスをサポートし、 ACCOUNTADMIN または SECURITYADMIN のロールを持つ権限ユーザーがデータを不必要に表示することを禁止できます。

変更管理

何千もの列にマスキングポリシーを再適用する必要なく、マスキングポリシーの内容を簡単に変更できます。

動的データマスキングと外部トークン化の利点の比較については、 列レベルのセキュリティの利点 をご参照ください。

外部トークン化の制限

制限の概要については、 列レベルのセキュリティ制限 をご参照ください。

外部トークン化の権限と依存関係

次のテーブルは、外部トークン化マスキングポリシーに関連する権限をまとめたものです。

権限

使用法

APPLY

マスキングポリシーのポリシー設定/設定解除操作の適用を有効にします。

OWNERSHIP

マスキングポリシーの完全な制御を許可するマスキングポリシーの所有権を譲渡します。マスキングポリシーのほとんどのプロパティを変更するために必要です。

注釈

マスキングポリシー上で動作するには、親データベースとスキーマでの USAGE 権限も必要です。

外部トークン化マスキングポリシーには API 統合に依存する外部関数が必要であるため、次のテーブルに、Snowflakeオブジェクトに対するカスタムロール(例: MASKING_ADMIN)が持つ必要のある権限をまとめます。これらの権限はカスタムロールのみに適用され、マスキングポリシーで列をクエリするユーザーのロールには必要ないことに注意してください。

カスタムロール

権限

オブジェクト

外部トークン化ポリシーの所有者

USAGE

外部関数

外部関数の所有者(つまり、外部関数に対する OWNERSHIP 権限を持つロール)

USAGE

外部関数によって参照されるすべての API 統合オブジェクト。

外部トークン化 DDL

Snowflakeは、外部トークン化ポリシーを管理するための以下のコマンドセットを提供します。

外部トークン化の監査

Snowflakeは、ユーザーが実行した元のクエリを 履歴ページ (ウェブインターフェイス内)に記録します。クエリは SQL Text 列にあります。

特定のクエリで使用されたマスキングポリシー名は、 クエリプロファイル にあります。

現在、クエリ履歴は ACCOUNT_USAGE QUERY_HISTORY ビューにのみ固有です。このビューの Query Text 列には、 SQL ステートメントのテキストが含まれています。マスキングポリシー名は、 QUERY_HISTORY ビューに含まれていません。

外部トークン化のトラブルシューティング

エラーメッセージを使用して、マスキングポリシーの問題のトラブルシューティングに役立てることができます。

エラーメッセージ

次のテーブルは、マスキングポリシーの使用中にSnowflakeが返す可能性があるエラーメッセージを示しています。

動作

エラーメッセージ

トラブルシューティングアクション

Snowflake機能にはマスキングポリシーを適用できません。

FAILURE :サポート対象外機能 CREATE ON MASKING POLICY COLUMN

現在、マスキングポリシーはこの機能には適用されません。

アクティブなロールは、マスキングポリシーを作成または置き換えることはできません。

FAILURE : SQL アクセス制御エラー:アカウント <アカウント名> を操作するには権限が不十分です

grant create masking policy on account to role <role_name>; を使用して指定のロールに CREATE MASKING POLICY 権限を付与します。 . show grants to role <role_name> を使用して、テーブルをクローンするロールに権限が付与されていることを確認し、 CREATE OR REPLACE ステートメントを再試行してください。

特定のロールは、マスキングポリシーをテーブルに添付できません。

FAILURE : SQL コンパイルエラー:データベース <データベース名> が存在しないか、許可されていません。

grant apply masking policy on account to role <role_name>; の使用による、ロールへの APPLY MASKING POLICY 権限の付与

テーブルにマスキングポリシーを所有していない特定のロールは、使用できるテーブルにマスキングポリシーを適用しようとします。

FAILURE : SQL コンパイルエラー:マスキングポリシー <ポリシー名> が存在しないか、許可されていません。

grant apply on masking policy <policy_name> to role sysadmin; を使用して、マスキングポリシーで特定のロールの使用を許可する

drop masking policy <policy_name>; を使用した、ポリシーのドロップまたは削除は不可

FAILURE : SQL コンパイルエラー:ポリシー <ポリシー名> は1つ以上のエンティティに関連付けられているため、ドロップまたは置き換えができません。

ALTER テーブル/ビュー MODIFY COLUMN ステートメントを使用して、最初にポリシーを UNSET し、次に DROP ステートメントを再試行してください。

ドロップされたテーブルを復元すると、マスキングポリシーエラーが発生します。

FAILURE : SQL 実行エラー:列 <列名> は、存在しないマスキングポリシーにすでに添付されています。ポリシー管理者に連絡してください。

ALTERテーブル/ビューMODIFY COLUMNステートメントで、現在添付されているマスキングポリシーの設定を解除し、CREATE OR REPLACEステートメントでマスキングポリシーを列に再適用します。

マスキングポリシーを特定の列に適用することはできませんが、マスキングポリシーは別の列に適用できます。

FAILURE :指定された列は、すでに別のマスキングポリシーに添付されています。1つの列を複数のマスキングポリシーに添付することはできません。新しいマスキングポリシーを添付するには、現在の関連付けをドロップしてください。

列に適用するマスキングポリシーを決定し、更新し、再試行します。

ALTER ステートメントを使用したポリシーの更新は失敗します。

FAILURE : SQL コンパイルエラー:マスキングポリシー <ポリシー名> が存在しないか、許可されていません。

マスキングポリシー表示を実行して、ALTER コマンドのポリシー名が既存のポリシーと一致することを確認します。

複製されたテーブル所有者のロールは、マスキングポリシーの設定を解除できません。

FAILURE : SQL アクセス制御エラー: ALTER TABLE UNSET MASKING POLICY '{1}' を操作するには権限が不十分です

grant apply on masking policy ssn_mask to role <role_name>; を使用してテーブルクローンのロールにAPPLY権限を付与します。 . show grants to role table_cloner_role; を使用して、テーブルをクローンするロールに権限が付与されていることを確認し、ALTERステートメントを再試行してください。

IF EXISTS を使用してポリシーを更新すると、正常な結果が返されますが、ポリシーは更新されません。

エラーメッセージは返されません。Snowflakeは正常に実行されたステートメントを返します。

IF EXISTS を ALTERステートメントから削除して、再試行してください。

マスキングポリシーを作成するか、またはCASEと置き換えているとき、データ型が一致しません(例:(VAL 文字列)->は数値を返す)。

FAILURE : SQL コンパイルエラー:マスキングポリシー関数の引数と戻り値の型が一致しません。

CASE を使用してマスキングポリシーを更新し、 CREATE OR REPLACE ステートメントまたは ALTER MASKING POLICY ステートメントを使用して一致するデータ型を指定します。

仮想列にマスキングポリシーを適用します。

FAILURE:SQL コンパイルエラー:マスキングポリシーをVIRTUAL_COLUMN 列に添付できません。

ソーステーブルの列にマスキングポリシーを適用します。

マテリアライズドビューにマスキングポリシーを適用します。

FAILURE : SQL コンパイルエラー:位置 <数字> の構文エラー行 <数字> 予期しない「変更」。 . FAILURE : SQL コンパイルエラー:エラー行 <数字> の位置 <数字> で無効な識別子 「<文字>」

ソーステーブルの列にマスキングポリシーを適用します。

マテリアライズドビューの作成に使用されるテーブル列にマスキングポリシーを適用

FAILURE:SQL コンパイルエラー:マスキングポリシーをMATERIALIZED_VIEW 列に添付できません。

マスキングポリシーをテーブル列に適用するには、マテリアライズドビューをドロップします。

次のトピック: