Cloud KMS 키를 사용하여 리소스 보호


이 문서에서는 수동으로 만든 Cloud Key Management Service Cloud KMS 키를 사용하여 디스크 및 기타 스토리지 관련 리소스를 암호화하는 방법을 설명합니다. Cloud KMS에서 관리하는 키를 고객 관리 암호화 키(CMEK)라고 합니다.

CMEK를 사용하여 디스크, 머신 이미지, 인스턴트 스냅샷, 표준 스냅샷과 같은 Compute Engine 리소스를 암호화할 수 있습니다.

고객 제공 암호화 키(CSEK)를 사용하여 디스크와 기타 스토리지 리소스를 암호화하는 방법에 대한 자세한 내용은 고객 제공 암호화 키로 디스크 암호화를 참조하세요.

디스크 암호화에 대해 자세히 알아보세요.

시작하기 전에

  • 디스크, 이미지, 영구 디스크 스냅샷, 가상 머신(VM) 인스턴스를 이해합니다.
  • Compute Engine과 Cloud KMS를 동일한 Google Cloud 프로젝트에서 실행할지 아니면 다른 프로젝트에서 실행할지 결정합니다. Google Cloud 프로젝트 ID와 프로젝트 번호에 대한 자세한 내용은 프로젝트 식별을 참조하세요.
  • Cloud KMS를 실행하는 Google Cloud 프로젝트의 경우 다음을 수행합니다.
    1. Enable the Cloud KMS API.

      Enable the API

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

필요한 역할

Compute Engine 서비스 에이전트에 Cloud KMS 키를 사용하여 리소스를 보호하는 데 필요한 권한이 있는지 확인하려면 관리자에게 Compute Engine 서비스 에이전트에 프로젝트에 대한 Cloud KMS CryptoKey 암호화/복호화(roles/cloudkms.cryptoKeyEncrypterDecrypter) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

관리자는 커스텀 역할이나 다른 사전 정의된 역할을 통해 Compute Engine 서비스 에이전트에 필요한 권한을 부여할 수도 있습니다.

Compute Engine 서비스 에이전트의 형식은 다음과 같습니다.

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

Google Cloud CLI를 사용하여 역할을 할당할 수 있습니다.

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를 실행하는 Google Cloud 프로젝트의 ID(Compute Engine을 실행하는 프로젝트와 같은 경우도 해당)
  • PROJECT_NUMBER: Compute Engine 리소스를 실행하는 Google Cloud 프로젝트의 프로젝트 번호(Google Cloud 프로젝트 ID가 아님)

암호화 사양

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

디스크의 데이터는 Google이 소유하고 Google이 관리하는 키를 사용하여 암호화됩니다. Google Cloud의 기본 암호화와 관련된 사양은 보안 문서의 기본 저장 데이터 암호화를 참조하세요.

Hyperdisk Balanced 및 Cloud HSM의 비밀 모드를 사용하면 데이터 암호화 키(DEK)에 하드웨어 지원 엔클레이브가 포함된 추가 보안 속성이 있습니다.

