このページでは、BigQuery にエクスポートされた機密データの保護の検出結果を分析するために使用できるクエリの例を示します。
検査のジョブまたはジョブトリガーを構成して、結果を BigQuery に保存できます。これにより、検出結果をクエリして詳細な分析を行うことができます。検出結果が BigQuery にエクスポートされると、データが新しいテーブルまたは既存のテーブルに書き込まれます。
検査後に機密データの保護が実行できるすべてのアクションの詳細については、アクションのコンセプトのトピックをご覧ください。
クエリの実行の詳細については、以下をご覧ください。
BigQuery テーブルの列
エクスポートされた検出結果のテーブルの列は、Finding
オブジェクトの属性に基づいています。
検出結果を含む行に結果をリンクする
BigQuery テーブルの検査を構成する場合は、エクスポートされた検出結果に行の識別子を含めるようにジョブまたはジョブトリガーを設定できます。そうすることで、検査検出結果を、それらを含む行にリンクできます。
検査ジョブまたはジョブ トリガーで、次のフィールドを、テーブル内の各行を一意に識別する列の名前(主キーの目的を果たす列)に設定します。
- Google Cloud コンソールを使用している場合は、[識別フィールド(カンマ区切り)] フィールドを設定します。
- DLP API を使用している場合は、
identifyingFields
プロパティを設定します。
検査が完了し、検出結果が BigQuery にエクスポートされると、各検出結果には指定した列の対応する値が含まれます。これらの値は location.content_locations.record_location.record_key.id_values
フィールドに格納されます。これらの値を使用して、検出結果を検査した BigQuery テーブルの特定の行にリンクできます。
サンプルクエリ
以下のサンプルクエリを使用して、検出結果を分析できます。このクエリは、Looker Studio などの可視化ツールでも使用できます。これらのクエリは、検出データのクエリを始める際にご利用いただくために提供されています。
次の各クエリは、以下に置き換えます。
PROJECT_ID
: プロジェクト IDDATASET
: BigQuery データセット名TABLE_ID
: テーブル ID。
各 infoType の数を選択する
Google Cloud コンソール
SELECT info_type.name, COUNT(info_type.name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID` GROUP BY info_type.name ORDER BY count DESC;
コマンドライン
bq query --use_legacy_sql=false ' SELECT info_type.name, COUNT(info_type.name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID` GROUP BY info_type.name ORDER BY count DESC;'
各 infoType の数を日ごとに選択する
Google Cloud コンソール
SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY info_type.name, day ORDER BY count DESC;
コマンドライン
bq query --use_legacy_sql=false ' SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY info_type.name, day ORDER BY count DESC;'
各コンテナの各 infoType の数を選択する
Google Cloud コンソール
SELECT info_type.name, locations.container_name, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY locations.container_name, info_type.name ORDER BY count DESC;
コマンドライン
bq query --use_legacy_sql=false ' SELECT info_type.name, locations.container_name, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY locations.container_name,info_type.name ORDER BY count DESC;'
テーブルの各列の検出タイプを選択する
このクエリは、すべての検出結果を列名でグループ化し、BigQuery 検査ジョブの検出結果を処理します。このクエリは、特定の列のタイプを特定する場合に役立ちます。設定を調整するには、WHERE 句と HAVING 句を変更します。たとえば、複数のテーブルの結果が結果テーブルに含まれている場合、これらの結果を 1 つのジョブ実行または 1 つのテーブル名に制限できます。
Google Cloud コンソール
SELECT table_counts.field_name, STRING_AGG( CONCAT(" ",table_counts.name," [count: ",CAST(table_counts.count_total AS String),"]") ORDER BY table_counts.count_total DESC) AS infoTypes FROM ( SELECT locations.record_location.field_id.name AS field_name, info_type.name, COUNT(*) AS count_total FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations WHERE (likelihood = 'LIKELY' OR likelihood = 'VERY_LIKELY' OR likelihood = 'POSSIBLE') GROUP BY locations.record_location.field_id.name, info_type.name HAVING count_total>200 ) AS table_counts GROUP BY table_counts.field_name ORDER BY table_counts.field_name
上記のクエリで、サンプル テーブルに対して次のような結果が生成されることがあります。infoTypes 列には、その infoType のインスタンス数が表示されます。
field_name | infoTypes |
---|---|
field1 |
CUSTOM_USER_US [count: 7004] 、CUSTOM_USER_EU [count: 2996] |
field2 |
US_VEHICLE_IDENTIFICATION_NUMBER [count: 9597] |
field3 |
EMAIL_ADDRESS [count: 10000] |
field4 |
IP_ADDRESS [count: 10000] |
field5 |
PHONE_NUMBER [count: 7815] |
field6 |
US_SOCIAL_SECURITY_NUMBER [count: 10000] |
field7 |
CREDIT_CARD_NUMBER [count: 10000] |