Cloud Storage에 업로드되는 데이터 분류 자동화


이 튜토리얼에서는 Cloud Storage 및 기타 Google Cloud 제품을 사용하여 자동화된 데이터 격리 및 분류 시스템을 구현하는 방법을 보여줍니다. 본 튜토리얼에서는 사용자가 Google Cloud 및 기본 셸 프로그래밍에 익숙하다고 가정합니다.

모든 조직에서 귀하와 같은 데이터 보호 책임자는 지속적으로 양이 증가하는 데이터, 보호되고 적절하게 취급되어야 하는 데이터를 다룹니다. 특히 이러한 데이터가 하루에 수백, 수천 개에 이를 경우 데이터 격리 및 분류 작업이 복잡해지고 오래 걸릴 수 있습니다.

각 파일을 가져와서 격리 위치에 업로드하고, 자동으로 분류하고, 분류 결과에 따라 적절한 위치로 이동할 수 있다면 어떨까요? 이 튜토리얼에서는 Cloud Functions, Cloud Storage, Cloud Data Loss Prevention을 사용하여 이러한 시스템을 구현하는 방법을 보여줍니다.

목표

  • 격리 및 분류 파이프라인의 일부로 사용되는 Cloud Storage 버킷을 만듭니다.
  • 파일 처리 완료 시점을 알려주는 Pub/Sub 주제 및 구독을 만듭니다.
  • 파일이 업로드되면 DLP API를 호출하는 간단한 Cloud 함수를 만듭니다.
  • 격리 버킷에 샘플 파일을 업로드하여 Cloud 함수를 호출합니다. 이 함수는 DLP API를 사용하여 파일을 검사하고 분류한 후 적절한 버킷으로 이동합니다.

비용

이 튜토리얼에서는 비용이 청구될 수 있는 다음 Google Cloud 구성요소를 사용합니다.

  • Cloud Storage
  • Cloud Functions
  • Cloud Data Loss Prevention

가격 계산기를 사용하여 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. API Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention 사용 설정

    API 사용 설정

서비스 계정에 권한 부여

첫 번째 단계는 두 서비스 계정(Cloud Functions 서비스 계정 및 DLP 서비스 계정)에 권한을 부여하는 것입니다.

App Engine 기본 서비스 계정에 권한 부여

  1. Google Cloud 콘솔에서 IAM 및 관리자 페이지를 열고 만든 프로젝트를 선택합니다.

    IAM으로 이동

  2. App Engine 서비스 계정을 찾습니다. 이 계정에는 [PROJECT_ID]@appspot.gserviceaccount.com 형식이 사용됩니다. [PROJECT_ID]를 프로젝트 ID로 바꿉니다.

  3. 서비스 계정 옆에 있는 수정 아이콘()을 선택합니다.

  4. 다음 역할을 추가합니다.

    • Cloud DLP > DLP 관리자
    • DLP API 서비스 에이전트(위치를 찾으려면 이 역할로 필터링해야 함)
  5. 저장을 클릭합니다.

민감한 정보 보호 서비스 계정에 권한 부여

Cloud DLP 서비스 에이전트는 처음 필요할 때 생성됩니다.

  1. Cloud Shell에서 InspectContent를 호출하여 Cloud DLP 서비스 에이전트를 만듭니다.

    curl --request POST 
    "https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/us-central1/content:inspect"
    --header "X-Goog-User-Project: PROJECT_ID"
    --header "Authorization: Bearer $(gcloud auth print-access-token)"
    --header 'Accept: application/json'
    --header 'Content-Type: application/json'
    --data '{"item":{"value":"google@google.com"}}'
    --compressed

    PROJECT_ID프로젝트 ID로 바꿉니다.

  2. Google Cloud 콘솔에서 IAM 및 관리자 페이지를 열고 만든 프로젝트를 선택합니다.

    IAM으로 이동

  3. Google 제공 역할 부여 포함 체크박스를 선택합니다.

  4. Cloud DLP 서비스 에이전트 서비스 계정을 찾습니다. 이 계정에는 service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com 형식이 사용됩니다. [PROJECT_NUMBER]를 프로젝트 번호로 바꿉니다.

  5. 서비스 계정 옆에 있는 수정 아이콘()을 선택합니다.

  6. 프로젝트 > 뷰어 역할을 추가한 후 저장을 클릭합니다.

