Cloud KMS 키로 리소스 보호

기본적으로 Compute Engine은 미사용 고객 콘텐츠를 암호화하며, 사용자의 추가 작업 없이 암호화를 처리하고 관리합니다. 그러나 이 암호화를 직접 제어하고 관리하려면 키 암호화 키를 사용하면 됩니다. 키 암호화 키는 데이터를 직접 암호화하는 것이 아니라 데이터를 암호화하는 데이터 암호화 키를 암호화하는 데 사용됩니다.

Compute Engine에서는 키 암호화 키에 대해 다음 두 가지 옵션을 사용할 수 있습니다.

  • Cloud Key Management Service를 사용하여 키 암호화 키를 만들고 관리합니다. 자세한 내용은 키 관리를 참조하세요. 이 항목에서는 고객 관리 암호화 키(CMEK)라고 하는 이 옵션에 대해 자세히 설명합니다.

  • 사용자가 직접 키 암호화 키를 만들고 관리합니다. 고객 제공 암호화 키(CSEK)라고 하는 이 옵션에 대한 자세한 내용은 고객 제공 암호화 키로 디스크 암호화를 참조하세요.

Cloud KMS로 보호되는 Compute Engine 리소스를 만든 경우에는 Compute Engine이 사용된 KMS 키를 인식하므로 키를 지정할 필요가 없습니다. Compute Engine에서 고객 제공 키로 보호되는 리소스에 액세스하는 방식은 이와 다릅니다. 이 경우 리소스에 액세스하기 위해서는 고객 제공 키를 지정해야 합니다.

Google Cloud Platform의 암호화 옵션에 대해 자세히 알아보세요.

시작하기 전에

  1. 디스크, 이미지, 영구 디스크 스냅샷, 인스턴스에 대해 이해합니다.

  2. Compute Engine과 Cloud KMS를 동일한 Google Cloud Platform 프로젝트에서 실행할지, 아니면 서로 다른 프로젝트에서 실행할지 결정합니다. 이 문서의 예시에서는 다음 규칙을 사용합니다.

    • [PROJECT_ID]는 Compute Engine을 실행하는 프로젝트의 프로젝트 ID입니다.
    • [PROJECT_NUMBER]는 Compute Engine을 실행하는 프로젝트의 프로젝트 번호입니다.
    • [KMS_PROJECT_ID]는 Cloud KMS를 실행하는 프로젝트의 프로젝트 ID입니다(Compute Engine을 실행하는 프로젝트와 같은 경우도 해당).

    GCP 프로젝트 ID와 프로젝트 번호에 대한 자세한 내용은 프로젝트 식별을 참조하세요.

  3. Compute Engine을 실행하는 GCP 프로젝트에 대해 Compute Engine용 API 액세스를 설정합니다.

  4. Cloud KMS를 실행하는 GCP 프로젝트:

    1. Cloud KMS API를 사용 설정합니다.
    2. 키링 및 키 만들기에 설명된 대로 키링과 키를 만듭니다.
  5. Compute Engine 서비스 에이전트Cloud KMS CryptoKey Encrypter/Decrypter 역할을 할당합니다. 이 계정의 형식은 다음과 같습니다.

    service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com
    

    gcloud 명령줄 도구를 사용하여 역할을 할당할 수 있습니다.

    gcloud projects add-iam-policy-binding [KMS_PROJECT_ID] \
    --member serviceAccount:service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    [KMS_PROJECT_ID]는 Cloud KMS를 실행하는 GCP 프로젝트의 ID로 바꾸고, [PROJECT_NUMBER]는 Compute Engine 리소스를 실행하는 GCP 프로젝트의 프로젝트 번호(프로젝트 ID가 아님)로 바꾸세요.

사양

암호화

Compute Engine에서 데이터를 보호하는 데 사용되는 Cloud KMS 키는 AES-256 키입니다. 이러한 키는 키 암호화 키이며, 사용자의 데이터를 암호화하는 데이터 암호화 키를 암호화합니다.

