オブジェクトのタグ付け

このトピックでは、Snowflakeでタグを使用する方法の概念と手順について説明します。

タグでマスキングポリシーを使用する方法の詳細については、 タグベースのマスキングポリシー をご参照ください。

このトピックの内容:

タグとは

タグを使用すると、データスチュワードは、集中型または分散型のデータガバナンス管理アプローチを通じて、コンプライアンス、検出、保護、およびリソースの使用状況のユースケースに関する機密データを追跡できるようになります。

タグは、別のSnowflakeオブジェクトに割り当てることができるスキーマレベルのオブジェクトです。タグをSnowflakeオブジェクトに割り当てると、タグに任意の文字列値を割り当てることができます。Snowflakeは、タグとその文字列値をキーと値のペアとして保存します。タグはスキーマに対して一意である必要があり、タグ値は常に文字列です。

CREATE TAG ステートメントを使用してタグを作成し、タグをオブジェクトに割り当てるときにタグ文字列値を指定します。タグがすでに存在することを前提として、 CREATE <オブジェクト> ステートメントを使用し、オブジェクトの作成中にタグをオブジェクトに割り当てることができます。または、 ALTER <オブジェクト> ステートメントを使用して既存のオブジェクトにタグを割り当てることもできます。

単一のタグを同時に異なるオブジェクトタイプに割り当てることができます(例: ウェアハウスとテーブルを同時に)。割り当て時に、タグ文字列値は、複製することも、一意のままにすることもできます。たとえば、複数のテーブルにcost_centerタグを割り当てることができ、タグの文字列値は常にsalesにすることができます。または、文字列値が異なる場合もあります(例: engineering、marketing、finance)。タグを定義し、Snowflakeオブジェクトにタグを割り当てた後に、タグをクエリしてオブジェクトの使用状況を追跡し、追跡、監査、レポートなどのデータガバナンス操作を容易にすることができます。

タグはテーブル、ビュー、および列に割り当てることができるため、タグを設定してからタグをクエリすると、機密情報を含んでいる多数のデータベースオブジェクトおよび列を検出できます。発見時に、データスチュワードは、 行アクセスポリシー を使用した選択的フィルタリング、または マスキングポリシー を使用した、データのトークン化、完全なマスク化、部分的なマスク化、またはマスク解除の判断により、データの提供に関する最善の方法を決定できます。

ウェアハウスにタグを割り当てると、正確なリソースの使用状況の追跡が可能になります。リソースのタグをクエリすると、コストセンターまたは他の組織単位ごとにリソースを簡単にグループ化できます。さらに、タグを使用すると、プロジェクトのような比較的短期間のビジネスアクティビティの分析が容易になり、どのようなリソースが、いつ、どのように使用されたかについて、より詳細な洞察を得ることができます。

オブジェクト/列のタグクォータ

Snowflakeでは、単一のオブジェクトに最大20個の 一意の タグを設定できます。各タグの文字列値は最大256文字で、タグに 許可される値 を指定するオプションがあります。一意のタグの最大数は、テーブルとビューの列を含め、テーブルとビューでわずかに異なります。

CREATE <オブジェクト> または ALTER <オブジェクト> ステートメントでは、オブジェクトに設定または設定解除できるタグの最大数は5です。

テーブル、ビュー、および列

テーブルまたはビューとその列には、最大20個の一意のタグを設定できます。最大数20には、テーブルに直接設定されている一意のタグに 加えて、同じテーブルまたはビューの列に設定されている一意のタグの数が含まれることに注意してください。この合計は、1つのテーブル列または同じテーブル内の数百の列に設定された一意のタグが、1つの一意のタグとしてカウントされることも意味します。

たとえば、テーブル内の単一列の1列に10個の一意のタグが設定され、同じテーブルまたはその列その他のタグがない場合、Snowflakeでは、その同じ列、テーブル内にある他の列、テーブル自体、または同じテーブルとその列をいくつか組み合わせたものに10個の一意のタグを追加で設定できます。

一意のタグが20の制限に達すると、テーブルまたはその列に追加のタグを設定できなくなります。この時点で、テーブルまたはその列に追加のタグを設定する必要がある場合、考慮すべき次のステップは、オブジェクトのタグクォータを管理する方法です。

