이 페이지에서는 Cloud Data Loss Prevention API를 사용하여 Cloud Storage 리소스를 검사하고 데이터의 익명화된 사본을 만드는 방법을 설명합니다.
이 작업을 통해 비즈니스 프로세스에 사용되는 파일에 PII(개인 식별 정보)와 같은 민감한 정보가 포함되지 않도록 할 수 있습니다. Sensitive Data Protection은 Cloud Storage 버킷의 파일에 민감한 정보가 있는지 검사하고 별도의 버킷에 해당 파일의 익명화된 복사본을 만들 수 있습니다. 그런 다음 비즈니스 프로세스에서 익명화된 사본을 사용할 수 있습니다.
이 기능에 대한 자세한 내용은 Cloud Storage에서 민감한 정보 익명화를 참조하세요.
시작하기 전에
이 페이지의 필요 조건은 다음과 같습니다.
결제가 사용 설정되었습니다.
Sensitive Data Protection을 사용 설정했습니다.
Cloud Storage 버킷에 익명화할 데이터가 포함되어 있습니다.
HTTP 요청을 DLP API로 전송하는 방법을 알고 있습니다. 자세한 내용은 DLP API를 사용하여 민감한 텍스트 검사를 참조하세요.
이 작업의 제한사항 및 고려사항에 대해 알아보세요.
스토리지 분류에는 다음 OAuth 범위가 필요합니다. https://www.googleapis.com/auth/cloud-platform
자세한 내용은 DLP API 인증을 참조하세요.
필요한 IAM 역할
이 작업의 모든 리소스가 동일한 프로젝트에 있으면 서비스 에이전트의 DLP API 서비스 에이전트 역할(roles/dlp.serviceAgent
)만 있으면 됩니다. 이 역할을 사용하여 다음을 수행할 수 있습니다.
- 검사 작업 만들기
- 입력 디렉터리의 파일 읽기
- 익명화된 파일을 출력 디렉터리에 쓰기
- BigQuery 테이블에 변환 세부정보 쓰기
관련 리소스에는 검사 작업, 익명화 템플릿, 입력 버킷, 출력 버킷, 변환 세부정보 테이블이 포함됩니다.
별도의 프로젝트에 리소스가 있어야 하는 경우 프로젝트의 서비스 에이전트에도 다음 역할이 있는지 확인합니다.
- 입력 버킷 또는 이를 포함하는 프로젝트에 대한 스토리지 객체 뷰어 역할(
roles/storage.objectViewer
) - 출력 버킷 또는 이를 포함하는 프로젝트에 대한 스토리지 객체 생성자 역할(
roles/storage.objectCreator
) - 변환 세부정보 테이블 또는 이를 포함하는 프로젝트에 대한 BigQuery 데이터 편집자 역할(
roles/bigquery.dataEditor
)
서비스 에이전트에 역할을 부여하려면 단일 역할 부여를 참고하세요. 다음 수준에서도 액세스를 제어할 수 있습니다.
API 개요
Cloud Storage에 저장된 콘텐츠의 익명화된 사본을 만들려면 지정한 기준에 따라 민감한 정보를 찾는 검사 작업을 구성합니다. 그런 다음 검사 작업 내에서 Deidentify
작업 형식으로 익명화 안내를 제공합니다.
버킷에서 파일의 하위 집합만 스캔하려면 작업이 스캔하는 파일을 제한할 수 있습니다. 익명화를 사용하는 작업에 지원되는 옵션은 유형(FileType
) 및 정규 표현식(FileSet
)에 따른 파일 필터링입니다.
Deidentify
작업을 사용 설정하면 기본적으로 Sensitive Data Protection에서 스캔에 포함된 모든 지원되는 파일 형식의 익명화(변환)된 사본을 만듭니다. 그러나 지원되는 파일 형식의 하위 집합만 변환하도록 작업을 구성할 수 있습니다.
선택사항: 익명화 템플릿 만들기
발견 항목의 변환 방법을 제어하려면 다음 템플릿을 만듭니다. 이러한 템플릿은 구조화된 파일, 구조화되지 않은 파일, 이미지의 발견 항목 변환에 대한 안내를 제공합니다.
익명화 템플릿: 자유 형식 텍스트 파일과 같이 구조화되지 않은 파일에 사용할 기본
DeidentifyTemplate
입니다. 이 유형의DeidentifyTemplate
은 구조화된 콘텐츠에만 지원되는RecordTransformations
객체를 포함할 수 없습니다. 이 템플릿이 없으면 Sensitive Data Protection은ReplaceWithInfoTypeConfig
메서드를 사용하여 구조화되지 않은 파일을 변환합니다.구조화된 익명화 템플릿: CSV 파일과 같이 구조화된 파일에 사용할
DeidentifyTemplate
입니다. 이DeidentifyTemplate
에는RecordTransformations
가 포함될 수 있습니다. 이 템플릿이 없으면 Sensitive Data Protection은 개발자가 만든 기본 익명화 템플릿을 사용합니다. 이 템플릿도 없으면 Sensitive Data Protection은ReplaceWithInfoTypeConfig
메서드를 사용하여 구조화된 파일을 변환합니다.이미지 수정 템플릿: 이미지에 사용할
DeidentifyTemplate
입니다. 이 템플릿에는ImageTransformations
객체가 포함되어야 합니다. 이 템플릿이 없으면 Sensitive Data Protection은 이미지의 모든 발견 항목을 검은색 상자로 수정합니다.
익명화 템플릿 만들기에 대해 자세히 알아보세요.
익명화 작업이 포함된 검사 작업 만들기
DlpJob
객체는 검사 대상, 민감한 항목으로 플래그 지정할 데이터 형식, 발견 항목에 수행할 작업에 대한 안내를 제공합니다.
Cloud Storage 디렉터리에서 민감한 정보를 익명화하려면 DlpJob
에서 최소한 다음을 정의해야 합니다.
StorageConfig
객체: 검사할 Cloud Storage 디렉터리를 지정합니다.InspectConfig
객체: 찾으려는 데이터 형식과 민감한 정보를 찾는 방법에 대한 추가 검사 안내를 포함합니다.다음을 포함하는
Deidentify
작업:TransformationConfig
객체: 구조화된 파일과 구조화되지 않은 파일의 데이터를 익명화하기 위해 생성된 템플릿을 지정합니다. 이미지에서 민감한 정보를 수정하는 구성을 포함할 수도 있습니다.TransformationConfig
객체를 포함하지 않으면 Sensitive Data Protection에서 텍스트의 민감한 정보를 infoType으로 바꿉니다. 이미지에서는 검은색 상자로 민감한 정보를 덮습니다.TransformationDetailsStorageConfig
객체: Sensitive Data Protection에서 각 변환에 대한 세부정보를 저장해야 하는 BigQuery 테이블을 지정합니다. 각 변환의 세부정보에는 설명, 성공 또는 오류 코드, 오류 세부정보, 변환된 바이트 수, 변환된 콘텐츠의 위치, Sensitive Data Protection에서 변환을 수행한 검사 작업의 이름이 포함됩니다. 이 표에는 실제 익명화된 콘텐츠가 저장되지 않습니다.
데이터가 BigQuery 테이블에 기록되면 결제 및 할당량 사용량이 대상 테이블이 포함된 프로젝트에 적용됩니다.
복사된 콘텐츠가 익명화된 다음 익명화 작업이 완료됩니다. 작업에는 지정된 변환이 적용된 횟수에 대한 요약이 포함되어 있으며, DlpJob
에 projects.dlpJobs.get
메서드를 사용하여 검색할 수 있습니다. 반환된 DlpJob
에는 DeidentifyDataSourceDetails
객체와 InspectDataSourceDetails
객체가 모두 포함됩니다. 이러한 객체에는 각각 Deidentify
작업 및 검사 작업 결과가 모두 포함됩니다.
DlpJob
에 TransformationDetailsStorageConfig
객체를 포함하면 변환 세부정보에 대한 메타데이터가 포함된 BigQuery 테이블이 생성됩니다. Sensitive Data Protection은 발생하는 각 변환에 대해 메타데이터의 한 행을 테이블에 씁니다. 테이블 콘텐츠에 대한 자세한 내용은 변환 세부정보 참조를 확인하세요.
코드 예
다음 예시는 DLP API를 사용하여 Cloud Storage 파일의 익명화된 사본을 만드는 방법을 보여줍니다.
HTTP 메서드 및 URL
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
Sensitive Data Protection의 클라이언트 라이브러리를 설치하고 사용하는 방법은 Sensitive Data Protection 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Go
민감한 정보 보호의 클라이언트 라이브러리를 설치하고 사용하는 방법은 민감한 정보 보호 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Java
민감한 정보 보호의 클라이언트 라이브러리를 설치하고 사용하는 방법은 민감한 정보 보호 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
민감한 정보 보호의 클라이언트 라이브러리를 설치하고 사용하는 방법은 민감한 정보 보호 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
PHP
민감한 정보 보호의 클라이언트 라이브러리를 설치하고 사용하는 방법은 민감한 정보 보호 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
민감한 정보 보호의 클라이언트 라이브러리를 설치하고 사용하는 방법은 민감한 정보 보호 클라이언트 라이브러리를 참조하세요.
Sensitive Data Protection에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
REST
JSON 입력{
"inspect_job": {
"storage_config": {
"cloud_storage_options": {
"file_set": {
"url": "INPUT_DIRECTORY"
}
}
},
"inspect_config": {
"info_types": [
{
"name": "PERSON_NAME"
}
]
},
"actions": {
"deidentify": {
"cloud_storage_output": "OUTPUT_DIRECTORY",
"transformation_config": {
"deidentify_template": "DEIDENTIFY_TEMPLATE_NAME",
"structured_deidentify_template": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"image_redact_template": "IMAGE_REDACTION_TEMPLATE_NAME"
},
"transformation_details_storage_config": {
"table": {
"project_id": "TRANSFORMATION_DETAILS_PROJECT_ID",
"dataset_id": "TRANSFORMATION_DETAILS_DATASET_ID",
"table_id": "TRANSFORMATION_DETAILS_TABLE_ID"
}
},
"fileTypesToTransform": ["IMAGE","CSV", "TEXT_FILE"]
}
}
}
}
다음을 바꿉니다.
PROJECT_ID
: 검사 작업을 저장할 프로젝트 ID입니다.INPUT_DIRECTORY
: 검사할 Cloud Storage 디렉터리입니다(예:gs://input-bucket/folder1/folder1a
). URL이 후행 슬래시로 끝나면INPUT_DIRECTORY
내의 하위 디렉터리가 스캔되지 않습니다.OUTPUT_DIRECTORY
: 익명화된 파일을 저장할 Cloud Storage 디렉터리입니다. 이 디렉터리는INPUT_DIRECTORY
와 같은 Cloud Storage 버킷에 없어야 합니다.DEIDENTIFY_TEMPLATE_NAME
: 비구조화된 파일 및 구조화된 파일에 대해 기본 익명화 템플릿을 만든 경우 이에 대한 전체 리소스 이름입니다. 이 값은projects/projectName/(locations/locationId)/deidentifyTemplates/templateName
형식이어야 합니다.STRUCTURED_DEIDENTIFY_TEMPLATE_NAME
: 구조화된 파일에 대해 익명화 템플릿을 만든 경우 이에 대한 전체 리소스 이름입니다. 이 값은projects/projectName/(locations/locationId)/deidentifyTemplates/templateName
형식이어야 합니다.IMAGE_REDACTION_TEMPLATE_NAME
: 이미지에 대해 이미지 수정 템플릿을 만든 경우 이에 대한 전체 리소스 이름입니다. 이 값은projects/projectName/(locations/locationId)/deidentifyTemplates/templateName
형식이어야 합니다.TRANSFORMATION_DETAILS_PROJECT_ID
: 변환 세부정보를 저장할 프로젝트의 ID입니다.TRANSFORMATION_DETAILS_DATASET_ID
: 변환 세부정보를 저장할 BigQuery 데이터 세트의 ID입니다. 테이블 ID를 제공하지 않으면 시스템에서 자동으로 생성됩니다.TRANSFORMATION_DETAILS_TABLE_ID
: 변환 세부정보를 저장할 BigQuery 테이블의 ID입니다.
다음 객체를 확인합니다.
inspectJob
: 작업의 구성 객체입니다(DlpJob
). 이 객체에는 검사 및 익명화 단계의 구성이 모두 포함됩니다.storageConfig
: 검사할 콘텐츠의 위치입니다(StorageConfig
). 이 예시에서는 Cloud Storage 버킷CloudStorageOptions
를 지정합니다.inspectConfig
:InspectConfig
에 대해 검사할 민감한 정보에 대한 정보입니다. 이 예시에서는 기본 제공 infoTypePERSON_NAME
과 일치하는 콘텐츠를 검사합니다.actions
: 작업의 검사 부분이 완료된 후 수행할 작업입니다(Action
).deidentify
: 이 작업을 지정하면 Sensitive Data Protection은 내부에 지정된 구성(Deidentify
)에 따라 일치하는 민감한 정보를 익명화합니다.cloud_storage_output
: 검사할 Cloud Storage 디렉터리의 URL을 지정합니다.transformation_config
: Sensitive Data Protection이 구조화된 파일, 구조화되지 않은 파일, 이미지(TransformationConfig
)에서 민감한 정보를 익명화하는 방법을 지정합니다.TransformationConfig
객체를 포함하지 않으면 Sensitive Data Protection에서 텍스트의 민감한 정보를 infoType으로 바꿉니다. 이미지에서는 검은색 상자로 민감한 정보를 덮습니다.transformation_details_storage_config
: Sensitive Data Protection에서 이 작업에 대해 수행하는 각 변환에 대한 메타데이터를 저장하도록 지정합니다. 또한 Sensitive Data Protection에서 메타데이터를 저장해야 하는 테이블의 위치와 이름을 지정합니다(TransformationDetailsStorageConfig
).fileTypesToTransform
: 익명화 작업을 나열된 파일 형식으로만 제한합니다. 이 필드를 설정하지 않으면 검사 작업에 포함된 모든 지원되는 파일 형식이 익명화 작업에도 포함됩니다. 이 예시에서 개발자가DlpJob
에서 지원되는 모든 파일 형식을 검사하도록 구성했더라도 Sensitive Data Protection은 이미지, CSV, 텍스트 파일만 익명화합니다.
REST API를 통해 검사 작업 만들기
검사 작업(DlpJob
)을 만들려면 projects.dlpJobs.create
요청을 전송합니다. cURL을 사용하여 요청을 전송하려면 이전 REST 예시를 JSON 파일로 저장하고 다음 명령어를 실행합니다.
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs \
-d @PATH_TO_JSON_FILE
다음을 바꿉니다.
PROJECT_ID
:DlpJob
을 저장한 프로젝트의 ID입니다.PATH_TO_JSON_FILE
: 요청 본문이 포함된 JSON 파일의 경로입니다.
Sensitive Data Protection은 새로 생성된 DlpJob
의 식별자, 상태, 개발자가 설정한 검사 구성의 스냅샷을 반환합니다.
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "PENDING", ... }
검사 작업 결과 검색
DlpJob
결과를 검색하려면 projects.dlpJobs.get
요청을 전송합니다.
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs/JOB_ID
다음을 바꿉니다.
PROJECT_ID
:DlpJob
을 저장한 프로젝트의 ID입니다.JOB_ID
:DlpJob
을 만들 때 반환된 작업의 ID입니다.
작업이 완료되면 다음과 비슷한 응답이 표시됩니다.
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "DONE", "inspectDetails": { "requestedOptions": { "snapshotInspectTemplate": {}, "jobConfig": { "storageConfig": { "cloudStorageOptions": { "fileSet": { "url": "INPUT_DIRECTORY" } } }, "inspectConfig": { "infoTypes": [ { "name": "PERSON_NAME" } ], "limits": {} }, "actions": [ { "deidentify": { "transformationDetailsStorageConfig": { "table": { "projectId": "TRANSFORMATION_DETAILS_PROJECT_ID", "datasetId": "TRANSFORMATION_DETAILS_DATASET_ID", "tableId": "TRANSFORMATION_DETAILS_TABLE_ID" } }, "transformationConfig": { "deidentifyTemplate": "DEIDENTIFY_TEMPLATE_NAME", "structuredDeidentifyTemplate": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "imageRedactTemplate": "IMAGE_REDACTION_TEMPLATE_NAME" }, "fileTypesToTransform": [ "IMAGE", "CSV", "TEXT_FILE" ], "cloudStorageOutput": "OUTPUT_DIRECTORY" } } ] } }, "result": { "processedBytes": "25242", "totalEstimatedBytes": "25242", "infoTypeStats": [ { "infoType": { "name": "PERSON_NAME" }, "count": "114" } ] } }, "createTime": "2022-06-09T23:00:53.380Z", "startTime": "2022-06-09T23:01:27.986383Z", "endTime": "2022-06-09T23:02:00.443536Z", "actionDetails": [ { "deidentifyDetails": { "requestedOptions": { "snapshotDeidentifyTemplate": { "name": "DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T17:46:34.208923Z", "updateTime": "2022-06-09T17:46:34.208923Z", "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "characterMaskConfig": { "maskingCharacter": "*", "numberToMask": 25 } } } ] } }, "locationId": "global" }, "snapshotStructuredDeidentifyTemplate": { "name": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T20:51:12.411456Z", "updateTime": "2022-06-09T21:07:53.633149Z", "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "Name" } ], "primitiveTransformation": { "replaceConfig": { "newValue": { "stringValue": "[redacted]" } } } } ] } }, "locationId": "global" }, "snapshotImageRedactTemplate": { "name": "IMAGE_REDACTION_TEMPLATE_NAME", "createTime": "2022-06-09T20:52:25.453564Z", "updateTime": "2022-06-09T20:52:25.453564Z", "deidentifyConfig": {}, "locationId": "global" } }, "deidentifyStats": { "transformedBytes": "3972", "transformationCount": "110" } } } ], "locationId": "global" }
다음 단계
- 스토리지의 데이터 익명화 프로세스 자세히 알아보기
- Google Cloud 콘솔을 사용하여 스토리지의 데이터를 익명화하는 방법 알아보기
- Cloud Storage에서 익명화된 데이터 사본 만들기 Codelab을 진행합니다.
- 익명화 변환 자세히 알아보기
- 스토리지에서 민감한 정보를 검사하는 방법 알아보기