Cloud KMS 시작하기

Cloud KMS는 클라우드 호스팅 키 관리 서비스로서 온프레미스와 동일한 방식으로 클라우드 서비스의 암호화 키를 관리할 수 있습니다. 여기에는 하드웨어 지원 키의 경우 Cloud HSM을 비롯한 다양한 키 유형 및 소스를 사용한 암호화, 복호화, 서명, 확인이 지원됩니다.

이 튜토리얼에서는 다음을 비롯하여 Cloud Security and Privacy API의 고급 기능을 사용하는 방법을 알아봅니다.

  • 보안 Cloud Storage 버킷 설정
  • Cloud KMS를 사용하여 키 및 암호화된 데이터 관리
  • Cloud Storage 감사 로그 보기

Enron Corpus에서 요약된 데이터를 가져와서 암호화하고 Cloud Storage에 로드합니다.

학습할 내용

  • 키 관리 서비스 (KMS)를 사용하여 데이터를 암호화하고 암호화 키를 관리하는 방법

사용할 앱

  • Cloud KMS
  • Cloud Storage
  • Cloud SDK

자습형 환경 설정

Google 계정 (Gmail 또는 Google 앱)이 아직 없다면 계정을 만들어야 합니다. Google Cloud Platform Console(console.cloud.google.com)에 로그인하여 새 프로젝트를 만듭니다.

2016-02-10 12:45:26.png 스크린샷

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

다음으로 Google Cloud 리소스를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다.

이 codelab을 실행하는 과정에는 많은 비용이 들지 않지만 더 많은 리소스를 사용하려고 하거나 실행 중일 경우 비용이 더 들 수 있습니다(이 문서 마지막의 '삭제' 섹션 참조).

Google Cloud Platform의 신규 사용자는 $300 무료 체험판을 사용할 수 있습니다.

Cloud Shell 시작

이 Codelab에서는 Google Cloud에서 실행되는 무료 가상 환경인 Cloud Shell을 사용합니다. GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 달리 지시가 없는 한, 이 셸에서 모든 명령어를 실행합니다.

이 튜토리얼 데이터를 저장하려면 Cloud Storage 버킷을 만드세요. Cloud Storage 버킷 이름은 전역적으로 고유해야 하므로 프로젝트 ID로 버킷 이름 앞에 붙입니다.

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

그런 다음 버킷을 만듭니다.

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus는 Enron Corporation의 직원 158명이 만든 600,000개가 넘는 이메일의 대규모 데이터베이스입니다. 이 데이터는 gs://enron_emails/라는 Cloud Storage 버킷에 복사되었습니다.

이메일 파일 중 하나를 로컬에서 다운로드합니다.

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

다운로드한 파일을 검사하여 실제로 이메일인지 확인합니다.

$ tail 1.

이메일에는 다음과 같은 메시지가 포함됩니다.

Attached is the Delta position for 1/18...
# ...

이메일 외에도 버킷에는 이미지가 포함됩니다. 이 튜토리얼에서는 일반 텍스트 이메일과 이미지를 모두 사용합니다.

Cloud KMS를 사용하려면 먼저 프로젝트에서 서비스를 사용 설정해야 합니다. 프로젝트당 한 번만 수행하면 됩니다. Cloud KMS 서비스를 사용 설정하려면 다음 명령어를 실행합니다.

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

사용 설정하는 데 최대 1분이 걸릴 수 있습니다. 명령어가 완료되면 성공을 보고합니다.

Cloud KMS 키링을 만듭니다. Cloud KMS에서 키링은 암호화 키의 논리적 모음입니다. 키링에는 키와 같은 키에 대한 메타데이터가 포함됩니다. global 리전에 my-keyring라는 키링을 만듭니다.

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

이제 방금 만든 키링 내에 encryption이라는 용도로 enron-emails라는 Crypto 키를 만듭니다.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

암호화 키 웹 UI를 열고 새로 만든 리소스를 확인합니다. 기본 메뉴의 IAM 및 & 관리에서 사용할 수 있습니다.

Cloud Console에서 키링 및 암호화 키를 보고 관리할 수 있습니다.

Cloud KMS를 사용하여 이전에 다운로드한 이메일의 콘텐츠를 암호화합니다. 이 튜토리얼에서는 gcloud 명령줄 도구를 사용하지만 Cloud KMS API를 사용하여 데이터를 암호화할 수도 있습니다.

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

