機密データの匿名化と再識別

このクイックスタートでは、機密データの保護を使用して、テキスト コンテンツ内の機密データを匿名化し、再識別する方法について説明します。このプロセスで、Cloud Key Management Service を使用してラップされた鍵が作成されます。この鍵は、匿名化リクエストと再識別リクエストで必要になります。

このクイックスタートで説明するプロセスは、仮名化(またはトークン化)と呼ばれます。このプロセスでは、機密データの保護で暗号鍵を使用して機密テキストをトークンに変換(再識別)します。そのテキストを復元(再識別)するには、匿名化中に使用した暗号鍵とトークンが必要です。

機密データの保護は、可逆と非可逆の両方の暗号方式をサポートします。コンテンツを再識別するには、可逆方式を選択する必要があります。

ここで説明する暗号方式は、AES-SIV を使用した確定的暗号化(合成初期化ベクトルモードの高度暗号化標準: AES-SIV)と呼ばれます。機密データの保護がサポートしているすべての可逆暗号方法の中で、最高レベルのセキュリティを提供するため、これをおすすめします。

このトピックの手順(始める前にの手順は含みません)は 10〜20 分で完了できます。

準備

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Sensitive Data Protection and Cloud KMS API を有効にします。

    gcloud services enable dlp.googleapis.comcloudkms.googleapis.com
  7. Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。 roles/dlp.user

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID は、実際のプロジェクト ID に置き換えます。
    • EMAIL_ADDRESS は実際のメールアドレスに置き換えます。
    • ROLE は、個々のロールに置き換えます。
  8. Google Cloud CLI をインストールします。
  9. gcloud CLI を初期化するには:

    gcloud init
  10. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  11. Google Cloud プロジェクトで課金が有効になっていることを確認します

  12. Sensitive Data Protection and Cloud KMS API を有効にします。

    gcloud services enable dlp.googleapis.comcloudkms.googleapis.com
  13. Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。 roles/dlp.user

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID は、実際のプロジェクト ID に置き換えます。
    • EMAIL_ADDRESS は実際のメールアドレスに置き換えます。
    • ROLE は、個々のロールに置き換えます。

ステップ 1: キーリングと鍵を作成する

この手順を開始する前に、機密データの保護で匿名化と再識別リクエストを処理する場所を決定してください。Cloud KMS 鍵を作成するときは、global か、機密データの保護リクエストに使用するリージョンと同じリージョンに保管する必要があります。そうしないと、機密データの保護リクエストは失敗します。

サポートされているロケーションのリストについては、機密データの保護のロケーションをご覧ください。選択したリージョンの名前をメモします(たとえば、us-west1)。

この手順では、すべての API リクエストのロケーションとして global を使用します。別のリージョンを使用する場合は、global をリージョン名に置き換えます。

  1. キーリングの作成

    gcloud kms keyrings create "dlp-keyring" \
        --location "global"
    
  2. 鍵を作成します。

    gcloud kms keys create "dlp-key" \
        --location "global" \
        --keyring "dlp-keyring" \
        --purpose "encryption"
    
  3. キーリングと鍵をリスティングします。

    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 形式でエンコードする方法について説明します。

  1. 128 ビット、192 ビット、256 ビットの AES 鍵を作成します。次のコマンドは、openssl を使用して、現在のディレクトリに 256 ビットのキーを作成します。

    openssl rand -out "./aes_key.bin" 32
    

    ファイル aes_key.bin が現在のディレクトリに追加されます。

  2. 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\"}"

以下を置き換えます。

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 ウィンドウのツールバーにある [エディタを開く] をクリックします。

テキスト コンテンツ内の機密データを匿名化するには、次の手順を行います。

  1. 次のテキストを含む 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 を使用することもできます。

  2. ファイルを deidentify-request.json として保存します。

  3. 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 に送信する

このセクションでは、テキスト コンテンツ内のトークン化されたデータを再識別する方法について説明します。

このタスクを完了するには、次のものが必要です。

トークン化されたコンテンツを再識別するには、次の手順に従います。

  1. 次のテキストを含む 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 を使用することもできます。

  2. ファイルを reidentify-request.json として保存します。

  3. 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 を、破棄するバージョン番号に置き換えます。

プロジェクトを削除する

このクイックスタート向けに新しいプロジェクトを作成した場合、追加料金の発生を防ぐ最も簡単な方法としては、プロジェクトを削除します。

    Google Cloud プロジェクトを削除します。

    gcloud projects delete PROJECT_ID

認証情報を取り消す

(省略可)gcloud CLI から認証情報を取り消します。

gcloud auth revoke

次のステップ