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

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

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

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

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

시작하기 전에 단계를 제외하면 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.com cloudkms.googleapis.com
  7. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. 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.com cloudkms.googleapis.com
  13. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. 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 키 만들기

이 섹션에서는 고급 암호화 표준(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을 폐기할 버전 번호로 바꿉니다.

프로젝트 삭제

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

    Google Cloud 프로젝트를 삭제합니다.

    gcloud projects delete PROJECT_ID

사용자 인증 정보 취소

선택사항: gcloud CLI에서 사용자 인증 정보를 취소합니다.

gcloud auth revoke

다음 단계