민감한 정보 익명화 및 재식별
이 문서에 설명된 프로세스를 가명처리(또는 토큰화)라고 합니다. 이 프로세스에서 민감한 정보 보호는 암호화 키를 사용하여 민감한 텍스트를 토큰으로 변환(익명화)합니다. 해당 텍스트를 복원 (재식별)하려면 익명화에 사용한 암호화 키와 토큰이 필요합니다.
민감한 정보 보호는 가역 및 비가역 암호화 방법을 모두 지원합니다. 콘텐츠를 재식별하려면 가역 방법을 선택해야 합니다.
여기에서 설명하는 암호화 방법을 AES-SIV를 사용한 확정 암호화라고 합니다(합성 초기화 벡터 모드의 고급 암호화 표준). 민감한 정보 보호가 지원하는 모든 가역 암호화 방법 중에서 이 방법이 최고 수준의 보안을 제공하므로 이 방법을 권장합니다.
시작하기 전에 단계를 제외하면 10~20분 후에 이 문서의 단계를 완료할 수 있습니다.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
Google Cloud 프로젝트를 만들거나 선택합니다.
프로젝트를 선택하거나 만드는 데 필요한 역할
- 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
-
프로젝트 만들기: 프로젝트를 만들려면
resourcemanager.projects.create권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
-
Google Cloud 프로젝트를 만듭니다.
gcloud projects create PROJECT_ID
PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다. -
생성한 Google Cloud 프로젝트를 선택합니다.
gcloud config set project PROJECT_ID
PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.
-
이 가이드에 기존 프로젝트를 사용하는 경우 이 가이드를 완료하는 데 필요한 권한이 있는지 확인합니다. 새 프로젝트를 만든 경우에는 이미 필요한 권한이 있습니다.
Sensitive Data Protection 및 Cloud KMS API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com -
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
Google Cloud 프로젝트를 만들거나 선택합니다.
프로젝트를 선택하거나 만드는 데 필요한 역할
- 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
-
프로젝트 만들기: 프로젝트를 만들려면
resourcemanager.projects.create권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
-
Google Cloud 프로젝트를 만듭니다.
gcloud projects create PROJECT_ID
PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다. -
생성한 Google Cloud 프로젝트를 선택합니다.
gcloud config set project PROJECT_ID
PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.
-
이 가이드에 기존 프로젝트를 사용하는 경우 이 가이드를 완료하는 데 필요한 권한이 있는지 확인합니다. 새 프로젝트를 만든 경우에는 이미 필요한 권한이 있습니다.
Sensitive Data Protection 및 Cloud KMS API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com
필요한 역할
래핑된 AES 키를 만들고, 민감한 정보를 익명 처리하고, 다시 식별하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Cloud KMS 관리자(
roles/cloudkms.admin) -
Cloud KMS CryptoKey 암호화 (
roles/cloudkms.cryptoKeyEncrypter) -
DLP 사용자 (
roles/dlp.user)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
키링 및 키 만들기
이 절차를 시작하기 전에 민감한 정보 보호를 사용하여 익명화 및 재식별 요청을 처리할 위치를 결정합니다. Cloud KMS 키를 만들 때 global 또는 민감한 정보 보호 요청에 사용할 리전과 같은 리전에 저장해야 합니다.
그렇지 않으면 민감한 정보 보호 요청이 실패합니다.
Sensitive Data Protection 위치에서 지원되는 위치 목록을 확인할 수 있습니다. 선택한 리전의 이름을 기록합니다 (예: 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: 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 형식으로 인코딩하는 방법을 설명합니다.
128, 192 또는 256비트 AES 키를 만듭니다. 다음 명령어는
openssl을 사용하여 현재 디렉터리에 256비트 키를 만듭니다.openssl rand -out "./aes_key.bin" 32aes_key.bin파일이 현재 디렉터리에 추가됩니다.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\"}"
다음을 바꿉니다.
PROJECT_ID: 프로젝트의 ID입니다.BASE64_ENCODED_AES_KEY: base64로 인코딩된 AES 키 만들기에서 반환된 base64 인코딩 문자열입니다.
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에 익명화 요청 전송
이 섹션에서는 텍스트 콘텐츠에서 민감한 정보를 익명화하는 방법을 설명합니다.
이 작업을 완료하려면 다음이 필요합니다.
- 키링 및 키 만들기에서 만든 Cloud KMS 키의 전체 리소스 이름
- Cloud KMS 키를 사용하여 AES 키 래핑에서 만든 래핑된 키
샘플 요청을 JSON 파일에 저장해야 합니다. Cloud Shell을 사용하는 경우 Cloud Shell 편집기를 사용하여 파일을 만듭니다. 편집기를 실행하려면 Cloud Shell 툴바에서 편집기 열기 를 클릭합니다.
텍스트 콘텐츠의 민감한 정보를 익명화하려면 다음 단계를 따르세요.
다음 텍스트로
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" } ] } }다음을 바꿉니다.
PROJECT_ID: 프로젝트의 ID입니다.WRAPPED_KEY: Cloud KMS 키를 사용하여 AES 키 래핑에서 만든 래핑된 키입니다.
cryptoKeyName의 결과 값이 Cloud KMS 키의 전체 리소스 이름을 구성하는지 확인합니다.이 JSON 요청의 구성요소에 대한 자세한 내용은
projects.locations.content.deidentify를 참고하세요. 이 작업을 완료한 후 이 요청에 다양한 입력을 실험해 보세요. 여기에 설명된 대로curl을 사용할 수 있습니다. 또는 이 메서드 사용해 보기의 API 참조 페이지에서 API 탐색기를 사용합니다.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.jsonPROJECT_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에 재식별 요청 전송
이 섹션에서는 텍스트 콘텐츠의 토큰화된 데이터를 재식별하는 방법을 설명합니다.
이 작업을 완료하려면 다음이 필요합니다.
- 키링 및 키 만들기에서 만든 Cloud KMS 키의 전체 리소스 이름
- Cloud KMS 키를 사용하여 AES 키 래핑에서 만든 래핑된 키
- DLP API에 익명화 요청 전송에서 수신한 토큰입니다.
토큰화된 콘텐츠를 재식별하려면 다음 단계를 따르세요.
다음 텍스트로
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." } }다음을 바꿉니다.
PROJECT_ID: 프로젝트의 ID입니다.WRAPPED_KEY: Cloud KMS 키를 사용하여 AES 키 래핑에서 만든 래핑된 키입니다.TOKEN: DLP API에 식별 해제 요청 보내기에서 받은 토큰(예:EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q)입니다.
cryptoKeyName의 결과 값이 Cloud KMS 키의 전체 리소스 이름을 구성하는지 확인합니다.이 JSON 요청의 구성요소에 대한 자세한 내용은
projects.locations.content.reidentify를 참고하세요. 이 작업을 완료한 후 이 요청에 다양한 입력을 실험해 보세요. 여기에 설명된 대로curl을 사용할 수 있습니다. 또는 이 메서드 사용해 보기의 API 참조 페이지에서 API 탐색기를 사용합니다.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.jsonPROJECT_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).
프로젝트 삭제
이 작업을 위해 새 프로젝트를 만든 경우 추가 요금 청구를 방지하는 가장 쉬운 방법은 프로젝트를 삭제하는 것입니다.
Google Cloud 프로젝트를 삭제합니다.
gcloud projects delete PROJECT_ID
사용자 인증 정보 취소
선택사항: gcloud CLI에서 사용자 인증 정보를 취소합니다.
gcloud auth revoke
다음 단계
- 민감한 콘텐츠를 익명화하는 방법에 대한 자세한 내용은 민감한 정보 익명화를 참고하세요.
- 익명화 워크플로가 실제 배포에 어떻게 적용되는지에 대한 자세한 내용은 민감한 정보 보호를 사용하여 대규모 데이터 세트에서 PII 익명화 및 재식별을 참고하세요.
- 암호화 키를 사용한 데이터 토큰화에 대한 개념 정보는 가명처리를 참고하세요.