オブジェクトのタグ付け

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

このトピックの内容:

タグとは

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

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

Snowflakeは、次のSnowflakeオブジェクトおよび列へのタグの割り当てをサポートしています。

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

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

タグ系統

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

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

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

継承されたタグは、特定のオブジェクト上で上書きできます。テーブルの列がタグ cost_center = 'sales' を継承している場合、タグは cost_center = 'sales_na' などのより具体的なタグに置き換えることができます。 na は北米の販売コストセンターを指定します。さらに、新しいタグをテーブル列に適用できます(例: classification = 'secret')。

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

タグの利点

使いやすさ

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

タグ系統

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

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

Snowflakeは、プライマリデータベース内のタグとその関連付けをセカンダリデータベースに複製します。

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

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

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

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

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

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

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

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

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

アカウントレベルのオブジェクト

Snowflakeは、次のアカウントレベルのオブジェクトに対するタグの割り当てをサポートしています。

  • ウェアハウス

  • データベース

  • ユーザー

  • ロール

データベースレベルのオブジェクト

  • スキーマ

スキーマレベルのオブジェクト

Snowflakeは、次のスキーマレベルのオブジェクトに対するタグの割り当てをサポートしています。

  • テーブル

  • 外部テーブル

  • ビュー

  • マテリアライズドビュー

  • ステージ

CREATE TABLE ステートメント

CREATE TABLE ... LIKE を使用すると、ソーステーブルに関連付けられたタグがターゲットテーブルに関連付けられます。

複製

タグは 複製 することができます。

次のいずれかの条件が当てはまる場合は、複製操作に失敗します。

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

  • プライマリデータベースに含まれるオブジェクトには、別のデータベースにあるタグへの参照があります。

    注釈

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

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

クローニング

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

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

  • データベースまたはスキーマのクローンを作成する場合は、そのデータベースまたはスキーマにあるタグもクローンされます。

  • クローン作成後、オブジェクトとそのタグの関連付けは、元のオブジェクトとタグではなく、クローン作成されたオブジェクトとタグにマップされます。

タグの実装

Snowflakeでのタグの実装は、次に挙げる4つのステップのプロセスです。

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

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

  3. ALTER <オブジェクト> コマンドを使用して、タグをSnowflakeオブジェクトに関連付けます。

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

簡単にするために、これらのステップでは、タグに対する集中管理アプローチを想定しています。ここで、 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: タグを作成する

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

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

ステップ3: タグをSnowflakeオブジェクトに関連付ける

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_key> = '<tag_value>' [ , <tag_key> = ’<tag_value>’ , ... ];
alter table <table_name> modify column <column_name> unset <tag_key> [ , <tag_key> , ... ];

-- For a view or materialized view column

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

ステップ4: タグの使用状況を追跡する

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

  • アカウント内にあるすべてのタグのリストを取得するには、Account Usage TAGS ビュー をクエリします。

    select * from snowflake.account_usage.tags
    order by tag_name;
    
  • タグとSnowflakeオブジェクト間の関連付けすべてのリストを取得するには、Account Usage TAG_REFERENCES ビュー をクエリします。

    select * from snowflake.account_usage.tag_references
    order by tag_name, domain, object_id;
    
  • タグとSnowflakeオブジェクト間の関連付けをリストするには、Information Schemaテーブル関数 TAG_REFERENCES を使用します。

    select *
     from table(my_db.information_schema.tag_references('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'));
    
  • 指定されたタグ、およびSnowflakeオブジェクトまたは列に関連付けられたタグ値を返すには、 SYSTEM$GET_TAG 関数を使用します。

    select system$get_tag('cost_center', 'my_table', 'table');
    

タグの管理

タグの権限

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

権限

使用法

CREATE

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

APPLY

Snowflakeオブジェクトのタグの追加およびドロップ操作を有効にします。

OWNERSHIP

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

注釈

タグはスキーマレベルで保存されます。

タグを操作するには、親データベースとスキーマでの USAGE 権限も必要です。

タグ DDL 参照情報

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

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

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

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

操作

必要な権限

テーブルの作成。

親データベースに対する USAGE 権限を持つロールと、同じスキーマ内の CREATE TAG 権限を持つスキーマ。

タグの変更。

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

タグのドロップ。

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

タグの表示。

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

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

個々のオブジェクトの場合、タグに対する APPLY 権限と、タグが設定されているオブジェクトに対する OWNERSHIP 権限を持つロール。

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

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

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

SYSTEM$GET_TAGTAG_REFERENCESTAG_REFERENCES_WITH_LINEAGE を参照。