격리 및 분류 파이프라인 구축

이 섹션에서는 아래 다이어그램에 표시된 격리 및 분류 파이프라인을 구축합니다.

격리 및 분류 워크플로

이 파이프라인의 숫자는 다음과 같은 단계에 해당합니다.

  1. Cloud Storage에 파일을 업로드합니다.
  2. Cloud 함수를 호출합니다.
  3. Cloud DLP가 데이터를 검사하고 분류합니다.
  4. 적절한 버킷으로 파일을 이동합니다.

Cloud Storage 버킷 만들기

버킷 이름 지정 가이드라인의 지침에 따라 이 튜토리얼 전체에서 사용할 버킷 세 개를 고유한 이름으로 생성합니다.

  • 버킷 1: [YOUR_QUARANTINE_BUCKET]을 고유한 이름으로 바꿉니다.
  • 버킷 2: [YOUR_SENSITIVE_DATA_BUCKET]을 고유한 이름으로 바꿉니다.
  • 버킷 3: [YOUR_NON_SENSITIVE_DATA_BUCKET]을 고유한 이름으로 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Storage 브라우저를 엽니다.

    Cloud Storage로 이동

  2. 버킷 만들기를 클릭합니다.

  3. 버킷 이름 텍스트 상자에 [YOUR_QUARANTINE_BUCKET]으로 선택한 이름을 입력하고 만들기를 클릭합니다.

  4. [YOUR_SENSITIVE_DATA_BUCKET][YOUR_NON_SENSITIVE_DATA_BUCKET] 버킷에 대해 반복합니다.

gcloud

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 다음 명령어를 사용하여 버킷 세 개를 만듭니다.

    gsutil mb gs://[YOUR_QUARANTINE_BUCKET]
    gsutil mb gs://[YOUR_SENSITIVE_DATA_BUCKET]
    gsutil mb gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
    

Pub/Sub 주제 및 구독 만들기

콘솔

  1. Pub/Sub 주제 페이지를 엽니다.

    Pub/Sub 주제로 이동

  2. 주제 만들기를 클릭합니다.

  3. 텍스트 상자에 주제 이름을 입력합니다.

  4. 기본 구독 추가 체크박스를 선택합니다.

  5. 주제 만들기를 클릭합니다.

gcloud

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 주제를 만들고 [PUB/SUB_TOPIC]을 선택한 이름으로 바꿉니다.

    gcloud pubsub topics create [PUB/SUB_TOPIC]
  3. 구독을 만들고 [PUB/SUB_SUBSCRIPTION]을 선택한 이름으로 바꿉니다.

    gcloud pubsub subscriptions create [PUB/SUB_SUBSCRIPTION] --topic [PUB/SUB_TOPIC]

Cloud Functions 만들기

이 섹션에서는 다음 두 Cloud Functions를 포함하는 Python 스크립트를 배포하는 단계를 설명합니다.

  • 객체가 Cloud Storage에 업로드될 때 호출되는 함수.
  • Pub/Sub 큐에서 메시지가 수신될 때 호출되는 함수

이 튜토리얼을 완료하기 위해 사용되는 Python 스크립트는 GitHub 저장소에 있습니다. 첫 번째 Cloud 함수를 만들려면 올바른 API를 사용 설정해야 합니다.

API를 사용 설정하려면 다음을 수행합니다.

  • 콘솔에서 작업하는 경우 함수 만들기를 클릭하면 Cloud Functions를 사용하는 데 필요한 API를 사용 설정하는 방법에 대한 가이드가 표시됩니다.
  • gcloud CLI에서 작업하는 경우에는 다음 API를 수동으로 사용 설정해야 합니다.
    • Artifact Registry API
    • Eventarc API
    • Cloud Run Admin API

첫 번째 함수 만들기

