이 주제에서는 Cloud Key Management Service 대칭 키를 사용하여 데이터를 다시 암호화하는 방법을 보여줍니다. 비대칭 키에 이러한 예를 적용할 수 있습니다. 키의 무단 사용이 의심되는 경우 해당 키로 보호되는 데이터를 다시 암호화한 다음 이전 키 버전을 사용 중지하거나 폐기 예약해야 합니다.
시작하기 전에
이 시나리오에는 다음 조건이 필요합니다.
Cloud KMS를 사용하여 이미 데이터를 암호화한 상태입니다.
암호화에 사용되는 키 버전이 사용 중지됨, 폐기 예약됨 또는 폐기됨 상태가 아닙니다. 이 키 버전을 사용하여 암호화된 데이터를 복호화합니다.
이미 키 순환을 완료한 상태입니다. 키 순환은 새로운 기본 키 버전을 만듭니다. 새로운 기본 키 버전을 사용하여 데이터를 다시 암호화합니다.
비대칭 키를 사용하여 데이터 재암호화
이 주제의 예는 대칭 키를 사용하여 데이터를 다시 암호화하는 방법을 보여줍니다. 대칭 키를 사용하면 Cloud KMS가 자동으로 복호화에 사용할 키 버전을 추론합니다. 비대칭 키를 사용할 때는 키 버전을 지정해야 합니다.
- 다음 안내에 따라 Google Cloud CLI를 사용하는 경우 항상
--version
플래그를 포함합니다. - 다음 안내에 따라 API를 사용하는 경우
CryptoKeys
대신CryptoKeyVersions
을 사용하세요. 비대칭 키로 데이터를 암호화 및 복호화하는 방법에 대해 자세히 알아보세요.
비대칭 키로 데이터를 다시 암호화하는 워크플로는 이 주제에 설명된 것과 유사합니다.
데이터 워크플로 다시 암호화
데이터를 다시 암호화하고 원래 암호화에 사용된 키 버전을 사용 중지하거나 폐기 예약하려면 다음 단계를 따르세요.
이전 키 버전을 사용하여 데이터 복호화
키 버전이 '사용 중지됨', '폐기 예약됨' 또는 '폐기됨' 상태가 아닌 한 Cloud KMS에서 자동으로 올바른 키 버전을 사용하여 데이터를 복호화합니다. 다음 예는 데이터를 복호화하는 방법을 보여줍니다. 이 코드는 암호화 및 복호화에 사용된 것과 동일한 복호화 코드입니다.
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...", }
새로운 기본 키 버전을 사용하여 데이터 다시 암호화
Cloud KMS는 자동으로 새로운 기본 키 버전을 사용하여 데이터를 암호화합니다. 다음 예는 데이터를 암호화하는 방법을 보여줍니다. 이 코드는 암호화 및 복호화에 사용된 것과 동일한 암호화 코드입니다.
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=", }
이전 키 버전을 중지 또는 폐기 예약
의심스러운 이슈에 대한 대응으로 키를 순환한 경우 데이터를 다시 암호화한 후에 이전 키 버전을 중지하거나 폐기 예약합니다.
사용 설정된 키 버전 중지
사용 설정된 키 버전만 중지할 수 있습니다. 이 작업은 UpdateCryptoKeyVersion
메서드를 통해 수행됩니다.
콘솔
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
키 버전을 중지하려는 키가 포함된 키링의 이름을 클릭합니다.
키 버전을 사용 중지할 키를 클릭합니다.
사용 중지하려는 키 버전 옆의 체크 박스를 선택합니다.
헤더에서 사용 중지를 클릭합니다.
확인 대화상자에서 사용 중지를 클릭합니다.
gcloud
명령줄에서 Cloud KMS를 사용하려면 먼저 최신 버전의 Google Cloud CLI로 설치 또는 업그레이드하세요.
gcloud kms keys versions disable key-version \ --key key \ --keyring key-ring \ --location location
key-version을 사용 중지할 키 버전으로 바꿉니다. 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를 설치합니다.
키 버전 폐기 예약
사용 설정되거나 중지된 키 버전만 폐기 예약할 수 있습니다. 이 작업은 DestroyCryptoKeyVersion
메서드를 통해 수행됩니다.
콘솔
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
폐기 예약할 키 버전 옆의 체크박스를 선택합니다.
헤더에서 폐기를 클릭합니다.
확인 대화상자에서 키 이름을 입력한 다음 폐기 예약을 클릭합니다.
gcloud
명령줄에서 Cloud KMS를 사용하려면 먼저 최신 버전의 Google Cloud CLI로 설치 또는 업그레이드하세요.
gcloud kms keys versions destroy KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION
다음을 바꿉니다.
KEY_VERSION
: 폐기하려는 키 버전의 버전 번호입니다.KEY_NAME
: 키 버전을 폐기하려는 키의 이름입니다.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 액세스를 참조하세요.
CryptoKeyVersions.destroy 메서드를 호출하여 키 버전을 폐기합니다.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:destroy" \ --request "POST" \ --header "authorization: Bearer TOKEN"