제한사항

  • CMEK로 기존 리소스를 암호화할 수 없습니다. 디스크, 이미지, 스냅샷을 CMEK로 만들 때만 암호화할 수 있습니다.

  • CMEK로 암호화된 인스턴트 스냅샷에서 디스크를 만들 때는 소스 디스크를 암호화하는 데 사용되는 키를 지정해야 합니다. 디스크 클론 및 표준 스냅샷과 같이 다른 CMEK로 암호화된 리소스를 사용할 때는 키를 지정할 필요가 없습니다.

  • Google Cloud 인프라에서 키를 관리하며 VM이 종료될 때 키가 삭제되므로 로컬 SSD 디스크에는 자체 키를 사용할 수 없습니다.

  • 리전별 리소스(디스크)는 다음 Cloud KMS 위치 중 하나에 있는 키로만 암호화할 수 있습니다.

    • 디스크와 동일한 리전의 키
    • 디스크와 동일한 지리적 위치에 있는 멀티 리전 키
    • 전역 위치의 키

    예를 들어 us-west1-a 영역의 디스크는 전역 위치, us-west1 리전 또는 us 멀티 리전의 키로 암호화할 수 있습니다.

    이미지 및 스냅샷과 같은 전역 리소스는 모든 위치의 키로 암호화할 수 있습니다. 자세한 내용은 Cloud KMS의 위치 유형을 참조하세요.

  • 키를 사용한 디스크, 스냅샷, 이미지 암호화는 영구적입니다. 리소스에서 암호화를 삭제하거나 사용된 키를 변경할 수 없습니다. 암호화를 삭제하거나 키를 변경하는 유일한 방법은 새 암호화 옵션을 지정하면서 리소스 복사본을 만드는 것입니다.

  • Hyperdisk Balanced의 비밀 모드는 기존 하이퍼디스크 제한사항을 상속하며 다음과 같은 추가 제한사항이 있습니다.

    • 다음 리전에서는 컨피덴셜 VM 또는 Confidential Google Kubernetes Engine 노드가 있는 N2D VM에만 비밀 모드의 Hyperdisk Balanced 디스크를 연결할 수 있습니다.
      • europe-west4
      • us-central1
      • us-east4
      • us-east5
      • us-south1
      • us-west4
    • Hyperdisk Balanced 디스크의 비밀 모드가 연결된 가상 머신(VM) 인스턴스는 일시중지하거나 재개할 수 없습니다.
    • Hyperdisk Balanced의 비밀 모드에서는 Hyperdisk 스토리지 풀을 사용할 수 없습니다.
    • Hyperdisk Balanced 디스크의 비밀 모드에서는 커스텀 이미지를 만들 수 없습니다.

수동 또는 자동 키 생성

Cloud KMS 키를 수동으로 만들거나 Cloud KMS 자동 키(미리보기)를 사용할 수 있습니다. Autokey는 프로비저닝 및 할당을 자동화하여 Cloud KMS 키 만들기 및 관리를 간소화합니다. Autokey를 사용하면 키링, 키, 서비스 계정을 미리 프로비저닝할 필요가 없습니다. 대신 Compute Engine 리소스를 만들 때 필요에 따라 생성됩니다. 자세한 내용은 Autokey 개요를 참조하세요.

수동으로 키링 및 키 만들기

Cloud KMS를 실행하는 Google Cloud 프로젝트의 경우 키링 및 키 만들기에 설명된 대로 키링과 키를 만듭니다.

CMEK로 새 Persistent Disk 암호화

VM 또는 디스크 생성 중 키를 입력하여 새 Persistent Disk를 암호화할 수 있습니다.

콘솔

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

    디스크로 이동

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

gcloud

gcloud compute disks create 명령어를 사용하여 암호화된 디스크를 만들고 --kms-key 플래그를 사용하여 키를 지정합니다.

gcloud compute disks create DISK_NAME \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

다음을 바꿉니다.

  • DISK_NAME: 새 디스크의 이름
  • KMS_PROJECT_ID: Cloud KMS 키를 소유하는 프로젝트
  • REGION: 키가 있는 리전
  • KEY_RING: 키가 포함된 키링의 이름
  • KEY: 디스크를 암호화하는 데 사용된 키의 이름

REST

instances.insert 메서드에 대한 POST 요청을 생성합니다. 디스크를 암호화하려면 diskEncryptionKey 속성을 kmsKeyName 속성과 함께 사용합니다. 예를 들어 다음과 같이 Cloud KMS 키로 VM을 만드는 동안 새 디스크를 암호화할 수 있습니다.

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

{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE"
  },
  "boot": true
 }
],
...
}

