Application Load Balancer への直接アクセスを制限し、Amazon CloudFront からのアクセスのみを許可したいと考えています。
簡単な説明
Application Load Balancer への直接トラフィックを制限し、CloudFront 経由のアクセスのみを許可するには、Application Load Balancer のリスナールールを使用します。AWS WAF ウェブアクセスコントロールリスト (ACL) が既にある場合は、それを使用できます。Application Load Balancer へのアクセスをさらに制限するには、オリジンへのアクセスを制限するようにセキュリティグループを設定します。これを行うには、AWS マネージドプレフィックスリストを使用してください。これらのソリューションのいずれかを使用すると共に、セキュリティグループも設定するのが、ベストプラクティスです。
解決策
Application Load Balancer
「Application Load Balancer へのアクセスを制限する」を参照して、Application Load Balancer のリスナールールによってトラフィックを制限できます。
AWS WAF
**注:**AWS WAF の課金基準は次のとおりです。
- 作成したウェブ ACL の総量
- 各ウェブ ACL に追加したルールの総量
- 受信したウェブリクエストの総量
詳細については、「AWS の料金」を参照してください。
次の手順を実行することで、AWS WAF カスタムウェブ ACL ルールによってトラフィックを制限できます。
- CloudFront が Application Load Balancer に送信するリクエストに、シークレット値を含むカスタム HTTP ヘッダーを追加するように CloudFront を設定します。
- Application Load Balancer に関連付けられた AWS WAF ウェブ ACL 内にルールを作成します。カスタム HTTP ヘッダーにシークレット値を含まないリクエストをブロックするように、このルールを設定します。
**カスタム HTTP ヘッダーを追加するように CloudFront を設定する **
次の手順を実行します。
- CloudFront コンソールを開きます。
- ナビゲーションペインで、[ディストリビューション] を選択します
- ディストリビューション ID を選択します。
- [オリジン] を選択します。
- お使いの Application Load Balancer を選んで、[編集] を選択します。
注: お使いの Application Load Balancer がオリジンでない場合は、ディストリビューションを更新し、お使いの Application Load Balancer をオリジンとして設定します。
- [カスタムヘッダーを追加] で、[ヘッダー名] と [値] を入力します。
重要: [ヘッダー名] と [値] は、安全な認証情報 (ユーザー名やパスワードなど) として機能します。これらの値は、後で当手順内で使用するため、テキストファイルにコピーしておきます。
- [変更を保存] を選択します。
ヘッダーなしのリクエストをブロックするルールをウェブ ACL 内に作成する
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの**[AWS WAF]で、[ウェブ ACL]**を選択します。
- [リージョン] で、お使いの Application Load Balancer が配置されている AWS リージョンを選択します。
注: お使いの Application Load Balancer に既存のウェブ ACL が関連付けられている場合は、ステップ 9 に進んでください。
- [ウェブ ACL の作成] を選択し、[名前] に入力します。
- [関連する AWS リソース]で、お使いの Application Load Balancer を選択し、[次へ] を選択します。
- [どのルールにも一致しないリクエストのデフォルトウェブ ACL アクション] では、[許可] を選択し、[次へ] を選択します。
- [リクエストのサンプリングオプション] で [サンプルリクエストを有効にする] を選択し、[次へ] を選択します。
- [ウェブ ACL の作成] を選択します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] で、[ウェブ ACL] を選択します。
- [リージョン] で、お使いの Application Load Balancer が配置されているリージョンを選択します。
- お使いの Application Load Balancer に関連付けられているウェブ ACL を選択します。
- [ルール] で、[ルールを追加]、[独自のルールとルールグループを追加] の順に選択します。
- [名前] にルール名を入力します。
- [タイプ] で [正規ルール] を選択します。
- [リクエストの条件] で、[ステートメントと一致しない (NOT)] を選択します。
- [ステートメント 1] で、次の設定を行います。
[検査]には[単一ヘッダー]を選択します。
[ヘッダーフィールド名] に、CloudFront で作成したヘッダー名を入力します。
[マッチタイプ]には[完全に一致する文字列]を選択します。
[一致する文字列] に、CloudFront で作成した値を入力します。
[テキスト変換] で [なし] を選択します。
- [アクション] で [ブロック] を選択します。
- [ルールを保存] を選択します。
- 複数のルールがある場合は、[ルールの優先度を設定する] でこのルールを最も高い優先度に設定します。
- [保存] を選択します。
セキュリティグループ
Application Load Balancer のセキュリティグループに対して AWS マネージドプレフィックスリストを使用することで、Application Load Balancer へのトラフィックをさらに制限できます。
既存のセキュリティグループを更新する手順については、「関連付けられたセキュリティグループの更新」を参照してください。お使いの Application Load Balancer をセキュリティグループに関連付けるには、次の手順を実行します。
- Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
- [ロードバランサー] を選んで、お使いの Application Load Balancer を選択します。
- [セキュリティ] を選択します。
- お使いの Application Load Balancer に関連付けるセキュリティグループを選択します。
- インバウンドルールを変更するには、[インバウンドのルールの編集] を選択し、ユースケースに合うように設定を更新します。
注: 0.0.0.0/0 を許可するルールが既存の場合に、そのルールを削除するときは、事前に新しいルールを追加しておく必要があります。
- 特定のプロトコルを許可するには、そのプロトコルを選択してから [カスタム] を選択します。
- [ソースタイプ] で、[CloudFront] を選択し、AWS マネージドプレフィックスリストからプレフィックスを選択します。
- [保存] を選択します。
注: お使いの Application Load Balancer で使用するポートのみを許可するのがベストプラクティスです。
CloudFront マネージドプレフィックスリストは、プレフィックスリストの重みがあるため、デフォルト設定では各セキュリティグループに 1 回しか追加できません。同じセキュリティグループに、CloudFront ** ** をソースタイプとする別のルールを追加するには、クォータの引き上げをリクエストしてください。または、CloudFront マネージドプレフィックスリストを参照する 2 つのセキュリティグループを使用してください。
関連情報
セキュリティグループ