43
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudFrontを利用する際に気をつけたほうがいいこと

Posted at

#はじめ

普段、CloudFrontをあまり使いこなせていません...というより、あまり利用していません。
先日CloudFrontについて、社内利用部門からの問い合わせの対応に少し困っていました。(自分なりに調べて解決できましたが)
またつい最近、CloudFrontの利用時にハマった事例を聞けましたので、
自分の学習メモも兼ねて、下記2点について、Qiitaに書こうと思いました。

  1. SSLハンドシェイクエラー
  2. 断続的に通信失敗

SSLハンドシェイクエラー

構成: CloudFront → ELB → オリジン

事象

(CloudFront経由せず)ELB経由の場合は問題なくオリジンにアクセスできましたが、CloudFront経由ですと、ハンドシェイクエラーが発生し、オリジンにアクセスできませんでした。

原因

結論から言いますと、Hostヘッダーが一致していないことです。
今回SSLハンドシェイクエラーが発生したケースにおいて、 CloudFrontのBehaviour設定画面にForward Headers = All というのが設定がされていました。
WechatIMG2.jpeg

CloudFrontのデフォルト設定ですと、Hostヘッダーは転送されませんが、
Forward Headers = All を設定してしまうと、CloudFrontが自分のDNS名(例えば abcd.cloudfront.net)をHost Headerとしてオリジンに転送されます。
その後、CloudFrontがオリジンから送付された証明書(例えばexample.com)を検証しますが、CloudFrontのHost header(abcd.cloudfront.net)とオリジンのHost Header(example.com)が一致していないため、SSL通信が確立されず、ハンドシェイクエラーになってしまいます。

解決策

CloudFrontから通過させるヘッダーを一度洗い出し、BehaviourのForward Headersを設定する際に、ALLではなく、Whitelistで通過させるヘッダーを設定することです。

断続的な通信エラー

事象

(つい最近の話)CloudFront経由の通信がある日から通信ができたり、できなかったりとかすることが発生します。

原因

前提として、セキュリティグループでアクセスを制限し、CloudFrontからのアクセスのみ許可していることです。

AWSがCloudFrontのキャッシュサーバが追加したからです。これにより、CloudFrontが利用するIPが増え、元々セキュリティグループに登録されていないCloudFrontのIPからのアクセスですと、当然通信ができません。

解決策

CloudFrontが利用するIPレンジの情報はip-ranges.jsonから取得できますので、
新たに追加されたCloudFrontのIPをセキュリティグループに登録しておくことです。
"service": "CLOUDFRONT"で検索すると便利

なお、CloudFrontのIPを追加されたのをどうやって分かるかと言いますと、
下記AWSの記載によると、SNSを設定することにより、更新される度に通知してくれます。(全然知らなかった)

AWS の IP アドレス範囲の通知

AWS の IP アドレス範囲に変更があるたびに、AmazonIpSpaceChanged トピックのサブスクライバー>に通知が送信されます。

補足情報

  1. 上記のAWS SNSからの通知を受け、Lambdaが起動し、自動的にセキュリティグループを更新してくれるコードがGitHub上にがあります。利用したことがないですが、aws-cloudfront-samplesってものです。

  2. セキュリティグループインバウンドルールの上限(デフォルト)は50個ですので、現状ですと、上限を超える前に、AWSサポートに(100まで)上限緩和を申請するか、セキュリティグループにさらに入れ子のセキュリティグループを登録するか2択です。

最後

とりあえず、自分が知っている範囲で書きました。
CloudFrontについて、全然勉強足りていないことが分かっていて、これからもどんどん触っていきたいと思っています。

参考リンク

  1. Cloudfront-Origin間のHTTPS通信エラー原因と対策(502:Bad Gateway)
  2. [新機能] Amazon CloudFrontでHostヘッダを転送する
  3. CloudFront エッジサーバーの場所と IP アドレス範囲
  4. AWS IP アドレスの範囲
43
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?