列データをマスキングする
このドキュメントでは機密データを選択的に難読化するためにデータ マスキングを実装する方法について説明します。データ マスキングを実装すると、ユーザー グループごとに異なる可視性を提供できます。一般的な情報については、データ マスキングの概要をご覧ください。
データ マスキングを実装するには、列にデータポリシーを追加します。データ マスキング ポリシーを列に追加するには、次の手順を行う必要があります。
- 1 つ以上のポリシータグを含む分類を作成します。
- 省略可: 作成した 1 つ以上のポリシータグの 1 つ以上のプリンシパルに「Data Catalog のきめ細かい読み取り」のロールを付与します。
- ポリシータグに最大 3 つのデータポリシーを作成し、マスキング ルールとプリンシパル(ユーザーまたはグループを表す)をそのタグにマッピングします。
- ポリシータグを列に設定します。これにより、ポリシータグに関連付けられているデータポリシーが、選択した列にマッピングされます。
- マスクされたデータにアクセスできるユーザーを「BigQuery のマスクされた読み取り」のロールに割り当てます。ベスト プラクティスとして、データポリシー レベルで BigQuery のマスクされた読み取りロールを割り当てることをおすすめします。プロジェクト レベル以上でロールを割り当てると、プロジェクト内のすべてのデータポリシーに対する権限がユーザーに付与されます。これにより、過剰な権限が原因で問題が発生する場合があります。
データポリシーを操作するには、 Trusted Cloud コンソールまたは BigQuery Data Policy API を使用します。
これらの手順を完了すると、所属しているグループと付与されたロールに応じて、その列に対してクエリを実行するユーザーに、マスクされていないデータ、マスクされたデータ、またはアクセス拒否エラーが表示されます。詳細については、マスクされた読み取りロールときめ細かい読み取りロールの仕組みをご覧ください。
また、列にデータポリシーを直接適用することもできます(プレビュー)。詳細については、列でデータポリシーを使用してデータを直接マスクするをご覧ください。
ポリシータグを使用してデータをマスクする
ポリシータグを使用して、センシティブ データを選択的に難読化します。
始める前に
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the Data Catalog and BigQuery Data Policy APIs.
- BigQuery は、新しいプロジェクトでは自動的に有効になりますが、既存のプロジェクトでは有効にする必要がある場合があります。
-
Enable the BigQuery API.
- カスタム マスキング ルーティンを参照するデータポリシーを作成する場合は、関連するマスキング UDF を作成して、以降のステップで使用できるようにします。
- Trusted Cloud コンソールで [ポリシータグの分類] ページを開きます。
- [分類の作成] をクリックします。
[新しい分類] ページで次の操作を行います。
- [分類名] に、作成する分類の名前を入力します。
- [説明] に、説明を入力します。
- 必要に応じて、[プロジェクト] に表示されているプロジェクトを変更します。
- 必要に応じて、[場所] に表示されている場所を変更します。
- [ポリシータグ] に、ポリシータグの名前と説明を入力します。
- ポリシータグの子ポリシータグを追加するには、[サブタグを追加] をクリックします。
- 別のポリシータグと同じレベルに新しいポリシータグを追加するには、[+ ポリシータグを追加] をクリックします。
- 必要に応じて、分類にポリシータグと子ポリシータグをさらに追加します。
- ポリシータグの階層の作成が完了したら、[作成] をクリックします。
taxonomies.create
を呼び出して分類を作成します。taxonomies.policytag.create
を呼び出してポリシータグを作成します。- Trusted Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- [データポリシー名] に、データポリシーの名前を入力します。データポリシー名は、データポリシーが存在するプロジェクト内で一意である必要があります。
- [マスキング ルール] で、事前定義されたマスキング ルールまたはカスタム マスキング ルーティンを選択します。カスタム マスキング ルーチンを選択する場合は、プロジェクト レベルの
bigquery.routines.get
権限とbigquery.routines.list
権限の両方があることを確認してください。 - [プリンシパル] に、列に対するマスクアクセスを許可する 1 人以上のユーザーまたはグループの名前を入力します。ここに入力するすべてのユーザーとグループには、「BigQuery のマスクされた読み取り」のロールが付与されています。
- [送信] をクリックします。
create
メソッドを呼び出します。次の要件を満たすDataPolicy
リソースを渡します。dataPolicyType
フィールドがDATA_MASKING_POLICY
に設定されている。dataMaskingPolicy
フィールドが、使用するデータ マスキング ルールまたはルーチンを識別する。dataPolicyId
フィールドに指定されているデータポリシー名が、そのポリシーが存在するプロジェクト内で一意である。
setIamPolicy
メソッドを呼び出し、Policy
を渡します。Policy
は、マスクされたデータへのアクセス権が付与されているプリンシパルを識別し、role
フィールドにroles/bigquerydatapolicy.maskedReader
を指定する必要があります。Trusted Cloud コンソールで [BigQuery] ページを開きます。
BigQuery Explorer で、更新するテーブルを見つけて選択します。そのテーブルのテーブル スキーマが開きます。
[スキーマを編集] をクリックします。
[現在のスキーマ] 画面でターゲット列を選択し、[ポリシータグを追加] をクリックします。
[ポリシータグを追加] 画面で、列に適用するポリシータグを選択します。
[選択] をクリックします。画面は次のようになります。
[保存] をクリックします。
ローカル ファイルにスキーマを書き込みます。
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
- Trusted Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- 必要に応じて、マスキング ルールを変更します。
- 省略可: プリンシパルを追加または削除します。
- [送信] をクリックします。
- Trusted Cloud コンソールで [ポリシータグの分類] ページを開きます。
- 分類の名前をクリックして開きます。
- ポリシータグを選択します。
- [データポリシーを管理] をクリックします。
- 削除するデータポリシーの横にある をクリックします。
- [送信] をクリックします。
- [確認] をクリックします。
dataPolicyType
フィールドがDATA_MASKING_POLICY
またはRAW_DATA_ACCESS_POLICY
に設定されている。dataMaskingPolicy
フィールドが、使用するデータ マスキング ルールまたはルーチンを識別する。dataPolicyId
フィールドには、データポリシーが存在するプロジェクト内で一意のデータポリシーの名前を指定します。-
bigquery.tables.update
-
bigquery.tables.setColumnDataPolicy
-
bigquery.dataPolicies.get
v2.projects.locations.datapolicies
リソースを使用する必要があります。- 同じ列にポリシータグとデータポリシーの両方を適用することはできません。
- 列に適用できるデータポリシーは最大 8 個です。
- テーブルは、列を通じて最大 1,000 個の一意のデータポリシーを参照できます。
- 同じ列にポリシータグとデータポリシーの両方を適用することはできません。
- クエリで参照できるデータポリシーは最大 2,000 個です。
- データポリシーを削除できるのは、テーブル列が参照していない場合のみです。
- ユーザーに
maskedAccess
ロールのみが付与されている場合、tabledata.list
API 呼び出しは失敗します。 - ユーザーが元データにアクセスできない場合、列データポリシーで保護されたテーブルに対するテーブルコピー オペレーションは失敗します。
- リージョン間のテーブルコピー オペレーションは、列データポリシーで保護されたテーブルをサポートしていません。
- BigQuery Omni リージョンでは、列データポリシーは使用できません。
- ターゲット テーブルに列データポリシーがある場合、レガシー SQL は失敗します。
- 読み込みジョブは、列データポリシーを含むユーザー指定のスキーマをサポートしていません。
- 宛先テーブルを上書きすると、
--destination_schema
フラグを使用して列データポリシーを含むスキーマを指定しない限り、既存のポリシータグがテーブルから削除されます。 - デフォルトでは、データ マスキングはパーティション分割列またはクラスタ化列をサポートしていません。これは、列データポリシーに固有の制限ではなく、データ マスキングの一般的な制限です。パーティショニング列またはクラスタリング列に対するデータ マスキングは、クエリ費用を大幅に増加させる可能性があります。
分類の作成
分類を作成するユーザーまたはサービス アカウントには、Data Catalog ポリシータグ管理者ロールが必要です。
コンソール
API
既存の分類を使用するには、次の手順の最初の 2 つのステップの代わりに taxonomies.import
を呼び出します。
ポリシータグを使用する
ポリシータグの操作方法(ポリシータグの表示や更新の方法など)の詳細については、ポリシータグの操作をご覧ください。ベスト プラクティスについては、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 つは、列レベルのアクセス制御設定用に予約されています。
コンソール
API
ポリシータグを列に設定する
データポリシーに関連付けられたポリシータグを列に適用して、列にデータポリシーを設定します。
ポリシータグを設定するユーザーまたはサービス アカウントには、datacatalog.taxonomies.get
権限と bigquery.tables.setCategory
権限が必要です。datacatalog.taxonomies.get
は、Data Catalog ポリシータグ管理者とプロジェクト閲覧者のロールに含まれています。bigquery.tables.setCategory
は、BigQuery 管理者(roles/bigquery.admin
)と BigQuery データオーナー(roles/bigquery.dataOwner
)のロールに含まれています。
Trusted Cloud コンソールで組織内のすべてのプロジェクトの分類とポリシータグを表示するには、resourcemanager.organizations.get
権限が必要です。この権限は、組織閲覧者のロールに含まれています。
コンソール
Trusted Cloud コンソールを使用してスキーマを変更し、ポリシータグを設定します。
bq
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 閲覧者のロールに含まれています。
コンソール
API
データ マスキング ルールを変更するには、patch
メソッドを呼び出し、dataMaskingPolicy
フィールドが更新された DataPolicy
リソースを渡します。
データポリシーに関連付けられたプリンシパルを変更するには、setIamPolicy
メソッドを呼び出し、マスクされたデータへのアクセスが許可されているプリンシパルを更新する Policy
を渡します。
データポリシーを削除する
データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.delete
権限が必要です。この権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。
コンソール
API
データポリシーを削除するには、delete
メソッドを呼び出します。
列にデータポリシーを適用してデータをマスクする
ポリシータグを作成する代わりに、データポリシーを作成して列に直接適用することもできます。
データポリシーを操作する
BigQuery Data Policy API を使用して、データポリシーの作成、更新、削除を行うことができます。列にデータポリシーを直接適用する場合、 Trusted Cloud コンソールの [ポリシータグの分類] ページは使用できません。
データポリシーを操作するには、v2.projects.locations.datapolicies
リソースを使用します。
データポリシーを作成する
データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.create
権限が必要です。
bigquery.dataPolicies.create
権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。datacatalog.taxonomies.get
権限は、Data Catalog 管理者と Data Catalog 閲覧者のロールに含まれています。
カスタム マスキング ルーチンを参照するデータポリシーを作成する場合は、ルーチン権限も必要です。
カスタム マスキングを使用する場合は、ユーザーがルーチンとデータポリシーの両方に必要な権限を得られるように、BigQuery データオーナーのロールを付与します。
データポリシーを作成するには、create
メソッドを呼び出します。次の要件を満たす DataPolicy
リソースを渡します。
データポリシーを更新する
データポリシーを更新するユーザーまたはサービス アカウントには、bigquery.dataPolicies.update
権限が必要です。
bigquery.dataPolicies.update
権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。
データ マスキング ルールを変更するには、patch
メソッドを呼び出し、dataMaskingPolicy
フィールドが更新された DataPolicy
リソースを渡します。
きめ細かいアクセス制御にデータポリシーへのアクセス権を付与することもできます。
きめ細かいアクセス制御にデータポリシーへのアクセス権を付与し、データポリシーを管理する権限は異なります。きめ細かいアクセス制御権限を制御するには、データポリシーの grantees
フィールドを更新する必要があります。データポリシーへのアクセスを制御するには、setIamPolicy
メソッドを使用して IAM ロールを設定します。
データポリシーに権限付与者を設定するには、v2 patch
メソッドを使用します。データポリシーの権限を管理するには、v1 setIamPolicy
メソッドを使用します。
データポリシーへのきめ細かいアクセス制御アクセス権を付与するには、patch
メソッドを呼び出し、grantees
フィールドが更新された DataPolicy
リソースを渡します。
データポリシーを削除する
データポリシーを作成するユーザーまたはサービス アカウントには、bigquery.dataPolicies.delete
権限が必要です。この権限は、BigQuery Data Policy 管理者、BigQuery 管理者、BigQuery データオーナーのロールに含まれています。
データポリシーを削除するには、delete
メソッドを呼び出します。
列にデータポリシーを直接割り当てる
ポリシータグを使用せずに、列にデータポリシーを直接割り当てることができます。
始める前に
列にデータポリシーを直接割り当てるために必要な権限を取得するには、テーブルに対する BigQuery データポリシー管理者 (roles/bigquerydatapolicy.admin
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
この事前定義ロールには、列にデータポリシーを直接割り当てるために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
列にデータポリシーを直接割り当てるには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
データポリシーを割り当てる
列にデータポリシーを直接割り当てるには、次のいずれかを行います。
SQL
データポリシーを列に適用するには、CREATE
TABLE
、ALTER TABLE ADD
COLUMN
、または ALTER COLUMN SET
OPTIONS
DDL ステートメントを使用します。
次の例では、CREATE TABLE
ステートメントを使用して、列にデータポリシーを設定します。
CREATE TABLE myproject.table1 ( name INT64 OPTIONS (data_policies=["{'name':'myproject.region-us.data_policy_name1'}", "{'name':'myproject.region-us.data_policy_name2'}"]) );
次の例では、ALTER COLUMN SET OPTIONS
を使用して、テーブルの既存の列にデータポリシーを追加します。
ALTER TABLE myproject.table1 ALTER COLUMN column_name SET OPTIONS ( data_policies += ["{'name':'myproject.region-us.data_policy_name1'}", "{'name':'myproject.region-us.data_policy_name2'}"]);
API
データポリシーを列に割り当てるには、テーブルで patch
メソッドを呼び出し、該当するデータポリシーでテーブル スキーマを更新します。
制限事項
列にデータポリシーを直接割り当てるには、次の制限があります。