どうもネクスト中村です。
CloudFront・ALB経由でEC2やECSに接続したいときが、いつか、たぶん、きっとでてくると思いますのでその時の設定方法を今日は記載します。
CloudFrontとALBの接続の問題
CloudFrontとALBの通信にHTTP:443のみを許可する場合、400系エラーになり、CloudFrontとALBの接続ができないケースが発生しました。
次のような構成です。

- CloudFrontのオリジンにALBのオリジンドメインを登録(
xxxx.ap-northeast-1.elb.amazonaws.com) - CloudFrontのビヘイビアにパスルートを設定
- CloudFrontからALBのアクセスでは
HTTPS(ポート443)のみを設定
原因
エラーの原因はCloudFrontは設定したオリジンドメインにアクセスするからです。
test.jpの例
test.jp ドメインを例にとって考えてみましょう。
- Route53で
*.test.jpを定義 - CloudFrontの代替ドメインを
cdn.test.jpとする - CloudFrontとALBのそれぞれのリージョンで
test.jpのSSL証明書を発行
しかし、CloudFrontに代替ドメインを登録しても、CloudFrontからALBへはオリジンドメイン(xxxx.ap-northeast-1.elb.amazonaws.com)でアクセスを試みます。
[cdn.test.jp:443]--->[xxxx.ap-northeast-1.elb.amazonaws.com:443]ALBはSSLで *.test.jp のドメインでのアクセスしか許可をしていないため、このアクセスはエラーになります。
解決
Route53でALB用のドメインを追加し、ALBのオリジンドメインにCNAME設定すれば解決します。
- Route 53でレコードを作成
名前:alb.test.jp(SSL証明書が使用可能)
種類:CNAME(またはALIAS if ALB supports it)
値:xxxx.ap-northeast-1.elb.amazonaws.com - alb.test.jpでALBにアクセスできるのを確認
- CloudFrontのオリジン登録
Origin domainでalb.test.jpを入力
プロトコルはHTTPSのみを選択
登録する - CloudFrontのビヘイビアにて、上記のオリジンでパスルートを作成
これでHTTPS接続においてもCloudFront経由でALBの接続が可能となります。
AWSムズカシイネ