チュートリアル: 機密データの自動分類とタグ付け

概要

機密データの識別子と追跡はシンプルで簡単です。Snowflakeは、機密データを識別する組み込みアルゴリズムを提供し、そのデータにシステムタグを自動的に付けて、データのタイプと機密性の追跡を支援します。

最小限の設定で、スキーマを構成し、Snowflakeが新規および変更データに対して自動的にこの分類プロセスを実行し、システムタグとともにユーザー定義のタグを適用することもできます。

このチュートリアルでは、以下のことを行います。

  • 機密データに適用されるユーザー定義タグなど、チュートリアルを完了するために必要なリソースをセットします。

  • 分類プロファイルを作成し、Snowflakeはスキーマに追加されたデータを自動的に分類します。

  • 分類プロファイルにタグマッピングを追加し、Snowflakeが機密データとして識別したデータにユーザー定義のタグが適用されるようにします。

  • 分類結果を表示します。

Tip

このチュートリアルでは紹介しませんが、分類をカスタマイズして、ユーザー定義の正規表現を使用して機密データを識別し、ユーザー定義のセマンティックカテゴリでそのデータにタグを付けることもできます。詳細については、 自動カスタム分類の実装 をご参照ください。

ガバナンス・データベースの設定

このチュートリアルでは、データをガバナンスするために必要なSnowflakeオブジェクト(ユーザー定義タグと分類プロファイル)を作成します。ベストプラクティスに基づき、これらのオブジェクトはガバナンス専用のデータベースに作成されます。

SQL ワークシート を開き、以下のステートメントを実行して、ガバナンスオブジェクト用のデータベースとスキーマを作成します。

USE ROLE ACCOUNTADMIN;

CREATE DATABASE IF NOT EXISTS governance_db;
CREATE SCHEMA IF NOT EXISTS governance_db.sch;
Copy

注釈

簡単に行うため、 ACCOUNTADMIN システムロールを使用して、機密データ分類の構成に必要な権限をセットしないようにします。実際には、この強力なロールは使用せず、必要な権限を持つカスタムロールを作成してください。

データの設定

このチュートリアルのデータを設定する前に、テーブルに入力するウェアハウスを作成します。

CREATE WAREHOUSE IF NOT EXISTS tutorial_wh;
Copy

テーブルを作成する

  1. 分類するテーブルを含むデータベースとスキーマを作成します。

    CREATE DATABASE IF NOT EXISTS data_db;
    CREATE SCHEMA IF NOT EXISTS data_db.sch;
    
    Copy
  2. 機密データを格納するテーブル構造を作成します。

    CREATE TABLE data_db.sch.customers (
      account_number NUMBER(38,0),
      first_name VARCHAR(16777216),
      last_name VARCHAR(16777216),
      email VARCHAR(16777216)
    );
    
    Copy

テーブルに値を挿入します。

作成したテーブルにデータを追加します。

USE WAREHOUSE tutorial_wh;

INSERT INTO data_db.sch.customers (account_number, first_name, last_name, email)
  VALUES
    (1589420, 'john', 'doe', 'john.doe@example.com'),
    (2834123, 'jane', 'doe', 'jane.doe@example.com'),
    (4829381, 'jim', 'doe', 'jim.doe@example.com'),
    (9821802, 'susan', 'smith', 'susan.smith@example.com'),
    (8028387, 'bart', 'simpson', 'bart.barber@example.com');
Copy

分類プロファイルの作成

これで、機密データを保護するために分類が必要なデータがテーブルいっぱいになりました。データがスキーマに追加されると、Snowflakeが自動的にデータを分類するようにするため、分類プロファイルを作成する必要があります。

分類プロファイルは、スキーマ内のデータが分類される頻度や、分類プロセス中の処理を制御します。すべての分類プロファイルは、 CLASSIFICATION_PROFILE クラスのインスタンスです。

スキーマの分類プロファイルを作成するには、以下を実行します。

CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
  governance_db.sch.my_classification_profile(
      {
        'minimum_object_age_for_classification_days': 0,
        'maximum_classification_validity_days': 30,
        'auto_tag': true
      });
Copy

この分類プロファイルがスキーマにセットされると、以下のことが起こります。

  • 分類は1日以内に始まります ('minimum_object_age_for_classification_days': 0)。

  • 最初の分類後、Snowflakeは30日ごとにテーブルの再分類が必要かどうかを再チェックします ('maximum_classification_validity_days': 30)。

  • 機密データ ('auto_tag': true) を含むと識別された列には、自動的に分類タグがセットされます。

分類プロファイルにタグマッピングを追加

分類プロファイルで 'auto_tag': true をセットしているため、Snowflake はデータを機密情報として分類すると、自動的に システム分類タグ を適用します。SEMANTIC_CATEGORY タグは、データのタイプを分類します。例えば、データを名前または住所として識別します。PRIVACY_CATEGORY タグはデータの機密性を分類し、例えばデータを識別子または準識別子として識別します。

さらに一歩進んで、データの分類方法に基づいてユーザー定義のタグを自動的に適用したいとします。このチュートリアルでは、その方法をご紹介します!

機密データに適用するカスタムタグを作成するには、以下のステートメントを実行します。

CREATE TAG governance_db.sch.tutorial_pii;
Copy

次に、Snowflakeが列に名前が含まれていることを識別したときに、このユーザー定義タグが適用されるように分類プロファイルを変更します。分類プロファイルにタグマッピングを追加すると、ユーザー定義のタグをいつ、どのように適用するかを構成できます。

