【実務・中級編】 ネットワーク構成の脆弱性診断(IaCスキャン) – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

なぜ「IaCスキャン」が現代の防波堤なのか?

現場でよく耳にする「設定は間違っていないはず」という言葉。これがインシデントの引き金になることは、この業界に長くいる者なら誰もが経験する苦い記憶です。特に、AWSのSecurity GroupやAzureのNSGといったネットワーク設定をTerraformやCloudFormationで管理している場合、「1行のタイポ」が世界中にサーバーを全公開してしまうリスクを常に孕んでいます。

手動のクリックでインフラを作っていた時代は終わりました。今は「コード」がインフラです。そして、コードである以上、人間がミスをする余地が必ずあります。デプロイの直前、コミットの瞬間にそのミスを叩き潰す「IaCスキャン」は、もはや贅沢品ではなく、生存戦略そのものです。

—

攻撃者の視点:ポート開放という「招待状」

攻撃者は、あなたのサーバーがどれだけ強固なOS(Linux/Windows)で守られていても、SSH(22)やRDP(3389)、あるいはデータベース(3306/5432)が0.0.0.0/0に対して開放されていることを知れば、そこから総当たり(ブルートフォース)を仕掛けます。

例えば、以下のようなTerraformコードがあったとします。

# 【危険な設定例】全方位に対してSSHポートを開放している
resource "aws_security_group" "bad_sg" {
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # ここが命取り
  }
}

このコードをデプロイした瞬間、世界中のボットネットがあなたの22番ポートを叩き始めます。数分後には、辞書攻撃によるログが溢れ出し、運が悪ければ脆弱なパスワード設定や鍵管理の不備を突かれて侵入を許すでしょう。これが「ネットワーク構成の脆弱性」の正体です。

—

防御の要:IaCスキャンによる「門番」の導入

この悲劇を防ぐには、CI/CDパイプラインの中に「チェック機構」を埋め込むのが最短ルートです。今回は、業界標準ツールの一つである tfsec を使った防御策を解説します。

1. tfsecによる静的解析の導入

tfsec は、Terraformコードを読み込み、セキュリティ上のベストプラクティス(CIS Benchmark等)に違反していないかを自動で判定してくれます。

GitHub Actionsでの実装サンプル:

# .github/workflows/security-scan.yml
name: IaC Security Scan
on: [push]

jobs:
  tfsec:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: tfsec
        uses: aquasecurity/tfsec-action@v1.0.0
        with:
          # 警告レベル以上のエラーでパイプラインを止める
          soft_fail: false

2. セキュアな実装への書き換え(修正ルール)

先ほどの危険なコードを、実務に耐えうる堅牢な形へ修正します。ポイントは「最小権限の原則」です。

# 【セキュアな設定例】特定のIPアドレスからのみ許可する
variable "allowed_ips" {
  type    = list(string)
  default = ["203.0.113.5/32"] # 自社のオフィスやVPNゲートウェイのIP
}

resource "aws_security_group" "secure_sg" {
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    # CIDRを指定せず、変数化して制限をかける
    cidr_blocks = var.allowed_ips 
  }
}

—

運用で絶対に忘れてはならない「3つの掟」

ツールを入れたからといって安心しないでください。最後に、現場で生き抜くための3つの戒めを贈ります。

1. 「デフォルト」を信じるな
クラウドプロバイダーのデフォルト設定が、必ずしもあなたのセキュリティ要件に合致しているとは限りません。常に Explicit Deny(明示的な拒否)から始める設計を徹底してください。
2. IaCスキャンをパイプラインの「Gatekeeper」にする
tfsec や checkov の結果をただログに吐くだけでは意味がありません。exit 1 でビルドを強制終了させ、「セキュリティをクリアしなければデプロイできない」という文化をチームに根付かせてください。
3. 定期的な棚卸し
半年前に作ったセキュリティグループが、現在のネットワーク構成でも最適かどうか。IaCスキャンは「今の設定」は見ますが、「不要な設定」までは判断できません。定期的に terraform plan を実行し、使われていない許可ルールを削除する時間を設けてください。

セキュリティは「完成する」ものではなく「維持する」ものです。今日紹介したIaCスキャンは、皆さんの背中を守る強力な盾になります。次はぜひ、皆さんのリポジトリにこの「門番」をインストールしてみてください。何かあれば、いつでも相談に乗りますよ。

コメント

タイトルとURLをコピーしました