Cloud DLP는 민감한 정보가 포함된 것으로 의심되는 모든 데이터에 대해 검사 및 익명화를 제공하는 Google Cloud 도구
Cloud DLP는 InfoType을 사용하여 문서 내에서 발견될 수 있는 민감한 데이터를 인식한다. InfoType은 특정 유형의 데이터 형식과 일치하는 특성 집합으로 예를 들어 여권 ID 번호일 가능성이 가장 높은 데이터를 인식하는 InfoType,이메일 주소를 찾아내는 InfoType 등 무수히 많은 유형이 있다.
우린 DLP를 사용해 인도네시아의 단일 신분증 번호(NIK)가 포함된 데이터를 검사할 것이고, 아래 링크의 데이터를 쓸 것이다.
NIK에는 317508로 시작하는 16자리 숫자가 포함되어 있으며 그 뒤에 사람의 생년월일-월-연도 및 지역 코드가 있다.
git clone https://github.com/ardhnyg/medium_post_week4_may.git
해당 링크에는 유효한 번호들이 있는 csv파일, 유효하지 않은 번호가 있는 csv파일, 두개가 섞인 csv파일 이렇게 총 3개의 파일이 있다.
Cloud Storage 버킷을 하나 생성해주고 해당 파일들을 업로드 해준다.
DLP에서 데이터를 검사하고 익명화를 하려면 토큰화(Tokenization)를 해야한다.
KMS에서 키링을 만들어준다.
하지만 이 키로는 사용할 수 없다. 왜냐하면 해당 키는 래퍼 키이다.
내 키를 생성해주고 해당 KMS 키를 통해 래핑해줘야 쓸 수 있는 것이다.
# AES 256 키 생성
openssl rand -out "./aes_key.bin" 32
# base64로 인코딩
base64 -i ./aes_key.bin
base64 문자가 포함된 임의의 문자열이 출력될 것이다.
KMS 키를 통해 base64 키 래핑
curl "https://cloudkms.googleapis.com/v1/projects/gsn-haalsgud97-prj/locations/global/keyRings/<키링 이름>/cryptoKeys/<키 이름>:encrypt" --request "POST" --header "Authorization:Bearer $(gcloud auth application-default print-access-token)" --header "content-type: application/json" --data "{\"plaintext\": \"<위에서 출력된 문자열>\"}"
명령어를 실행하면 아래와 같이 KMS로 래핑한 내 키에 대한 정보가 나온다.
비식별화 템플릿을 생성할 때 쓸 것이므로 창은 닫지 않을 것이다.
두 가지의 템플릿을 만들 것이다.
1. 검사 템플릿(inspect)
검사 템플릿은 InfoType을 통해 샘플 내의 민감한 정보를 찾아낸다.
2. 비식별화 템플릿(de-identify)
민감한 정보가 데이터를 변환할 수 없도록 데이터를 변환하는 방법을 선택하여 데이터를 처리해준다.
검사 템플릿
신뢰도 기준은 데이터가 이 InfoType과 일치할 가능성을 선택하는 것이다.
가능성 매우 높음까지 있는데 가능성 있음으로 체크를 해줬다.
비식별화 템플릿
암호화 키 리소스 이름
위에서 KMS로 래핑해준 키의 name 부분을 넣으면 된다.(뒤에 /cryptoKeyVersion/~ 부분은 제외하고 키 이름까지만 넣어준다.)
래핑된 키
래핑해준 키의 ciphertext를 넣어준다.
Surrogate
토큰화된 데이터의 시작 문자열에 나타낼 문자를 입력한다.
NIK로 지정하게 되면 토큰화되어 변환된 데이터에서 NIK로 시작하는 데이터를 통해 이 데이터가 비식별화 됐다는 것을 알 수 있는 것이다.
InfoType
INDONESIA_NIK_NUMBER 지정
템플릿 확인
먼저 데이터 세트를 하나 생성해준다.
Dataflow 작업 만들기
템플릿은 데이터 마스킹 템플릿을 선택해준다.
필수 매개변수 설정(DLP 비식별화 템플릿 적용)
선택적 매개변수 설정(DLP 검사 템플릿 적용)
그리고 Dataflow 작업이 실행되고 5분 정도 기다리면 만들어준 빅쿼리 테이블에 Cloud Storage에 넣어준 csv파일 3개에 해당되는 테이블이 생성될 것이다.
valid_sample
invalid_sample
mixed_sample
결과에서 볼 수 있다시피 유효한 인도네시아의 신분증 번호 형식을 따른 데이터는 Surrogate에 의해 NIK 문자가 표시되고 뒤에 번호는 토큰화되어 마스킹 된 것을 확인할 수 있었다.
[Cloud DLP와 Dataflow를 사용한 데이터 마스킹 참고]
https://medium.com/@ardhanyoga/data-masking-with-tokenization-using-google-cloud-dlp-and-google-cloud-dataflow-8bba3cc76ef6