機密データの匿名化と再識別
このドキュメントで説明するプロセスは、仮名化(またはトークン化)と呼ばれます。このプロセスでは、機密データの保護で暗号鍵を使用して機密テキストをトークンに変換(再識別)します。そのテキストを復元(再識別)するには、匿名化中に使用した暗号鍵とトークンが必要です。
機密データの保護は、可逆と非可逆の両方の暗号方式をサポートします。コンテンツを再識別するには、可逆方式を選択する必要があります。
ここで説明する暗号方式は、AES-SIV を使用した確定的暗号化(合成初期化ベクトルモードの高度暗号化標準: AES-SIV)と呼ばれます。機密データの保護がサポートしているすべての可逆暗号方法の中で、最高レベルのセキュリティを提供するため、この方法をおすすめします。
このドキュメントの手順(始める前にの手順は除く)は 10〜20 分で完了できます。
始める前に
- 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.
-
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
このガイドで既存のプロジェクトを使用する場合は、このガイドを完了するために必要な権限があることを確認します。新しいプロジェクトを作成した場合は、必要な権限がすでに付与されています。
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Sensitive Data Protection and Cloud KMS APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com -
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
このガイドで既存のプロジェクトを使用する場合は、このガイドを完了するために必要な権限があることを確認します。新しいプロジェクトを作成した場合は、必要な権限がすでに付与されています。
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Sensitive Data Protection and Cloud KMS APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com -
Cloud KMS 管理者 (
roles/cloudkms.admin) -
Cloud KMS 暗号鍵の暗号化 (
roles/cloudkms.cryptoKeyEncrypter) -
DLP ユーザー (
roles/dlp.user) キーリングの作成
gcloud kms keyrings create "dlp-keyring" \ --location "global"鍵を作成します。
gcloud kms keys create "dlp-key" \ --location "global" \ --keyring "dlp-keyring" \ --purpose "encryption"キーリングと鍵をリスティングします。
gcloud kms keys list \ --location "global" \ --keyring "dlp-keyring"次の出力が表示されます。
NAME: projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key PURPOSE: ENCRYPT_DECRYPT ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION PROTECTION_LEVEL: SOFTWARE LABELS: PRIMARY_ID: 1 PRIMARY_STATE: ENABLEDこの出力では、
PROJECT_IDはプロジェクトの ID です。NAMEの値は、Cloud KMS 鍵の完全リソース名です。この値は、匿名化リクエストと再識別リクエストで必要になるため、メモしておいてください。128 ビット、192 ビット、256 ビットの AES 鍵を作成します。次のコマンドは、
opensslを使用して、現在のディレクトリに 256 ビットのキーを作成します。openssl rand -out "./aes_key.bin" 32ファイル
aes_key.binが現在のディレクトリに追加されます。AES 鍵を base64 文字列としてエンコードします。
base64 -i ./aes_key.bin次のような出力が表示されます。
uEDo6/yKx+zCg2cZ1DBwpwvzMVNk/c+jWs7OwpkMc/s=PROJECT_ID: プロジェクトの ID。BASE64_ENCODED_AES_KEY: Base64 エンコードされた AES 鍵を作成するで返された base64 エンコード文字列。- キーリングと鍵を作成するで作成した Cloud KMS 鍵の完全リソース名。
- Cloud KMS 鍵を使用して AES 鍵をラップするで作成したラップされた鍵。
次のテキストを含む
deidentify-request.jsonという JSON リクエスト ファイルを作成します。{ "item": { "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com." }, "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "kmsWrapped": { "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key", "wrappedKey": "WRAPPED_KEY" } }, "surrogateInfoType": { "name": "EMAIL_ADDRESS_TOKEN" } } } } ] } }, "inspectConfig": { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ] } }次のように置き換えます。
PROJECT_ID: 実際のプロジェクトの ID。WRAPPED_KEY: Cloud KMS 鍵を使用して AES 鍵をラップするで作成したラップされた鍵。
cryptoKeyNameの結果の値が Cloud KMS 鍵の完全リソース名を形成していることを確認します。この JSON リクエストのコンポーネントの詳細については、
projects.locations.content.deidentifyをご覧ください。このタスクを完了したら、このリクエストに対して異なる入力をテストしてみてください。ここで説明するように、curlを使用できます。または、[このメソッドを試す] で当該 API リファレンス ページの API Explorer を使用することもできます。curlを使用してprojects.locations.content.deidentifyリクエストを作成します。curl -s \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:deidentify \ -d @deidentify-request.jsonPROJECT_IDは、プロジェクトの ID に置き換えます。curlにファイル名を渡すには、-dオプション(データの場合)を使用して、ファイル名の前に@記号を付けます。このファイルは、curlコマンドを実行するディレクトリと同じディレクトリに存在する必要があります。機密データの保護からのレスポンスは、次の JSON のようになります。
{ "item": { "value": "My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q." }, "overview": { "transformedBytes": "22", "transformationSummaries": [ { "infoType": { "name": "EMAIL_ADDRESS" }, "transformation": { "cryptoDeterministicConfig": { "cryptoKey": { "kmsWrapped": { "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=", "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key" } }, "surrogateInfoType": { "name": "EMAIL_ADDRESS_TOKEN" } } }, "results": [ { "count": "1", "code": "SUCCESS" } ], "transformedBytes": "22" } ] } }itemフィールドで、メールアドレスがEMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/qのようなトークンに置き換えられます。レスポンスのトークンの値をメモします。匿名化されたコンテンツを再識別するには、再識別リクエストでトークン全体を渡します。- キーリングと鍵を作成するで作成した Cloud KMS 鍵の完全リソース名。
- Cloud KMS 鍵を使用して AES 鍵をラップするで作成したラップされた鍵。
- 匿名化リクエストを DLP API に送信するで受け取ったトークン。
次のテキストを含む
reidentify-request.jsonという JSON リクエスト ファイルを作成します。{ "reidentifyConfig":{ "infoTypeTransformations":{ "transformations":[ { "infoTypes":[ { "name":"EMAIL_ADDRESS_TOKEN" } ], "primitiveTransformation":{ "cryptoDeterministicConfig":{ "cryptoKey":{ "kmsWrapped": { "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key", "wrappedKey": "WRAPPED_KEY" } }, "surrogateInfoType":{ "name":"EMAIL_ADDRESS_TOKEN" } } } } ] } }, "inspectConfig":{ "customInfoTypes":[ { "infoType":{ "name":"EMAIL_ADDRESS_TOKEN" }, "surrogateType":{ } } ] }, "item":{ "value": "My name is Alicia Abernathy, and my email address is TOKEN." } }次のように置き換えます。
PROJECT_ID: 実際のプロジェクトの ID。WRAPPED_KEY: Cloud KMS 鍵を使用して AES 鍵をラップするで作成したラップされた鍵。TOKEN: DLP API に匿名化リクエストを送信するで受け取ったトークン(EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/qなど)。
cryptoKeyNameの結果の値が Cloud KMS 鍵の完全リソース名を形成していることを確認します。この JSON リクエストのコンポーネントの詳細については、
projects.locations.content.reidentifyをご覧ください。このタスクを完了したら、このリクエストに対して異なる入力をテストしてみてください。ここで説明するように、curlを使用できます。または、[このメソッドを試す] で当該 API リファレンス ページの API Explorer を使用します。curlを使用してprojects.locations.content.reidentifyリクエストを作成します。curl -s \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:reidentify \ -d @reidentify-request.jsonPROJECT_IDは、プロジェクトの ID に置き換えます。curlにファイル名を渡すには、-dオプション(データの場合)を使用して、ファイル名の前に@記号を付けます。このファイルは、curlコマンドを実行するディレクトリと同じディレクトリに存在する必要があります。機密データの保護からのレスポンスは、次の JSON のようになります。
{ "item": { "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com." }, "overview": { "transformedBytes": "70", "transformationSummaries": [ { "infoType": { "name": "EMAIL_ADDRESS" }, "transformation": { "cryptoDeterministicConfig": { "cryptoKey": { "kmsWrapped": { "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=", "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key" } }, "surrogateInfoType": { "name": "EMAIL_ADDRESS_TOKEN" } } }, "results": [ { "count": "1", "code": "SUCCESS" } ], "transformedBytes": "70" } ] } }itemフィールドで、メールアドレス トークンは元のテキストの実際のメールアドレスに置き換えられています。これで、確定的暗号化を使用して、テキスト コンテンツ内の機密データの匿名化と再識別が完了しました。
- 機密コンテンツの匿名化の詳細については、機密データの匿名化をご覧ください。
- 匿名化ワークフローを実際のデプロイに適用する方法については、機密データの保護を使用した大規模なデータセットにおける PII の匿名化と再識別をご覧ください。
- 暗号鍵によるデータのトークン化の概念については、仮名化をご覧ください。
必要なロール
ラップされた AES 鍵の作成、機密データの匿名化、再識別に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
キーリングと鍵を作成する
この手順を開始する前に、機密データの保護で匿名化と再識別リクエストを処理する場所を決定してください。Cloud KMS 鍵を作成するときは、global か、機密データの保護リクエストに使用するリージョンと同じリージョンに保管する必要があります。そうしないと、Sensitive Data Protection リクエストは失敗します。
サポートされているロケーションのリストについては、機密データの保護のロケーションをご覧ください。選択したリージョンの名前をメモします(例: us-west1)。
この手順では、すべての API リクエストのロケーションとして global を使用します。別のリージョンを使用する場合は、global をリージョン名に置き換えます。
base64 でエンコードされた AES 鍵を作成する
このセクションでは、Advanced Encryption Standard(AES)鍵を作成して、base64 形式でエンコードする方法について説明します。
Cloud KMS 鍵を使用して AES 鍵をラップする
このセクションでは、キーリングと鍵を作成するで作成した Cloud KMS 鍵を使用して、base64 でエンコードされた AES 鍵を作成するで作成した base64 でエンコードされた AES 鍵をラップする方法について説明します。
AES 鍵をラップするには、curl を使用して次のリクエストを Cloud KMS API projects.locations.keyRings.cryptoKeys.encrypt メソッドに送信します。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key:encrypt" \
--request "POST" \
--header "Authorization:Bearer $(gcloud auth application-default print-access-token)" \
--header "content-type: application/json" \
--data "{\"plaintext\": \"BASE64_ENCODED_AES_KEY\"}"
次のように置き換えます。
Cloud KMS からのレスポンスは、次の JSON のようになります。
{
"name": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key/cryptoKeyVersions/1",
"ciphertext": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
"ciphertextCrc32c": "901327763",
"protectionLevel": "SOFTWARE"
}
この出力では、PROJECT_ID はプロジェクトの ID です。
レスポンスの ciphertext の値をメモします。それがラップされた鍵です。
匿名化リクエストを DLP API に送信する
このセクションでは、テキスト コンテンツ内の機密データを匿名化する方法について説明します。
このタスクを完了するには、次のものが必要です。
サンプル リクエストを JSON ファイルに保存する必要があります。Cloud Shell を使用する場合は、Cloud Shell エディタを使用してファイルを作成します。エディタを起動するには、Cloud Shell ツールバーにある [エディタを開く] をクリックします。
テキスト コンテンツ内の機密データを匿名化するには、次の手順を行います。
再識別リクエストを DLP API に送信する
このセクションでは、テキスト コンテンツ内のトークン化されたデータを再識別する方法について説明します。
このタスクを完了するには、次のものが必要です。
トークン化されたコンテンツを再識別するには、次の手順に従います。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む Google Cloud プロジェクトを削除します。
鍵バージョンを破棄する
このタスクで作成した鍵がもう不要になった場合は、そのバージョンを破棄します。
自分の鍵で使用できるバージョンを一覧表示します。
gcloud kms keys versions list \
--location "global" \
--keyring "dlp-keyring" \
--key "dlp-key"
バージョンを破棄するには、次のコマンドを実行します。
gcloud kms keys versions destroy KEY_VERSION \
--location "global" \
--keyring "dlp-keyring" \
--key "dlp-key"
KEY_VERSION は、破棄するバージョン番号(1 など)に置き換えます。
プロジェクトの削除
このタスク用に新しいプロジェクトを作成した場合、追加料金の発生を防ぐ最も簡単な方法としては、プロジェクトを削除します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
認証情報を取り消す
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke