Cloud KMS로 데이터 암호화 및 복호화

1. 개요

Cloud KMS는 클라우드에서 호스팅되는 키 관리 서비스로서 온프레미스와 동일한 방식으로 클라우드 서비스의 암호화 키를 관리할 수 있습니다. 여기에는 하드웨어 지원 키용 Cloud HSM을 비롯하여 다양한 키 유형과 소스를 사용한 암호화, 복호화, 서명, 인증에 대한 지원이 포함됩니다. 이 가이드에서는 대칭 Cloud KMS 키를 사용하여 데이터를 암호화하고 복호화하는 방법을 설명합니다.

학습 내용

  • Cloud KMS API를 사용 설정하는 방법
  • Cloud KMS 키링을 만드는 방법
  • 대칭 암호화/복호화를 위한 Cloud KMS 암호화 키를 만드는 방법
  • 대칭 Cloud KMS 암호화 키의 순환 방법

2. 설정 및 요구사항

자습형 환경 설정

  1. Cloud Console에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. (Gmail 또는 G Suite 계정이 없으면 만들어야 합니다.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 새 사용자에게는 $300USD 상당의 무료 체험판 프로그램 참여 자격이 부여됩니다.

Cloud Shell 시작

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

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

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

3. Cloud KMS 서비스 사용 설정

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

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

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

4. KMS 키 만들기

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

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

이제 방금 만든 키링 내에 목적이 encryptionmy-symmetric-key라는 암호화 키를 만듭니다.

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. 데이터 암호화

암호화할 데이터가 포함된 파일을 만들고 gcloud 명령줄 도구를 사용하여 파일의 데이터를 암호화합니다.

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

암호화된 데이터('암호문'이라고도 함)는 디스크의 data.txt.enc에 저장됩니다. data.txt.enc 파일을 열면 인쇄할 수 없는 이상한 문자가 있음을 알 수 있습니다. 이는 결과 데이터가 바이너리 형식이기 때문입니다.

암호 텍스트를 데이터베이스에 저장하거나 HTTP 요청의 일부로 전송할 때 데이터를 인코딩해야 할 수 있습니다. 일반적인 인코딩 메커니즘은 base64입니다.

Cloud KMS는 제공된 일반 텍스트를 저장하지 않습니다. 이 암호문은 일반 텍스트 값을 검색하는 데 필요하므로 안전한 위치에 저장해야 합니다.

6. 데이터 복호화

gcloud 명령줄 도구를 사용하여 파일에서 암호문을 복호화합니다.

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

gcloud 명령줄 도구가 파일에서 암호 텍스트를 읽고 Cloud KMS를 사용하여 복호화합니다. 이 예시에서는 --plaintext-file 인수를 -로 지정합니다. 이 코드는 gcloud에 결과를 터미널에 출력하도록 지시합니다.

콘솔에서 위 파일과 동일한 일반 텍스트 값인 my-contents를 출력합니다.

7. 키 순환

Cloud KMS에서 암호화 키는 실제로 암호화 키 버전의 모음입니다. 새 암호화 키 버전을 만들어 키 순환을 수행할 수 있습니다. Cloud KMS는 일정에 따라 키를 자동으로 순환할 수도 있습니다.

키를 수동으로 순환하려면 새 암호화 키 버전을 만들어 기본 버전으로 설정하세요.

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

이후에 데이터를 암호화하는 모든 요청에서 이 새로운 키를 사용합니다. 이전 키는 해당 키를 사용하여 이전에 암호화된 데이터를 복호화하는 데 계속 사용할 수 있습니다. Cloud KMS는 제공된 암호문을 기반으로 적절한 복호화 키를 자동으로 결정하므로 복호화에 사용할 암호화 키 버전을 지정할 필요가 없습니다.

이전 암호화 키 버전을 사용하여 암호화된 암호문 값이 Cloud KMS를 사용하여 복호화되지 않도록 하려면 해당 암호화 키 버전을 사용 중지하거나 폐기하면 됩니다. 사용 중지는 되돌릴 수 있는 반면 폐기는 영구적입니다. 버전을 사용 중지하려면 다음 안내를 따르세요.

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. 축하합니다.

Cloud KMS API를 사용 설정하고, 대칭 암호화 키를 만들고, 데이터를 암호화 및 복호화했습니다. Cloud KMS는 강력한 제품이며 암호화/복호화는 기능의 개략적인 부분입니다.

정리

탐색을 마쳤으면 프로젝트를 삭제하는 것이 좋습니다.

  • Cloud Platform Console로 이동합니다.
  • 종료할 프로젝트를 선택한 후 '삭제'를 클릭하세요. 을 클릭합니다. 이렇게 하면 프로젝트 삭제가 예약됩니다.

자세히 알아보기

라이선스

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