AWS ELBのセキュリティ設定(セキュリティグループ・WAF連携)を初心者向けに解説!
生徒
「先生、AWSのELBを使っているんですが、セキュリティの設定ってどうすればいいんですか?不正アクセスが怖いです。」
先生
「とても大切なポイントですね。ELB(イーエルビー、Elastic Load Balancer:エラスティックロードバランサー)では、セキュリティグループの設定とAWS WAF(ダブリューエーダブリュー エーダブリューエス ダブリュエーエフ)の連携を行うことで、アクセス制御や攻撃防御ができますよ。」
生徒
「セキュリティグループとWAFってどう違うんですか?」
先生
「セキュリティグループはファイアウォールのように通信の許可・拒否を設定する仕組みです。一方、WAFはアプリケーションに届くリクエストを検査して攻撃を防ぐ仕組みです。では、それぞれの役割と設定方法を詳しく見ていきましょう。」
1. ELBとセキュリティの基本(多層防御の考え方)
AWSのElastic Load Balancer(ELB:エラスティックロードバランサー)は、インターネットからの大量のアクセスを複数のサーバー(EC2など)へ効率よく振り分ける「交通整理」の役割を担います。しかし、入り口となるELBが無防備だと、悪意のある攻撃者がサーバーに侵入する隙を与えてしまいます。
そこで重要になるのが「多層防御」という考え方です。2026年現在のクラウドセキュリティにおいても、単一の対策ではなく、異なる役割の壁を複数作ることが推奨されています。具体的には、以下の2つのサービスを連携させてELBを守ります。
ネットワークの門番です。どの「IPアドレス」や「ポート番号」からの通信を通すか、インフラレベルでのアクセス制御を行います。
リクエストの検査官です。通信の中身(データ)をチェックし、SQLインジェクションなどの巧妙な攻撃をアプリケーション層でブロックします。
例えば、プログラミング未経験の方でもイメージしやすいように、通信を「手紙」に例えてみましょう。セキュリティグループは「怪しい住所(IP)からの手紙をそもそも受け取らない」設定で、WAFは「届いた手紙の中身をスキャンして、有害なメッセージ(攻撃コード)が含まれていないか確認する」役割です。
これらを組み合わせることで、万が一ネットワークの門を突破されても、中身の検査で食い止めるという「堅牢なセキュリティ」が実現できるのです。
2. セキュリティグループとは?
セキュリティグループは、AWSの仮想ファイアウォールです。読み方はセキュリティグループで、EC2(イーシーツー)やELBに対して通信のルールを定義します。
例えば、HTTP(エイチティーティーピー:ポート80)やHTTPS(エイチティーティーピーエス:ポート443)の通信だけを許可し、それ以外を拒否することで安全性を高められます。
ELBに適用するセキュリティグループの例は以下の通りです。
- インバウンド:0.0.0.0/0からのTCP 80番、443番を許可
- アウトバウンド:任意の宛先に対してすべて許可(デフォルト)
このように設定することで、ELBはインターネットからのアクセスを受け付け、内部のサーバーに振り分けることができます。
3. セキュリティグループ設定のポイント
セキュリティグループを設定するときのポイントは以下の通りです。
- 必要最小限のポートだけを許可する
- 特定のIPアドレスだけを許可することで不正アクセスを減らす
- 管理用のポート(例:SSHの22番)は直接ELBに設定しない
特に「全てのポートを許可する」という設定は非常に危険なので避けるべきです。
4. AWS WAFとは?
AWS WAF(ダブリューエーダブリュー エーダブリューエス ダブリュエーエフ)はWeb Application Firewall(ウェブアプリケーションファイアウォール)の略です。アプリケーションに届くリクエストを監視して、攻撃パターンを検出しブロックできます。
代表的に防げる攻撃は以下の通りです。
- SQLインジェクション(エスキューエルインジェクション)
- XSS(クロスサイトスクリプティング)
- DDoS(ディードス:分散型サービス妨害攻撃)の一部
これにより、セキュリティグループでは防ぎきれないアプリケーション層の攻撃も保護できます。
5. ELBとWAFの連携方法
ELBとWAFを連携させるには、AWSマネジメントコンソールで以下の操作を行います。
- WAFのWebACL(ウェブアクセスコントロールリスト)を作成する
- ルールを設定して特定の攻撃パターンを検出・ブロックする
- 作成したWebACLをELBに関連付ける
これにより、ELBを経由するすべてのリクエストがWAFによって検査され、安全性が高まります。
6. セキュリティグループとWAFを組み合わせた運用
セキュリティグループとWAFは役割が異なるため、両方を正しく組み合わせることが重要です。
- セキュリティグループ:ネットワークレベルのアクセス制御
- WAF:アプリケーションレベルの攻撃防御
例えば、不特定多数のユーザーからのHTTPリクエストはセキュリティグループでポート制御し、リクエスト内容の不正なパラメータはWAFで防御する、といった使い方ができます。
7. 運用のベストプラクティス
ELBのセキュリティを強化するためのベストプラクティスをまとめます。
- 定期的にセキュリティグループのルールを見直す
- 不要になったIPアドレス許可を削除する
- WAFのルールを最新に保つ
- CloudWatch(クラウドウォッチ)でログを監視する
- 必要に応じてShield(シールド)など他サービスと併用する
このように運用管理を徹底することで、ELBの安全性を大幅に高められます。
まとめ
ここまで、AWSのELB(Elastic Load Balancer)におけるセキュリティ設定の重要性と、その具体的な手法であるセキュリティグループ、そしてAWS WAF(Web Application Firewall)との連携について詳しく解説してきました。クラウド環境でWebアプリケーションを公開する際、単に「動くこと」を目指すだけでは不十分です。インターネットという広大なネットワークに接続される以上、常に悪意のある攻撃や不正なアクセスのリスクに晒されているという自覚を持ち、多層的な防御を構築することが不可欠です。
ELBセキュリティの二段構え:ネットワークとアプリケーション
ELBの保護において、まず基本となるのが「セキュリティグループ」です。これはOSI参照モデルにおけるネットワーク層やトランスポート層でのフィルタリングを担います。特定のポート番号(HTTPの80番やHTTPSの443番など)や送信元のIPアドレスを制御することで、不要な通信を入り口でシャットアウトします。しかし、これだけでは「許可されたポート」を通過してくる不正なデータ(リクエスト内容そのものの悪意)を防ぐことはできません。
そこで登場するのが「AWS WAF」です。WAFはアプリケーション層(L7)を監視し、SQLインジェクションやクロスサイトスクリプティング(XSS)といった、Webアプリケーション特有の脆弱性を突いた攻撃を検知・遮断します。セキュリティグループが「門番」なら、WAFは「荷物検査官」のような役割を果たします。この両者を適切に組み合わせることで、強固なセキュリティ基盤が完成するのです。
IaCによるセキュリティ設定の管理
実際の現場では、これらの設定を手動で行うだけでなく、TerraformやAWS CloudFormationといったツールを用いて、コードとしてインフラを管理(Infrastructure as Code:アイエーシー)することが一般的です。設定をコード化することで、ヒューマンエラーを防ぎ、履歴の管理も容易になります。例えば、ELBに関連付けるセキュリティグループを定義する際のコード(HCL形式)は以下のようになります。
# ELB用のセキュリティグループ定義
resource "aws_security_group" "elb_sg" {
name = "example-elb-sg"
description = "Allow HTTP and HTTPS inbound traffic"
vpc_id = aws_vpc.main.id
# インバウンドルール:HTTP(80番ポート)を許可
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# インバウンドルール:HTTPS(443番ポート)を許可
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# アウトバウンドルール:全ての通信を許可
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
コマンドラインでの現状確認と運用
設定が正しく反映されているかを確認するには、AWS CLI(エーダブリューエス シーエルアイ)を活用するのが非常に便利です。GUIでは見落としがちな詳細な設定内容を一目で把握できます。例えば、現在作成されているロードバランサーの情報を取得したり、関連付けられているWAFのWeb ACLを確認するコマンドは以下の通りです。
aws elbv2 describe-load-balancers --query "LoadBalancers[*].LoadBalancerName"
"my-load-balancer"
"staging-alb"
"production-alb"
aws wafv2 list-resources-for-web-acl --web-acl-id "my-web-acl-id" --type "APPLICATION_LOAD_BALANCER"
{
"ResourceArns": [
"arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/my-load-balancer/abc123def456"
]
}
持続可能なセキュリティ運用のために
セキュリティは一度設定して終わりではありません。日々進化する攻撃手法に対応するため、AWSマネージドルールを活用したり、定期的なログ分析を行うことが求められます。CloudWatch Logs(クラウドウォッチログ)を有効にし、WAFが何をブロックしたのか、セキュリティグループで拒否された通信はどれくらいあるのかを可視化しましょう。これにより、ビジネスの成長に伴うトラフィックの変化や、予期せぬ脆弱性に対しても柔軟に対応できるようになります。
初心者のうちは設定項目が多く複雑に感じるかもしれませんが、「何を守るために、どの層で制限をかけるか」という基本に立ち返れば、自ずと正解は見えてきます。まずは最小限の許可ルールから始め、徐々にWAFの高度なルールを適用していくステップアップをお勧めします。
生徒
「先生、ありがとうございました!ELBを守るためには、セキュリティグループで『どの扉を開けるか』を決め、WAFで『変な人が入ってこないか』をチェックする、という役割分担がよくわかりました。」
先生
「その通りです!例えがとても分かりやすいですね。セキュリティグループはインフラの土台部分での防御、WAFは中身に踏み込んだ防御です。どちらが欠けても穴が開いてしまうので、セットで考える習慣をつけましょう。」
生徒
「記事の中にあったTerraformのコードも見てみました。インフラをコードで書くことで、設定ミスが減らせるというのは大きなメリットですね。でも、初心者がいきなりWAFのルールを完璧に作るのは難しそうです……。」
先生
「最初はAWSが提供している『マネージドルール』を使うのがおすすめですよ。一般的な攻撃パターンをAWSが自動でアップデートしてくれるので、自分で一つずつルールを書かなくても高い防御力を手に入れられます。まずはそこから始めて、運用に慣れてきたらCLIでログを確認してチューニングしていけば大丈夫です。」
生徒
「なるほど、マネージドルールですね!さっそくコンソールから設定を確認してみます。あと、セキュリティグループでSSHの22番ポートを開けそうになっていたので、そこもしっかり見直します(笑)」
先生
「おっと、それは危ないところでしたね。ロードバランサーはあくまでWebリクエストの中継役ですから、管理用通信は別の経路(踏み台サーバーやAWS Systems Managerなど)を検討しましょう。一つずつ安全な環境を作っていきましょうね!」