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 WAF の料金」を参照してください。
AWS WAF カスタムウェブ ACL ルールを使用してトラフィックを制限するには、CloudFront で設定を行い、カスタム HTTP ヘッダーを追加します。次に、Application Load Balancer に関連付けられた AWS WAF ウェブ ACL 内にルールを作成します。このルールを使用し、カスタム HTTP ヘッダーのシークレット値を含まないリクエストをブロックします。
CloudFront で設定を行い、カスタム HTTP ヘッダーを追加する
次の手順を実行します。
- CloudFront コンソールを開きます。
- ナビゲーションペインで [ディストリビューション] を選択し、目的の [ディストリビューション ID] を選択します。
- [オリジン] タブを選択します。
- 目的の Application Load Balancer を選択し、[編集] を選択します。
注: お使いの Application Load Balancer がオリジンでない場合は、ディストリビューションを更新し、お使いの Application Load Balancer をオリジンとして設定します。
- [カスタムヘッダーを追加] で、[ヘッダー名] と [値] を入力します。
重要: [ヘッダー名] と [値] は、安全な認証情報 (例: ユーザー名、パスワード) として機能します。この手順の後半で使用するために、値を書き留めておきます。
- [変更を保存] を選択します。
ウェブ ACL 内に、ヘッダーを含まないリクエストをブロックするルールを作成する
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインで [リソースと保護パック] を選択します。
- [保護パックの作成] を選択します。
- [アプリについて教えてください] の [アプリカテゴリ] において、1 つ以上のアプリカテゴリを選択します。
- [トラフィックソース] でアプリケーションが関与するトラフィックの種類を選択します (例: API、ウェブ、API およびウェブ)。
- [保護するリソース] で [リソースの追加] を選択します。
- [グローバル] で [Add Cloud front or Amplify resources (CloudFront リソースまたは Amplify リソースの追加)] を選択します。
- リストから目的のディストリビューションを選択します。
- [保護パックを選択] において、[AWS WAF が提供するすべての保護機能から独自パックを作成] を選択します。
- 右側のペインで [カスタムルール] を選択し、[次へ] を選択します。
[カスタムルール] を再度選択し、[次へ] を選択します。
- ルールの [アクション] を BLOCK に設定します。
- [ルール名] を入力します。
- [リクエストが次の場合] でドロップダウンを展開し、[ステートメントに一致しない (NOT)] を選択します。
- [検査] で [単一ヘッダー] を選択します。
- [ステートメント] で次の手順を実行します。
[ヘッダーフィールド名] に、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 つのセキュリティグループを使用してください。
関連情報
Amazon CloudFront で AWS マネージドプレフィックスリストを使用してオリジンへのアクセスを制限する
CloudFront ディストリビューションが配信するウェブコンテンツに対し、場所によるアクセス制限を行う方法を教えてください