제한사항

  • 자체 키로는 새로운 영구 디스크, 이미지, 스냅샷만 암호화할 수 있습니다. 기존 리소스는 자체 키로 암호화할 수 없습니다.

  • 로컬 SSD는 가상 머신의 수명보다 오래 지속되지 않으므로 로컬 SSD에 자체 키를 사용할 수 없습니다. 로컬 SSD는 Google에 보관되지 않는 임시 암호화 키로 이미 보호되어 있습니다.

자체 키로 새 영구 디스크 암호화

인스턴스 또는 디스크 생성 중 키를 입력하여 새 영구 디스크를 암호화할 수 있습니다.

콘솔

  1. Google Cloud Platform 콘솔에서 디스크 페이지로 이동합니다.

    디스크 페이지로 이동

  2. 새 디스크를 클릭하고 새 디스크의 속성을 입력합니다.
  3. 암호화에서 고객 관리 키를 선택합니다.
  4. 드롭다운 메뉴를 사용하여 이 디스크를 암호화하는 데 사용할 Cloud KMS 키를 선택합니다.
  5. 만들기를 클릭하여 디스크를 만듭니다.

명령줄

gcloud compute disks \
create encrypted-disk \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

diskEncryptionKey 속성과 kmsKeyName 속성을 사용하여 디스크를 암호화합니다. 예를 들어 인스턴스를 만들 때 Cloud KMS 키로 새 디스크를 암호화하려면 다음을 수행합니다.

POST
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances

{
"machineType": "zones/[ZONE]/machineTypes/n1-standard-1",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

마찬가지로, API를 사용하여 새로운 독립형 영구 디스크를 만들고 Cloud KMS 키로 이를 암호화할 수 있습니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/
[ZONE]/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
projects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
 "type": "zones/[ZONE]/diskTypes/pd-standard"
}

암호화된 디스크에서 스냅샷 생성

CMEK로 암호화된 디스크에서 스냅샷을 생성하려면 디스크를 암호화하는 데 사용한 것과 동일한 암호화 키로 스냅샷을 보호해야 합니다.

콘솔

  1. Google Cloud Platform 콘솔에서 스냅샷 페이지로 이동합니다.

    스냅샷 페이지로 이동

  2. 스냅샷 만들기를 클릭합니다.
  3. 소스 디스크에서 스냅샷의 소스 디스크를 선택합니다. 소스 디스크에 사용된 것과 동일한 키를 사용하여 스냅샷이 자동으로 암호화됩니다.

명령줄

gcloud compute \
disks snapshot encrypted-disk \
--zone [ZONE]

API

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[SNAPSHOT_KEY]"
 },
 "name": "snapshot-encrypted-disk"
}

디스크 자체가 이미 CMEK로 보호되어 있지 않으면 CMEK로 보호되는 스냅샷을 생성할 수 없습니다. 또한 완전히 새로운 디스크 이미지와 새 영구 디스크를 생성하지 않는 한 암호화된 디스크나 암호화된 스냅샷이 Compute Engine 기본 암호화를 사용하도록 변환할 수 없습니다.

가져온 이미지 암호화

Compute Engine으로 커스텀 이미지를 가져올 때 새 이미지를 암호화할 수 있습니다. 이미지를 가져오려면 먼저 디스크 이미지 파일을 생성하고 압축한 다음 압축된 파일을 Google Cloud Storage에 업로드해야 합니다.

콘솔

  1. Google Cloud Platform 콘솔에서 이미지 페이지로 이동합니다.

    이미지 페이지로 이동

  2. 이미지 만들기를 클릭합니다.
  3. 소스 디스크에서 이미지를 만들려는 디스크를 선택합니다.
  4. 암호화에서 고객 관리 키를 선택합니다.
  5. 드롭다운 메뉴를 사용하여 이 이미지를 암호화하는 데 사용할 Cloud KMS 키를 선택합니다.
  6. 이미지 생성 프로세스를 계속 진행합니다.