다음을 바꿉니다.

  • PROJECT_ID: Compute Engine을 실행하는 Google Cloud 프로젝트의 ID
  • ZONE: VM을 만들 영역
  • MACHINE_TYPE: 머신 유형(예: c3-standard-4)
  • KMS_PROJECT_ID: Cloud KMS 키를 소유하는 프로젝트
  • REGION: 디스크가 있는 리전
  • KEY_RING: 키가 포함된 키링의 이름
  • KEY: 디스크를 암호화하는 데 사용된 키의 이름
  • SOURCE_IMAGE: VM을 만들 때 사용할 이미지(예: projects/debian-cloud/global/images/debian-11-bullseye-v20231115)

마찬가지로 disks.insert 메서드를 사용하여 새 독립형 Persistent Disk를 만들고 Cloud KMS 키로 이를 암호화할 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
 "name": "DISK_NAME",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
}

다음을 바꿉니다.

  • PROJECT_ID: Compute Engine을 실행하는 Google Cloud 프로젝트의 ID
  • ZONE: 디스크를 만들 영역
  • SOURCE_IMAGE: 디스크를 만들 때 사용할 이미지(예: projects/debian-cloud/global/images/debian-11-bullseye-v20231115)
  • DISK_NAME: 새 디스크의 이름
  • KMS_PROJECT_ID: Cloud KMS 키를 소유하는 프로젝트
  • REGION: 디스크가 있는 리전
  • KEY_RING: 키가 포함된 키링의 이름
  • KEY: 디스크를 암호화하는 데 사용된 키의 이름
  • DISK_TYPE: 만들 디스크의 유형

비밀 모드로 Hyperdisk Balanced 볼륨 만들기

비밀 모드로 새 Hyperdisk를 만들려면 Google Cloud 콘솔, Google Cloud CLI 또는 REST를 사용합니다.

콘솔

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

    디스크로 이동

  2. 새 디스크를 클릭하고 새 디스크의 속성을 입력합니다.
  3. 디스크 설정 섹션에서 디스크 유형으로 Hyperdisk Balanced를 선택합니다.
  4. 선택사항입니다. 디스크의 기본 디스크 크기, 프로비저닝된 IOPS, 프로비저닝된 처리량 설정을 변경합니다.
  5. 암호화 섹션에서 Cloud KMS 키를 선택합니다.
  6. 키 목록에서 이 디스크를 암호화하는 데 사용할 Cloud HSM 키를 선택합니다.
  7. 컨피덴셜 컴퓨팅 섹션에서 컨피덴셜 컴퓨팅 서비스 사용 설정을 선택합니다.
  8. 디스크를 만들려면 만들기를 클릭합니다.

gcloud

gcloud compute disks create 명령어를 사용하여 Hyperdisk Balanced의 비밀 모드로 새 디스크를 암호화합니다. --confidential-compute 플래그로 비밀 모드를 사용 설정하고 --kms-key 플래그를 사용하여 키를 지정합니다.

gcloud compute disks create DISK_NAME \
  --type=hyperdisk-balanced \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY \
  --confidential-compute

다음을 바꿉니다.

  • DISK_NAME: 새 디스크의 이름
  • KMS_PROJECT_ID: Cloud HSM 키를 소유하는 프로젝트
  • REGION: 키가 있는 리전
  • KEY_RING: 키가 포함된 키링의 이름
  • KEY: 디스크를 암호화하는 데 사용된 키의 이름

REST

instances.insert 메서드에 대한 POST 요청을 생성합니다. Hyperdisk Balanced의 비밀 모드로 디스크를 암호화하려면 diskEncryptionKey 속성을 kmsKeyName 속성과 함께 사용하고 enableConfidentialCompute 플래그를 설정합니다. 예를 들어 다음과 같이 Cloud HSM 키로 VM을 만드는 동안 새 디스크를 암호화할 수 있습니다.

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

{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
 {
  "type": "DISK_TYPE",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE",
   "enableConfidentialCompute": true
  },
  "boot": true
 }
],
"networkInterfaces": [
  {
   "network": "global/networks/default"
  }
]
}

