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

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

ALB のリスナールールや AWS WAF の動作検証にすぐ使える curl コマンドをまとめました
Clock Icon2024.03.27 23:45

はじめに

アノテーション テクニカルサポートの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 テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.