ALB リスナールールの検証に使える curl コマンドをまとめてみた

ALB のリスナールールや AWS WAF の動作検証にすぐ使える curl コマンドをまとめました
2024.03.28

はじめに

アノテーション テクニカルサポートのShimizuです。

日々のサポート業務において、ALB のリスナールールでいろいろな条件のHTTPリクエストを検証することがよくあります。
そこで今回は、検証時に手軽に使える curl コマンドをまとめてみました!
(curl コマンドの基本については参考1をご参照ください)

ホストヘッダー条件を指定する curl コマンド

まずは検証のために、下記のような ALB リスナールールを設定しました。
HTTPリクエストのホストヘッダーが "example.com" の場合は正常(200 OK)のレスポンスを返し、そうでない場合は拒否(403 Forbidden)のレスポンスを返す想定です。

上記のリスナールール設定をした ALB のデフォルトDNS名に対し、curl コマンドでホストヘッダーを指定して検証してみます。
(レスポンスコードのみを確認したいため、curl コマンドに "-I" オプションを付与しています)

想定の通り、何も条件を指定しない場合は 403 Forbidden を返し、ホストヘッダーに "example.com" を設定すれば 200 OK を返すことを確認できました。

# 何も指定しない場合
curl -I http://test-alb.ap-northeast-1.elb.amazonaws.com
HTTP/1.1 403 Forbidden
# 以下略

# ホストヘッダーを指定した場合
curl -I -H 'Host:example.com.' http:/test-alb.ap-northeast-1.elb.amazonaws.com
HTTP/1.1 200 OK
# 以下略

HTTPメソッド条件を指定する curl コマンド

次に下記のような ALB リスナールールを設定しました。
HTTPリクエストのメソッドが "POST" でかつ Content-Type が "application/json" の場合は 200 OK を返し、それ以外(GET や PUT メソッド等)は 403 Forbidden を返す想定です。

上記設定の ALB に対し curl コマンドでリクエストメソッド、Content-Type ヘッダーを指定して検証してみます。

想定の通り、何も条件を指定しない場合は 403 Forbidden を返し、リクストメソッド "POST" でかつ Content-Type が "application/json" を指定すると 200 OK を返しています。

# 何も指定しない場合
curl -I http://test-alb.ap-northeast-1.elb.amazonaws.com
HTTP/1.1 403 Forbidden
# 以下略

# リクエストメソッドと Content-Type を指定した場合
curl -I -X POST -H "Content-Type: application/json" http://test-alb.ap-northeast-1.elb.amazonaws.com
HTTP/1.1 200 OK
# 以下略

リクエストパラメータ条件を指定する curl コマンド

今度は下記のような ALB リスナールールを設定しました。
HTTPリクエストのクエリパラメータに "id" と "name" のキーが含まれていることが 200 OK の条件になります。
(値は何でもよいので "*" としています)

上記設定の ALB に対し curl コマンドで検証を行ってみます。

想定の通り、URLにクエリパラメータが付与されていない、もしくは "id" のみしかない場合は 403 Forbidden を返し、"id" と "name" の両方が指定されていれば 200 OK を返しています。
※ クエリパラメータを指定する場合、URL をダブルクォーテーションで囲むことがポイントです。

# 何も指定しない場合
curl -I http://test-alb.ap-northeast-1.elb.amazonaws.com
HTTP/1.1 403 Forbidden
# 以下略

# クエリパラメータに "id" のみ指定した場合
curl -I "http://test-alb.ap-northeast-1.elb.amazonaws.com?id=1111"
HTTP/1.1 403 Forbidden
# 以下略

# クエリパラメータに "id" と "name" を両方指定した場合
curl -I "http://test-alb.ap-northeast-1.elb.amazonaws.com?id=1111&name=hoge"
HTTP/1.1 200 OK
# 以下略

補足事項

今回の検証では curl コマンドを ALB のデフォルトDNS名(http)に対して実施しましたが、実施対象のURLがhttpsの場合、想定通りの結果が返らない場合もあるかと思います。
その場合は下記の記事を参考に "--resolv" オプションを付与してみましょう。

SNIの動作確認にはcURLのresolvオプションが便利 | DevelopersIO

さいごに

HTTP リクエストの検証には、有名な Postman などのツールがありますが、このようなツールの導入を必要とせず、ターミナルからコマンドラインで手軽にHTTPリクエストの検証を行いたいケースも多いと思い、本記事を執筆しました。
今回は ALB のリスナールールで検証しましたが、AWS WAF のルールを検証する場合にも有効です。

この情報がどなたかのお役に立てば幸いです!

参考資料

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。