Cloud KMS (비대칭)를 사용한 데이터 암호화 및 복호화

Cloud KMS (비대칭)를 사용한 데이터 암호화 및 복호화

이 Codelab 정보

subject최종 업데이트: 1월 24, 2022
account_circle작성자: sethvargo

1. 개요

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

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

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"

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

$ gcloud kms keys create "my-asymmetric-encryption-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-encryption" \
    --default-algorithm "rsa-decrypt-oaep-4096-sha512"

5. 데이터 암호화

비대칭 키를 사용하면 Cloud KMS가 암호화를 수행하지 않습니다. 대신 공개 키에 대한 액세스를 제공하며 공개 키 암호화를 통해 해당 공개 키를 사용하여 데이터를 암호화합니다. 비대칭 키를 사용하면 완전히 오프라인으로 암호화를 수행할 수 있으며 Cloud KMS 또는 다른 Google Cloud API에 액세스할 필요가 없습니다. 암호화는 openssl와 같은 암호화 도구 또는 공개 키 암호화를 지원하는 프로그래밍 언어 또는 라이브러리를 사용하여 수행됩니다.

Cloud KMS에서 공개 키를 다운로드합니다.

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --output-file ./key.pub

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

$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \
    -in ./data.txt \
    -inkey ./key.pub \
    -pkeyopt "rsa_padding_mode:oaep" \
    -pkeyopt "rsa_oaep_md:sha512" \
    -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc

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

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

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

6. 데이터 복호화

암호화와 달리 비대칭 Cloud KMS 키를 사용하여 암호화된 데이터를 복호화하려면 Cloud KMS 서비스에 대한 온라인 액세스가 필요합니다. gcloud 명령줄 도구를 사용하여 파일에서 암호문을 복호화합니다.

$ gcloud kms asymmetric-decrypt \


    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --version "1" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

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

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

7. 축하합니다.

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

정리

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

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

자세히 알아보기

라이선스

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