列データをマスキングする

このドキュメントでは機密データを選択的に難読化するためにデータ マスキングを実装する方法について説明します。データ マスキングを実装すると、ユーザー グループごとに異なる可視性を提供できます。一般的な情報については、データ マスキングの概要をご覧ください。

データ マスキングを実装するには、列にデータポリシーを追加します。データ マスキング ポリシーを列に追加するには、次の手順を行う必要があります。

  1. 1 つ以上のポリシータグを含む分類を作成します。
  2. 省略可: 作成した 1 つ以上のポリシータグの 1 つ以上のプリンシパルに「Data Catalog のきめ細かい読み取り」のロールを付与します。
  3. ポリシータグに最大 3 つのデータポリシーを作成し、マスキング ルールとプリンシパル(ユーザーまたはグループを表す)をそのタグにマッピングします。
  4. ポリシータグを列に設定します。これにより、ポリシータグに関連付けられているデータポリシーが、選択した列にマッピングされます。
  5. マスクされたデータにアクセスできるユーザーを「BigQuery のマスクされた読み取り」のロールに割り当てます。ベスト プラクティスとして、データポリシー レベルで BigQuery のマスクされた読み取りロールを割り当てることをおすすめします。プロジェクト レベル以上でロールを割り当てると、プロジェクト内のすべてのデータポリシーに対する権限がユーザーに付与されます。これは、過剰な権限による問題の原因となります。

データポリシーを操作するには、Google Cloud コンソールまたは BigQuery Data Policy API を使用します。

これらの手順を完了すると、所属しているグループと付与されたロールに応じて、その列に対してクエリを実行するユーザーに、マスクされていないデータ、マスクされたデータ、またはアクセス拒否エラーが表示されます。詳細については、マスクされた読み取りロールときめ細かい読み取りロールの仕組みをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Data Catalog and BigQuery Data Policy APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Data Catalog and BigQuery Data Policy APIs.

    Enable the APIs

  8. BigQuery は、新しいプロジェクトでは自動的に有効になりますが、既存のプロジェクトでは有効にする必要がある場合があります。

    Enable the BigQuery API.

    Enable the API

  9. カスタム マスキング ルーティンを参照するデータポリシーを作成する場合は、関連するマスキング UDF を作成して、以降のステップで使用できるようにします。

分類の作成

分類を作成するユーザーまたはサービス アカウントには、Data Catalog ポリシータグ管理者ロールが必要です。

コンソール

  1. Google Cloud コンソールで [ポリシータグの分類] ページを開きます。

    [ポリシータグの分類] ページを開く

  2. [分類の作成] をクリックします。
  3. [新しい分類] ページで次の操作を行います。

    1. [分類名] に、作成する分類の名前を入力します。
    2. [説明] に、説明を入力します。
    3. 必要に応じて、[プロジェクト] に表示されているプロジェクトを変更します。
    4. 必要に応じて、[場所] に表示されている場所を変更します。
    5. [ポリシータグ] に、ポリシータグの名前と説明を入力します。
    6. ポリシータグの子ポリシータグを追加するには、[サブタグを追加] をクリックします。
    7. 別のポリシータグと同じレベルに新しいポリシータグを追加するには、[+ ポリシータグを追加] をクリックします。
    8. 必要に応じて、分類にポリシータグと子ポリシータグをさらに追加します。
    9. ポリシータグの階層の作成が完了したら、[作成] をクリックします。

API

既存の分類を使用するには、次の手順の最初の 2 つのステップの代わりに taxonomies.import を呼び出します。

  1. taxonomies.create を呼び出して分類を作成します。
  2. taxonomies.policytag.create を呼び出してポリシータグを作成します。

ポリシータグを使用する

ポリシータグの操作方法(ポリシータグの表示や更新の方法など)の詳細については、ポリシータグの操作をご覧ください。ベスト プラクティスについては、BigQuery でポリシータグを使用するためのベスト プラクティスをご覧ください。

データポリシーを作成する

データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.createbigquery.dataPolicies.setIamPolicydatacatalog.taxonomies.get 権限が必要です。

bigquery.dataPolicies.create 権限と bigquery.dataPolicies.setIamPolicy 権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。datacatalog.taxonomies.get 権限は、Data Catalog 管理者と Data Catalog 閲覧者のロールに含まれています。

カスタム マスキング ルーチンを参照するデータポリシーを作成する場合は、ルーチン権限も必要です。

カスタム マスキングの場合は、ユーザーがルーチンとデータポリシーの両方に必要な権限を得られるように、BigQuery 管理者ロールまたは BigQuery データオーナーのロールを付与します。

ポリシータグには、最大 9 個のデータポリシーを作成できます。これらのポリシーのうち 1 つは、列レベルのアクセス制御設定用に予約されています。

コンソール

  1. Google Cloud コンソールで [ポリシータグの分類] ページを開きます。

    [ポリシータグの分類] ページを開く

  2. 分類の名前をクリックして開きます。
  3. ポリシータグを選択します。
  4. [データポリシーを管理] をクリックします。
  5. [データポリシー名] に、データポリシーの名前を入力します。データポリシー名は、データポリシーが存在するプロジェクト内で一意である必要があります。
  6. [マスキング ルール] で、事前定義されたマスキング ルールまたはカスタム マスキング ルーティンを選択します。カスタム マスキング ルーチンを選択する場合は、プロジェクト レベルの bigquery.routines.get 権限と bigquery.routines.list 権限の両方があることを確認してください。
  7. [プリンシパル] に、列に対するマスクアクセスを許可する 1 人以上のユーザーまたはグループの名前を入力します。ここに入力するすべてのユーザーとグループには、「BigQuery のマスクされた読み取り」のロールが付与されています。
  8. [送信] をクリックします。

