【入門編】 AWS Security Groupのインバウンドルールにおけるポート開放の最小化 – 暗号理論・認証基盤 & エンドポイントセキュリティ防御ガイド

玄関の鍵、開けっ放しにしていませんか?AWSの「セキュリティグループ」を徹底防衛しよう

エンジニアの皆さん、こんにちは。現場の最前線でセキュリティの泥臭い戦いをしていると、「便利なものには落とし穴がある」と痛感する場面によく出会います。

今日は、AWSを触り始めたばかりの方が一番最初に踏み込みがちな「落とし穴」、そしてその完璧な回避策についてお話しします。

「ポート22」を開放するのは、泥棒に招待状を送るようなもの

皆さんの自宅を想像してみてください。玄関の鍵をかけずに外出する人はまずいませんよね? もし鍵をかけ忘れたら、誰がいつ入ってきてもおかしくありません。

AWSの世界でいう「鍵」の役割を果たすのがセキュリティグループです。そして、「ドアの隙間」がポートです。

特にやってはいけないのが、SSH(Linuxの操作用)で使う「22番ポート」や、RDP(Windowsの操作用)の「3389番ポート」を、世界中の誰からでもアクセスできるように 0.0.0.0/0 で開放することです。これは、「私の家のドアはいつでも全開です!どうぞお入りください!」と泥棒に招待状を配っているのと同じことなんです。

世界中には、24時間365日、この「開いたドア」を探し回る自動攻撃プログラム(ボット)が蠢いています。ポートを開けた瞬間、数分も経たないうちにブルートフォース攻撃(パスワードの総当たり攻撃)が始まり、サーバーは乗っ取られてしまいます。

「鍵」の仕組み:公開鍵暗号と共通鍵暗号

ここで少しだけ、セキュリティの教養として「鍵」の話をしましょう。

  • 公開鍵暗号(RSAやECC):

「鍵」と「錠前」が別々になっているタイプです。錠前(公開鍵)は誰に配っても大丈夫。でも、それを開けられるのは、手元にしかない特別な鍵(秘密鍵)を持っている人だけ。SSH接続で使うのがこれですね。

  • 共通鍵暗号(AESなど):

金庫と鍵がセットで、その鍵を相手と共有するタイプです。暗号化も復号も同じ鍵を使うので、非常に高速です。皆さんがWebサイトを見るときに使うSSL/TLS通信の裏側では、この2つが組み合わさって、高速かつ安全な通信を実現しています。

でも、どんなに強力な暗号を使っていても、「ドアそのものが開いていたら」意味がないのです。

究極の防御術:AWS Systems Manager Session Manager

では、どうすればいいのでしょうか? 答えは簡単です。「ドアを閉める(ポートを閉じる)」ことです。

「えっ、でもそれだとサーバーにログインできないじゃない!」という声が聞こえてきそうですが、そこで登場するのが AWS Systems Manager Session Manager (SSM) です。

SSMを使えば、SSHのポート(22番)を全閉鎖しても、AWSの管理コンソールやCLI経由で安全にサーバーに接続できます。

なぜこれが安全なの?

1. ポートの全閉鎖: 外部からの攻撃窓口(22番ポート)が消滅します。
2. 認証の統合: AWSのIAM権限(「誰がアクセスできるか」というルール)で管理するため、個別のサーバーパスワードを管理する必要がありません。
3. 証跡管理: 「いつ、誰が、何をしたか」がすべて記録(ログ)として残ります。これはセキュリティ監査において最強の武器です。

実践:設定のチェックポイント

まずは、現在のセキュリティグループの設定を確認してみましょう。もし 0.0.0.0/0 に対して 22 が許可されていたら、即座に削除または制限が必要です。

セキュリティグループ設定のベストプラクティス(Terraform例)

# SSH(22)は全開放せず、自分のIPからのみ許可する、もしくはSSMを使うために全削除する
resource "aws_security_group" "my_server_sg" {
  name        = "my-secure-sg"
  description = "SSHを閉じてSSMで運用する設定例"

  # インバウンドルール:何も許可しない(これが一番安全!)
  # 必要に応じて社内ネットワークのIPのみ許可する
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["192.168.1.0/24"] # 例:社内オフィスからのみ許可
  }

  # アウトバウンドルール:SSMとの通信にはHTTPS(443)が必要
  egress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

一歩ずつ対策を学んでいきましょう!

初めてAWSを触る時に、SSMまで設定するのは少しハードルが高いかもしれません。しかし、「ポートを闇雲に開けない」という意識を持つだけで、皆さんのサーバーは格段に安全になります。

まずは、自分の環境のセキュリティグループを見直してみてください。もし「とりあえず開発用に22を開けていた」という場所があれば、今日がそれを閉じる良いチャンスです。

セキュリティは一度設定して終わりではありません。泥臭く、しかし着実に。一つひとつの設定を「なぜそうするのか」理解して積み上げていくことが、最強のエンジニアへの第一歩ですよ!

コメント

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