민감한 정보 익명화 및 재식별

이 빠른 시작에서는 민감한 정보 보호를 사용하여 텍스트 콘텐츠의 민감한 정보를 익명화하고 재식별하는 방법을 설명합니다. 이 프로세스에서는 Cloud Key Management Service를 사용하여 래핑된 키를 만듭니다. 익명화 및 재식별 요청에 이 키가 필요합니다.

이 빠른 시작에서 설명하는 프로세스를 가명처리(또는 토큰화)라고 합니다. 이 프로세스에서 민감한 정보 보호는 암호화 키를 사용하여 민감한 텍스트를 토큰으로 변환(익명화)합니다. 해당 텍스트를 복원(재식별)하려면 익명화 및 토큰에 사용한 암호화 키가 필요합니다.

민감한 정보 보호는 가역 및 비가역 암호화 방법을 모두 지원합니다. 콘텐츠를 재식별하려면 가역 방법을 선택해야 합니다.

여기에서 설명하는 암호화 방법을 AES-SIV를 사용한 확정 암호화라고 합니다(합성 초기화 벡터 모드의 고급 암호화 표준). Google에서는 민감한 정보 보호가 지원하는 모든 가역 암호화 방법 중에서 이 방법을 권장합니다. 이 방법이 최고 수준의 보안을 제공하기 때문입니다.

시작하기 전에 단계를 제외하면 10~20분 후에 이 주제의 단계를 완료할 수 있습니다.

시작하기 전에

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Sensitive Data Protection and Cloud KMS APIs:

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  7. 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:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. 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.

  11. Make sure that billing is enabled for your Google Cloud project.

  12. Enable the Sensitive Data Protection and Cloud KMS APIs:

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  13. 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:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual 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 키 만들기

이 섹션에서는 고급 암호화 표준(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\"}"

다음을 바꿉니다.

  • 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에 익명화 요청 전송

이 섹션에서는 텍스트 콘텐츠에서 민감한 정보를 익명화하는 방법을 설명합니다.

이 작업을 완료하려면 다음이 필요합니다.

  • 1단계에서 만든 Cloud KMS 키의 전체 리소스 이름
  • 3단계에서 만든 래핑된 키

이 섹션에서는 샘플 요청을 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 탐색기를 사용할 수 있습니다.

  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단계에서 만든 Cloud KMS 키의 전체 리소스 이름
  • 3단계에서 만든 래핑된 키
  • 4단계에서 받은 토큰

토큰화된 콘텐츠를 재식별하려면 다음 단계를 따르세요.

  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 탐색기를 사용할 수 있습니다.

  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을 폐기할 버전 번호로 바꿉니다.

프로젝트 삭제

이 빠른 시작을 위해 새 프로젝트를 만든 경우 추가 요금 청구를 방지하는 가장 쉬운 방법은 프로젝트를 삭제하는 것입니다.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

사용자 인증 정보 취소

Optional: Revoke credentials from the gcloud CLI.

gcloud auth revoke

다음 단계