API

  1. create メソッドを呼び出します。次の要件を満たす DataPolicy リソースを渡します。

    • dataPolicyType フィールドが DATA_MASKING_POLICY に設定されている。
    • dataMaskingPolicy フィールドが、使用するデータ マスキング ルールまたはルーチンを識別する。
    • dataPolicyId フィールドに指定されているデータポリシー名が、そのポリシーが存在するプロジェクト内で一意である。
  2. setIamPolicy メソッドを呼び出し、Policy を渡します。Policy は、マスクされたデータへのアクセス権が付与されているプリンシパルを識別し、role フィールドに roles/bigquerydatapolicy.maskedReader を指定する必要があります。

ポリシータグを列に設定する

データポリシーに関連付けられたポリシータグを列に適用して、列にデータポリシーを設定します。

ポリシータグを設定するユーザーまたはサービス アカウントには、datacatalog.taxonomies.get 権限と bigquery.tables.setCategory 権限が必要です。datacatalog.taxonomies.get は、Data Catalog ポリシータグ管理者とプロジェクト閲覧者のロールに含まれています。bigquery.tables.setCategory は、BigQuery 管理者(roles/bigquery.admin)ロールと BigQuery データオーナー(roles/bigquery.dataOwner)ロールに含まれています。

Google Cloud コンソールで組織内のすべてのプロジェクトのタクソノミーとポリシータグを表示するには、resourcemanager.organizations.get 権限が必要です。この権限は、組織閲覧者のロールに含まれています。

コンソール

Google Cloud コンソールを使用してスキーマを変更し、ポリシータグを設定します。

  1. Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. BigQuery Explorer で、更新するテーブルを見つけて選択します。そのテーブルのテーブル スキーマが開きます。

  3. [スキーマを編集] をクリックします。

  4. [現在のスキーマ] 画面でターゲット列を選択し、[ポリシータグを追加] をクリックします。

  5. [ポリシータグを追加] 画面で、列に適用するポリシータグを選択します。

  6. [選択] をクリックします。画面は次のようになります。

    スキーマを編集

  7. [保存] をクリックします。

bq

  1. ローカル ファイルにスキーマを書き込みます。

    bq show --schema --format=prettyjson \
       project-id:dataset.table > schema.json

    ここで

    • project-id は、プロジェクト ID です。
    • dataset は、更新しているテーブルを含むデータセットの名前です。
    • table は、更新するテーブルの名前です。
  2. schema.json を変更して、列にポリシータグを設定します。policyTagsnames フィールドの値には、ポリシータグのリソース名を使用します。

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
       }
     },
     ...
    ]
  3. スキーマを更新します。

    bq update \
       project-id:dataset.table schema.json

API

既存のテーブルの場合は tables.patch を呼び出し、新しいテーブルの場合は tables.insert を呼び出します。渡した Table オブジェクトの schema プロパティを使用して、スキーマ定義でポリシータグを設定します。ポリシータグの設定方法については、コマンドラインのサンプル スキーマを参照してください。

既存のテーブルを操作する場合は、tables.patch メソッドの方が適切です。tables.update メソッドはテーブル リソース全体を置き換えるからです。

アクセス制御の適用

ポリシータグのデータポリシーを作成すると、アクセス制御が自動的に適用されます。このポリシータグが適用されたすべての列は、「マスクされた読み取り」のロールを持つユーザーからのクエリに応じて、マスクされたデータを返します。

アクセス制御の適用を停止するには、ポリシータグに関連付けられているすべてのデータポリシーを分類内で削除する必要があります。詳細については、アクセス制御を適用するをご覧ください。

データポリシーの IAM 権限を確認する

データポリシーに対する権限を確認するには、testIamPermissions メソッドを呼び出します。

データポリシーを更新する

データポリシーを更新するユーザーまたはサービス アカウントには、bigquery.dataPolicies.update 権限が必要です。データポリシーが関連付けられているポリシータグを更新する場合は、datacatalog.taxonomies.get 権限も必要です。

データポリシーに関連付けられているプリンシパルを更新する場合は、bigquery.dataPolicies.setIamPolicy 権限が必要です。

bigquery.dataPolicies.update 権限と bigquery.dataPolicies.setIamPolicy 権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。datacatalog.taxonomies.get 権限は、Data Catalog 管理者と Data Catalog 閲覧者のロールに含まれています。

コンソール

  1. Google Cloud コンソールで [ポリシータグの分類] ページを開きます。

    [ポリシータグの分類] ページを開く

  2. 分類の名前をクリックして開きます。
  3. ポリシータグを選択します。
  4. [データポリシーを管理] をクリックします。
  5. 必要に応じて、マスキング ルールを変更します。
  6. 省略可: プリンシパルを追加または削除します。
  7. [送信] をクリックします。

API

データ マスキング ルールを変更するには、patch メソッドを呼び出し、dataMaskingPolicy フィールドが更新された DataPolicy リソースを渡します。

データポリシーに関連付けられたプリンシパルを変更するには、setIamPolicy メソッドを呼び出し、マスクされたデータへのアクセスが許可されているプリンシパルを更新する Policy を渡します。

データポリシーを削除する

データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.delete 権限が必要です。この権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。

コンソール

  1. Google Cloud コンソールで [ポリシータグの分類] ページを開きます。

    [ポリシータグの分類] ページを開く

  2. 分類の名前をクリックして開きます。
  3. ポリシータグを選択します。
  4. [データポリシーを管理] をクリックします。
  5. 削除するデータポリシーの横にある をクリックします。
  6. [送信] をクリックします。
  7. [確認] をクリックします。

API

データポリシーを削除するには、delete メソッドを呼び出します。