GCP Cloud DNSでDNSSECの有効化手順

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

この記事では、Google Cloud Platform(GCP)のCloud DNSゾーンでDNSSECによるセキュリティ保護が無効化されている場合のリスクと対策を解説します。

ポリシーの説明

Cloud DNSゾーンに対してDNSSECが有効化されていない場合、DNSレスポンスの改ざんや悪意のあるDNSサーバーへの誘導が可能となります。

DNSSECはDNSレスポンスにデジタル署名を付加することで、レスポンスの真正性と完全性を保証し、DNSキャッシュポイズニングやDNSスプーフィング攻撃を防ぐ事が出来ます。

修復方法

コンソールでの修復手順

Google Cloud コンソールを使用して、Cloud DNSゾーンでDNSSECを有効化する手順は以下の通りです。

  1. Google Cloud コンソールにログインし、「ネットワーキング」セクションから「Cloud DNS」を選択します
  2. DNSSECを有効化したいDNSゾーンをクリックして詳細画面を開きます
  1. ゾーンの詳細画面で「DNSSEC」タブをクリックします
  2. 「DNSSEC を有効にする」ボタンをクリックします
  1. DNSSECの有効化確認ダイアログが表示されるので、内容を確認して「有効にする」をクリックします
  2. DNSSECが有効化されると、DS(Delegation Signer)レコードが表示されます
  3. 表示されたDSレコード情報を、ドメインレジストラ(ドメイン登録業者)の管理画面に登録します
    • レジストラの管理画面にログイン
    • DNSSECまたはDSレコード設定のセクションを探す
    • Cloud DNSで表示されたDSレコードの情報を正確に入力
    • キータグ、アルゴリズム、ダイジェストタイプ、ダイジェスト値を設定
  4. レジストラでのDS登録が完了するまで待機(通常24-48時間)
  5. Cloud DNSコンソールに戻り、DNSSECステータスが「有効」になっていることを確認する

Terraformでの修復手順

DNSSECを有効化するTerraformコードと、主要な設定ポイントを説明します。

# DNSマネージドゾーンの作成(DNSSEC有効)
resource "google_dns_managed_zone" "main" {
  name        = "example-zone"
  dns_name    = "example.com."
  description = "Example DNS zone with DNSSEC enabled"

  # DNSSECの有効化
  dnssec_config {
    state = "on"

    # デフォルトのキー仕様(推奨設定)
    default_key_specs {
      algorithm  = "rsasha256"
      key_type   = "keySigning"
      key_length = 2048
    }

    default_key_specs {
      algorithm  = "rsasha256"
      key_type   = "zoneSigning"
      key_length = 2048  # 1024ビットは非推奨、2048ビットを推奨
    }

    # 非公開署名アルゴリズム(推奨)
    non_existence = "nsec3"
  }

  # ラベル設定
  labels = {
    environment = "production"
    security    = "dnssec-enabled"
  }
}

# DNSSECの検証状態を確認するためのデータソース
data "google_dns_keys" "main" {
  managed_zone = google_dns_managed_zone.main.name
  depends_on   = [google_dns_managed_zone.main]
}

# DSレコード情報を出力(レジストラへの登録用)
output "ds_record_info" {
  description = "DS record information for domain registrar"
  value = {
    zone_name    = google_dns_managed_zone.main.dns_name
    ds_records   = data.google_dns_keys.main.key_signing_keys[*].ds_record
    dnssec_state = google_dns_managed_zone.main.dnssec_config[0].state
  }
}

# 既存のゾーンに対してDNSSECを有効化する場合
resource "google_dns_managed_zone" "existing" {
  name        = "existing-zone"
  dns_name    = "existing-domain.com."

  # 既存ゾーンの更新でDNSSECを有効化
  dnssec_config {
    state = "on"

    # カスタムキー仕様の例(推奨:ECDSA)
    default_key_specs {
      algorithm  = "ecdsap256sha256"  # ECDSAアルゴリズム(RSAより効率的)
      key_type   = "keySigning"
      # ECDSAの場合、key_lengthは指定しない(アルゴリズムで固定)
    }

    default_key_specs {
      algorithm  = "ecdsap256sha256"
      key_type   = "zoneSigning"
      # ECDSAの場合、key_lengthは指定しない
    }
  }
}

# DNSSECローテーションポリシーの設定例
resource "google_dns_managed_zone" "advanced" {
  name        = "advanced-zone"
  dns_name    = "secure-domain.com."

  dnssec_config {
    state = "on"

    # キー署名キー(KSK)の設定
    default_key_specs {
      algorithm  = "rsasha512"
      key_type   = "keySigning"
      key_length = 2048
    }

    # ゾーン署名キー(ZSK)の設定
    default_key_specs {
      algorithm  = "rsasha512"
      key_type   = "zoneSigning"
      key_length = 1024
    }

    # NSEC3による存在しないレコードの証明
    non_existence = "nsec3"
  }

  # Cloud Loggingの有効化(推奨)
  cloud_logging_config {
    enable_logging = true
  }
}

 

まとめ

GCP Cloud DNSでDNSSECを有効化することは、DNSスプーフィングやキャッシュポイズニング攻撃からドメインを保護する重要なセキュリティ対策です。本記事で紹介した手順により、コンソール、gcloud CLI、Terraformのいずれの方法でも簡単にDNSSECを実装できます。

重要なポイント:

  1. DNSSECを有効化した後、DSレコードをドメインレジストラに正しく登録する必要があります
  2. DNSSEC設定後は、必ず動作確認を実施してください
  3. 定期的にDNSSECキーのローテーションを検討してください(Cloud DNSは自動ローテーションをサポート)

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

参考情報

Google Cloud 公式ドキュメント

オンラインツールでの確認方法

 

この記事をシェアする

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

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

料金プランを詳しく見る