다음을 바꿉니다.

  • DISK_TYPE: 만들 디스크 유형(예: hyperdisk-balanced)
  • PROJECT_ID: Compute Engine을 실행하는 Google Cloud 프로젝트의 ID
  • ZONE: VM을 만들 영역
  • MACHINE_TYPE: 머신 유형(예: n2d-standard-4)
  • KMS_PROJECT_ID: Cloud HSM 키를 소유하는 프로젝트
  • REGION: 디스크가 있는 리전
  • KEY_RING: 키가 포함된 키링의 이름
  • KEY: 디스크를 암호화하는 데 사용된 키의 이름
  • SOURCE_IMAGE: VM을 만들 때 사용할 컨피덴셜 VM을 지원하는 이미지(예: projects/debian-cloud/global/images/debian-11-bullseye-v20231115)

마찬가지로 disks.insert 메서드를 사용하여 Hyperdisk Balanced의 새 비밀 모드를 만들 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
 "name": "DISK_NAME",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
 "enableConfidentialCompute": true
}

다음을 바꿉니다.

  • PROJECT_ID: Compute Engine을 실행하는 Google Cloud 프로젝트의 ID
  • ZONE: 디스크를 만들 영역
  • SOURCE_IMAGE: 디스크를 만들 때 컨피덴셜 VM을 지원하는 이미지(예: projects/debian-cloud/global/images/debian-11-bullseye-v20231115)
  • DISK_NAME: 새 디스크의 이름
  • KMS_PROJECT_ID: Cloud HSM 키를 소유하는 프로젝트
  • REGION: 디스크가 있는 리전
  • KEY_RING: 키가 포함된 키링의 이름
  • KEY: 디스크를 암호화하는 데 사용된 키의 이름
  • DISK_TYPE: 만들 디스크 유형(예: hyperdisk-balanced)

CMEK로 암호화된 디스크에서 스냅샷 만들기

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

소스 디스크에서도 CMEK가 사용되지 않는 한 CMEK를 사용하는 스냅샷을 만들 수 없습니다. 또한 완전히 새로운 디스크 이미지와 새 영구 디스크를 만들지 않으면 CMEK 암호화 디스크 또는 스냅샷을 Google Cloud 기본 암호화를 사용하도록 변환할 수 없습니다.

CMEK로 암호화된 디스크의 스냅샷은 증분입니다.

콘솔

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

    스냅샷으로 이동

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

gcloud

고객 관리 암호화의 경우 디스크를 암호화하는 데 사용된 Cloud KMS 키가 스냅샷을 암호화하는 데에도 사용됩니다.

스냅샷 설정에 따라 또는 선택한 대체 스토리지 위치를 사용해서 정의된 스토리지 위치 정책으로 스냅샷을 만들 수 있습니다. 자세한 내용은 스냅샷 스토리지 위치 선택을 참조하세요.

  • 스냅샷 설정에 구성된 사전 정의되었거나 맞춤설정된 기본 위치에 스냅샷을 만들려면 gcloud compute snapshots create 명령어를 사용합니다.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE
    
  • 또는 스냅샷 설정을 재정의하고 커스텀 스토리지 위치에 스냅샷을 만들려면 스냅샷 저장 위치를 나타내는 --storage-location 플래그를 포함하세요.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION
    

    다음을 바꿉니다.

    • SNAPSHOT_NAME: 스냅샷의 이름입니다.
    • SOURCE_ZONE: 소스 디스크의 영역
    • SOURCE_DISK_NAME: 스냅샷을 만들려는 디스크 볼륨의 이름
    • SNAPSHOT_TYPE: 스냅샷 유형(STANDARD 또는 ARCHIVE). 스냅샷 유형을 지정하지 않으면 STANDARD 스냅샷이 생성됩니다.
    • STORAGE_LOCATION: (선택사항) 스냅샷을 저장할 Cloud Storage 멀티 리전 또는 Cloud Storage 리전. 스토리지 위치는 하나만 지정할 수 있습니다.

      스냅샷 설정에 구성된 사전 정의되었거나 맞춤 설정된 기본 스토리지 위치를 재정의하려는 경우에만 --storage-location 매개변수를 사용합니다.