タグクォータの管理

一意のタグの最大数20には、 DROP TAG ステートメントを使用してタグがドロップされてから24時間の期限にドロップされたタグが含まれます。この期限の理由は、タグを削除したユーザーが必要に応じて UNDROP TAG ステートメントを実行できるようにするためです。UNDROP TAG 操作が24時間の間隔内に実行されると、Snowflakeはドロップ操作の前に最新だったタグ割り当て(つまり、参照)を復元します。

24時間の期限が切れると、Snowflakeはドロップされたタグに関連するすべての参照をパージします。この時点で、ドロップされたタグを一度参照したオブジェクトまたは列に、新しいタグを割り当てることができます。

次の手順を使用して、オブジェクトのタグクォータを管理します。

  1. TAG_REFERENCES ビュー(Account Usage)をクエリして、タグの割り当てを決定します。

  2. オブジェクトまたは列からタグの設定を解除します。例:

    オブジェクトの場合は、対応する ALTER <オブジェクト> ... UNSET TAG コマンドを使用します。

    テーブルまたはビュー列の場合は、対応する ALTER { TABLE | VIEW } ... { ALTER | MODIFY } COLUMN ... UNSET TAG コマンドを使用します。

  3. DROP TAG ステートメントを使用してタグをドロップします。

タグ系統

タグは、Snowflakeのセキュリティ保護可能なオブジェクトの階層に基づいて継承されます。Snowflakeは、Snowflake環境の セキュリティ保護可能なオブジェクト の階層にできるだけ近いタグキーを定義することをお勧めします。

The tag administrator can apply masking policies to tables and views.

タグの継承とは、タグがテーブルに適用される場合、そのタグはそのテーブルの列にも適用されることを意味します。この動作は、タグ系統と呼ばれます。

特定のオブジェクトで継承されたタグを上書きできます。たとえば、テーブルの列が、文字列値がsalesであるcost_centerという名前のタグを継承する場合、タグは、北米の販売コストセンターを指定するsales_naなど、より具体的なタグ文字列値に更新できます。さらに、新しいタグをテーブル列に適用できます。 ALTER TABLE ... ALTER COLUMN ステートメントを使用して、列のタグ文字列値を更新し、列に1つ以上の追加タグを設定します。

タグキーを定義し、Snowflakeオブジェクトにタグを割り当てた後、指定されたテーブル関数を使用してタグ、タグ参照、およびタグ系統を追跡するか、 タグの使用 (このトピック内)に示すようにビューをクエリします。

注釈

タグの系統には、ネストされたオブジェクトへの 伝達 が含まれて いません。例:

table_1 » view_1 » materialized_view_1

ネストされたオブジェクトが基になるテーブルまたはビューに相対してすでに存在する場合は、基になるオブジェクトにタグが設定されても、ネストされたオブジェクトにタグが自動的に設定されることはありません。この例では、 table_1 にタグを設定しても、 view_1materialized_view_1 に同じタグが設定されることはありません。この動作は列にも当てはまります。

基になるオブジェクトまたは列のタグをネストされたオブジェクトに引き継ぐ必要がある場合は、ネストされたオブジェクトで CREATE OR REPLACE ステートメントを実行し、 合わせて SQL ステートメントが、ネストされたオブジェクトまたは列でタグを指定することを確認します。

タグの利点

使いやすさ

タグを一度定義して、必要な数の異なるオブジェクトに適用します。

タグ系統

タグは継承されるため、セキュリティ保護可能なオブジェクトの階層の上位にあるオブジェクトにタグを適用すると、すべての子オブジェクトにタグが適用されます。たとえば、タグがテーブルに設定されている場合、そのタグはそのテーブルのすべての列に継承されます。

複製での一貫した割り当て

Snowflakeは、プライマリデータベース内のタグとその割り当てをセカンダリデータベースに複製します。

詳細については、 複製 (このトピック内)をご参照ください。

機密データの追跡とリソースの使用

