このページでは、Cloud Data Loss Prevention API を使用して Cloud Storage リソースを検査し、データの匿名化されたコピーを作成する方法について説明します。
このオペレーションは、ビジネス プロセスで使用するファイルに個人情報(PII)などの機密データが含まれていないことを確認するのに役立ちます。機密データの保護では、機密データに関して Cloud Storage バケット内のファイルを検査し、それらのファイルの匿名化されたコピーを別のバケット内に作成できます。それから、匿名化されたコピーをビジネス プロセスで使用できます。
この機能の詳細については、Cloud Storage 内の機密データの匿名化をご覧ください。
準備
このページでは、次のことを前提としています。
課金を有効にしている。
機密データの保護を有効にしている。
匿名化するデータを含む Cloud Storage バケットがある。
HTTP リクエストを DLP API に送信する方法を理解している。詳細については、DLP API を使用して機密テキストを検査するをご覧ください。
このオペレーションに関する制限事項と考慮事項について参照してください。
ストレージの検査には OAuth スコープ https://www.googleapis.com/auth/cloud-platform
が必要です。詳細については、DLP API に対する認証をご覧ください。
必要な IAM のロール
このオペレーションのすべてのリソースが同じプロジェクトにある場合、サービス エージェントに対する DLP API サービス エージェントのロール(roles/dlp.serviceAgent
)で十分です。そのロールを使用すると、次のことができます。
- 検査ジョブを作成する
- 入力ディレクトリ内のファイルを読み取る
- 出力ディレクトリに匿名化されたファイルを書き込む
- 変換の詳細を BigQuery テーブルに書き込む
関連するリソースには、検査ジョブ、匿名化テンプレート、入力バケット、出力バケット、変換の詳細テーブルがあります。
リソースを別のプロジェクトに用意する必要がある場合は、プロジェクトのサービス エージェントに次のロールも付与してください。
- 入力バケットまたはそれを含むプロジェクトに対するストレージ オブジェクト閲覧者のロール(
roles/storage.objectViewer
)。 - 出力バケットまたはバケットを含むプロジェクトに対するストレージ オブジェクト作成者のロール(
roles/storage.objectCreator
)。 - 変換の詳細テーブルまたはテーブルを含むプロジェクトに対する BigQuery データ編集者のロール(
roles/bigquery.dataEditor
)。
Google 管理のサービス アカウントであるサービス エージェントにロールを付与するには、単一のロールを付与するをご覧ください。次のレベルでアクセスを制御することもできます。
API の概要
Cloud Storage に保存されているコンテンツの匿名化コピーを作成するには、指定した基準に従って機密データを探索する検査ジョブを構成します。それから、検査ジョブ内で匿名化手順を Deidentify
アクションの形式で提供します。
バケット内のファイルのサブセットのみをスキャンする場合は、ジョブがスキャンするファイルを制限します。匿名化を使用するジョブでサポートされているオプションは、タイプ(FileType
)と正規表現(FileSet
)によるファイル フィルタリングです。
Deidentify
アクションを有効にすると、機密データ保護はデフォルトで、スキャン結果に含まれるすべてのサポートされているファイル形式の匿名化された(変換された)コピーを作成します。ただし、サポートされているファイル形式のサブセットのみを変換するようにジョブを構成できます。
省略可: 匿名化テンプレートを作成する
発見の変換方法を制御する場合は、次のテンプレートを作成します。これらのテンプレートでは、構造化ファイル、非構造化ファイル、画像での発見を変換できます。
匿名化テンプレート: 非構造化ファイル(自由形式のテキスト ファイルなど)に使用するデフォルトの
DeidentifyTemplate
。このタイプのDeidentifyTemplate
に、構造化コンテンツでのみサポートされているRecordTransformations
オブジェクトを含めることはできません。このテンプレートが存在しない場合、機密データの保護はReplaceWithInfoTypeConfig
メソッドを使用して非構造化ファイルを変換します。構造化匿名化テンプレート: 構造化ファイル(CSV ファイルなど)に使用する
DeidentifyTemplate
。このDeidentifyTemplate
にはRecordTransformations
を含めることができます。このテンプレートが存在しない場合、機密データの保護は作成したデフォルトの匿名化テンプレートを使用します。それも存在しない場合、機密データの保護はReplaceWithInfoTypeConfig
メソッドを使用して構造化ファイルを変換します。画像秘匿化テンプレート: 画像に使用される
DeidentifyTemplate
。このテンプレートには、ImageTransformations
オブジェクトを含める必要があります。このテンプレートが存在しない場合、機密データの保護は画像内のすべての検出結果をブラック ボックスで秘匿化します。
詳しくは匿名化テンプレートの作成をご覧ください。
匿名化アクションを含む検査ジョブを作成する
DlpJob
オブジェクトでは、検査の対象、機密データと判定されるデータの種類、検出結果の処理方法を指定します。
Cloud Storage ディレクトリ内の機密データを匿名化するには、DlpJob
で少なくとも次の項目を定義する必要があります。
StorageConfig
オブジェクト。検査する Cloud Storage ディレクトリを指定します。InspectConfig
オブジェクト。探索対象のデータのタイプと、機密データを発見するための追加の検査手順が含まれます。以下を含む
Deidentify
アクション。TransformationConfig
オブジェクト。構造化ファイルと非構造化ファイルのデータを匿名化するために作成した任意のテンプレートを指定します。画像の機密データを秘匿化するための構成を含めることもできます。TransformationConfig
オブジェクトを含めない場合、機密データの保護はテキスト内の機密データをその infoType に置き換えます。画像では、ブラック ボックスを使用して機密データを対象にします。TransformationDetailsStorageConfig
オブジェクト。機密データの保護で各変換の詳細を保存する必要がある BigQuery テーブルを指定します。各変換の詳細には、説明、成功またはエラーコード、エラーの詳細、変換されたバイト数、変換されたコンテンツの場所、機密データの保護が変換を行った検査ジョブの名前などが含まれます。このテーブルには、実際の匿名化されたコンテンツは保存されません。
データが BigQuery テーブルに書き込まれると、課金と割り当て使用量は、宛先テーブルが含まれるプロジェクトに適用されます。
コピーされたコンテンツが匿名化されると、匿名化ジョブは終了します。ジョブには、指定した変換が適用された回数の概要が含まれます。この値は、DlpJob
の projects.dlpJobs.get
メソッドを使用して取得できます。返される DlpJob
には、DeidentifyDataSourceDetails
オブジェクトと InspectDataSourceDetails
オブジェクトの両方が含まれます。これらのオブジェクトには、それぞれ Deidentify
アクションと検査ジョブの結果の両方が含まれます。
DlpJob
に TransformationDetailsStorageConfig
オブジェクトを含めると、変換の詳細に関するメタデータを含む BigQuery テーブルが作成されます。行われる変換ごとに、機密データの保護によってテーブルに 1 行のメタデータが書き込まれます。テーブルの内容の詳細については、変換の詳細のリファレンスをご覧ください。
コードの例
次の例は、DLP API を使用して Cloud Storage ファイルの匿名化されたコピーを作成する方法を示しています。
HTTP メソッドと URL
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
JSON 入力{
"inspect_job": {
"storage_config": {
"cloud_storage_options": {
"file_set": {
"url": "INPUT_DIRECTORY"
}
}
},
"inspect_config": {
"info_types": [
{
"name": "PERSON_NAME"
}
]
},
"actions": {
"deidentify": {
"cloud_storage_output": "OUTPUT_DIRECTORY",
"transformation_config": {
"deidentify_template": "DEIDENTIFY_TEMPLATE_NAME",
"structured_deidentify_template": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"image_redact_template": "IMAGE_REDACTION_TEMPLATE_NAME"
},
"transformation_details_storage_config": {
"table": {
"project_id": "TRANSFORMATION_DETAILS_PROJECT_ID",
"dataset_id": "TRANSFORMATION_DETAILS_DATASET_ID",
"table_id": "TRANSFORMATION_DETAILS_TABLE_ID"
}
},
"fileTypesToTransform": ["IMAGE","CSV", "TEXT_FILE"]
}
}
}
}
次のように置き換えます。
PROJECT_ID
: 検査 ジョブを保存するプロジェクトの ID。INPUT_DIRECTORY
: 検査する Cloud Storage ディレクトリ(たとえば、gs://input-bucket/folder1/folder1a
)。URL が末尾のスラッシュで終わる場合、INPUT_DIRECTORY
内のいかなるサブディレクトリもスキャンされません。OUTPUT_DIRECTORY
: 匿名化されたファイルを保存する Cloud Storage ディレクトリ。このディレクトリは、INPUT_DIRECTORY
と同じ Cloud Storage バケット内にすることはできません。DEIDENTIFY_TEMPLATE_NAME
: 構造化ファイルと非構造化ファイル用のデフォルトの匿名化テンプレートの完全なリソース名(作成した場合)。この値は、形式projects/projectName/(locations/locationId)/deidentifyTemplates/templateName
にする必要があります。STRUCTURED_DEIDENTIFY_TEMPLATE_NAME
: 構造化ファイル用の匿名化テンプレートの完全なリソース名(作成した場合)。この値は、形式projects/projectName/(locations/locationId)/deidentifyTemplates/templateName
にする必要があります。IMAGE_REDACTION_TEMPLATE_NAME
: 画像用の秘匿化テンプレートの完全なリソース名(作成した場合)。この値は、形式projects/projectName/(locations/locationId)/deidentifyTemplates/templateName
にする必要があります。TRANSFORMATION_DETAILS_PROJECT_ID
: 変換の詳細を保存するプロジェクトの ID。TRANSFORMATION_DETAILS_DATASET_ID
: 変換の詳細を保存する BigQuery データセットの ID。テーブル ID を指定しない場合、システムで自動的に作成されます。TRANSFORMATION_DETAILS_TABLE_ID
: 変換の詳細を保存する BigQuery テーブルの ID。
次のオブジェクトに注目してください。
inspectJob
: ジョブの構成オブジェクト(DlpJob
)。このオブジェクトには、検査と匿名化の両方のステージの構成が含まれています。storageConfig
: 検査するコンテンツの場所(StorageConfig
)。この例では、Cloud Storage バケットCloudStorageOptions
を指定します。inspectConfig
: 検査する機密データに関する情報(InspectConfig
)。この例では、組み込みinfoTypePERSON_NAME
に一致するコンテンツを検査します。actions
: ジョブの検査部分が完了した後にとるアクション(Action
)。deidentify
: このアクションを指定すると、内部で指定された構成に従って、機密データの保護は一致した機密データを匿名化します(Deidentify
)。cloud_storage_output
: 検査する Cloud Storage ディレクトリの URL を指定します。transformation_config
: 機密データの保護が、構造化ファイル、非構造化ファイル、画像内の機密データを匿名化する方法を指定します(TransformationConfig
)。TransformationConfig
オブジェクトを含めない場合、機密データの保護はテキスト内の機密データをその infoType に置き換えます。画像では、ブラック ボックスを使用して機密データを対象にします。transformation_details_storage_config
: 機密データの保護が、このジョブに対して実行する各変換に関するメタデータを保存する必要があることを指定します。また、機密データの保護がメタデータ(TransformationDetailsStorageConfig
)を格納する必要があるテーブルのロケーションと名前も指定します。fileTypesToTransform
: 匿名化オペレーションを一覧表示したファイル形式のみに制限します。このフィールドを設定しない場合、検査オペレーションに含まれたサポート対象のすべてのファイル形式も匿名化オペレーションに含まれます。この例では、たとえサポートされているすべてのファイル形式を検査するようにDlpJob
を構成している場合でも、機密データの保護は画像、CSV、テキスト ファイルのみを匿名化します。
REST API を使用して検査ジョブを作成する
検査ジョブ(DlpJob
)を作成するには、projects.dlpJobs.create
リクエストを送信します。cURL を使用してリクエストを送信するには、前述の REST の例を JSON ファイルとして保存し、次のコマンドを実行します。
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs \
-d @PATH_TO_JSON_FILE
次のように置き換えます。
PROJECT_ID
:DlpJob
を保存したプロジェクトの ID。PATH_TO_JSON_FILE
: リクエスト本文を含む JSON ファイルへのパス。
機密データの保護は、新しく作成された DlpJob
、そのステータス、設定した検査構成のスナップショットを返します。
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "PENDING", ... }
検査ジョブの結果を取得する
DlpJob
の結果を取得するには、projects.dlpJobs.get
リクエストを送信します。
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs/JOB_ID
次のように置き換えます。
PROJECT_ID
:DlpJob
を保存したプロジェクトの ID。JOB_ID
:DlpJob
を作成した際に返されたジョブの ID。
オペレーションが完了すると、次のようなレスポンスを受け取ります。
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "DONE", "inspectDetails": { "requestedOptions": { "snapshotInspectTemplate": {}, "jobConfig": { "storageConfig": { "cloudStorageOptions": { "fileSet": { "url": "INPUT_DIRECTORY" } } }, "inspectConfig": { "infoTypes": [ { "name": "PERSON_NAME" } ], "limits": {} }, "actions": [ { "deidentify": { "transformationDetailsStorageConfig": { "table": { "projectId": "TRANSFORMATION_DETAILS_PROJECT_ID", "datasetId": "TRANSFORMATION_DETAILS_DATASET_ID", "tableId": "TRANSFORMATION_DETAILS_TABLE_ID" } }, "transformationConfig": { "deidentifyTemplate": "DEIDENTIFY_TEMPLATE_NAME", "structuredDeidentifyTemplate": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "imageRedactTemplate": "IMAGE_REDACTION_TEMPLATE_NAME" }, "fileTypesToTransform": [ "IMAGE", "CSV", "TEXT_FILE" ], "cloudStorageOutput": "OUTPUT_DIRECTORY" } } ] } }, "result": { "processedBytes": "25242", "totalEstimatedBytes": "25242", "infoTypeStats": [ { "infoType": { "name": "PERSON_NAME" }, "count": "114" } ] } }, "createTime": "2022-06-09T23:00:53.380Z", "startTime": "2022-06-09T23:01:27.986383Z", "endTime": "2022-06-09T23:02:00.443536Z", "actionDetails": [ { "deidentifyDetails": { "requestedOptions": { "snapshotDeidentifyTemplate": { "name": "DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T17:46:34.208923Z", "updateTime": "2022-06-09T17:46:34.208923Z", "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "characterMaskConfig": { "maskingCharacter": "*", "numberToMask": 25 } } } ] } }, "locationId": "global" }, "snapshotStructuredDeidentifyTemplate": { "name": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T20:51:12.411456Z", "updateTime": "2022-06-09T21:07:53.633149Z", "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "Name" } ], "primitiveTransformation": { "replaceConfig": { "newValue": { "stringValue": "[redacted]" } } } } ] } }, "locationId": "global" }, "snapshotImageRedactTemplate": { "name": "IMAGE_REDACTION_TEMPLATE_NAME", "createTime": "2022-06-09T20:52:25.453564Z", "updateTime": "2022-06-09T20:52:25.453564Z", "deidentifyConfig": {}, "locationId": "global" } }, "deidentifyStats": { "transformedBytes": "3972", "transformationCount": "110" } } } ], "locationId": "global" }
次のステップ
- ストレージ内のデータの匿名化プロセスの詳細を学習する。
- Google Cloud コンソールを使用してストレージ内のデータを匿名化する方法を確認する。
- Cloud Storage で匿名化されたデータのコピーを作成する Codelab に取り組みます。
- 匿名化のための変換の詳細を確認する。
- 機密データについてストレージを検査する方法を確認する。