REST

스냅샷 설정에 따라 또는 선택한 대체 스토리지 위치를 사용해서 정의된 스토리지 위치 정책으로 스냅샷을 만들 수 있습니다. 자세한 내용은 스냅샷 스토리지 위치 선택을 참조하세요.

  • 스냅샷 설정에 구성된 사전 정의되었거나 맞춤설정된 기본 위치에 스냅샷을 만들려면 snapshots.insert 메서드에 POST 요청을 수행하세요.

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotEncryptionKey":  {
         "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
        },
        "snapshotType": "SNAPSHOT_TYPE"
    }
    
  • 또는 스냅샷 설정을 재정의하고 커스텀 스토리지 위치에 스냅샷을 만들려면 snapshots.insert 메서드에 대해 POST 요청을 수행하고 요청에 storageLocations 속성을 포함합니다.

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotEncryptionKey":  {
         "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
        },
        "snapshotType": "SNAPSHOT_TYPE",
        "storageLocations": [
            "STORAGE_LOCATION"
        ],
    }
    

다음을 바꿉니다.

  • DESTINATION_PROJECT_ID: 스냅샷을 만들려는 프로젝트의 ID
  • SNAPSHOT_NAME: 스냅샷의 이름입니다.
  • SOURCE_PROJECT_ID: 소스 디스크 프로젝트의 ID
  • SOURCE_ZONE: 소스 디스크의 영역
  • SOURCE_DISK_NAME: 스냅샷을 만들려는 디스크의 이름
  • KMS_PROJECT_ID: Cloud Key Management Service에 저장된 암호화 키가 포함된 프로젝트
  • KEY_REGION: Cloud KMS 키가 있는 리전
  • KEY_RING: Cloud KMS 키가 포함된 키링의 이름
  • SNAPSHOT_KEY: 소스 디스크를 암호화하는 데 사용한 Cloud KMS 키의 이름
  • SNAPSHOT_TYPE: 스냅샷 유형(STANDARD 또는 ARCHIVE). 스냅샷 유형을 지정하지 않으면 STANDARD 스냅샷이 생성됩니다.
  • STORAGE_LOCATION: (선택사항) 스냅샷을 저장할 Cloud Storage 멀티 리전 또는 Cloud Storage 리전. 스토리지 위치는 하나만 지정할 수 있습니다.

    스냅샷 설정에 구성된 사전 정의되었거나 맞춤 설정된 기본 스토리지 위치를 재정의하려는 경우에만 storageLocations 매개변수를 사용합니다.

CMEK로 가져온 이미지 암호화

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

콘솔

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

    이미지로 이동

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

gcloud

이미지를 가져오고 암호화하려면 gcloud compute images create 명령어를 사용합니다. 고객 관리 암호화의 경우 이미지의 Cloud KMS 키를 지정합니다.

gcloud compute images create IMAGE_NAME \
    --source-disk=SOURCE_DISK  \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

다음을 바꿉니다.

  • IMAGE_NAME: 만들려는 이미지의 이름
  • SOURCE_DISK: 스냅샷을 만들 디스크의 이름
  • KMS_PROJECT_ID: Cloud KMS 키가 포함된 프로젝트
  • REGION: Cloud KMS 키가 있는 리전
  • KEY_RING: Cloud KMS 키가 포함된 키링
  • KEY: 새 디스크를 암호화하는 데 사용할 키의 이름

REST

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

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

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

다음을 바꿉니다.

  • PROJECT_ID: 암호화된 이미지를 만들 프로젝트
  • IMAGE_NAME: 만들려는 이미지의 이름
  • KMS_PROJECT_ID: Cloud KMS 키가 포함된 프로젝트
  • REGION: Cloud KMS 키가 있는 리전
  • KEY_RING: Cloud KMS 키가 포함된 키링
  • KEY: 소스 디스크를 암호화하는 데 사용한 키의 이름