タグは機密データ(例: PII、シークレット)の識別を簡素化し、Snowflakeリソースの使用状況を可視化します。アナリストは、同じシステム内のデータとメタデータを使用して、タグ定義(例: cost_centerdepartment)に基づいて、どのリソースが最も多くのSnowflakeクレジットを消費しているかをすばやく判断できます。

集中型または分散型の管理

タグは、さまざまな管理アプローチをサポートして、内部および外部の規制要件への準拠を促進します。

集中型アプローチでは、 tag_admin カスタムロールがタグを作成して、Snowflakeオブジェクトに適用します。

分散型アプローチでは、個々のチームがSnowflakeオブジェクトにタグを適用し、 tag_admin カスタムロールがタグを作成して、一貫したタグの命名を確実にします。

考慮事項

将来の付与

タグに対する権限の 将来の付与 はサポートされていません。

回避策として、カスタムロールに APPLYTAG 権限を付与して、そのロールが別のオブジェクトにタグを適用できるようにします。

Snowflakeオブジェクトと機能でのタグの使用

以下では、タグがSnowflakeのオブジェクトと機能にどのように影響するかについて説明します。

サポートされているオブジェクト

次のテーブルに、列を含む、タグでサポートされているオブジェクトをSnowflakeのセキュリティ保護可能なオブジェクト階層に基づいて示します。

タグは、以下のテーブルでそれ以外に指定されている場合を除き、 CREATE <オブジェクト> ステートメントまたは ALTER <オブジェクト> ステートメントを使用してオブジェクトに設定できます。

タグは、 CREATE TABLE、 CREATE VIEW、 ALTER TABLE ... MODIFY COLUMN、または ALTER VIEW ステートメントのいずれかを使用して列に設定できます。

オブジェクト階層

サポートされているオブジェクト

注意

組織

アカウント

タグは、 APPLY TAG グローバル権限を持つロールによって 現在のアカウント設定 できます。

アカウント

統合

共有

ウェアハウス

ユーザー

ロール

データベース

すべての統合 タイプ がサポートされています。 ALTER INTEGRATION コマンドを使用して、統合にタグを設定します。

タグは、データ共有プロバイダーによって共有に設定されます。これらのタグは、データ共有コンシューマーには表示されません。 ALTER SHARE コマンドを使用して、共有にタグを設定します。

データベース

スキーマ

スキーマ

ストリーム

タスク

パイプ

テーブル

外部テーブル

ビュー

マテリアライズドビュー

ステージ

ALTER STREAM コマンドを使用して、ステージにタグを設定します。

ALTER TASK コマンドを使用して、タスクにタグを設定します。

ALTER PIPE コマンドを使用して、パイプにタグを設定します。

テーブルまたはビュー

タグ値の指定

ALLOWED_VALUES タグプロパティを使用すると、タグが オブジェクト に設定されている場合に、タグに割り当てることができる選択可能な文字列値を指定できます。1つのタグで可能な文字列値の最大数は50です。

これらの値は、タグを作成または CREATE TAG ステートメントで置き換えるとき、または既存のタグキーを ALTER TAG ステートメントで変更するときに指定できます。ALTER TAG ステートメントは、タグの許可された値の追加 および タグに対する既存の値のドロップをサポートしています。

タグに許可される値のリストを決定するには、 GET_DDL 関数を呼び出します。

例:

許可された2つの文字列値として 'finance''engineering' を使用して cost_center という名前のタグを作成します。

create tag cost_center
    allowed_values 'finance', 'engineering';

次の許可された値を確認します。

select get_ddl('tag', 'cost_center')

+------------------------------------------------------------------------------+
| GET_DDL('tag', 'cost_center')                                                |
|------------------------------------------------------------------------------|
| create or replace tag cost_center allowed_values = 'finance', 'engineering'; |
+------------------------------------------------------------------------------+

cost_center という名前のタグを変更して、許可された文字列値として 'marketing' を追加します。

alter tag cost_center
    add allowed_values 'marketing';

cost_center という名前のタグを変更して、許可された文字列値として 'engineering' をドロップします。

alter tag cost_center
    drop allowed_values 'engineering';

特定のタグで許可された文字列値のリストを取得するには、 GET_DDL 関数または SYSTEM$GET_TAG_ALLOWED_VALUES 関数を呼び出します。たとえば、タグ cost_centergovernance という名前のデータベースと tags という名前のスキーマに保存されていると仮定します。

