1. 개요
Cloud KMS는 클라우드에서 호스팅되는 키 관리 서비스로서 온프레미스와 동일한 방식으로 클라우드 서비스의 암호화 키를 관리할 수 있습니다. 여기에는 하드웨어 지원 키용 Cloud HSM을 비롯하여 다양한 키 유형과 소스를 사용한 암호화, 복호화, 서명, 인증에 대한 지원이 포함됩니다. 이 가이드에서는 대칭 Cloud KMS 키를 사용하여 데이터를 암호화하고 복호화하는 방법을 설명합니다.
학습 내용
- Cloud KMS API를 사용 설정하는 방법
- Cloud KMS 키링을 만드는 방법
- 대칭 암호화/복호화를 위한 Cloud KMS 암호화 키를 만드는 방법
- 대칭 Cloud KMS 암호화 키의 순환 방법
2. 설정 및 요구사항
자습형 환경 설정
- Cloud Console에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. (Gmail 또는 G Suite 계정이 없으면 만들어야 합니다.)
모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID
라고 부릅니다.
- 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.
이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 새 사용자에게는 $300USD 상당의 무료 체험판 프로그램 참여 자격이 부여됩니다.
Cloud Shell 시작
이 Codelab에서는 Google Cloud에서 실행되는 무료 가상화 환경인 Cloud Shell을 사용합니다. GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 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"
이제 방금 만든 키링 내에 목적이 encryption
인 my-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 일반 라이선스에 따라 사용이 허가되었습니다.