GCP Compute Engineインスタンスの削除保護の有効化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Compute Engineインスタンスで削除保護機能が無効化されている問題について、リスクと対策を解説します。

ポリシーの説明
Compute Engineインスタンスで削除保護機能が無効化されているケースを検出します。削除保護(deletionProtection)は、仮想マシンインスタンスが誤って、または悪意を持って削除されることを防ぐセキュリティ機能です。この機能を有効にすると、APIコール、gcloud CLI、Cloud Console、Terraformなど、あらゆるインターフェースからの削除要求がブロックされます。重要な本番環境やビジネスクリティカルなインスタンスには、この保護機能の有効化が強く推奨されます。
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、Compute Engineインスタンスで削除保護を有効化します。
1. 既存インスタンスで削除保護を有効化
- Google Cloud コンソールで「Compute Engine」→「VMインスタンス」に移動します。
- 削除保護を有効にしたいインスタンスの名前をクリックします。
- インスタンスの詳細ページで「編集」ボタンをクリックします。
- 「削除からの保護」セクションまでスクロールします。
- 「削除保護を有効にする」のチェックボックスをオンにします。

- ページ下部の「保存」ボタンをクリックします。
2. 新規インスタンス作成時に削除保護を有効化
- 「Compute Engine」→「VMインスタンス」→「インスタンスを作成」をクリックします。
- 必要な設定(名前、リージョン、マシンタイプなど)を入力します。
- 「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」を展開します。
- 「管理」タブをクリックします。
- 「削除保護」セクションで「削除保護を有効にする」をチェックします。
- その他の設定を完了し、「作成」をクリックします。
Terraformでの修復手順
Compute Engineインスタンスで削除保護を有効にするTerraformコードと、主要な修正ポイントを説明します。
# 削除保護を有効にした本番環境インスタンス
resource "google_compute_instance" "production_instance" {
name = "${var.environment}-critical-instance"
machine_type = var.machine_type
zone = var.zone
deletion_protection = true # 削除保護を有効化
boot_disk {
initialize_params {
image = var.boot_image
size = var.boot_disk_size
type = "pd-ssd"
}
}
network_interface {
network = var.network
subnetwork = var.subnetwork
access_config {
// 必要に応じてパブリックIPを設定
}
}
metadata = {
enable-oslogin = "TRUE"
}
service_account {
email = google_service_account.instance_sa.email
scopes = ["cloud-platform"]
}
labels = {
environment = var.environment
criticality = "high"
protected = "true"
}
tags = ["production", "protected-instance"]
}
# Terraformレベルでの追加保護
resource "google_compute_instance" "critical_database" {
name = "${var.environment}-database-server"
machine_type = "n2-highmem-8"
zone = var.zone
deletion_protection = true # GCPレベルの削除保護
boot_disk {
initialize_params {
image = "ubuntu-os-cloud/ubuntu-2004-lts"
size = 100
type = "pd-ssd"
}
}
attached_disk {
source = google_compute_disk.database_disk.id
device_name = "database"
}
network_interface {
network = var.network
subnetwork = var.subnetwork
}
# Terraformレベルでの削除保護も追加
lifecycle {
prevent_destroy = true
}
labels = {
environment = var.environment
application = "database"
protected = "true"
}
}
# 削除保護付きインスタンスのモジュール化
module "protected_instances" {
source = "./modules/protected-compute-instance"
for_each = var.critical_instances
instance_name = each.value.name
machine_type = each.value.machine_type
zone = each.value.zone
deletion_protection = true # 常に有効
boot_disk_image = each.value.boot_image
boot_disk_size = each.value.disk_size
network = var.network
subnetwork = var.subnetwork
labels = merge(var.common_labels, {
protected = "true"
role = each.value.role
})
}
# 削除保護の監査とモニタリング
resource "google_monitoring_alert_policy" "deletion_protection_disabled" {
display_name = "Instance Deletion Protection Disabled"
project = var.project_id
conditions {
display_name = "Deletion protection disabled on critical instance"
condition_threshold {
filter = <<-EOT
resource.type = "gce_instance"
AND logName = "projects/${var.project_id}/logs/cloudaudit.googleapis.com%2Factivity"
AND protoPayload.methodName = "v1.compute.instances.setDeletionProtection"
AND protoPayload.request.deletionProtection = false
EOT
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 0
}
}
notification_channels = [google_monitoring_notification_channel.security_team.id]
documentation {
content = "A critical instance has had its deletion protection disabled. Immediate review required."
}
}
主要な修正ポイント
- デフォルトで有効化: すべての本番環境インスタンスで
deletion_protection = true
を設定します。 - 二重の保護: GCPの削除保護とTerraformの
prevent_destroy
を併用します。 - ラベルによる識別: 保護されたインスタンスを
protected = "true"
ラベルで明確化します。 - モジュール化: 削除保護を含む標準化されたインスタンス作成モジュールを使用します。
- 監査とアラート: 削除保護が無効化された際のアラート設定を行います。
最後に
この記事では、Compute Engineインスタンスで削除保護を有効化する手順について、リスクと対策を解説しました。
削除保護は、シンプルながら非常に効果的なセキュリティ機能です。特に本番環境やビジネスクリティカルなシステムでは必須の設定と言えるでしょう。Terraformのprevent_destroy
と組み合わせることで、より堅牢な保護が実現できます。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。