select system$get_tag_allowed_values('governance.tags.cost_center');

+--------------------------------------------------------------+
| SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') |
|--------------------------------------------------------------|
| ["finance","marketing"]                                      |
+--------------------------------------------------------------+

オブジェクトのタグ付けとマスキングポリシー

詳細については、 タグベースのマスキングポリシー をご参照ください。

列に直接割り当てられるマスキングポリシーは、タグベースのマスキングポリシーよりも優先されることに注意してください。

CREATE TABLE ステートメント

CREATE TABLE ... LIKE を使用すると、ソーステーブルに割り当てられたタグがターゲットテーブルに割り当てられます。

複製

タグとその割り当ては、データベース複製と複製グループを使用して複製できます。

データベース複製 の場合は、次のいずれかの条件に該当すると、複製操作に失敗します。

  • プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、タグを含んでいますが、下位エディションには、複製が承認された1つ以上のアカウントがあります。

  • プライマリデータベースに含まれるオブジェクトには、別のデータベースにあるタグへの ダングリングリファレンス がある。

複製グループ で複数のデータベースを複製すると、データベース複製のダングリングリファレンス動作を回避できます。

注釈

フェールオーバーまたはフェールバックのアクションを使用している場合、SnowflakeアカウントはBusiness Critical Editionかそれ以上である必要があります。

詳細については、 データベース複製とフェールオーバー/フェールバック をご参照ください。

クローニング

Snowflakeは、 クローン 操作中の次のタグ動作をサポートしています。

  • ソースオブジェクトにあるタグの関連付けは、複製されたオブジェクトで維持されます。

  • データベースまたはスキーマでクローン操作を実行すると、そのデータベースまたはスキーマに保存されているタグもクローンされます。

  • クローン作成後、ソースデータベースまたはスキーマ内にあるオブジェクトとそのタグの関連付けは同じままです。複製されたデータベースまたはスキーマでは、オブジェクトとそのタグの関連付けは、複製されたデータベースとスキーマに固有です。

データ共有

  • 共有ビューとタグが異なるデータベースに存在する場合は、タグを含むデータベースに対する REFERENCE_USAGE 権限を共有に付与します。詳細については、 複数のデータベースのデータの共有 をご参照ください。

  • データ共有のコンシューマーアカウントで、

    • SHOW TAGS コマンドを実行するロールが共有タグを含むスキーマに対する USAGE 権限を持っている場合は、 SHOW TAGS を実行すると共有タグが返されます。

    • データ共有プロバイダーアカウントのタグが共有テーブルに割り当てられている場合、データ共有コンシューマーは、 SYSTEM$GET_TAG 関数または TAG_REFERENCES Information Schemaテーブル関数を呼び出して、タグの割り当てを表示することはできません。

タグの使用

以下は、Snowflakeでタグを使用するための概要です。

  1. カスタムロールを定義し、権限を割り当てます。

  2. ユーザーにカスタムロールを付与します。

  3. CREATE TAG ステートメントを使用してタグを作成します。

  4. ALTER <オブジェクト> コマンドを使用して、タグを 既存の Snowflakeオブジェクトに割り当てます。

    代わりに、 CREATE <オブジェクト> コマンドを使用して、タグを 新しい オブジェクトに割り当てることもできます。

  5. テーブル関数とビューを介してタグを追跡します。

簡単にするために、これらのステップでは、タグに対する集中管理アプローチを想定しています。ここで、 tag_admin カスタムロールには、タグに対する CREATE 権限と APPLY 権限の両方があります。

ステップ1: カスタムロールを作成して権限を割り当てる

集中管理アプローチでは、 tag_admin カスタムロールが、タグの作成とSnowflakeオブジェクトへの割り当てを担当します。

この例では、 ACCOUNTADMIN システムロールを使用しています。実稼働環境において、この上位の権限を持つロールを使用することが望ましくない場合は、 tag_admin カスタムロールに対して権限を割り当てるロールが、 tag_admin カスタムロールを承認するために必要な権限を持っていることを確認します。詳細については、 タグの管理 (このトピック内)をご参照ください。

