CloudFront 適用済みの WordPress サイトに ALB を適用してみる
0.はじめに
先日、こちらの記事の対応を行ったんですが、
EC2 への直接アクセスでのアタックがあり、CloudFront と EC2 との間に ALB を入れ、EC2 への直接アクセスを制限してみます。
こんな感じ。
1.ALB 用の ACM を作成する
- 以前バージニアリージョンに ACM を作成したので、同様の手順で該当リージョンにも作成します。
- SSL 化済みの WordPress サイトに CloudFront を適用してみる - Qiita
- ※以前登録しているので、DNS レコードの設定は不要。

2.ALB 用のセキュリティグループを作成する
- CloudFront からのリクエストを HTTPS (443) でのみ受け入れたいので、以下のセキュリティグループを作成します。
3.ALB を作成する
- 以下のページの手順に従って、ALB を作成します。
- ELB(ALB)1つで複数のバーチャルホストに対応する Host-based routing | システムガーディアン株式会社
-
注意する点は、以下。
-
リスナーの設定において、ホストベースの設定を行い、各ターゲットグループにちゃんと振り分ける。
-
各ターゲットグループの設定において、ヘルスチェックの「プロトコル」と「パス」を各サイトに合わせて設定する。





- 以下のページの手順に従って、ALB のアクセスログの出力先を設定します。
-
ALBのアクセスログ機能を設定してみた | ナレコムAWSレシピ
- 以下、出力先の S3 のバケットポリシーの設定。

{
"Version": "2012-10-17",
"Id": "PolicyXXXXXXXXXXXXX",
"Statement": [
{
"Sid": "StmtXXXXXXXXXXXXX",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::582318560864:root"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::[S3バケット名]/[プレフィックス]/AWSLogs/[アカウントID]/*"
]
}
]
}
4.CloudFront のオリジンを EC2 から、ALB に変更する
- 以下のオリジンを作成します。
- Origin Domain Name : [作成した ALB の DNS 名]
- Origin Path : -
- Origin ID : ※「Origin Domain Name」入力により自動入力
- Origin SSL Protocols : ※デフォルト
- Origin Protocol Policy : 「HTTPS Only」を選択
- Origin Response Timeout : ※デフォルト
- Origin Keep-alive Timeout : ※デフォルト
- HTTP Port : ※デフォルト
- HTTPS Port : ※デフォルト
- Origin Custom HeadersHeader NameValue :
- x-pre-shared-key : ※任意 (最大50文字)
- ※6.の ALB の AWS WAF の設定に利用するので、50文字の不規則の文字列が良いかと。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO

- 各種 Behavior において、「Origin or Origin Group」の設定を作成した ALB のオリジンに変更します。
5.EC2 のセキュリティグループを変更し、EC2 へのアクセスを ALB のみにする
- ALB からの HTTPS (443) のリクエストのみ受け入れたいので、インバウンドルールをセキュリティグループに設定します。
6.ALB に AWS WAF を設定し、ALB へのアクセスを CloudFront のみにする
- 以下のページの手順に従って、ALB に AWS WAF を設定します。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO
- ※ Web ACL の設定


- ※ Web ACL - Rule (rule-cfg-header-check) の設定

- ※ Web ACL - String and regex match condition (check-cf-header) の設定

99.ハマりポイント
- そこまでハマった訳ではないですが…。
- ALB 作成時、ターゲットグループ作成において、「登録済みに追加」ボタンを押下するのを忘れて、ウンウン唸ってました…。わかりづらかったっす…。随分と無駄な時間を…。orz…。
- あとは、5.の EC2 へのアクセスを ALB のみにするやり方がわからなくてかなり苦労しました…。
- セキュリティグループで出来るなんて、目から鱗!!
- 他にも色々応用できそう♪
XX.まとめ
- SSL 化済みの WordPress サイトに CloudFront を適用してみる - Qiita
- ※以前登録しているので、DNS レコードの設定は不要。
- CloudFront からのリクエストを HTTPS (443) でのみ受け入れたいので、以下のセキュリティグループを作成します。
3.ALB を作成する
- 以下のページの手順に従って、ALB を作成します。
- ELB(ALB)1つで複数のバーチャルホストに対応する Host-based routing | システムガーディアン株式会社
-
注意する点は、以下。
-
リスナーの設定において、ホストベースの設定を行い、各ターゲットグループにちゃんと振り分ける。
-
各ターゲットグループの設定において、ヘルスチェックの「プロトコル」と「パス」を各サイトに合わせて設定する。





- 以下のページの手順に従って、ALB のアクセスログの出力先を設定します。
-
ALBのアクセスログ機能を設定してみた | ナレコムAWSレシピ
- 以下、出力先の S3 のバケットポリシーの設定。

{
"Version": "2012-10-17",
"Id": "PolicyXXXXXXXXXXXXX",
"Statement": [
{
"Sid": "StmtXXXXXXXXXXXXX",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::582318560864:root"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::[S3バケット名]/[プレフィックス]/AWSLogs/[アカウントID]/*"
]
}
]
}
4.CloudFront のオリジンを EC2 から、ALB に変更する
- 以下のオリジンを作成します。
- Origin Domain Name : [作成した ALB の DNS 名]
- Origin Path : -
- Origin ID : ※「Origin Domain Name」入力により自動入力
- Origin SSL Protocols : ※デフォルト
- Origin Protocol Policy : 「HTTPS Only」を選択
- Origin Response Timeout : ※デフォルト
- Origin Keep-alive Timeout : ※デフォルト
- HTTP Port : ※デフォルト
- HTTPS Port : ※デフォルト
- Origin Custom HeadersHeader NameValue :
- x-pre-shared-key : ※任意 (最大50文字)
- ※6.の ALB の AWS WAF の設定に利用するので、50文字の不規則の文字列が良いかと。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO

- 各種 Behavior において、「Origin or Origin Group」の設定を作成した ALB のオリジンに変更します。
5.EC2 のセキュリティグループを変更し、EC2 へのアクセスを ALB のみにする
- ALB からの HTTPS (443) のリクエストのみ受け入れたいので、インバウンドルールをセキュリティグループに設定します。
6.ALB に AWS WAF を設定し、ALB へのアクセスを CloudFront のみにする
- 以下のページの手順に従って、ALB に AWS WAF を設定します。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO
- ※ Web ACL の設定


- ※ Web ACL - Rule (rule-cfg-header-check) の設定

- ※ Web ACL - String and regex match condition (check-cf-header) の設定

99.ハマりポイント
- そこまでハマった訳ではないですが…。
- ALB 作成時、ターゲットグループ作成において、「登録済みに追加」ボタンを押下するのを忘れて、ウンウン唸ってました…。わかりづらかったっす…。随分と無駄な時間を…。orz…。
- あとは、5.の EC2 へのアクセスを ALB のみにするやり方がわからなくてかなり苦労しました…。
- セキュリティグループで出来るなんて、目から鱗!!
- 他にも色々応用できそう♪
XX.まとめ
- ELB(ALB)1つで複数のバーチャルホストに対応する Host-based routing | システムガーディアン株式会社
-
注意する点は、以下。
- リスナーの設定において、ホストベースの設定を行い、各ターゲットグループにちゃんと振り分ける。
- 各ターゲットグループの設定において、ヘルスチェックの「プロトコル」と「パス」を各サイトに合わせて設定する。
- ALBのアクセスログ機能を設定してみた | ナレコムAWSレシピ
- 以下、出力先の S3 のバケットポリシーの設定。
{
"Version": "2012-10-17",
"Id": "PolicyXXXXXXXXXXXXX",
"Statement": [
{
"Sid": "StmtXXXXXXXXXXXXX",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::582318560864:root"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::[S3バケット名]/[プレフィックス]/AWSLogs/[アカウントID]/*"
]
}
]
}
- 以下のオリジンを作成します。
- Origin Domain Name : [作成した ALB の DNS 名]
- Origin Path : -
- Origin ID : ※「Origin Domain Name」入力により自動入力
- Origin SSL Protocols : ※デフォルト
- Origin Protocol Policy : 「HTTPS Only」を選択
- Origin Response Timeout : ※デフォルト
- Origin Keep-alive Timeout : ※デフォルト
- HTTP Port : ※デフォルト
- HTTPS Port : ※デフォルト
- Origin Custom HeadersHeader NameValue :
- x-pre-shared-key : ※任意 (最大50文字)
- ※6.の ALB の AWS WAF の設定に利用するので、50文字の不規則の文字列が良いかと。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO
- x-pre-shared-key : ※任意 (最大50文字)
- 各種 Behavior において、「Origin or Origin Group」の設定を作成した ALB のオリジンに変更します。
5.EC2 のセキュリティグループを変更し、EC2 へのアクセスを ALB のみにする
- ALB からの HTTPS (443) のリクエストのみ受け入れたいので、インバウンドルールをセキュリティグループに設定します。
6.ALB に AWS WAF を設定し、ALB へのアクセスを CloudFront のみにする
- 以下のページの手順に従って、ALB に AWS WAF を設定します。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO
- ※ Web ACL の設定


- ※ Web ACL - Rule (rule-cfg-header-check) の設定

- ※ Web ACL - String and regex match condition (check-cf-header) の設定

99.ハマりポイント
- そこまでハマった訳ではないですが…。
- ALB 作成時、ターゲットグループ作成において、「登録済みに追加」ボタンを押下するのを忘れて、ウンウン唸ってました…。わかりづらかったっす…。随分と無駄な時間を…。orz…。
- あとは、5.の EC2 へのアクセスを ALB のみにするやり方がわからなくてかなり苦労しました…。
- セキュリティグループで出来るなんて、目から鱗!!
- 他にも色々応用できそう♪
XX.まとめ
- 以下のページの手順に従って、ALB に AWS WAF を設定します。
- AWS WAFを利用してCloudFrontのELBオリジンへ直接アクセスを制限してみた | DevelopersIO
- ※ Web ACL の設定
- ※ Web ACL - Rule (rule-cfg-header-check) の設定
- ※ Web ACL - String and regex match condition (check-cf-header) の設定
99.ハマりポイント
- そこまでハマった訳ではないですが…。
- ALB 作成時、ターゲットグループ作成において、「登録済みに追加」ボタンを押下するのを忘れて、ウンウン唸ってました…。わかりづらかったっす…。随分と無駄な時間を…。orz…。
- あとは、5.の EC2 へのアクセスを ALB のみにするやり方がわからなくてかなり苦労しました…。
- セキュリティグループで出来るなんて、目から鱗!!
- 他にも色々応用できそう♪
XX.まとめ
これで、セキュリティ的にも、パフォーマンス的にも、最適な構成になったんじゃないかと思います。
まだ残ってることとしては、ALB - EC2 間を HTTP (80) にするとかはやっても良いかなと。
そうすれば、EC2 の SSL 証明書が不要になるので、証明書の更新作業も不要になってメンテナンス作業も楽になるかと。
ただ、
ここまでやってみて思ったんですが…、Shifter 使えば全部楽になったりするんじゃ?
と思ったりも…。
今後その辺試してみようかとも思います。
何かご参考になれば。
では♪
👋
Author And Source
この問題について(CloudFront 適用済みの WordPress サイトに ALB を適用してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/kusokamayarou/items/1229bed12462eee48e68著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .