玄関の鍵、開けっ放しにしていませんか?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を開けていた」という場所があれば、今日がそれを閉じる良いチャンスです。
セキュリティは一度設定して終わりではありません。泥臭く、しかし着実に。一つひとつの設定を「なぜそうするのか」理解して積み上げていくことが、最強のエンジニアへの第一歩ですよ!
コメント