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

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

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

  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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Data Catalog and BigQuery Data Policy API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Data Catalog and BigQuery Data Policy API を有効にします。

    API を有効にする

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

    BigQuery API を有効にします。

    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 管理者のロールおよび 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 コンソールを使用してスキーマを変更し、ポリシータグを設定します。

  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 管理者と 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 管理者と BigQuery データオーナーのロールに含まれています。

コンソール

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

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

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

API

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