センシティブ データの匿名化と再識別
このドキュメントで説明するプロセスは、仮名化 (またはトークン化)と呼ばれます。このプロセスでは、Sensitive Data Protection で暗号鍵を使用して機密テキストをトークンに変換(匿名化)します。そのテキストを復元(再識別)するには、匿名化中に使用した暗号鍵とトークンが必要です。
Sensitive Data Protection は、可逆と非可逆の両方の暗号方式をサポートします。コンテンツを再識別するには、可逆方式を選択する必要があります。
ここで説明する暗号方式は、AES-SIV を使用した確定的暗号化 (合成初期化ベクトルモードの高度暗号化標準: AES-SIV)と呼ばれます。Sensitive Data Protection が サポートしているすべての可逆暗号方法の中で、最高レベルのセキュリティを提供するため、この方法をおすすめします。
このドキュメントの手順は、 始める 前にの手順を除き、10 ~ 20 分で完了できます。
をご覧ください。始める前に
- アカウントに Google Cloud ログインします。を初めて使用する場合は、 Google Cloud、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイに利用できる $300 分の無料クレジットも提供されます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを Google Cloud 作成または選択します。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択には特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクト Google Cloud を作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
-
このガイドで既存のプロジェクトを使用する場合は、 このガイドを完了するために必要な権限があることを 確認します。新しいプロジェクトを作成した場合は、 必要な権限がすでに付与されています。
Sensitive Data Protection API と Cloud KMS API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com -
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを Google Cloud 作成または選択します。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択には特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクト Google Cloud を作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
-
このガイドで既存のプロジェクトを使用する場合は、 このガイドを完了するために必要な権限があることを 確認します。新しいプロジェクトを作成した場合は、 必要な権限がすでに付与されています。
Sensitive Data Protection API と Cloud KMS API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com
必要なロール
ラップされた AES 鍵の作成、センシティブ データの匿名化、再識別に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- Cloud KMS 管理者 (
roles/cloudkms.admin) - Cloud KMS CryptoKey 暗号化 / 復号 (
roles/cloudkms.cryptoKeyEncrypter) - DLP ユーザー (
roles/dlp.user)
ロールの付与の詳細については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
キーリングと鍵を作成する
この手順を開始する前に、Sensitive Data Protection で匿名化と再識別リクエストを処理する場所を決定してください。Cloud KMS 鍵を作成するときは、global か、Sensitive Data Protection リクエストに使用するリージョンと同じリージョンに保管する必要があります。そうしないと、Sensitive Data Protection リクエストは失敗します。
サポートされているロケーションのリストについては、Sensitive Data Protection のロケーションをご覧ください。選択したリージョンの名前(us-west1 など)をメモしておきます。
この手順では、すべての API リクエストのロケーションとして global を使用します。別のリージョンを使用する場合は、global をリージョン名に置き換えます。
キーリングの作成
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 鍵の完全リソース名です。これは匿名化リクエストと再識別リクエストで必要になるため、メモしておいてください。
base64 でエンコードされた AES 鍵を作成する
このセクションでは、Advanced Encryption Standard(AES)鍵を作成して、base64 形式でエンコードする方法について説明します。
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=
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\"}"
次のように置き換えます。
PROJECT_ID: プロジェクトのID。BASE64_ENCODED_AES_KEY: base64 でエンコードされた文字列 base64 でエンコードされた AES 鍵を作成するで返されました。
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 ツールバーの [エディタを開く] をクリックします。
テキスト コンテンツ内のセンシティブ データを匿名化するには、次の手順を行います。
次のテキストを含む
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コマンドを実行するディレクトリと同じディレクトリに配置する必要があります。Sensitive Data Protection からのレスポンスは、次の 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のようなトークンに置き換えられます。レスポンスのトークンの値をメモします。匿名化されたコンテンツを再識別するには、再識別リクエストでトークン全体を渡します。
再識別リクエストを DLP API に送信する
このセクションでは、テキスト コンテンツ内のトークン化されたデータを再識別する方法について説明します。
このタスクを完了するには、次のものが必要です。
- キーリングと鍵を作成する で作成した 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コマンドを実行するディレクトリと同じディレクトリに配置する必要があります。projects.content.reidentifyAPI を呼び出すことと同じです。Sensitive Data Protection からのレスポンスは、次の 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フィールドで、メールアドレス トークンは元のテキストの実際のメールアドレスに置き換えられています。これで、確定的暗号化を使用して、テキスト コンテンツ内のセンシティブ データの匿名化と再識別が完了しました。
クリーンアップ
このページで使用したリソースについて、 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 など)に置き換えます。
プロジェクトの削除
このタスク用に新しいプロジェクトを作成した場合は、追加の料金が発生しないように、プロジェクトを削除するのが最も簡単な方法です。
プロジェクト Google Cloud を削除します。
gcloud projects delete PROJECT_ID
認証情報を取り消す
(省略可)gcloud CLI から認証情報を取り消します。
gcloud auth revoke
次のステップ
- 機密コンテンツの匿名化の詳細については、 機密データ の匿名化をご覧ください。
- 匿名化ワークフローを実際のデプロイに適用する方法については、Sensitive Data Protection を使用した大規模なデータセットにおける PII の匿名化と再識別をご覧ください。
- 暗号鍵によるデータのトークン化の概念については、 仮名化をご覧ください。