CMEK로 암호화된 스냅샷에서 Persistent Disk 만들기

암호화된 스냅샷에서 새 독립형 Persistent Disk를 만들려면 다음을 수행합니다.

콘솔

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

    디스크로 이동

  2. 새 디스크를 클릭하고 새 디스크의 속성을 입력합니다.
  3. 소스 유형에서 사용할 스냅샷 또는 이미지를 선택합니다.
  4. 선택사항: 새 암호화 키를 지정하려면 암호화에서 사용할 암호화 키 유형을 지정한 후 암호화 키 정보를 제공합니다.

    고객 관리 또는 고객 제공 암호화 키를 삭제하려면 암호화에서 기본값인 Google 관리 암호화 키를 사용합니다.

  5. Persistent Disk 생성 프로세스를 계속 진행합니다.

gcloud

gcloud compute disks create 명령어를 사용하여 암호화된 스냅샷에서 새 독립형 Persistent Disk를 만듭니다.

gcloud compute disks create DISK_NAME \
    --source-snapshot SNAPSHOT_NAME \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

다음을 바꿉니다.

  • DISK_NAME: 새 디스크의 이름
  • SNAPSHOT_NAME: 암호화된 스냅샷의 이름

    스냅샷 대신 이미지를 사용하려면 --source-snapshot SNAPSHOT_NAME--image IMAGE_NAME으로 바꿉니다.

  • KMS_PROJECT_ID: 선택사항: Cloud KMS 키가 포함된 프로젝트

  • REGION: 선택사항: Cloud KMS 키가 있는 리전

  • KEY_RING: 선택사항: Cloud KMS 키가 포함된 키링

  • KEY: 선택사항: 새 디스크를 암호화하는 데 사용할 Cloud KMS 키의 이름

    새 디스크를 암호화하려면 다음 중 하나를 수행합니다.

    • 새 고객 관리 암호화 키를 지정하려면 --kms-key 플래그를 사용합니다.
    • 기본적인 Google이 소유하고 Google이 관리하는 키를 사용하려면 --kms-key 플래그를 포함하지 마세요.

REST

compute.disks.insert 메서드에 대한 POST 요청을 생성하여 암호화된 스냅샷에서 새 독립형 Persistent Disk를 만듭니다. sourceSnapshot 속성을 사용하여 스냅샷을 지정합니다.

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

{
  "name": "DISK_NAME",
  "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/global/snapshots/SNAPSHOT_NAME",
  "diskEncryptionKey": {
     "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  }
}

다음을 바꿉니다.

  • PROJECT_ID: 새 디스크를 만들 프로젝트
  • ZONE: 새 디스크를 만들 영역
  • DISK_NAME: 새 디스크의 이름
  • SNAPSHOT_PROJECT_ID: 스냅샷이 포함된 프로젝트
  • SNAPSHOT_NAME: 암호화된 스냅샷의 이름

    스냅샷 대신 이미지를 사용하려면 sourceSnapshotsourceImage로 바꿉니다.

  • KMS_PROJECT_ID: 선택사항: Cloud KMS 키가 포함된 프로젝트

  • REGION: 선택사항: Cloud KMS 키가 있는 리전

  • KEY_RING: 선택사항: Cloud KMS 키가 포함된 키링

  • KEY: 선택사항: 새 디스크를 암호화하는 데 사용할 Cloud KMS 키의 이름

    diskEncryptionKey를 포함하는 경우 디스크가 지정된 Cloud KMS 키로 암호화됩니다. diskEncryptionKey를 포함하지 않으면 Google이 소유하고 Google이 관리하는 키를 사용해서 디스크가 암호화됩니다.

CMEK로 암호화된 부팅 디스크를 새 VM에 연결

콘솔

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. VM 세부정보를 지정하고 부팅 디스크 섹션에서 변경을 클릭합니다. 그런 후 다음 작업을 수행합니다.

    1. 기존 디스크를 클릭합니다.
    2. 디스크 목록에서 VM에 연결할 기존 디스크를 선택합니다.
    3. 선택을 클릭합니다.
  3. VM 만들기 프로세스를 계속 진행합니다.

gcloud

새 VM을 만들 때 암호화된 디스크를 연결하려면 gcloud compute instances create 명령어를 사용합니다. 다음 예시와 같이 --disk 플래그를 사용하여 암호화된 부팅 디스크를 지정합니다.

gcloud compute instances create VM_NAME \
  ...
  --disk name=DISK_NAME,boot=yes

다음을 바꿉니다.

  • VM_NAME: 만들려는 VM의 이름
  • DISK_NAME: 암호화된 디스크의 이름

REST

compute.instances.insert 메서드에 대한 POST 요청을 생성합니다. 다음 예시와 같이 disks 속성을 사용하여 암호화된 부팅 디스크를 지정합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  ...
  "disks": [
    {
      "deviceName": "DISK_ALIAS",
      "source": "projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME"
    }
  ]
}

