Compute EngineにおけるConfidential Computing設定について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Compute EngineインスタンスでConfidential Computing機能が無効化されている問題について、メモリ内データの露出リスクと、ハードウェアベースの暗号化による対策方法を詳しく解説します。Confidential VMを活用することで、処理中(in-use)のデータも完全に保護できます。

ポリシーの説明
Confidential Computingは、GCP Compute Engineが提供する先進的なセキュリティ機能です。この機能により、VMで処理中のデータを暗号化し、メモリ内のデータをハードウェアレベルで保護できます。通常、データは保管時(at rest)と転送時(in transit)で暗号化されますが、処理中(in use)のデータは暗号化されていません。Confidential Computingはこのギャップを埋め、データの完全なライフサイクルにわたる保護を実現します。
高いセキュリティ環境が求められる場合によっては対応するようにしましょう。
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、Compute EngineインスタンスでConfidential Computingを有効化します。
※ 既存インスタンスに対しての変更は出来ないためスナップショットを取得し、インスタンスを再作成する形式での対応となります。
新規インスタンス作成時の設定手順:
- Google Cloud Consoleにアクセス
- Google Cloud Consoleにログインします
- ナビゲーションメニューから「Compute Engine」→「VMインスタンス」を選択します
- 新規インスタンスの作成開始
- 「インスタンスを作成」ボタンをクリックします
- 基本的な設定(名前、リージョン、ゾーン)を入力します
- マシンタイプの選択
- 「マシンタイプ」セクションで、Confidential Computingをサポートするマシンタイプを選択します:
- N2Dシリーズ(AMD EPYC): n2d-standard-2以上
- C2Dシリーズ(AMD EPYC): c2d-standard-2以上
- 注意: Confidential VMは特定のマシンタイプ(N2D、C2D)でのみサポートされています
- 必要なvCPU数とメモリを選択します
- 「マシンタイプ」セクションで、Confidential Computingをサポートするマシンタイプを選択します:
- Confidential VMの設定
- 「マシンの構成」セクションで、「Confidential VM サービス」タブをクリックします
- 「Confidential VMを有効にする」のチェックボックスをオンにします
- 「マシンの構成」セクションで、「Confidential VM サービス」タブをクリックします
- インスタンスの作成
- その他の必要な設定を完了します
- 「作成」ボタンをクリックしてインスタンスを作成します
Terraformでの修復手順
TerraformでConfidential Computing対応のCompute Engineインスタンスを作成する設定例を示します。
# Confidential VM対応のサービスアカウント
resource "google_service_account" "confidential_vm_sa" {
account_id = "confidential-vm-sa"
display_name = "Confidential VM Service Account"
description = "Service account for Confidential VMs"
}
# 必要最小限のIAMロール
resource "google_project_iam_member" "confidential_vm_log_writer" {
project = var.project_id
role = "roles/logging.logWriter"
member = "serviceAccount:${google_service_account.confidential_vm_sa.email}"
}
resource "google_project_iam_member" "confidential_vm_metric_writer" {
project = var.project_id
role = "roles/monitoring.metricWriter"
member = "serviceAccount:${google_service_account.confidential_vm_sa.email}"
}
# Confidential VM インスタンスの作成
resource "google_compute_instance" "confidential_vm" {
name = "confidential-vm-${var.environment}"
machine_type = "n2d-standard-4" # Confidential VM対応マシンタイプ
zone = var.zone
# Confidential Computing の有効化
confidential_instance_config {
enable_confidential_compute = true
}
boot_disk {
initialize_params {
image = "ubuntu-os-cloud/ubuntu-2004-lts" # Confidential VM対応OS
size = 50
type = "pd-standard"
}
}
network_interface {
subnetwork = var.subnet_id
# プライベートIPのみ(セキュリティ強化)
}
# Shielded VM設定(Confidential VMと併用推奨)
shielded_instance_config {
enable_secure_boot = true
enable_vtpm = true
enable_integrity_monitoring = true
}
# サービスアカウントと最小権限スコープ
service_account {
email = google_service_account.confidential_vm_sa.email
scopes = [
"<https://www.googleapis.com/auth/logging.write>",
"<https://www.googleapis.com/auth/monitoring.write>",
]
}
# メタデータ設定
metadata = {
enable-oslogin = "TRUE"
block-project-ssh-keys = "TRUE"
}
labels = {
environment = var.environment
security = "confidential"
managed_by = "terraform"
}
# 削除保護
deletion_protection = true
lifecycle {
ignore_changes = [
metadata["ssh-keys"]
]
}
}
# Confidential VM用のファイアウォールルール
resource "google_compute_firewall" "confidential_vm_fw" {
name = "confidential-vm-firewall-${var.environment}"
network = var.network_name
# 必要最小限のインバウンドトラフィックのみ許可
allow {
protocol = "tcp"
ports = ["443"] # HTTPSのみ
}
# ソースIPを制限
source_ranges = var.allowed_source_ips
target_service_accounts = [
google_service_account.confidential_vm_sa.email
]
priority = 1000
log_config {
metadata = "INCLUDE_ALL_METADATA"
}
}
# 複数のConfidential VMをデプロイする場合のモジュール例
module "confidential_compute_cluster" {
source = "./modules/confidential-vm"
count = var.instance_count
instance_name = "confidential-app-${count.index + 1}"
machine_type = "n2d-standard-8"
zone = element(var.zones, count.index)
# Confidential Computing設定
enable_confidential_compute = true
# アプリケーション固有の設定
startup_script = file("scripts/app-init.sh")
# ネットワーク設定
subnet_id = var.subnet_ids[count.index]
# セキュリティ設定
service_account_email = google_service_account.confidential_vm_sa.email
tags = ["confidential-vm", "app-server"]
}
# 変数定義
variable "environment" {
description = "Environment name"
type = string
}
variable "zone" {
description = "GCP zone for the instance"
type = string
default = "us-central1-a"
}
variable "subnet_id" {
description = "Subnet ID for the instance"
type = string
}
variable "allowed_source_ips" {
description = "List of allowed source IP ranges"
type = list(string)
default = []
}
Terraformでの主要な修正ポイント:
- Confidential Computing の明示的な有効化
confidential_instance_config
ブロックでenable_confidential_compute = true
を設定- Confidential VM対応のマシンタイプ(N2D、C2D)を使用
- 対応OSイメージの選択
- Confidential VMをサポートするOSイメージを選択
- Ubuntu 20.04 LTS、RHEL 8など最新のOSを使用
- 追加のセキュリティ強化
- Shielded VMの併用
- 最小権限のサービスアカウント
- 削除保護の有効化
- プライベートIPのみの使用
最後に
この記事では、Compute EngineインスタンスでConfidential Computing機能が無効化されている問題について、リスクと対策を解説しました。
Confidential Computingを有効化することで、処理中のデータもハードウェアレベルで暗号化され、データの完全なライフサイクルにわたる保護が実現できます。特に機密データを扱うワークロードでは、この機能の活用を強く推奨します。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。