Google Cloud VPCのファイアウォールルールでのポート制御の手順

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

この記事では、GCPファイアウォールでのポート開放に関するセキュリティ設定手順について、リスクと対策を解説します。

ポリシーの説明

Google Cloud のファイアウォールルールで、不要なポートが外部からアクセス可能な状態で公開されていると、不正アクセスやデータ漏洩のリスクが高まります。

ファイアウォールルールですべてのポートおよびプロトコルへのアクセスが許可されている場合も、セキュリティリスクとなります。

そのため、管理ポート: SSH(22)、RDP(3389)、Telnet(23)や、データベースのポート: MySQL(3306)、PostgreSQL(5432)などについては不用意に外部からアクセスできる状態にはしないようにしましょう。

 

修復方法

コンソールでの修復手順

Google Cloud コンソールを使用して、不要なポート開放を制限します。

不用意に開放している場合はソースIPで制限したり、ブラックリスト形式で通信を禁止にするようにしましょう。

  1. Google Cloud Consoleにログイン
  2. VPCファイアウォールルールの確認
    • ナビゲーションメニューから「VPCネットワーク」→「ファイアウォール」を選択
  3. 問題のあるルールがある場合
    • ソースIPが「0.0.0.0/0」(すべてのインターネット)になっているルールを確認
    • 以下のポートなどが含まれているルールを特定:
      • SSH: 22
      • MySQL: 3306
  4. ルールの編集
    • 問題のあるルールをクリックし、「編集」を選択
  5. ポートとプロトコルの制限
    • 「プロトコルとポート」セクションで、不必要なポートのアクセスを禁止にする
  6. 変更の保存
    • 「保存」をクリックして変更を適用
  7. 不要なルールの削除
    • 完全に不要なルールがある場合は、ルールを選択して「削除」をクリック

Terraformでの修復手順

GCPファイアウォールルールでポート開放を制限するTerraformコードと、主要な修正ポイントを説明します。

# ------------------ ① セキュアなSSHアクセスルール ------------------
resource "google_compute_firewall" "allow_ssh_restricted" {
  name    = "allow-ssh-restricted"
  network = google_compute_network.main.name

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  # 特定のIPアドレスからのみ許可
  source_ranges = [
    "192.168.1.0/24",    # 社内ネットワーク
    "10.0.0.0/8"         # VPNネットワーク
  ]

  # タグベースの適用
  target_tags = ["ssh-allowed"]

  priority = 1000
}

# ------------------ ② データベースアクセスの制限 ------------------
resource "google_compute_firewall" "allow_database_internal" {
  name    = "allow-database-internal"
  network = google_compute_network.main.name

  allow {
    protocol = "tcp"
    ports    = [
      "3306",  # MySQL
      "5432",  # PostgreSQL
      "27017", # MongoDB
      "6379"   # Redis
    ]
  }

  # 内部ネットワークからのみ許可
  source_ranges = [
    "10.0.0.0/16"  # 内部VPCのIP範囲
  ]

  target_tags = ["database"]

  priority = 1000
}

# ------------------ ③ 全ポート許可ルールの置き換え ------------------
# 以下は悪い例(使用しないこと)
# resource "google_compute_firewall" "allow_all_bad" {
#   name    = "allow-all"
#   network = google_compute_network.main.name
#
#   allow {
#     protocol = "all"
#   }
#
#   source_ranges = ["0.0.0.0/0"]  # 危険!
# }

# 良い例:必要なポートのみを許可
resource "google_compute_firewall" "allow_web" {
  name    = "allow-web"
  network = google_compute_network.main.name

  allow {
    protocol = "tcp"
    ports    = ["80", "443"]
  }

  source_ranges = ["0.0.0.0/0"]  # Webサービスのみ公開

  target_tags = ["web-server"]

  priority = 1000
}

# ------------------ ④ デフォルト拒否ルール ------------------
resource "google_compute_firewall" "deny_all_ingress" {
  name    = "deny-all-ingress"
  network = google_compute_network.main.name

  deny {
    protocol = "all"
  }

  source_ranges = ["0.0.0.0/0"]

  priority = 65534  # 最低優先度
}

# ------------------ ⑤ Service Account ベースのルール ------------------
resource "google_compute_firewall" "allow_internal_services" {
  name    = "allow-internal-services"
  network = google_compute_network.main.name

  allow {
    protocol = "tcp"
    ports    = ["9200", "9300"]  # Elasticsearch
  }

  # Service Accountベースのアクセス制御
  source_service_accounts = [google_service_account.application.email]
  target_service_accounts = [google_service_account.elasticsearch.email]

  # 追加のセキュリティ: 特定のネットワークタグも併用
  target_tags = ["elasticsearch-node"]

  priority = 1000
}

# ------------------ ⑥ ログ記録の有効化 ------------------
resource "google_compute_firewall" "allow_ssh_with_logging" {
  name    = "allow-ssh-with-logging"
  network = google_compute_network.main.name

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["192.168.1.0/24"]

  # ファイアウォールログの有効化
  log_config {
    metadata = "INCLUDE_ALL_METADATA"
  }

  priority = 1000
}

 

まとめ

GCPファイアウォールで危険なポートを適切に制限することは、クラウドセキュリティの基本です。本記事で紹介した手順により、SSH、データベース、RDP、FTPなどの重要なポートを保護し、不正アクセスやデータ漏洩のリスクを大幅に低減できます。

どうしても必要な場合についてはCloud IAP を使用した安全なアクセスにすることで、ポートを直接公開することなく安全な管理アクセスを実現できます。

ファイル転送などが必要な場合についてもセキュアな代替手段への移行を強く推奨します。

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

参考情報

 

この記事をシェアする

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

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

料金プランを詳しく見る