1.enc 디스크에 암호화된 파일 콘텐츠가 포함된 새 파일이 생성됩니다. 이제 데이터가 Cloud KMS로 암호화되었으므로 암호화된 파일을 Cloud Storage 버킷에 업로드합니다.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS는 Google Cloud Identity and Access Management (IAM)와 통합됩니다. Cloud KMS IAM 역할은 크게 두 가지 카테고리로 나뉩니다.

  • 키를 관리할 권한
  • 키를 사용할 권한

예를 들어 roles/cloudkms.admin 역할을 통해 소유자는 키링, 암호화 키를 만들고, IAM 정책을 설정하고, 관리 관련 작업을 수행할 수 있습니다. roles/cloudkms.cryptoKeyEncrypterDecrypter는 데이터를 암호화 및 복호화하도록 권한을 가진 사용자에게 관리 권한을 포함하지 않습니다.

IAM 역할은 상위 리소스에 상속됩니다. Google Cloud 프로젝트에 대해 roles/cloudkms.admin 역할을 가진 사용자는 해당 프로젝트의 모든 키에 대한 관리자입니다. 키링에 roles/cloudkms.admin가 있는 경우 키링에 있는 모든 키의 관리자입니다. 단일 암호화 키에 roles/cloudkms.admin가 있는 경우 해당 키의 관리자일 뿐입니다.

이 연습에는 본인 확인을 사용하세요.

$ export MY_IDENTITY=you@gmail.com # or you@example.com

gcloud 명령줄 도구를 사용하여 위에 생성된 키링에서 Cloud KMS 리소스를 관리하는 기능을 ID에 할당합니다.

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

roles/cloudkms.admin 역할에는 키를 사용할 수 있는 권한은 포함되지 않고 키 관리를 위한 권한만 있습니다. enron-emails 암호화 키를 사용하여 ID를 암호화 및 복호화하는 기능을 ID에 부여하려면 다음 안내를 따르세요.

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

첫 번째 명령어는 하위 Crypto 키 리소스가 포함된 키링에 roles/cloudkms.admin 역할을 부여합니다. 두 번째 명령어는 roles/cloudkms.cryptoKeyEncrypterDecrypter를 부여하지만 enron-emails Crypto 키에서만 부여됩니다.

Cloud Console의 Cloud KMS UI에서 역할을 보고 할당할 수도 있습니다.

단일 파일을 암호화하는 것 외에도 일부 스크립팅으로 파일 컬렉션을 암호화할 수 있습니다. 이 예시에서는 allen-p의 모든 이메일을 스트리밍하고 암호화한 후 암호화된 값을 Cloud Storage 버킷에 업로드합니다.

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

샘플 Cloud Storage 버킷에서 지정된 디렉터리에 있는 모든 파일을 반복하고 Cloud KMS를 사용하여 암호화한 후 Google Cloud Storage에 업로드합니다.

스크립트가 완료되면 Cloud Storage UI에서 암호화된 파일을 볼 수 있습니다. 다음과 같이 표시됩니다.

Cloud Audit Logging에는 Google Cloud Platform 프로젝트 내에서 누가, 언제, 어디서, 무엇을 했는지에 대한 질문에 답하기 위해 Google Cloud 서비스에서 생성되는 두 가지 로그 스트림인 관리자 활동 로그와 데이터 액세스 로그가 있습니다.

KMS의 리소스 활동을 보려면 키링을 클릭하고 활동 보기를 선택합니다. 이렇게 하면 KeyRing의 생성 및 모든 수정사항이 표시되는 Cloud Activity UI로 이동합니다.

Cloud KMS를 사용하여 데이터를 암호화했으며 Cloud Storage에 암호화된 데이터를 저장했습니다.

삭제하기

이 튜토리얼에서 만든 리소스를 해제합니다. 앞서 만든 Cloud Storage 버킷을 삭제합니다.

$ gsutil rm -r gs://${BUCKET_NAME}

Cloud KMS 리소스는 삭제할 수 없습니다. 그러나 키 자료를 다시 사용할 수 없도록 폐기할 수 있습니다.

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

학습한 내용

  • Cloud IAM을 사용하여 Cloud KMS 권한 관리하기
  • Cloud KMS를 사용하여 데이터 암호화
  • Cloud Storage를 사용하여 암호화된 데이터 저장
  • Cloud Audit Logging을 사용하여 키 및 키링의 모든 활동 보기

다음 단계

  • Cloud KMS를 사용하여 BigQuery와 같은 데이터베이스의 열 암호화
  • Cloud KMS 키에 자동 순환 일정 설정

자세히 알아보기

라이선스

이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.