use role useradmin;
create role tag_admin;
use role accountadmin;
grant create tag on schema <schema_name> to role tag_admin;
grant apply tag on account to role tag_admin;

ステップ2: ユーザーに TAG_ADMIN カスタムロールを付与する

タグ管理者として機能するユーザーに TAG_ADMIN カスタムロールを付与します。

use role useradmin;
grant role tag_admin to user jsmith;

ステップ3: タグを作成する

CREATE TAG ステートメントを実行してタグを作成します。

use role tag_admin;
use schema my_db.my_schema;
create tag cost_center;

ステップ4: タグをSnowflakeオブジェクトに割り当てる

CREATE <オブジェクト> ステートメントを使用して、タグを 新しい Snowflakeオブジェクトに割り当てます。

たとえば、新しいウェアハウスにタグを設定するには、 CREATE WAREHOUSE コマンドを使用します。

use role tag_admin;
create warehouse mywarehouse with tag (cost_center = 'sales');

ALTER <オブジェクト> ステートメントを使用して、タグを 新しい Snowflakeオブジェクトに割り当てます。

たとえば、既存のウェアハウスにタグを設定するには、 ALTER WAREHOUSE コマンドを使用します。

use role tag_admin;
alter warehouse wh1 set tag cost_center = 'sales';

既存の列のタグを設定または設定解除する場合、テーブル列には ALTER TABLE ... MODIFY COLUMN コマンドを使用し、ビュー列には ALTER VIEW ... MODIFY COLUMN コマンドを使用します。1つのステートメントで、複数のタグを設定または設定解除できます。

-- For a table or external table column

alter table <table_name> modify column <column_name> set tag <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ];
alter table <table_name> modify column <column_name> unset tag <tag_name> [ , <tag_name> , ... ];

-- For a view or materialized view column

alter view <view_name> modify column <column_name> set tag <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ];
alter view <view_name> modify column <column_name> unset tag <tag_name> [ , <tag_name> , ... ];

ステップ5: タグを追跡する

タグの使用状況は、2つの異なるAccount Usageビュー、2つのInformation Schemaテーブル関数、Account Usageテーブル関数、およびシステム関数を介して追跡できます。

タグの使用状況を追跡する方法を決定するために、2つの一般的なアプローチを考えると役立つ場合があります。

  • タグを検出またはリストします。

  • タグとオブジェクトの間の割り当て(つまり、参照)を識別します。

タグを検出する

Snowflakeは、タグをリストし、特定のタグキーのタグ文字列値を識別するための次のオプションをサポートしています。

  • アカウント内のタグを特定します。

    共有 SNOWFLAKE データベースのAccount Usageスキーマで TAGS ビューを使用します。このビューは、Snowflakeアカウント内にあるすべてのタグの カタログ と見なすことができ、現在のタグと削除されたタグに関する情報を提供します。例:

    select * from snowflake.account_usage.tags
    order by tag_name;
    
  • 指定のタグの値を特定します。

    指定されたタグ、およびSnowflakeオブジェクトまたは列に割り当てられたタグ値を返すには、 SYSTEM$GET_TAG システム関数を使用します。

    select system$get_tag('cost_center', 'my_table', 'table');
    
割り当てを特定する

