どうもネクスト中村です。

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設定すれば解決します。

  1. Route 53でレコードを作成
    名前: alb.test.jp(SSL証明書が使用可能)
    種類: CNAME(またはALIAS if ALB supports it)
     値: xxxx.ap-northeast-1.elb.amazonaws.com
  2. alb.test.jpでALBにアクセスできるのを確認
  3. CloudFrontのオリジン登録
    Origin domainでalb.test.jpを入力
    プロトコルはHTTPSのみを選択
    登録する
  4. CloudFrontのビヘイビアにて、上記のオリジンでパスルートを作成

これでHTTPS接続においてもCloudFront経由でALBの接続が可能となります。

AWSムズカシイネ