Compute Engine永続ディスクでのCMEKの有効化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。

この記事では、Compute Engine永続ディスクでカスタマー管理の暗号鍵(CMEK)による暗号化が無効化されている問題について、リスクと対策を解説します。

ポリシーの説明

Google Cloud Compute Engineの永続ディスクは、デフォルトでGoogleが管理する暗号鍵で暗号化されています。しかし、より高度なセキュリティ要件を満たすためには、Cloud KMS(Key Management Service)を使用したカスタマー管理の暗号鍵(CMEK)による暗号化が推奨されます。CMEKを使用することで、暗号鍵のライフサイクル管理、アクセス制御、監査ログの取得など、組織のセキュリティポリシーに沿った暗号化管理が可能になります。

修復方法

コンソールでの修復手順

Google Cloud コンソールを使用して、永続ディスクにCMEK暗号化を設定します。

  1. Cloud KMSの準備
    • Google Cloud Consoleにログインします。
    • ナビゲーションメニューから「セキュリティ」→「Key Management」を選択します。
    • 「キーリングを作成」をクリックします。
    • キーリング名(例:compute-disk-keyring)とロケーションを指定します。
    • 「作成」をクリックします。
  2. 暗号鍵の作成
    • 作成したキーリングを選択します。
    • 「鍵を作成」をクリックします。
    • 鍵名(例:disk-encryption-key)を入力します。
    • 保護レベル:「ソフトウェア」または「HSM」を選択します。
    • 目的:「対称暗号化/復号化」を選択します。
    • ローテーション期間:90日(推奨)を設定します。
    • 「作成」をクリックします。
  3. Compute Engine サービスアカウントへの権限付与
    • 作成した鍵を選択します。
    • 「権限」タブをクリックします。
    • 「アクセス権を付与」をクリックします。
    • プリンシパル:service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com
    • ロール:「Cloud KMS 暗号鍵の暗号化/復号化」を選択します。
    • 「保存」をクリックします。
  4. 新規ディスクの作成(CMEK適用)
    • 「Compute Engine」→「ディスク」に移動します。
    • 「ディスクを作成」をクリックします。
    • 基本設定を入力します。
    • 「暗号化」セクションで「顧客管理の暗号鍵」を選択します。
    • 作成した暗号鍵を選択します。
    • 「作成」をクリックします。
  5. 既存ディスクの移行
    • 既存ディスクのスナップショットを作成します。
    • スナップショットから新規ディスクを作成(上記手順4でCMEKを適用)します。
    • VMインスタンスを停止します。
    • 古いディスクをデタッチし、新しいCMEK暗号化ディスクをアタッチします。
    • VMインスタンスを起動します。

Terraformでの修復手順

永続ディスクのCMEK暗号化を有効にするTerraformコードと、主要な修正ポイントを説明します。

# Cloud KMSキーリングの作成
resource "google_kms_key_ring" "disk_keyring" {
  name     = "compute-disk-keyring"
  location = var.region
}

# 暗号鍵の作成
resource "google_kms_crypto_key" "disk_key" {
  name            = "disk-encryption-key"
  key_ring        = google_kms_key_ring.disk_keyring.id
  rotation_period = "7776000s"  # 90日

  lifecycle {
    prevent_destroy = true  # 誤削除防止
  }

  version_template {
    algorithm        = "GOOGLE_SYMMETRIC_ENCRYPTION"
    protection_level = "SOFTWARE"  # または "HSM" for higher security
  }
}

# Compute Engineサービスアカウントへの権限付与
data "google_project" "current" {}

resource "google_kms_crypto_key_iam_member" "compute_engine" {
  crypto_key_id = google_kms_crypto_key.disk_key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member        = "serviceAccount:service-${data.google_project.current.number}@compute-system.iam.gserviceaccount.com"
}

# CMEK暗号化を使用した永続ディスクの作成
resource "google_compute_disk" "encrypted_disk" {
  name  = "cmek-encrypted-disk"
  type  = "pd-ssd"  # または "pd-standard"
  zone  = var.zone
  size  = 100

  # CMEK暗号化の設定
  disk_encryption_key {
    kms_key_self_link = google_kms_crypto_key.disk_key.id
  }

  # スナップショットからの作成(既存ディスクの移行時)
  # snapshot = google_compute_snapshot.source_snapshot.id
}

# CMEK暗号化ディスクを使用したVMインスタンス
resource "google_compute_instance" "vm_with_cmek" {
  name         = "cmek-protected-vm"
  machine_type = "e2-medium"
  zone         = var.zone

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
      size  = 20
      type  = "pd-standard"
    }

    # ブートディスクもCMEK暗号化
    disk_encryption_key {
      kms_key = google_kms_crypto_key.disk_key.id
    }
  }

  # 追加ディスクのアタッチ
  attached_disk {
    source = google_compute_disk.encrypted_disk.id
    mode   = "READ_WRITE"
  }

  network_interface {
    network = "default"
  }
}

# 組織ポリシーによるCMEK強制(オプション)
resource "google_organization_policy" "require_cmek" {
  org_id     = var.organization_id
  constraint = "compute.requireCmekEncryption"

  list_policy {
    allow {
      all = true
    }
  }
}

# 既存ディスクの移行用スナップショット
resource "google_compute_snapshot" "migration_snapshot" {
  name        = "pre-cmek-snapshot"
  source_disk = "existing-disk-id"
  zone        = var.zone

  snapshot_encryption_key {
    kms_key_self_link = google_kms_crypto_key.disk_key.id
  }
}

 

最後に

この記事では、Compute Engine永続ディスクでカスタマー管理の暗号鍵(CMEK)による暗号化が無効化されている問題について、リスクと対策を解説しました。

この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考情報

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る