列データをマスキングする
このドキュメントでは機密データを選択的に難読化するためにデータ マスキングを実装する方法について説明します。データ マスキングを実装すると、ユーザー グループごとに異なる可視性を提供できます。一般的な情報については、データ マスキングの概要をご覧ください。
データ マスキングを実装するには、列にデータポリシーを追加します。データ マスキング ポリシーを列に追加するには、次の手順を行う必要があります。
- 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 Data Policy 管理者、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 Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。datacatalog.taxonomies.get
権限は、Data Catalog 管理者と Data Catalog 閲覧者のロールに含まれています。
コンソール
- Google Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- 必要に応じて、マスキング ルールを変更します。
- 省略可: プリンシパルを追加または削除します。
- [送信] をクリックします。
API
データ マスキング ルールを変更するには、patch
メソッドを呼び出し、dataMaskingPolicy
フィールドが更新された DataPolicy
リソースを渡します。
データポリシーに関連付けられたプリンシパルを変更するには、setIamPolicy
メソッドを呼び出し、マスクされたデータへのアクセスが許可されているプリンシパルを更新する Policy
を渡します。
データポリシーを削除する
データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.delete
権限が必要です。この権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。
コンソール
- Google Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- 削除するデータポリシーの横にある をクリックします。
- [送信] をクリックします。
- [確認] をクリックします。
API
データポリシーを削除するには、delete
メソッドを呼び出します。