민감한 정보 보호는 테이블과 같은 컨테이너 구조에 저장된 텍스트를 포함한 텍스트 콘텐츠의 민감한 정보를 익명화할 수 있습니다. 익명화는 데이터에서 식별 정보를 삭제하는 프로세스입니다. API는 개인 식별 정보(PII)와 같은 민감한 정보를 감지한 다음 익명화 변환을 사용하여 데이터를 마스킹, 삭제하거나 다른 방법으로 알아보기 어렵게 만듭니다. 예를 들어 익명화 기술에는 다음이 포함될 수 있습니다.
- 전체 또는 일부 문자를 별표(*) 또는 해시(#)와 같은 기호로 바꿔 민감한 정보 마스킹
- 각 민감한 정보 인스턴스를 토큰 또는 서로게이트 문자열로 바꿉니다.
- 무작위로 생성되거나 사전 결정된 키를 사용하여 민감한 정보를 암호화 및 대체
HTTPS 기반 JSON, CLI 및 민감한 정보 보호 클라이언트 라이브러리를 사용하는 여러 프로그래밍 언어를 통해 API에 정보를 제공할 수 있습니다. CLI를 설정하려면 빠른 시작을 참조하세요. JSON 형식의 정보 제출에 대한 자세한 내용은 JSON 빠른 시작을 참조하세요.
API 개요
민감한 정보를 익명화하려면 민감한 정보 보호의 content.deidentify
메서드를 사용합니다.
익명화 API 호출에는 세 부분이 있습니다.
- 검사할 데이터: 검사할 API에 대한 문자열 또는 테이블 구조(
ContentItem
객체). - 검사할 대상: 찾을 데이터의 유형(즉, infoType), 특정 가능성 기준을 초과한 결과를 필터링할지 여부, 특정 수 이하의 결과만 반환할지 여부와 같은 감지 구성 정보(
InspectConfig
).InspectConfig
인수에 infoType을 하나도 지정하지 않는 것은 모든 기본 제공 infoType을 지정하는 것과 동일합니다. 성능 저하와 비용 증가를 유발할 수 있으므로 이는 권장되지 않습니다. - 검사 결과의 처리 방법: 민감한 정보를 익명화할 방법을 정의하는 구성 정보(
DeidentifyConfig
). 이 인수에 대해서는 다음 섹션에서 더 자세히 다룹니다.
API는 사용자가 제공한 것과 동일한 항목을 동일한 형식으로 반환하지만 기준에 따라 민감한 정보를 포함한 것으로 식별된 모든 텍스트는 익명화됩니다.
감지 기준 지정
정보 유형(즉, 'infoType') 감지기는 민감한 정보 보호가 민감한 정보를 찾는 데 사용하는 메커니즘입니다.
민감한 정보 보호에는 여러 종류의 infoType 감지기가 있습니다. 이러한 모든 감지기를 요약하면 다음과 같습니다.
- 기본 제공 infoType 감지기는 민감한 정보 보호에 기본 제공된 감지기입니다. 여기에는 전역적으로 적용 가능한 데이터 유형은 물론 국가 또는 리전별 민감한 정보 유형에 대한 감지기가 포함됩니다.
- 커스텀 infoType 감지기는 개발자가 직접 만드는 감지기입니다. 커스텀 infoType 감지기에는 다음과 같은 세 가지 종류가 있습니다.
- 일반 커스텀 사전 감지기는 민감한 정보 보호가 일치 항목을 검색하는 간단한 단어 목록입니다. 목록에 포함된 단어 또는 구문의 수가 최대 수만 개 수준인 경우 일반 커스텀 사전 감지기를 사용합니다. 단어 목록이 크게 바뀔 일이 없는 경우 일반 커스텀 사전 감지기가 유리합니다.
- 저장된 커스텀 사전 감지기는 민감한 정보 보호에서 Cloud Storage 또는 BigQuery에 저장된 대량의 단어 또는 구문 목록을 사용하여 생성합니다. 목록에 포함된 단어 또는 구문의 수가 최대 수천만 개 수준으로 많은 경우 저장된 커스텀 사전 감지기를 사용합니다.
- 정규 표현식(정규식) 감지기를 사용 설정하면 민감한 정보 보호에서 정규 표현식 패턴을 기준으로 일치 항목을 감지할 수 있습니다.
또한 민감한 정보 보호에는 다음을 사용하여 스캔 결과를 세부 조정할 수 있게 해주는 검사 규칙 개념이 포함되어 있습니다.
- 제외 규칙은 기본 제공 또는 커스텀 infoType 감지기에 규칙을 추가하여 반환되는 결과의 수를 줄일 수 있게 해줍니다.
- 핫워드 규칙을 사용하면 기본 제공 또는 커스텀 infoType 감지기에 규칙을 추가하여 반환되는 결과의 양을 늘리거나 가능성 값을 변경할 수 있습니다.
익명화 변환
익명화 구성(DeidentifyConfig
)을 설정할 때는 변환을 하나 이상 지정해야 합니다. 변환에는 두 가지 카테고리가 있습니다.
InfoTypeTransformations
: 제출된 텍스트 내에서 특정 infoType으로 식별된 값에만 적용되는 변환RecordTransformations
: 제출된 테이블 형식 텍스트 데이터 내에서 특정 infoType으로 식별된 값 또는 테이블 형식 데이터의 전체 열에만 적용되는 변환
InfoType 변환
요청당 하나 이상의 infoType 변환을 지정할 수 있습니다. 각 InfoTypeTransformation
객체 내에서 다음 두 가지를 모두 지정합니다.
- 변환을 적용해야 하는 하나 이상의 infoType(
infoTypes[]
배열 객체) - 기본 변환(
PrimitiveTransformation
객체)
infoType 지정은 선택사항이지만 InspectConfig
인수에 최소 하나의 infoType을 지정하지 않을 경우 제공된 변환이 없는 모든 기본 제공 infoType에 변환이 적용됩니다. 성능 저하와 비용 증가를 유발할 수 있으므로 이는 권장되지 않습니다.
기본 변환
특정 infoType에만 적용하든 전체 텍스트 문자열에 적용하든 관계없이 입력에 적용할 하나 이상의 기본 변환을 지정해야 합니다. 다음 섹션에서는 사용할 수 있는 변환 메서드의 예시를 설명합니다. 민감한 정보 보호에서 제공하는 모든 변환 메서드의 목록은 변환 참조를 확인하세요.
replaceConfig
replaceConfig
를 ReplaceValueConfig
객체로 설정하면 일치하는 입력 값이 지정한 값으로 대체됩니다.
예를 들어 모든 EMAIL_ADDRESS
infoType에 replaceConfig
를 [email-address]
로 지정했고 다음 문자열이 민감한 정보 보호에 전송되었다고 가정해 보겠습니다.
My name is Alicia Abernathy, and my email address is [email protected].
다음과 같은 문자열이 반환됩니다.
My name is Alicia Abernathy, and my email address is [email-address].
여러 언어로 된 다음 JSON 예 및 코드는 API 요청을 작성하는 방법과 DLP API에서 반환하는 항목을 보여줍니다.
Python
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Java
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
REST
JSON과 함께 DLP API를 사용하는 데 대한 자세한 내용은 JSON 빠른 시작을 참조하세요.
JSON 입력:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 출력:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is [email-address]."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
redactConfig
redactConfig
를 지정하면 지정된 값을 완전히 삭제하는 방식으로 값이 수정됩니다. redactConfig
메시지는 인수가 없으며 지정하면 변환이 사용 설정됩니다.
예를 들어 모든 EMAIL_ADDRESS
infoType에 redactConfig
를 지정했고 다음 문자열이 민감한 정보 보호로 전송되었다고 가정해 보겠습니다.
My name is Alicia Abernathy, and my email address is [email protected].
다음과 같은 문자열이 반환됩니다.
My name is Alicia Abernathy, and my email address is .
다음 예시는 API 요청을 작성하는 방법과 DLP API가 반환하는 항목을 보여줍니다.
C#
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Go
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Java
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
PHP
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
REST
JSON 입력:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"redactConfig":{
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 출력:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"redactConfig":{
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
characterMaskConfig
characterMaskConfig
를 CharacterMaskConfig
객체로 설정하면 지정된 수의 문자를 고정된 문자로 대체하는 방식으로 문자열이 마스킹됩니다. 마스킹은 문자열의 시작 또는 끝부터 시작할 수 있습니다. 이 변환은 long 정수와 같은 숫자 유형에서도 작동합니다.
CharacterMaskConfig
객체에는 여러 가지 자체 인수가 있습니다.
maskingCharacter
: 민감한 값의 각 문자를 마스킹하는 데 사용되는 문자. 예를 들어 별표(*) 또는 해시(#)를 지정하여 신용카드 번호의 숫자와 같은 일련의 숫자를 마스킹할 수 있습니다.numberToMask
: 마스킹할 문자 수. 이 값을 설정하지 않으면 모든 일치 문자가 마스킹됩니다.reverseOrder
: 역순으로 문자를 마스킹할지 여부.reverseOrder
를 true로 설정하면 일치하는 값의 문자가 값의 끝에서 시작 방향으로 마스킹됩니다. false로 설정하면 값의 시작 부분부터 마스킹이 시작됩니다.charactersToIgnore[]
: 값을 마스킹할 때 건너뛸 하나 이상의 문자. 예를 들어 전화번호를 마스킹할 때 하이픈을 그대로 두려면 여기에 하이픈을 지정합니다. 또한 마스킹할 때 무시할 공통 문자 그룹(CharsToIgnore
)을 지정할 수도 있습니다.
예를 들어 '.' 및 '@' 문자를 제외하고 EMAIL_ADDRESS
infoType에 대해 '#'을 사용하여 마스킹하도록 characterMaskConfig
를 설정했다고 가정해 보겠습니다. 다음 문자열이 민감한 정보 보호로 전송되는 경우
My name is Alicia Abernathy, and my email address is [email protected].
다음과 같은 문자열이 반환됩니다.
My name is Alicia Abernathy, and my email address is ##########@#######.###.
다음은 DLP API를 사용하여 마스킹 기술로 민감한 정보를 익명화하는 방법을 보여주는 예시입니다.
Java
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Go
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
PHP
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
C#
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
REST
다음 JSON 예는 API 요청을 작성하는 방법과 DLP API에서 반환하는 항목을 보여줍니다.
JSON 입력:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"reverseOrder":false,
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 출력:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ##########@#######.###."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
cryptoHashConfig
cryptoHashConfig
를 CryptoHashConfig
객체로 설정하면 암호화 해시를 통해 서로게이트 값을 생성하는 방식으로 입력 값이 가명처리됩니다.
이 메서드는 암호화된 '다이제스트' 또는 해시 값으로 입력 값을 대체합니다.
다이제스트는 입력 값의 SHA-256 해시를 취해 계산됩니다.
해시를 만드는 데 사용되는 암호화 키는 CryptoKey
객체이며 크기는 32바이트 또는 64바이트여야 합니다.
메서드는 해시된 출력의 base64로 인코딩된 표현을 출력합니다. 현재 문자열과 정수 값만 해시 처리할 수 있습니다.
예를 들어 EMAIL_ADDRESS
infoType에 cryptoHashConfig
를 지정했고 CryptoKey
객체가 무작위로 생성된 키(TransientCryptoKey
)로 구성되어 있다고 가정해 보겠습니다. 그러면 다음 문자열이 민감한 정보 보호로 전송됩니다.
My name is Alicia Abernathy, and my email address is [email protected].
암호화되어 생성되는 반환 문자열은 다음과 같습니다.
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
물론 16진수 문자열은 암호화되어 생성되며 여기 표시되는 것과는 다릅니다.
dateShiftConfig
dateShiftConfig
를 DateShiftConfig
객체로 설정하면 무작위 일수만큼 날짜를 이동하는 방식으로 날짜 입력 값에 대한 날짜 이동이 수행됩니다.
날짜 이동 기법은 날짜 집합을 무작위로 이동하지만 순서와 기간은 보존합니다. 날짜 이동은 일반적으로 개인 또는 항목 컨텍스트에서 수행됩니다. 즉, 특정 개인의 모든 날짜를 동일한 교대 수당을 사용하여 이동하되, 각 개인에 별도의 교대 수당을 사용하고자 하는 경우입니다.
날짜 이동에 대한 자세한 내용은 날짜 이동 개념 주제를 참조하세요.
다음은 DLP API를 사용하여 날짜 이동으로 날짜를 익명화하는 방법을 보여주는 여러 언어로 된 샘플 코드입니다.
Java
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Go
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
PHP
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
C#
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
cryptoReplaceFfxFpeConfig
cryptoReplaceFfxFpeConfig
를 CryptoReplaceFfxFpeConfig
객체로 설정하면 입력 값을 토큰으로 대체하는 방식으로 입력 값이 가명처리됩니다. 이 토큰의 특성은 다음과 같습니다.
- 암호화된 입력 값입니다.
- 입력 값과 같은 길이
cryptoKey
에 의해 지정된 암호화 키를 사용하는 형식 보존 암호화(FPE-FFX)를 FFX 모드에서 사용하여 계산됩니다.alphabet
에 의해 지정되는 문자로 구성됩니다. 유효한 옵션은 다음과 같습니다.NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
입력 값의 특성은 다음과 같습니다.
- 최소 2자여야 합니다(또는 빈 문자열).
alphabet
으로 지정된 문자로 구성되어야 합니다.alphabet
은 2~95자로 구성될 수 있습니다. (95자로 된alphabet
은 US-ASCII 문자 집합에 인쇄 가능한 모든 문자를 포함합니다.)
민감한 정보 보호는 암호화 키를 사용하여 대체 토큰을 계산합니다. 이 키는 다음 세 가지 방법 중 하나로 제공합니다.
- API 요청에 암호화되지 않은 상태로 삽입 이는 권장되지 않습니다.
- Sensitive Data Protection을 생성하도록 요청
- API 요청에 암호화된 상태로 삽입
API 요청에 키를 삽입하도록 선택한 경우 Cloud Key Management Service(Cloud KMS) 키를 사용하여 키를 만들고 래핑(암호화)해야 합니다. 반환된 값은 기본적으로 Base64 인코딩 문자열입니다. Sensitive Data Protection에서 이 값을 설정하려면 바이트 문자열로 디코딩해야 합니다. 다음 코드 스니펫은 여러 언어로 이 작업을 수행하는 방법을 보여줍니다. 엔드 투 엔드 예시는 이러한 스니펫 뒤에 제공됩니다.
Java
KmsWrappedCryptoKey.newBuilder()
.setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedKey)))
Python
# The wrapped key is base64-encoded, but the library expects a binary
# string, so decode it here.
import base64
wrapped_key = base64.b64decode(wrapped_key)
PHP
// Create the wrapped crypto key configuration object
$kmsWrappedCryptoKey = (new KmsWrappedCryptoKey())
->setWrappedKey(base64_decode($wrappedKey))
->setCryptoKeyName($keyName);
C#
WrappedKey = ByteString.FromBase64(wrappedKey)
Cloud KMS를 사용한 데이터 암호화 및 복호화에 대한 자세한 내용은 데이터 암호화 및 복호화를 참조하세요.
설계상 FPE-FFX는 입력 텍스트의 길이와 문자 집합을 보존합니다. 즉, 인증과 초기화 벡터가 없어 출력 토큰에서 길이가 확장됩니다. AES-SIV와 같은 다른 방법은 이러한 더 강력한 보안을 제공하며 길이와 문자 집합 보존을 엄격하게 요구하지 않는 한 토큰화 사용 사례에 권장됩니다. 예를 들면 레거시 데이터 시스템의 이전 버전과의 호환성을 위해 사용됩니다.
다음은 민감한 정보 보호를 사용하여 입력 값을 토큰으로 대체해 민감한 정보를 익명화하는 방법을 보여주는 여러 언어로 작성된 샘플 코드입니다.
Java
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Go
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
PHP
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
C#
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
민감한 정보 보호를 사용하여 CryptoReplaceFfxFpeConfig
변환 메서드를 통해 익명화된 민감한 정보를 재식별하는 방법을 보여주는 코드 샘플은 형식 보존 암호화: 재식별 예시를 참조하세요.
fixedSizeBucketingConfig
버케팅 변환(fixedSizeBucketingConfig와 bucketingConfig
)은 숫자 데이터를 범위로 '버케팅'하여 마스킹하는 역할을 합니다. 결과 숫자 범위는 하한, 하이픈, 상한으로 구성되어 하이픈으로 연결된 문자열입니다.
fixedSizeBucketingConfig
를 FixedSizeBucketingConfig
객체로 설정하면 입력 값이 고정된 크기 범위를 기반으로 버케팅됩니다. FixedSizeBucketingConfig
객체는 다음과 같이 구성됩니다.
lowerBound
: 모든 버킷의 하한 값. 이 값보다 작은 값은 하나의 버킷으로 그룹화됩니다.upperBound
: 모든 버킷의 상한 값. 이 값보다 큰 값은 하나의 버킷으로 그룹화됩니다.bucketSize
: 최소 및 최대 버킷을 제외한 각 버킷의 크기.
예를 들어 lowerBound
가 10으로 설정되고 upperBound
가 89로 설정되고 bucketSize
가 10으로 설정되는 경우 사용되는 버킷은 -10, 10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80, 80-89, 89+입니다.
버케팅 개념에 대한 자세한 내용은 일반화 및 버케팅을 참조하세요.
bucketingConfig
bucketingConfig
변환은 다른 버케팅 변환인 fixedSizeBucketingConfig
에 비해 더 유연합니다.
상한 및 하한과 동일한 크기의 버킷을 만들기 위한 간격 값을 지정하는 대신 만들려는 각 버킷의 최댓값 및 최솟값을 지정합니다. 각 최댓값 및 최솟값 쌍의 유형은 동일해야 합니다.
bucketingConfig
를 BucketingConfig
객체로 설정하면 커스텀 버킷이 지정됩니다. BucketingConfig
객체는 Bucket
객체의 buckets[]
배열로 구성됩니다. 각 Bucket
객체는 다음과 같이 구성됩니다.
min
: 버킷 범위의 하한. 하한이 없는 버킷을 만들려면 이 값을 생략합니다.max
: 버킷 범위의 상한. 상한이 없는 버킷을 만들려면 이 값을 생략합니다.replacementValue
: 하한 및 상한 내에 속하는 값을 대체할 값.replacementValue
를 제공하지 않으면 하이픈으로 연결된min-max
범위가 대신 사용됩니다.
값이 정의된 범위를 벗어나는 경우 반환되는 TransformationSummary
에 오류 메시지가 포함됩니다.
예를 들어 bucketingConfig
변환을 위한 다음 구성을 가정해 보겠습니다.
"bucketingConfig":{
"buckets":[
{
"min":{
"integerValue":"1"
},
"max":{
"integerValue":"30"
},
"replacementValue":{
"stringValue":"LOW"
}
},
{
"min":{
"integerValue":"31"
},
"max":{
"integerValue":"65"
},
"replacementValue":{
"stringValue":"MEDIUM"
}
},
{
"min":{
"integerValue":"66"
},
"max":{
"integerValue":"100"
},
"replacementValue":{
"stringValue":"HIGH"
}
}
]
}
이는 다음 동작을 정의합니다.
- 1에서 30 사이에 속하는 정수 값은
LOW
로 대체되어 마스킹됩니다. - 31에서 65 사이에 속하는 정수 값은
MEDIUM
으로 대체되어 마스킹됩니다. - 66에서 100 사이에 속하는 정수 값은
HIGH
로 대체되어 마스킹됩니다.
버케팅 개념에 대한 자세한 내용은 일반화 및 버케팅을 참조하세요.
replaceWithInfoTypeConfig
replaceWithInfoTypeConfig
를 지정하면 각 일치 값이 infoType의 이름으로 대체됩니다. replaceWithInfoTypeConfig
메시지는 인수가 없으며 지정하면 변환이 사용 설정됩니다.
예를 들어 모든 EMAIL_ADDRESS
infoType에 replaceWithInfoTypeConfig
를 지정했고 다음 문자열이 민감한 정보 보호로 전송되었다고 가정해 보겠습니다.
My name is Alicia Abernathy, and my email address is [email protected].
다음과 같은 문자열이 반환됩니다.
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
timePartConfig
를 TimePartConfig
객체로 설정하면 Date
, Timestamp
, TimeOfDay
값이 포함된 일치 값 부분이 보존됩니다. TimePartConfig
객체는 partToExtract
인수로 구성되며 이 인수는 연, 월, 일을 포함한 모든 TimePart
열거 값으로 설정할 수 있습니다.
예를 들어 partToExtract
를 YEAR
로 설정하여 timePartConfig
변환을 구성했다고 가정해 보겠습니다. 아래의 첫 번째 열 데이터를 민감한 정보 보호로 보내면 두 번째 열의 변환된 값이 됩니다.
원래 값 | 변환된 값 |
---|---|
9/21/1976 |
1976 |
6/7/1945 |
1945 |
1/20/2009 |
2009 |
7/4/1776 |
1776 |
8/1/1984 |
1984 |
4/21/1982 |
1982 |
레코드 변환
레코드 변환(RecordTransformations
객체)은 특정 infoType으로 식별되는 테이블 형식 데이터 내의 값에만 적용됩니다. RecordTransformations
내에는 두 가지 추가 하위 변환 카테고리가 있습니다.
fieldTransformations[]
: 다양한 필드 변환에 적용되는 변환.recordSuppressions[]
: 완전히 억제되는 레코드를 정의하는 규칙.recordSuppressions[]
a내의 억제 규칙과 일치하는 레코드는 출력에서 생략됩니다.
필드 변환
각 FieldTransformation
객체에는 세 가지 인수가 포함됩니다.
fields
: 변환을 적용할 하나 이상의 입력 필드(FieldID
객체).condition
: 변환이 적용되려면 true로 계산되어야 하는 조건(RecordCondition
객체). 예를 들어 동일한 레코드의 우편번호 열이 특정 범위 내에 있는 경우에만 레코드의 연령 열에 버킷 변환을 적용합니다. 또는 생일 필드에 따라 그 사람의 연령이 85세 이상인 경우에만 필드를 수정합니다.- 다음 두 가지 변환 유형 인수 중 하나. 하나를 필수적으로 지정해야 합니다.
infoTypeTransformations
: 필드 콘텐츠를 자유 텍스트로 취급하고InfoType
.과 일치하는 콘텐츠에만PrimitiveTransformation
을 적용합니다. 이러한 변환은 이 주제의 앞부분에 설명되어 있습니다.primitiveTransformation
: 지정된 기본 변환(PrimitiveTransformation
객체)을 전체 필드에 적용합니다. 이러한 변환은 이 주제의 앞부분에 설명되어 있습니다.
필드 변환 예시
다음 예시에서는 필드 변환 두 개에서 projects.content.deidentify
요청을 보냅니다.
첫 번째 필드 변환은 처음 두 열(
column1
및column2
)에 적용됩니다. 변환 유형은primitiveTransformation
객체(특히CryptoDeterministicConfig
)이므로 민감한 정보 보호는 전체 필드를 변환합니다.두 번째 필드 변환은 세 번째 열(
column3
)에 적용됩니다. 변환 유형은infoTypeTransformations
객체이므로 민감한 정보 보호는 기본 변환(특히,ReplaceWithInfoTypeConfig
)을 검사 구성에 설정된 infoType과 일치하는 콘텐츠에만 적용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
-
PROJECT_ID
: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.
HTTP 메서드 및 URL:
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
JSON 요청 본문:
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 2" }, { "stringValue": "My email address is [email protected]" } ] }, { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 3" }, { "stringValue": "My email address is [email protected]" } ] } ] } }, "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } }, { "fields": [ { "name": "column3" } ], "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "replaceWithInfoTypeConfig": {} } } ] } } ] } }, "inspectConfig": { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ] } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc" }, { "stringValue": "AUBTE+sQB6eKZ5iD3Y0Ss682zANXbijuFl9KL9ExVOTF" }, { "stringValue": "My email address is [EMAIL_ADDRESS]" } ] }, { "values": [ { "stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc" }, { "stringValue": "AU+oD2pnqUDTLNItE8RplY3E0fTHeO4rZkX4GeFHN2CI" }, { "stringValue": "My email address is [EMAIL_ADDRESS]" } ] } ] } }, "overview": { "transformedBytes": "96", "transformationSummaries": [ { "field": { "name": "column1" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } } ], "transformedBytes": "32" }, { "field": { "name": "column2" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } } ], "transformedBytes": "32" }, { "infoType": { "name": "EMAIL_ADDRESS", "sensitivityScore": { "score": "SENSITIVITY_MODERATE" } }, "field": { "name": "column3" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column3" } ], "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "replaceWithInfoTypeConfig": {} } } ] } } ], "transformedBytes": "32" } ] } }
레코드 억제
필드 데이터에 변환 적용 이외에 특정 억제 조건이 true로 계산되는 경우 단순히 레코드를 억제하는 방법으로 데이터를 익명화하도록 민감한 정보 보호에 지시할 수도 있습니다. 같은 요청에서 필드 변환과 레코드 억제를 모두 적용할 수 있습니다.
RecordTransformations
객체의 recordSuppressions
메시지를 하나 이상의 RecordSuppression
객체 배열로 설정합니다.
각 RecordSuppression
객체에는 하나의 RecordCondition
객체가 포함되며, 이 객체에는 하나의 Expressions
객체가 포함됩니다.
Expressions
객체에는 다음이 포함됩니다.
logicalOperator
:LogicalOperator
열거된 유형 중 하나.conditions
:Conditions
객체. 하나 이상의Condition
객체의 배열이 포함됩니다.Condition
은 둘 모두string
,boolean
,integer
,double
,Timestamp
,TimeofDay
유형인 필드 값과 다른 값의 비교입니다.
비교가 true로 계산되는 경우 레코드가 억제되고 그 반대도 마찬가지입니다. 비교되는 값의 유형이 같지 않은 경우 경고가 표시되고 조건은 false로 계산됩니다.
가역 변환
CryptoReplaceFfxFpeConfig
또는 CryptoDeterministicConfig
infoType 변환을 사용하여 데이터를 익명화할 때는 원래 데이터 익명화를 위해 사용된 CryptoKey
가 있는 한 데이터를 재식별화할 수 있습니다.
자세한 내용은 암호화 기반 토큰화 변환을 참조하세요.
발견 항목 수 제한
요청에서 발견 항목 수가 3,000개를 초과하면 민감한 정보 보호가 다음 메시지를 반환합니다.
Too many findings to de-identify. Retry with a smaller request.
민감한 정보 보호가 반환하는 발견 항목 목록은 요청에 있는 모든 발견 항목의 임의 하위 집합입니다. 모든 발견 항목을 가져오려면 요청을 작은 배치로 분할하세요.
다음 단계
익명화 워크플로가 실제 배포에 적용되는 방법에 대해 자세히 알아보기
민감한 정보 보호로 민감한 정보 수정 Codelab 진행하기
래핑된 키 만들기, 콘텐츠 토큰화, 토큰화된 콘텐츠 재식별 방법을 보여주는 예시 살펴보기
스토리지에서 익명화된 데이터 사본 만들기 자세히 알아보기