이 주제에서는 Cloud HSM의 개요를 살펴보고 Cloud Key Management Service에서 HSM으로 보호되는 암호화 키를 만들고 사용하는 방법을 보여줍니다.
Cloud HSM이란 무엇인가요?
Cloud HSM은 클라우드에 호스팅되는 하드웨어 보안 모듈(HSM) 서비스로, 이 서비스를 사용하면 FIPS 140-2 Level 3 인증 HSM 클러스터에서 암호화 키를 호스팅하고 암호화 작업을 수행할 수 있습니다. Google이 HSM 클러스터를 관리하므로 개발자는 클러스터링, 확장 또는 패치 적용에 신경쓰지 않아도 됩니다. Cloud HSM은 프런트엔드로 Cloud KMS를 사용하므로 개발자는 Cloud KMS가 제공하는 모든 편의성 및 기능을 활용할 수 있습니다.
키링 만들기
키를 만들 때 Google Cloud 위치의 키링에 키를 추가합니다. 새 키링을 만들거나 기존 키링을 사용할 수 있습니다. 이 주제에서는 새 키링을 만들고 거기에 새 키를 추가합니다.
Cloud HSM을 지원하는 Google Cloud 위치에 키링을 만듭니다.
콘솔
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
키링 만들기를 클릭합니다.
키링 이름에 키링 이름을 입력합니다.
키링 위치에서
"us-east1"
과 같은 위치를 선택합니다.만들기를 클릭합니다.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
환경에서
gcloud kms keyrings create
명령어를 실행합니다.gcloud kms keyrings create KEY_RING \ --location LOCATION
다음을 바꿉니다.
KEY_RING
: 키가 포함된 키링의 이름입니다.LOCATION
: 키링의 Cloud KMS 위치입니다.
모든 플래그 및 가능한 값에 대한 정보를 보려면
--help
플래그와 함께 명령어를 실행하세요.
C#
이 코드를 실행하려면 먼저 C# 개발 환경을 설정하고 Cloud KMS C# SDK를 설치합니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Cloud KMS Go SDK를 설치합니다.
Java
이 코드를 실행하려면 먼저 자바 개발 환경을 설정하고 Cloud KMS 자바 SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Cloud KMS Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 Google Cloud에서 PHP 사용에 관해 알아보고 Cloud KMS PHP SDK 설치하세요.
Python
이 코드를 실행하려면 먼저 Python 개발 환경을 설정하고 Cloud KMS Python SDK를 설치합니다.
Ruby
이 코드를 실행하려면 먼저 Ruby 개발 환경을 설정하고 Cloud KMS Ruby SDK를 설치합니다.
API
이 예시에서는 curl을 HTTP 클라이언트로 사용하여 API 사용을 보여줍니다. 액세스 제어에 대한 자세한 내용은 Cloud KMS API 액세스를 참조하세요.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
다음을 바꿉니다.
PROJECT_ID
: 키링이 포함된 프로젝트의 ID입니다.KEY_RING
: 키가 포함된 키링의 이름입니다.LOCATION
: 키링의 Cloud KMS 위치입니다.
자세한 내용은 KeyRing.create
API 참고 리소스를 참조하세요.
키 만들기
지정된 키링 및 위치에 Cloud HSM 키를 만들려면 다음 단계를 따르세요.
콘솔
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
키를 만들 키링의 이름을 클릭합니다.
키 만들기를 클릭합니다.
어떤 유형의 키를 만드시겠어요?에서 생성된 키를 선택합니다.
키 이름 필드에 키 이름을 입력합니다.
보호 수준 드롭다운을 클릭하고 HSM을 선택합니다.
용도 드롭다운을 클릭하고 대칭 암호화/복호화를 선택합니다.
순환 주기 및 시작일의 기본값을 그대로 사용합니다.
만들기를 클릭합니다.
gcloud
명령줄에서 Cloud KMS를 사용하려면 먼저 최신 버전의 Google Cloud CLI로 설치 또는 업그레이드하세요.
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
key를 새 키 이름으로 바꿉니다. key-ring을 키를 배치할 기존 키링의 이름으로 바꿉니다. location을 키링의 Cloud KMS 위치로 바꿉니다.
모든 플래그 및 가능한 값에 대한 정보를 보려면 --help
플래그와 함께 명령어를 실행하세요.
C#
이 코드를 실행하려면 먼저 C# 개발 환경을 설정하고 Cloud KMS C# SDK를 설치합니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Cloud KMS Go SDK를 설치합니다.
Java
이 코드를 실행하려면 먼저 자바 개발 환경을 설정하고 Cloud KMS 자바 SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Cloud KMS Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 Google Cloud에서 PHP 사용에 관해 알아보고 Cloud KMS PHP SDK 설치하세요.
Python
이 코드를 실행하려면 먼저 Python 개발 환경을 설정하고 Cloud KMS Python SDK를 설치합니다.
Ruby
이 코드를 실행하려면 먼저 Ruby 개발 환경을 설정하고 Cloud KMS Ruby SDK를 설치합니다.
데이터 암호화
이제 키가 있으므로 해당 키를 사용하여 텍스트 또는 바이너리 콘텐츠를 암호화할 수 있습니다.
gcloud
명령줄에서 Cloud KMS를 사용하려면 먼저 최신 버전의 Google Cloud CLI로 설치 또는 업그레이드하세요.
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
다음을 바꿉니다.
KEY_NAME
: 암호화에 사용할 키의 이름입니다.KEY_RING
: 키가 포함된 키링의 이름입니다.LOCATION
: 키링이 포함된 Cloud KMS 위치입니다.FILE_TO_ENCRYPT
: 암호화하려는 파일의 경로입니다.ENCRYPTED_OUTPUT
: 암호화된 출력을 저장할 경로입니다.
모든 플래그 및 가능한 값에 대한 정보를 보려면 --help
플래그와 함께 명령어를 실행하세요.
C#
이 코드를 실행하려면 먼저 C# 개발 환경을 설정하고 Cloud KMS C# SDK를 설치합니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Cloud KMS Go SDK를 설치합니다.
Java
이 코드를 실행하려면 먼저 자바 개발 환경을 설정하고 Cloud KMS 자바 SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Cloud KMS Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 Google Cloud에서 PHP 사용에 관해 알아보고 Cloud KMS PHP SDK 설치하세요.
Python
이 코드를 실행하려면 먼저 Python 개발 환경을 설정하고 Cloud KMS Python SDK를 설치합니다.
Ruby
이 코드를 실행하려면 먼저 Ruby 개발 환경을 설정하고 Cloud KMS Ruby SDK를 설치합니다.
API
이 예시에서는 curl을 HTTP 클라이언트로 사용하여 API 사용을 보여줍니다. 액세스 제어에 대한 자세한 내용은 Cloud KMS API 액세스를 참조하세요.
JSON 및 REST API를 사용하는 경우 콘텐츠를 base64로 인코딩해야 Cloud KMS에서 암호화할 수 있습니다.
데이터를 암호화하려면 POST
요청을 보내고 적절한 프로젝트와 키 정보를 제공하며 요청 본문의 plaintext
필드에 암호화할 base64로 인코딩된 텍스트를 지정합니다.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
다음을 바꿉니다.
PROJECT_ID
: 암호화에 사용할 키링과 키가 포함된 프로젝트의 ID입니다.LOCATION
: 키링이 포함된 Cloud KMS 위치입니다.KEY_RING
: 암호화에 사용할 키가 포함된 키링입니다.KEY_NAME
: 암호화에 사용할 키의 이름입니다.PLAINTEXT_TO_ENCRYPT
: 암호화하려는 일반 텍스트 데이터입니다.encrypt
메서드를 호출하기 전에 일반 텍스트를 base64로 인코딩해야 합니다.
다음은 base64로 인코딩된 데이터가 포함된 페이로드의 예시입니다.
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
암호문 복호화
암호화된 콘텐츠를 복호화하려면 콘텐츠 암호화에 사용한 키와 동일한 키를 사용해야 합니다.
gcloud
명령줄에서 Cloud KMS를 사용하려면 먼저 최신 버전의 Google Cloud CLI로 설치 또는 업그레이드하세요.
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
다음을 바꿉니다.
KEY_NAME
: 복호화에 사용할 키의 이름입니다.KEY_RING
: 키가 포함된 키링의 이름입니다.LOCATION
: 키링이 포함된 Cloud KMS 위치입니다.FILE_TO_DECRYPT
: 복호화하려는 파일의 경로입니다.DECRYPTED_OUTPUT
: 복호화된 출력을 저장할 경로입니다.
모든 플래그 및 가능한 값에 대한 정보를 보려면 --help
플래그와 함께 명령어를 실행하세요.
C#
이 코드를 실행하려면 먼저 C# 개발 환경을 설정하고 Cloud KMS C# SDK를 설치합니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Cloud KMS Go SDK를 설치합니다.
Java
이 코드를 실행하려면 먼저 자바 개발 환경을 설정하고 Cloud KMS 자바 SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Cloud KMS Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 Google Cloud에서 PHP 사용에 관해 알아보고 Cloud KMS PHP SDK 설치하세요.
Python
이 코드를 실행하려면 먼저 Python 개발 환경을 설정하고 Cloud KMS Python SDK를 설치합니다.
Ruby
이 코드를 실행하려면 먼저 Ruby 개발 환경을 설정하고 Cloud KMS Ruby SDK를 설치합니다.
API
이 예시에서는 curl을 HTTP 클라이언트로 사용하여 API 사용을 보여줍니다. 액세스 제어에 대한 자세한 내용은 Cloud KMS API 액세스를 참조하세요.
Cloud KMS에서 JSON으로 반환된 복호화된 텍스트는 base64로 인코딩됩니다.
암호화된 데이터를 복호화하려면 POST
요청을 보내고 적절한 프로젝트와 키 정보를 제공하며 요청 본문의 ciphertext
필드에 복호화할 암호화된 텍스트(암호문이라고도 함)를 지정합니다.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
다음을 바꿉니다.
PROJECT_ID
: 복호화에 사용할 키링과 키가 포함된 프로젝트의 ID입니다.LOCATION
: 키링이 포함된 Cloud KMS 위치입니다.KEY_RING
: 복호화에 사용할 키가 포함된 키링입니다.KEY_NAME
: 복호화에 사용할 키의 이름입니다.ENCRYPTED_DATA
: 복호화하려는 암호화된 데이터입니다.
다음은 base64로 인코딩된 데이터가 포함된 페이로드의 예시입니다.
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
다음 단계
이 주제의 암호화 예시에서는 HSM 보호 수준으로 대칭 키를 사용했습니다. 보호 수준이 HSM인 비대칭 키를 사용하여 암호화하려면 다음을 변경하고 비대칭 키로 데이터 암호화 및 복호화의 단계를 수행하세요.
- Cloud HSM에 지원되는 리전 중 하나에 키링을 만듭니다.
- HSM 보호 수준으로 키를 만듭니다.
타원 곡선 서명 또는 RSA 서명에 보호 수준이 HSM인 비대칭 키를 사용하려면 다음을 변경하고 서명 만들기 및 검증 단계를 수행하세요.
- Cloud HSM에 지원되는 리전 중 하나에 키링을 만듭니다.
- HSM 보호 수준으로 키를 만듭니다.
API 사용 시작
Cloud KMS API 참조를 확인하세요.
키에서 권한 만들기, 순환, 설정을 시작하는 안내 가이드를 읽습니다.
개념을 읽고 객체 계층 구조, 키 상태, 키 순환을 이해합니다.
Cloud KMS의 Logging 알아보기 로깅은 작업을 기반으로 하며 HSM 및 소프트웨어 보호 수준이 모두 있는 키에 적용됩니다.
Cloud HSM 아키텍처 백서에서 Cloud HSM이 데이터를 보호하는 방법에 대해 자세히 알아보세요.
알려진 제한사항
사용자 제공 일반 텍스트와 암호문에서 메시지 크기는 추가 인증 데이터를 포함하여 8KiB로 제한됩니다(이와 다르게 Cloud KMS 소프트웨어 키의 경우 64KiB).
특정 다중 또는 이중 리전에서는 Cloud HSM을 사용할 수 없습니다. 자세한 내용은 Cloud HSM에 지원되는 리전을 참조하세요.
다른 Google Cloud 서비스에서 고객 관리 암호화 키(CMEK) 통합과 함께 Cloud HSM 키를 사용하는 경우 서비스에 사용하는 위치는 Cloud HSM 키의 위치와 정확하게 일치해야 합니다. 이는 리전, 이중 리전, 멀티 리전 위치에 적용됩니다.
CMEK 통합에 대한 자세한 내용은 저장 데이터 암호화 섹션을 참조하세요.
Cloud KMS 소프트웨어 키를 사용하는 경우에 비해 현재 Cloud HSM에 저장된 비대칭 키에 대한 키 작업에서 지연 시간이 크게 늘어날 수 있습니다.
베어메탈 랙 HSM
Google Cloud는 단일 테넌시와 같은 추가 HSM 옵션을 제공합니다. 베어메탈 랙 HSM은 고객이 Google에서 제공한 공간에서 자체 HSM을 호스팅할 수 있게 해줍니다. 자세한 내용은 해당 계정 담당자에게 문의하세요.