콘솔

  1. Cloud Functions 개요 페이지를 엽니다.

    Cloud Functions로 이동

  2. Cloud Functions를 사용 설정한 프로젝트를 선택합니다.

  3. 함수 만들기를 클릭합니다.

  4. 함수 이름 상자에서 기본 이름을 create_DLP_job로 바꿉니다.

  5. 트리거 필드에서 Cloud Storage를 선택합니다.

  6. 이벤트 유형 필드에서 완료/생성을 선택합니다.

  7. 버킷 필드에서 찾아보기를 클릭하고 드롭다운 목록에서 격리 버킷을 강조표시하여 선택한 후 선택을 클릭합니다.

  8. 저장을 클릭합니다.

  9. 다음을 클릭합니다.

  10. 런타임에서 Python 3.7을 선택합니다.

  11. 소스 코드에서 인라인 편집기를 선택합니다.

  12. main.py 상자의 텍스트를 https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py 파일의 콘텐츠로 바꿉니다.

    다음을 바꿉니다.

    • [PROJECT_ID_DLP_JOB & TOPIC]: Cloud 함수 및 Pub/Sub 주제를 호스팅하는 프로젝트 ID입니다.
    • [YOUR_QUARANTINE_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [YOUR_SENSITIVE_DATA_BUCKET]: 민감한 파일을 이동할 버킷의 이름입니다.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [PUB/SUB_TOPIC]: 앞에서 만든 Pub/Sub 주제의 이름입니다.
  13. 진입점 텍스트 상자에서 기본 텍스트를 create_DLP_job으로 바꿉니다.

  14. requirements.txt 텍스트 상자의 텍스트를 https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt. 파일의 내용으로 바꿉니다.

  15. 배포를 클릭합니다.

    함수 옆의 녹색 체크표시는 배포 성공을 나타냅니다.

    배포 성공

gcloud

  1. Cloud Shell 세션을 열고 코드 및 샘플 데이터 파일을 포함하는 GitHub 저장소를 복제합니다.

    Cloud Shell에서 열기

  2. 저장소가 복제된 폴더로 디렉터리를 변경합니다.

    cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
  3. main.py 파일에서 다음과 같이 바꿉니다.

    • [PROJECT_ID_DLP_JOB & TOPIC]: Cloud 함수 및 Pub/Sub 주제를 호스팅하는 프로젝트 ID입니다.
    • [YOUR_QUARANTINE_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [YOUR_SENSITIVE_DATA_BUCKET]: 민감한 파일을 이동할 버킷의 이름입니다.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [PUB/SUB_TOPIC: 앞에서 만든 Pub/Sub 주제의 이름입니다.
  4. 함수를 배포합니다. 여기에서 [YOUR_QUARANTINE_BUCKET]을 내 버킷 이름으로 바꿉니다.

    gcloud functions deploy create_DLP_job --runtime python37 \
        --trigger-resource [YOUR_QUARANTINE_BUCKET] \
        --trigger-event google.storage.object.finalize
    
  5. 함수 배포에 성공했는지 확인합니다.

    gcloud functions describe create_DLP_job

    배포에 성공하면 준비 상태가 다음과 같이 표시됩니다.

    status:  READY
    timeout:  60s
    

Cloud 함수 배포에 성공했으면 다음 섹션으로 넘어가서 두 번째 Cloud 함수를 만드세요.

두 번째 함수 만들기

콘솔

  1. Cloud Functions 개요 페이지를 엽니다.

    Cloud Functions 개요 페이지로 이동

  2. Cloud Functions를 사용 설정한 프로젝트를 선택합니다.

  3. 함수 만들기를 클릭합니다.

  4. 함수 이름 상자에서 기본 이름을 resolve_DLP로 바꿉니다.

  5. 트리거 필드에서 Pub/Sub를 선택합니다.

  6. Cloud Pub/Sub 주제 선택 필드에서 이전에 만든 Pub/Sub 주제를 검색합니다.

  7. 저장을 클릭합니다.

  8. 다음을 클릭합니다.

  9. 런타임에서 Python 3.7을 선택합니다.

  10. 소스 코드에서 인라인 편집기를 선택합니다.

  11. 진입점 텍스트 상자에서 기본 텍스트를 resolve_DLP로 바꿉니다.

  12. main.py 상자의 텍스트를 https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py 파일의 콘텐츠로 바꿉니다. 다음을 바꿉니다.

    • [PROJECT_ID_DLP_JOB & TOPIC]: Cloud 함수 및 Pub/Sub 주제를 호스팅하는 프로젝트 ID입니다.
    • [YOUR_QUARANTINE_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [YOUR_SENSITIVE_DATA_BUCKET]: 민감한 파일을 이동할 버킷의 이름입니다.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [PUB/SUB_TOPIC: 앞에서 만든 Pub/Sub 주제의 이름입니다.
  13. 배포를 클릭합니다.

    함수 옆의 녹색 체크표시는 배포 성공을 나타냅니다.

    배포 성공

gcloud

  1. Cloud Shell 세션을 열거나 다시 열어서 코드 및 샘플 데이터 파일을 포함하는 GitHub 저장소를 복제합니다.

    Cloud Shell에서 열기

  2. Python 코드가 있는 폴더로 디렉터리를 변경합니다.

    cd gcs-dlp-classification-python/

  3. main.py 파일에서 다음과 같이 바꿉니다.

    • [PROJECT_ID_DLP_JOB & TOPIC]: Cloud 함수 및 Pub/Sub 주제를 호스팅하는 프로젝트 ID입니다.
    • [YOUR_QUARANTINE_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [YOUR_SENSITIVE_DATA_BUCKET]: 민감한 파일을 이동할 버킷의 이름입니다.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: 처리할 파일을 업로드할 버킷의 이름입니다.
    • [PUB/SUB_TOPIC: 앞에서 만든 Pub/Sub 주제의 이름입니다.
  4. 함수를 배포합니다. 여기에서 [PUB/SUB_TOPIC]을 Pub/Sub 주제로 바꿉니다.

    gcloud functions deploy resolve_DLP --runtime python37 --trigger-topic [PUB/SUB_TOPIC]
  5. 함수 배포에 성공했는지 확인합니다.

    gcloud functions describe resolve_DLP

    배포에 성공하면 준비 상태가 다음과 같이 표시됩니다.

    status:  READY
    timeout:  60s
    

Cloud 함수 배포에 성공했으면 다음 섹션으로 진행합니다.

격리 버킷에 샘플 파일 업로드

이 문서에 연결된 GitHub 저장소에는 샘플 데이터 파일이 포함되어 있습니다. 이 폴더에는 민감한 정보가 있는 일부 파일과 민감하지 않은 정보가 있는 다른 파일이 들어 있습니다. 민감한 정보는 다음 INFO_TYPES 값 중 하나 이상을 포함하는 것으로 분류됩니다.

US_SOCIAL_SECURITY_NUMBER
EMAIL_ADDRESS
PERSON_NAME
LOCATION
PHONE_NUMBER

샘플 파일을 분류하는 데 사용되는 데이터 유형은 main.py 파일의 INFO_TYPES 상수에 정의되며, 초기 설정은 'FIRST_NAME,PHONE_NUMBER,EMAIL_ADDRESS,US_SOCIAL_SECURITY_NUMBER'입니다.

  1. 코드 및 샘플 데이터 파일을 포함하는 GitHub 저장소를 아직 클론하지 않은 경우 Cloud Shell을 열고 지금 클론합니다.

    Cloud Shell에서 열기

  2. 샘플 데이터 파일로 폴더를 변경합니다.

    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. gsutil 명령어를 사용하여 샘플 데이터 파일을 격리 버킷에 복사합니다. 여기에서 [YOUR_QUARANTINE_BUCKET]을 격리 버킷의 이름으로 바꿉니다.

    gsutil -m  cp * gs://[YOUR_QUARANTINE_BUCKET]/

    Cloud DLP는 격리 버킷에 업로드된 각 파일을 검사하고 분류한 후 분류 결과에 따라 적절한 타겟 버킷으로 이동합니다.

  4. Cloud Storage 콘솔에서 Storage 브라우저 페이지를 엽니다.

    Cloud Storage 브라우저로 이동

  5. 앞에서 만든 타겟 버킷 중 하나를 선택하고 업로드된 파일을 검토합니다. 생성한 다른 버킷도 검토합니다.

삭제

튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계