【入門編】 ネットワークセグメンテーションとマイクロセグメンテーション – ガバナンス・リスク管理 & 生成AIセキュリティ防御ガイド

こんにちは!インフラ構築や開発の現場に飛び込んだばかりの頃は、覚えることが山ほどあって大変ですよね。「ネットワークセグメンテーション」や「マイクロセグメンテーション」なんて聞くと、なんだか呪文のように難しく感じるかもしれませんが、安心してください。一歩ずつ、身近な例えから紐解いていけば、誰でも「なるほど!」と腑に落ちるはずです。

今日は、クラウド(VPC)の世界でなぜ部屋の区切りが重要なのか、そしてどうやって泥棒(攻撃者)の侵入や横移動(ラテラルムーブメント)を防ぐのかを、一緒に優しく学んでいきましょう!

—

1. 家の防犯に例えてみる「VPCとセグメンテーション」の基本

想像してみてください。あなたは一戸建ての大きな家を建てました。この家全体が、クラウド上の空間である VPC(仮想プライベートクラウド) だと思ってください。

もし、この家の中に玄関の鍵しかなかったらどうなるでしょうか?
一度泥棒に玄関を破られて侵入されたら、リビングも、寝室も、貴重品が置いてある書斎も、すべてフリーパスになってしまいますよね。家の中を自由に歩き回られ(これがセキュリティ用語でいうラテラルムーブメント=横移動です)、大切なデータを根こそぎ盗まれてしまいます。

これを防ぐために、昔ながらのネットワークセグメンテーション(サブネット分離)では、家の中に「頑丈な廊下のドア」を作りました。
「ここから先はプライベートな寝室ゾーンだから、パスワードを知っている家族しか入れませんよ」という境界線を作るイメージですね。

さらに進化版!「マイクロセグメンテーション」とは?

じゃあ、さらにセキュリティをガチガチに固める「マイクロセグメンテーション」はどういうことでしょうか?
これは、家の中のすべての部屋のドアに個別の電子ロックをかけ、誰がどの部屋を行き来していいかを厳密にリスト化することです。

  • リビングにいる人は、キッチンには行けるけど、金庫のある書斎には絶対に絶対に入れない。
  • 万が一、リビングの窓から侵入されても、キッチンのドアですぐに足止めを食らう。

クラウドの世界では、この「各部屋の電子ロック」の役割を果たすのが、これから解説する 「セキュリティグループ(ファイアウォール)」 なんです。

—

2. 攻撃者はどうやって社内を「横移動」するのか?

セキュリティの現場で一番怖いのは、最初の侵入(初期ペネトレーション)そのものよりも、「侵入されたあとに、いかに網の目のように動き回られるか」です。

例えば、会社のシステムの中で、世界中から誰でもアクセスできる「Webサーバー(ホームページを表示するサーバー)」が1台あるとします。もし、このWebサーバーにプログラムの弱点(脆弱性)が見つかり、攻撃者に乗っ取りの合図を出されてしまったとしましょう。

もし、Webサーバーと同じ部屋(サブネット)に、顧客のクレジットカード情報が入っているデータベースサーバーが「鍵なし」で置いてあったらどうなりますか?
攻撃者はWebサーバーを乗っ取ったあと、すぐ隣のデータベースサーバーへスルスルと侵入し、データをすべて盗み出してしまいます。これが、セグメンテーションをサボったときに起こる最悪のシナリオです。

だからこそ、「Webサーバーの部屋からデータベースサーバーの部屋へは、特定の通信(データベースへの問い合わせ)以外は一切通さない!」という厳格なルールが必要になるんですね。

—

3. 実践!クラウドでのマイクロセグメンテーション設定例

それでは、実務のインフラ構築でよく使われるクラウド(例:AWSなど)の環境を想定して、セキュリティグループを使った具体的な設定を見てみましょう。

今回は、「Webサーバーからはデータベースサーバーへ接続できるけれど、それ以外の余計な通信はすべてブロックする」という、最小権限の原則に基づいた設定をコード(Terraformというインフラ定義ツール)で書いてみます。

難しそうに見えますが、日本語のコメントを読めば「あ、こういうことね!」とすぐに分かりますよ。

# 1. データベースサーバー用のセキュリティグループ定義
# ここが「金庫の部屋の電子ロック」に相当します。
resource "aws_security_group" "db_server_sg" {
  name        -- "db-server-security-group"
  description -- "データベースサーバー用の厳格なアクセス制御"
  vortex_id   -- aws_vpc.main.id

  # 【許可ルール】Webサーバーからのデータベース通信(MySQLのポート: 3306)のみを許可する
  ingress {
    description     -- "Webサーバーからの安全なデータベースアクセスのみ許可"
    from_port       -- 3306
    to_port         -- 3306
    protocol        -- "tcp"
    
    # ここがポイント!「どのサーバーからでもOK」ではなく、「Webサーバーのセキュリティグループからのみ」に限定します
    security_groups -- [aws_security_group.web_server_sg.id]
  }

  # 【拒否ルール(デフォルト)】上記以外のすべての受信通信は自動的にブロックされます(暗黙の拒否)
  egress {
    from_port   -- 0
    to_port     -- 0
    protocol    -- "-1"
    cidr_blocks -- ["0.0.0.0/0"] # 外部へのパッチ適用などの通信は許可
  }
}

この設定の素晴らしいところは、IPアドレスの変更などに左右されず、「Webサーバーという役割を持つグループからしかデータベースに触らせない」という確実な境界線を作れている点です。万が一、別の一般PCや関係のないサーバーが侵害されても、このデータベースの部屋には物理的(論理的)に入ることができません。

—

4. 一歩ずつ対策を進めるためのチェックリスト

現場でインフラやアプリを触るとき、まずは以下のポイントから見直してみましょう。すべてを完璧にする必要はありません。一歩ずつ進めば確実にセキュリティは強固になります!

1. 「とりあえず全部通信OK(0.0.0.0/0)」のルールを見つける

  • セキュリティグループやファイアウォールの設定画面を開き、どこからでもアクセスできる緩い設定になっていないか確認する。

2. サーバーの「役割」ごとにグループを分ける

  • Webサーバー、APサーバー、DBサーバーを同じごちゃ混ぜの空間に置かず、それぞれ独立したセキュリティグループを割り当てる。

3. 「必要最小限」の通信だけを通す

  • 「このサーバーとこのサーバーは、何の仕事で会話する必要があるんだっけ?」を問い直し、不要なポート( 22 (SSH) や 3306 (MySQL) など)が一般に公開されていないか点検する。

—

まとめ

ネットワークセグメンテーションやマイクロセグメンテーションは、サイバー空間における「頑丈なドアと電子ロック」です。
最初は難しく感じるかもしれませんが、「この部屋からあの部屋へ行くには、パスポート(許可された通信)が必要だ」というシンプルなルールを積み重ねるだけです。

インフラや開発の現場で設計図を描くときは、ぜひ「もし泥棒が玄関から入ってきたら、次の部屋でどうやって食い止めようか?」という防犯の視点を持ってみてください。あなたの書いたその1行のセキュリティ設定が、会社の未来の重大インシデントを救う強力な盾になりますよ。

それでは、また次回のセキュリティ解説でお会いしましょう!一歩ずつ、確実に安全なシステムを作っていきましょうね。

コメント

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