Snowflakeは、クエリがアカウントまたは特定のデータベースをターゲットにする必要があるかどうか、またタグの系統が必要かどうかに応じて、タグの割り当てを識別するためのさまざまなオプションをサポートしています。

  • 系統のあるアカウントレベルのクエリ:

    Account Usageテーブル関数 TAG_REFERENCES_WITH_LINEAGE を使用して、特定のタグキーとタグ値を持ち、タグ系統も含む、すべてのオブジェクトを判別します。

    select *
    from table(snowflake.account_usage.tag_references_with_lineage('my_db.my_schema.cost_center'));
    
  • 系統のないアカウントレベルのクエリ:

    Account Usage TAG_REFERENCES ビューを使用して、特定のタグキーとタグ値を持つが、タグ系統が含まれて いない、すべてのオブジェクトを判別します。

    select * from snowflake.account_usage.tag_references
    order by tag_name, domain, object_id;
    
  • 系統のあるデータベースレベルのクエリ:

    すべてのSnowflakeデータベースには Snowflake Information Schema が含まれています。Information Schemaテーブル関数 TAG_REFERENCES を使用して、特定のタグを持ち、特定のデータベース内でタグ系統も含む、すべてのオブジェクトを判別します。

    select *
    from table(my_db.information_schema.tag_references('my_table', 'table'));
    
  • 系統のある、テーブルまたはビュー内の列すべてのタグすべてに対するデータベースレベルのクエリ:

    Information Schema関数 TAG_REFERENCES_ALL_COLUMNS を使用して、特定のテーブルまたはビューにあるすべての列に設定されているすべてのタグを取得します。

    オブジェクト名がビュー(つまり、ビュー、マテリアライズドビュー)であっても、ドメイン TABLE は列を含むすべてのオブジェクトに使用する 必要がある ことに注意してください。

    select *
    from table(information_schema.tag_references_all_columns('my_table', 'table'));
    

タグの管理

タグの権限

Snowflakeは、ユーザーがタグを作成、設定、および所有できるかどうかを決定するために、次の権限をサポートしています。

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

権限

使用法

CREATE

スキーマで新しいタグを作成できるようにします。

APPLY

Snowflakeオブジェクトのタグの設定および設定解除操作を有効にします。構文例については、 DDL コマンド、操作、および権限の概要 をご参照ください。

OWNERSHIP

タグの所有権を譲渡します。これにより、タグを包括的に制御できるようになります。タグのほとんどのプロパティを変更するために必要です。

タグ DDL 参照情報

Snowflakeは、タグを作成および管理するために次の DDL をサポートしています。

Snowflakeは、タグオブジェクトの describe 操作をサポートしていないことに注意してください。

DDL コマンド、操作、および権限の概要

次のテーブルは、タグ権限と DDL 操作の関係をまとめたものです。

操作

必要な権限

テーブルの作成。

同じスキーマ内の CREATE TAG 権限を持つロール。

タグの変更。

タグに対する OWNERSHIP 権限を持つロール。

タグのドロップおよびドロップ解除。

タグに対する OWNERSHIP 権限と、タグが存在するデータベースおよびスキーマに対する USAGE 権限を持つロール。

タグの表示。

次のいずれか: . タグが存在するスキーマに対する USAGE 権限を持つロール、 または . ACCOUNT 許可で APPLY TAG 権限を持つロール。

オブジェクトのタグの設定または設定解除。

個々のオブジェクトの場合、アカウントに対する APPLY TAG 権限、 または タグに対する APPLY TAG 権限と、タグが設定されているオブジェクトに対する OWNERSHIP 権限を持つロール。 サポートされているオブジェクト をご参照ください。

列のタグの設定または設定解除。

アカウントに対する APPLY TAG 権限を持つロール、 または タグに対する APPLY 権限とテーブルまたはビューに対する OWNERSHIP 権限を持つロール。

オブジェクトでのタグの取得。

SYSTEM$GET_TAGTAG_REFERENCESTAG_REFERENCES_WITH_LINEAGE をご参照ください。

Snowflakeは、オブジェクトにタグを作成および設定するためのさまざまな権限をサポートしています。

  1. tag_admin カスタムロールが すべての オブジェクト/列にタグを作成および設定する集中型タグ管理アプローチの場合は、次の権限が必要です。

    use role securityadmin;
    grant create tag on schema <db_name.schema_name> to role tag_admin;
    grant apply tag on account to role tag_admin;
    
  2. ハイブリッド型管理アプローチでは、単一のロールにCREATE TAG権限があり、タグに一貫した名前が付けられ、個々のチームまたはロールに特定のタグのAPPLY権限があります。

    たとえば、カスタムロール finance_role ロールには、ロールが所有するテーブルおよびビューにタグ cost_center を設定する権限を付与します(つまり、ロールにはテーブルまたはビューの OWNERSHIP 権限があります)。

    use role securityadmin;
    grant create tag on schema <db_name.schema_name> to role tag_admin;
    grant apply on tag cost_center to role finance_role;
    
最上部に戻る