다음을 바꿉니다.

  • PROJECT_ID: 새 VM을 만들 프로젝트
  • ZONE: 새 VM을 만들 영역
  • DISK_ALIAS: Linux 운영체제를 실행하는 VM의 /dev/disk/by-id/google-* 디렉터리에서 디스크 별칭으로 사용할 고유한 기기 이름. 이 이름은 인스턴스 내에서 마운트나 크기 조절과 같은 작업을 위해 디스크를 참조하는 데 사용할 수 있습니다. 기기 이름을 지정하지 않으면 VM은 이 디스크에 적용할 기본 기기 이름을 persistent-disk-x 형식으로 선택합니다. 여기서 x는 Compute Engine에서 할당한 번호입니다. 이 필드는 Persistent Disk 볼륨에만 적용됩니다.
  • DISK_NAME: 암호화된 디스크의 이름

Persistent Disk에서 Cloud KMS 암호화 키 삭제

암호화된 디스크의 콘텐츠를 복호화하고, 그 대신 Google Cloud 기본 암호화를 사용하는 새 디스크를 생성할 수 있습니다. 기본적으로 Google Cloud는 저장 데이터를 암호화합니다.

  1. 암호화된 디스크의 스냅샷을 만듭니다.
  2. 새 암호화된 스냅샷을 사용하여 새 영구 디스크를 생성합니다.

새 Persistent Disk를 만들면 Google Cloud 기본 암호화를 사용하여 디스크 콘텐츠를 보호하는 데 도움이 됩니다. 이 디스크에서 만드는 스냅샷도 기본 암호화를 사용해야 합니다.

디스크의 Cloud KMS 암호화 키 순환

새 Cloud KMS 키 버전을 사용하는 새 디스크를 만들어 디스크를 암호화하는 데 사용되는 키를 순환합니다. 키 순환은 표준화된 보안 방식을 준수하기 위한 권장사항입니다. 키를 순환하려면 다음을 수행합니다.

  1. Cloud KMS 키를 순환합니다.
  2. 암호화된 디스크의 스냅샷을 만듭니다.
  3. 새 스냅샷을 사용하여 이전 단계에서 순환된 키로 새 디스크를 만듭니다.
  4. 이전 암호화 키를 사용하는 VM에 연결된 디스크를 바꿉니다.

새 디스크를 만들 때는 암호화를 위해 새 키 버전이 사용됩니다. 이 디스크에서 만드는 모든 스냅샷에는 최신 기본 키 버전이 사용됩니다.

키를 순환해도 이전 키 버전으로 암호화된 데이터는 자동으로 다시 암호화되지 않습니다. 자세한 내용은 데이터 다시 암호화를 선택합니다. 키를 순환해도 기존 키 버전이 자동으로 사용 중지되거나 폐기되지는 않습니다.

CMEK 사용 중지 또는 삭제의 영향