명령줄

gcloud compute \
images create [...] \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

가져온 이미지를 암호화하려면 압축 파일의 URI를 지정하고, 이미지 생성 요청에 imageEncryptionKey 속성을 추가하고, kmsKeyName 속성에 이미지를 암호화하는 키를 지정합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[IMAGE_KEY]"
  }
}

암호화된 리소스에서 영구 디스크 생성

암호화된 스냅샷에서 디스크 생성

암호화된 스냅샷을 사용하여 새 독립형 영구 디스크를 생성하는 방법은 다음과 같습니다.

콘솔

  1. Google Cloud Platform 콘솔에서 디스크 페이지로 이동합니다.

    디스크 페이지로 이동

  2. 새 디스크를 클릭하고 새 디스크의 속성을 입력합니다.
  3. 소스 유형에서 원하는 스냅샷 또는 이미지를 선택합니다.
  4. 영구 디스크 생성 프로세스를 계속 진행합니다.

명령줄

gcloud compute \
disks create [...] \
--source-snapshot example-snapshot \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

스냅샷 대신 이미지를 사용하려면 --source-snapshot example-snapshot--image example-image로 바꾸세요.

API

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

새 인스턴스에 암호화된 디스크 연결

콘솔

  1. Google Cloud Platform 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. 부팅 디스크에서 변경을 클릭합니다.
  4. 기존 디스크를 클릭합니다.
  5. 기존 디스크를 선택하여 인스턴스에 연결합니다.
  6. 인스턴스 생성 프로세스를 계속 진행합니다.

명령줄

gcloud compute instances \
create example-instance \
--disk name=encrypted-disk,boot=yes

API

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/[PROJECT_ID]/zones/[ZONE]/disks/encrypted-disk"
  }
 }
]

영구 디스크에서 Cloud KMS 암호화 키 삭제

암호화된 디스크의 콘텐츠를 복호화하고, 그 대신 Compute Engine 기본 암호화를 사용하는 새 디스크를 생성할 수 있습니다.

  1. 암호화된 디스크의 이미지를 생성하고 새 이미지에 대해 자동 암호화를 지정합니다.
  2. 새 이미지를 사용하여 새 영구 디스크를 생성합니다.

새 영구 디스크를 생성하면 이 디스크에서는 Compute Engine 기본 암호화를 사용하여 디스크 콘텐츠를 보호합니다. 이 디스크에서 생성하는 스냅샷도 기본 암호화를 사용해야 합니다.

암호화 키 사용 중지 또는 사용 설정 시 영향

암호화 키를 사용 중지하거나 삭제하면 해당 키로 보호되는 콘텐츠에 다음과 같은 영향이 있습니다.

  • 해당 키로 보호되는 연결된 디스크가 있는 VM을 부팅할 수 없습니다.
  • 해당 키로 보호되는 디스크를 가상 머신에 연결할 수 없으며 디스크의 스냅샷을 생성할 수도 없습니다.
  • 해당 키로 보호되는 스냅샷을 사용하여 디스크를 생성할 수 없습니다.
  • 해당 키로 보호되는 이미지를 사용하여 디스크를 생성할 수 없습니다.

키를 사용 중지할 경우 키를 다시 사용 설정하여 위의 결과를 되돌릴 수 있습니다. 키를 삭제할 경우 위의 결과를 되돌릴 수 없습니다.

제한사항

  • 지역 리소스(디스크)는 동일한 위치 또는 global 위치에 있는 키로 암호화할 수 있습니다. 예를 들어 us-west1-a 영역에 있는 디스크를 us-west1 또는 global에 있는 키로 암호화할 수 있습니다. 전역 리소스(이미지, 스냅샷)는 모든 위치의 키로 암호화할 수 있습니다.
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서