機密データの匿名化と再識別
このクイックスタートで説明するプロセスは、仮名化(またはトークン化)と呼ばれます。このプロセスでは、機密データの保護で暗号鍵を使用して機密テキストをトークンに変換(再識別)します。そのテキストを復元(再識別)するには、匿名化中に使用した暗号鍵とトークンが必要です。
機密データの保護は、可逆と非可逆の両方の暗号方式をサポートします。コンテンツを再識別するには、可逆方式を選択する必要があります。
ここで説明する暗号方式は、AES-SIV を使用した確定的暗号化(合成初期化ベクトルモードの高度暗号化標準: AES-SIV)と呼ばれます。機密データの保護がサポートしているすべての可逆暗号方法の中で、最高レベルのセキュリティを提供するため、これをおすすめします。
このトピックの手順(始める前にの手順は含みません)は 10〜20 分で完了できます。
準備
- Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Browser-based sign-in with the gcloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Sensitive Data Protection and Cloud KMS APIs:
gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/dlp.user
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For examples, see Represent workforce pool users in IAM policies. - Replace
ROLE
with each individual role.
- Replace
ステップ 1: キーリングと鍵を作成する
この手順を開始する前に、機密データの保護で匿名化と再識別リクエストを処理する場所を決定してください。Cloud KMS 鍵を作成するときは、global
か、機密データの保護リクエストに使用するリージョンと同じリージョンに保管する必要があります。そうしないと、機密データの保護リクエストは失敗します。
サポートされているロケーションのリストについては、機密データの保護のロケーションをご覧ください。選択したリージョンの名前をメモします(たとえば、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 PURPOSE ALGORITHM PROTECTION_LEVEL LABELS PRIMARY_ID PRIMARY_STATE projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key ENCRYPT_DECRYPT GOOGLE_SYMMETRIC_ENCRYPTION SOFTWARE 1 ENABLED
この出力では、
PROJECT_ID
はプロジェクトの ID です。NAME
の下にあるパスは、Cloud KMS 鍵の完全リソース名です。それは匿名化リクエストと再識別リクエストで必要になるため、メモしておいてください。
ステップ 2: 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=
ステップ 3: Cloud KMS 鍵を使用して AES 鍵をラップする
このセクションでは、ステップ 1 で作成した Cloud KMS 鍵を使用して、ステップ 2 で作成した 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
: ステップ 2 で返された base64 エンコード文字列。
Cloud KMS からのレスポンスは、次の JSON のようになります。
{ "name": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key/cryptoKeyVersions/1", "ciphertext": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=", "ciphertextCrc32c": "901327763", "protectionLevel": "SOFTWARE" }
この出力では、PROJECT_ID
はプロジェクトの ID です。
表示されたレスポンス内の ciphertext
の値をメモします。それがラップされた鍵です。
ステップ 4: 匿名化リクエストを DLP API に送信する
このセクションでは、テキスト コンテンツ内の機密データを匿名化する方法について説明します。
このタスクを完了するには、次のものが必要です。
このセクションでは、サンプル リクエストを JSON ファイルに保存する必要があります。Cloud Shell を使用している場合は、Cloud Shell エディタを使用してファイルを作成できます。エディタを起動するには、Cloud Shell ウィンドウのツールバーにある
[エディタを開く] をクリックします。テキスト コンテンツ内の機密データを匿名化するには、次の手順を行います。
次のテキストを含む 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
: ステップ 3 で作成したラップされた鍵。
cryptoKeyName
の結果の値が Cloud KMS 鍵の完全リソース名を形成していることを確認します。この JSON リクエストのコンポーネントの詳細については、
projects.locations.content.deidentify
をご覧ください。このクイックスタートを完了したら、このリクエストに対して異なる入力をテストしてみてください。ここで説明するように、curl
を使用できます。または、[この API を試す] で当該 API リファレンス ページの API Explorer を使用することもできます。ファイルを
deidentify-request.json
として保存します。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.json
PROJECT_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/PROJECT_ID/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
のようなトークンに置き換えられます。このコンテンツを再識別するには、再識別リクエストでトークン全体を渡す必要があります。
ステップ 5: 再識別リクエストを DLP API に送信する
このセクションでは、テキスト コンテンツ内のトークン化されたデータを再識別する方法について説明します。
このタスクを完了するには、次のものが必要です。
トークン化されたコンテンツを再識別するには、次の手順に従います。
次のテキストを含む 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
: ステップ 3 で作成したラップされた鍵。TOKEN
: ステップ 4 で受け取ったトークン。たとえば、EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q
。
cryptoKeyName
の結果の値が Cloud KMS 鍵の完全リソース名を形成していることを確認します。この JSON リクエストのコンポーネントの詳細については、
projects.locations.content.reidentify
をご覧ください。このクイックスタートを完了したら、このリクエストに対して異なる入力をテストしてみてください。ここで説明するように、curl
を使用できます。または、[この API を試す] で当該 API リファレンス ページの API Explorer を使用することもできます。ファイルを
reidentify-request.json
として保存します。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.json
PROJECT_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/PROJECT_ID/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
を、破棄するバージョン番号に置き換えます。
プロジェクトを削除する
このクイックスタート向けに新しいプロジェクトを作成した場合、追加料金の発生を防ぐ最も簡単な方法としては、プロジェクトを削除します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
認証情報を取り消す
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
次のステップ
- 機密コンテンツの匿名化方法の詳細については、機密データの匿名化をご覧ください。
- 匿名化ワークフローを実際のデプロイに適用する方法については、機密データの保護を使用した大規模なデータセットにおける PII の匿名化と再識別をご覧ください。
- 暗号鍵によるデータのトークン化の概念については、仮名化をご覧ください。