암호화 키를 중지하거나 삭제하면 키가 보호하는 데 도움이 되는 다음 리소스가 다음과 같은 영향을 받습니다.

  • 디스크가 연결된 VM을 부팅할 수 없습니다. 키 해지 시 VM 종료를 사용 설정한 경우 연결된 디스크가 있는 VM에서는 키가 종료를 보호하는 데 도움이 됩니다.
  • 디스크를 VM에 연결하거나 이에 대해 스냅샷을 만들 수 없습니다.
  • 스냅샷을 사용하여 디스크를 만들 수 없습니다.
  • 이미지를 사용하여 디스크를 만들 수 없습니다.

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

Cloud KMS 키 해지 시 VM 종료 구성

VM에 연결된 Persistent Disk를 보호하는 데 도움이 되는 Cloud KMS 키를 취소하면 VM이 자동으로 종료되도록 구성할 수 있습니다. 키는 사용 중지하거나 삭제하여 취소할 수 있습니다. 이 설정을 사용 설정하면 VM이 키 취소 후 7시간 내에 종료됩니다.

키를 다시 사용 설정하면 키가 보호하는 연결된 디스크를 사용하여 VM을 다시 시작할 수 있습니다. 키를 사용 설정한 후에는 VM이 자동으로 다시 시작되지 않습니다.

콘솔

Cloud KMS 키가 취소될 때 VM을 종료되도록 구성하려면 다음을 수행합니다.

  1. Cloud KMS 키로 보호되는 디스크가 포함된 VM 만들기를 시작합니다.
  2. 네트워킹, 디스크, 보안, 관리, 단독 테넌시 메뉴를 엽니다.
  3. 관리 섹션을 펼칩니다.
  4. 고객 관리 암호화 키(CMEK) 취소 정책에서 종료를 선택합니다.

gcloud

gcloud compute instances create 명령어를 사용하여 VM을 만들고 --key-revocation-action-type=stop을 포함합니다.

gcloud compute instances create VM_NAME \
  --image IMAGE \
  --key-revocation-action-type=stop

REST

instances.insert 메서드를 사용하여 VM을 만들고 "keyRevocationActionType" 속성을 "STOP"으로 설정합니다. 다음 예시는 공개 이미지로부터 VM을 만듭니다.

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

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "keyRevocationActionType": "STOP"
}

또는 Google Cloud CLI 또는 REST를 사용하여 키 취소 시 종료되는 VM을 만들도록 인스턴스 템플릿을 구성할 수 있습니다.

콘솔

인스턴스 템플릿을 사용하여 Cloud KMS 키가 취소되었을 때 종료되는 VM을 만들 수 있습니다.

  1. Cloud KMS 키로 보호되는 디스크가 포함된 새 인스턴스 템플릿 만들기를 시작합니다.
  2. 네트워킹, 디스크, 보안, 관리, 단독 테넌시 메뉴를 엽니다.
  3. 관리 섹션을 펼칩니다.
  4. 고객 관리 암호화 키(CMEK) 취소 정책에서 종료를 선택합니다.

gcloud

gcloud compute instance-templates create 명령어를 사용하여 인스턴스 템플릿을 만들고 --key-revocation-action-type=stop을 포함합니다.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --key-revocation-action-type=stop

REST

instanceTemplates.insert 메서드에 대한 POST 요청을 생성합니다. 요청 본문에서는 모든 필요한 구성 필드를 명시적으로 정의해야 합니다. 이 템플릿에서 생성된 VM이 키 취소 시 종료되도록 하려면 "keyRevocationActionType":"STOP"을 지정합니다. 예를 들어 키 취소 시 종료되는 VM을 만드는 최소 필수 필드가 포함된 인스턴스 템플릿은 다음과 같습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceTemplates

{
  "name": "example-template",
  "properties": {
  "machineType": "e2-standard-4",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs": [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-11"
      }
    }
  ],
  "keyRevocationActionType": "STOP"
  }
}

Cloud KMS 취소 시 종료되도록 구성된 VM을 만든 후 Cloud KMS 키로 암호화된 Persistent Disk를 create 연결합니다.