- はじめに
- ALBへのアクセスをCloudFront経由の通信に限定する
- ケース1 ヘッダをALBでチェックし、カスタムヘッダが含まれていない通信はブロックする
- ケース2.ヘッダをAWS WAFでチェックし、カスタムヘッダが含まれていない通信はブロックする
- おわりに
はじめに
こんにちは、技術三課の三木宏昭です。
たった今、胃薬のつもりで正露丸を服用しました。
ALBへのアクセスをCloudFront経由の通信に限定する
CloudFrontで配信しているので、ALBへの直接アクセスを禁止したい時ってありますよね。
今回は、その方法をご紹介します。
尚、オリジンに対してCloudFront を経由しないアクセスを禁止する方法については、下記の記事で分かりやすく紹介しております。
よければ合わせてお読みください。
★★★2022/2/8 にアップデートがありました
CloudFront のオリジンが EC2 や ALB のときはセキュリティグループのルールに 「Cloud Front のAWSマネージドプレフィクスリスト」のみを許可するルールを書くことができます
これにより CloudFront を経由した接続のみ許可可能になりました
こちらもご参照ください
構成
概要
- CloudFrontでカスタムヘッダを付与して、それを元に以下のように制御
- ケース1.ヘッダをALBでチェックし、カスタムヘッダが含まれていない通信はブロックする
- ケース2.ヘッダをAWS WAFでチェックし、カスタムヘッダが含まれていない通信はブロックする
ケース1 ヘッダをALBでチェックし、カスタムヘッダが含まれていない通信はブロックする
設定方法
CloudFrontの設定
CloudFrontのOrigin Settingsを開く
Origin Custom Headersを設定する
(Header NameおよびValueは推測されない値なら何でもOK)
ALBの設定
対象のALBを選び、「リスナー」タブの「ルールの表示/編集」を押下
ルールの追加モードに移行し、デフォルトの上位にルールを追加する
IF の条件を HTTPヘッダー にして、CloudFrontで設定したカスタムヘッダを入力する
THEN のアクションを、デフォルトアクションと同一にして、保存する
ルールの編集モードにして、デフォルトアクションのTHENを削除する
THEN にアクションの追加で、固定レスポンス403を返すように設定する
レスポンス本文に適する文言を入力して、保存する
動作確認
何の設定もしていない状態だと、ALBに直接アクセスする事が可能でした
設定後、ALBへの直接アクセスは出来なくなりました
もちろん、CloudFrontからはアクセスが出来ます
ケース2.ヘッダをAWS WAFでチェックし、カスタムヘッダが含まれていない通信はブロックする
設定方法
CloudFrontの設定
1.CloudFrontのOrigin Settingsを開く
2. Origin Custom Headersを設定する
(Header NameおよびValueは推測されない値なら何でもOK)
WAFの設定
3. WebACLの作成を開始し、通常の作成時と同じようにStep1を入力する
(リージョンの選択を間違えないように注意)
4. Step2のRuleで、Add Rules > Add my own rules and rule groups を選択する
5. 下の表に従い、パラメータを入力する
Name | Parameter |
---|---|
Name | <任意> |
Type | Regular rule |
If a request | maches the statement |
Inspect | Header |
Header field name | <CloudFrontで設定したHeader Name> |
String to match | <CloudFrontで設定したValue> |
Action | Allow |
6. Default web ACL action for requests that don't match any rules を Block にする
7. 以降の項目は通常と同様に入力する
動作確認
何の設定もしていない状態だと、ALBに直接アクセスする事が可能でした
設定後、ALBへの直接アクセスは出来なくなりました
(圧を感じます。)
もちろん、CloudFrontからはアクセスが出来ます
また、CloudFrontのHeader値を変えると、アクセスが拒否されました
おわりに
いかがだったでしょうか。
皆様のお役に立てれば幸いです。
三木 宏昭 (執筆記事の一覧)
クラウドインテグレーション部 技術1課
紅茶と親子丼とAWSが好き
2021年の目標:毎日リングフィットアドベンチャーのコントローラーを持つ
2021 APN ALL AWS Certifications Engineers