タグ・マップを分類プロファイルに追加するには、 classification_profile_name!SET_TAG_MAP メソッドを実行します。

CALL governance_db.sch.my_classification_profile!SET_TAG_MAP(
  {'column_tag_map':[
    {
      'tag_name':'governance_db.sch.tutorial_pii',
      'tag_value':'sensitive_name',
      'semantic_categories':['NAME']
    }]});
Copy

自動分類でシステム定義の意味カテゴリが NAME、ユーザー定義のタグ tutorial_pii が列にセットされます。分類プロファイルに基づき、ユーザー定義 tutorial_pii タグの値は sensitive_name にセットされます。

注釈

分類プロファイルを作成する際に、タグマッピングを定義することもできます。

スキーマへの分類プロファイルのセット

分類プロファイルの構成ができたので、スキーマにセットする準備ができました。これにより、自動分類プロセスが開始されます。

ALTER SCHEMA data_db.sch
  SET CLASSIFICATION_PROFILE = 'governance_db.sch.my_classification_profile';
Copy

あとはSnowflakeがやってくれます!Snowflakeは既存のデータの分類を開始し、新しいデータがスキーマに追加されると分類を継続します。

分類結果を表示

チュートリアルのこの部分を完了する前に、Snowflakeが分類プロセスを完了するまで1時間待つ必要があります。

1時間後、以下のステートメントを実行し、分類結果を取得します。

CALL SYSTEM$GET_CLASSIFICATION_RESULT('data_db.sch.customers');
Copy

その結果、次のことがわかりました。

  • ACCOUNT_NUMBER 列は機密扱いではないため、分類タグは割り当てられていません。

  • EMAIL 列は、 EMAIL のセマンティックカテゴリと IDENTIFIER のプライバシーカテゴリでフラグされます。

  • 分類プロファイルのタグマッピングに基づいて、 governance_db.sch.tutorial_pii ユーザー定義タグは、 NAME のセマンティックカテゴリを持つ列に割り当てられました(出力のハイライト行を参照)。

  {
  "classification_profile_config": {
    "classification_profile_name": "GOVERNANCE_DB.SCH.MY_CLASSIFICATION_PROFILE"
  },
  "classification_result": {
    "ACCOUNT_NUMBER": {
      "alternates": []
    },
    "EMAIL": {
      "alternates": [],
      "recommendation": {
        "confidence": "HIGH",
        "coverage": 1,
        "details": [],
        "privacy_category": "IDENTIFIER",
        "semantic_category": "EMAIL",
        "tags": [
          {
            "tag_applied": true,
            "tag_name": "snowflake.core.semantic_category",
            "tag_value": "EMAIL"
          },
          {
            "tag_applied": true,
            "tag_name": "snowflake.core.privacy_category",
            "tag_value": "IDENTIFIER"
          }
        ]
      },
      "valid_value_ratio": 1
    },
    "FIRST_NAME": {
      "alternates": [],
      "recommendation": {
        "confidence": "HIGH",
        "coverage": 1,
        "details": [],
        "privacy_category": "IDENTIFIER",
        "semantic_category": "NAME",
        "tags": [
          {
            "tag_applied": true,
            "tag_name": "snowflake.core.semantic_category",
            "tag_value": "NAME"
          },
          {
            "tag_applied": true,
            "tag_name": "snowflake.core.privacy_category",
            "tag_value": "IDENTIFIER"
          },
          {
            "tag_applied": true,
            "tag_name": "governance_db.sch.tutorial_pii",
            "tag_value": "sensitive_name"
          }
        ]
      },
      "valid_value_ratio": 1
    },
    "LAST_NAME": {
      "alternates": [],
      "recommendation": {
        "confidence": "HIGH",
        "coverage": 1,
        "details": [],
        "privacy_category": "IDENTIFIER",
        "semantic_category": "NAME",
        "tags": [
          {
            "tag_applied": true,
            "tag_name": "snowflake.core.semantic_category",
            "tag_value": "NAME"
          },
          {
            "tag_applied": true,
            "tag_name": "snowflake.core.privacy_category",
            "tag_value": "IDENTIFIER"
          },
          {
            "tag_applied": true,
            "tag_name": "governance_db.sch.tutorial_pii",
            "tag_value": "sensitive_name"
          }
        ]
      },
      "valid_value_ratio": 1
    }
  }
}

クリーンアップ、まとめ、追加リソース

おめでとうございます。これでこのチュートリアルは終了です。

まとめると、以下のことを学びました。

  • 分類プロファイルを作成して、自動分類の実装方法を制御します。

  • 分類プロファイルにタグマッピングを追加し、機密データを含む列にユーザー定義のタグが自動的にセットされるようにします。

  • 自動分類を開始するために、スキーマに分類プロファイルをセットします。

  • 自動分類の結果を表示します。

チュートリアルのオブジェクトをドロップする

チュートリアルを繰り返す予定がある場合は、作成したオブジェクトを保持することができます。

そうでない場合は、以下のようにチュートリアルのオブジェクトをドロップします。

DROP TAG governance_db.sch.tutorial_pii;
DROP DATABASE governance_db;
DROP DATABASE data_db;
DROP WAREHOUSE tutorial_wh;
Copy

次の内容

関連コストやカスタム分類の実装など、機密データの自動分類の実装に関する詳細については、 機密データを自動的に分類 を参照してください。