列データをマスキングする
このドキュメントでは、センシティブ データを選択的に難読化するためにデータ マスキングを実装する方法について説明します。データ マスキングを実装すると、ユーザー グループごとに異なる可視性を提供できます。一般的な情報については、データ マスキングの概要をご覧ください。
データ マスキングを実装するには、列にデータポリシーを追加します。データ マスキング ポリシーを列に追加するには、次の手順を行う必要があります。
- 1 つ以上のポリシータグを含む分類を作成します。
- 省略可: 作成した 1 つ以上のポリシータグの 1 つ以上のプリンシパルに「Data Catalog のきめ細かい読み取り」のロールを付与します。
- ポリシータグに最大 3 つのデータポリシーを作成し、マスキング ルールとプリンシパル(ユーザーまたはグループを表す)をそのタグにマッピングします。
- ポリシータグを列に設定します。これにより、ポリシータグに関連付けられているデータポリシーが、選択した列にマッピングされます。
- マスクされたデータにアクセスできるユーザーを「BigQuery のマスクされた読み取り」のロールに割り当てます。ベスト プラクティスとして、データポリシー レベルで BigQuery のマスクされた読み取りロールを割り当てることをおすすめします。プロジェクト レベル以上でロールを割り当てると、プロジェクト内のすべてのデータポリシーに対する権限がユーザーに付与されます。これは、過剰な権限による問題の原因となります。
データポリシーを操作するには、Google Cloud コンソールまたは BigQuery Data Policy API を使用します。
これらの手順を完了すると、所属しているグループと付与されたロールに応じて、その列に対してクエリを実行するユーザーに、マスクされていないデータ、マスクされたデータ、またはアクセス拒否エラーが表示されます。詳細については、マスクされた読み取りロールときめ細かい読み取りロールの仕組みをご覧ください。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Data Catalog and BigQuery Data Policy APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Data Catalog and BigQuery Data Policy APIs.
- BigQuery は、新しいプロジェクトでは自動的に有効になりますが、既存のプロジェクトでは有効にする必要がある場合があります。
Enable the BigQuery API.
- カスタム マスキング ルーティンを参照するデータポリシーを作成する場合は、関連するマスキング UDF を作成して、以降のステップで使用できるようにします。
分類の作成
分類を作成するユーザーまたはサービス アカウントには、Data Catalog ポリシータグ管理者ロールが必要です。
コンソール
- Google Cloud コンソールで [ポリシータグの分類] ページを開きます。
- [分類の作成] をクリックします。
[新しい分類] ページで次の操作を行います。
- [分類名] に、作成する分類の名前を入力します。
- [説明] に、説明を入力します。
- 必要に応じて、[プロジェクト] に表示されているプロジェクトを変更します。
- 必要に応じて、[場所] に表示されている場所を変更します。
- [ポリシータグ] に、ポリシータグの名前と説明を入力します。
- ポリシータグの子ポリシータグを追加するには、[サブタグを追加] をクリックします。
- 別のポリシータグと同じレベルに新しいポリシータグを追加するには、[+ ポリシータグを追加] をクリックします。
- 必要に応じて、分類にポリシータグと子ポリシータグをさらに追加します。
- ポリシータグの階層の作成が完了したら、[作成] をクリックします。
API
既存の分類を使用するには、次の手順の最初の 2 つのステップの代わりに taxonomies.import
を呼び出します。
taxonomies.create
を呼び出して分類を作成します。taxonomies.policytag.create
を呼び出してポリシータグを作成します。
ポリシータグを使用する
ポリシータグの操作方法(ポリシータグの表示や更新の方法など)の詳細については、ポリシータグの操作をご覧ください。その他のベスト プラクティスについては、BigQuery でポリシータグを使用するためのベスト プラクティスをご覧ください。
データポリシーを作成する
データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.create
、bigquery.dataPolicies.setIamPolicy
、datacatalog.taxonomies.get
権限が必要です。
bigquery.dataPolicies.create
権限と bigquery.dataPolicies.setIamPolicy
権限は、BigQuery データポリシー管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。datacatalog.taxonomies.get
権限は、Data Catalog 管理者と Data Catalog 閲覧者のロールに含まれています。
カスタム マスキング ルーチンを参照するデータポリシーを作成する場合は、ルーチン権限も必要です。
カスタム マスキングの場合は、ユーザーに BigQuery 管理者ロールまたは BigQuery データオーナーのロールを与えて、ルーティンとデータポリシーの両方に必要な権限を付与します。
ポリシータグには、最大 9 個のデータポリシーを作成できます。これらのポリシーのうち 1 つは、列レベルのアクセス制御設定用に予約されています。
コンソール
- Google Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- [データポリシー名] に、データ ポリシーの名前を入力します。データポリシー名は、データポリシーが存在するプロジェクト内で一意である必要があります。
- [マスキング ルール] で、事前定義されたマスキング ルールまたはカスタム マスキング ルーティンを選択します。カスタム マスキング ルーチンを選択する場合は、プロジェクト レベルの
bigquery.routines.get
権限とbigquery.routines.list
権限の両方があることを確認してください。 - [プリンシパル] に、列に対するマスク アクセスを許可する 1 人以上のユーザーまたはグループの名前を入力します。ここに入力したすべてのユーザーとグループには、BigQuery マスクされた読み取りのロールが付与されます。
- [送信] をクリックします。
API
create
メソッドを呼び出します。次の要件を満たすDataPolicy
リソースを渡します。dataPolicyType
フィールドはDATA_MASKING_POLICY
に設定されています。dataMaskingPolicy
フィールドは、使用するデータ マスキング ルールまたはルーチンを識別します。dataPolicyId
フィールドには、データ ポリシーが存在するプロジェクト内で一意であるデータポリシーの名前を指定します。
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 コンソールを使用してスキーマを変更し、ポリシータグを設定します。
Google Cloud コンソールで [BigQuery] ページを開きます。
BigQuery Explorer で、更新するテーブルを見つけて選択します。そのテーブルのテーブル スキーマが開きます。
[スキーマを編集] をクリックします。
[現在のスキーマ] 画面でターゲット列を選択し、[ポリシータグを追加] をクリックします。
[ポリシータグを追加] 画面で、列に適用するポリシータグを見つけて選択します。
[選択] をクリックします。画面は次のようになります。
[保存] をクリックします。
bq
ローカル ファイルにスキーマを書き込みます。
bq show --schema --format=prettyjson \ project-id:dataset.table > schema.json
ここで
- project-id は、プロジェクト ID です。
- dataset は、更新しているテーブルを含むデータセットの名前です。
- table は、更新するテーブルの名前です。
schema.json を変更して、列にポリシータグを設定します。
policyTags
のnames
フィールドの値には、ポリシータグのリソース名を使用します。[ ... { "name": "ssn", "type": "STRING", "mode": "REQUIRED", "policyTags": { "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"] } }, ... ]
スキーマを更新します。
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 管理者、BigQuery データオーナーのロールに含まれています。datacatalog.taxonomies.get
権限は、Data Catalog 管理者と Data Catalog 閲覧者のロールに含まれています。
Console
- Google Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- 必要に応じて、マスキング ルールを変更します。
- 省略可: プリンシパルを追加または削除します。
- [送信] をクリックします。
API
データ マスキング ルールを変更するには、patch
メソッドを呼び出し、dataMaskingPolicy
フィールドが更新された DataPolicy
リソースを渡します。
データポリシーに関連付けられたプリンシパルを変更するには、setIamPolicy
メソッドを呼び出し、マスクされたデータへのアクセスが許可されているプリンシパルを更新する Policy
を渡します。
データポリシーを削除する
データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.delete
権限が必要です。この権限は、BigQuery データポリシー管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。
コンソール
- Google Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- 削除するデータポリシーの横にある をクリックします。
- [送信] をクリックします。
- [確認] をクリックします。
API
データポリシーを削除するには、delete
メソッドを呼び出します。