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

이 문서에서는 민감한 정보 보호를 사용하여 텍스트 콘텐츠의 민감한 정보를 익명화하고 재식별하는 방법을 설명합니다. 이 프로세스에서는 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. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  4. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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.

  6. 이 가이드에 기존 프로젝트를 사용하는 경우 이 가이드를 완료하는 데 필요한 권한이 있는지 확인합니다. 새 프로젝트를 만든 경우 필요한 권한이 이미 있습니다.

  7. Verify that billing is enabled for your Google Cloud project.

  8. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  9. Install the Google Cloud CLI.

  10. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  11. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  12. 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 the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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.

  13. 이 가이드에 기존 프로젝트를 사용하는 경우 이 가이드를 완료하는 데 필요한 권한이 있는지 확인합니다. 새 프로젝트를 만든 경우 필요한 권한이 이미 있습니다.

  14. Verify that billing is enabled for your Google Cloud project.

  15. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  16. 필요한 역할

    래핑된 AES 키를 만들고, 민감한 정보를 익명 처리하고, 다시 식별하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

    역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

    커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

    키링 및 키 만들기

    이 절차를 시작하기 전에 민감한 정보 보호를 사용하여 익명화 및 재식별 요청을 처리할 위치를 결정합니다. Cloud KMS 키를 만들 때 global 또는 민감한 정보 보호 요청에 사용할 리전과 같은 리전에 저장해야 합니다. 그렇지 않으면 민감한 정보 보호 요청이 실패합니다.

    Sensitive Data Protection 위치에서 지원되는 위치 목록을 확인할 수 있습니다. 선택한 리전의 이름을 기록합니다 (예: 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: 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 키 만들기

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

    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 툴바에서 편집기 열기 를 클릭합니다.

    텍스트 콘텐츠의 민감한 정보를 익명화하려면 다음 단계를 따르세요.

    1. 다음 텍스트로 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"
            }
          ]
        }
      }
      

      다음을 바꿉니다.

      cryptoKeyName의 결과 값이 Cloud KMS 키의 전체 리소스 이름을 구성하는지 확인합니다.

      이 JSON 요청의 구성요소에 대한 자세한 내용은 projects.locations.content.deidentify를 참고하세요. 이 작업을 완료한 후 이 요청에 다양한 입력을 실험해 보세요. 여기에 설명된 대로 curl을 사용할 수 있습니다. 또는 이 메서드 사용해 보기의 API 참조 페이지에서 API 탐색기를 사용합니다.

    2. 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/<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에 재식별 요청 전송

    이 섹션에서는 텍스트 콘텐츠의 토큰화된 데이터를 재식별하는 방법을 설명합니다.

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

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

    1. 다음 텍스트로 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."
        }
      }
      

      다음을 바꿉니다.

      cryptoKeyName의 결과 값이 Cloud KMS 키의 전체 리소스 이름을 구성하는지 확인합니다.

      이 JSON 요청의 구성요소에 대한 자세한 내용은 projects.locations.content.reidentify를 참고하세요. 이 작업을 완료한 후 이 요청에 다양한 입력을 실험해 보세요. 여기에 설명된 대로 curl을 사용할 수 있습니다. 또는 메서드 사용해 보기의 API 참조 페이지에서 API 탐색기를 사용합니다.

    2. 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/<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).

    프로젝트 삭제

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

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    사용자 인증 정보 취소

    Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke

    다음 단계