10
1

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 1 year has passed since last update.

AWS CloudFront障害時にRoute 53のフェイルオーバーが効かない設定を見直した話

Last updated at Posted at 2022-12-07

はじめに

久しぶりの投稿です。
毎週記事を書くといいながら2ヶ月も記事の投稿がストップしていました。
あ、サボっていたわけではありません。
実はこの2ヶ月間は資格の勉強をしていてAWS認定資格もちゃんと2つ取りました。
その後ワールドカップというイベントに参加して、世界のサッカートレンドを学習したり、なんやかんやで投稿を先送りにしていました。
言い訳はこのあたりにしまして、本題に参りたいと思います。

今回担当案件でインフラ構成にまずい部分がありました。
改善しましたので備忘録として残したいと思います。
説明下手でわかりにくい箇所等あるかと思います。ご了承ください。
また、ご指摘ご意見ありましたら教えてください!お待ちしています。

前提

構成は下の図のようになっています。
実際の構成はもっと複雑で冗長化もしているのですが、今回は必要な箇所だけ。
Image from Gyazo

  • CloudFrontからALB、そしてEC2インスタンスへ通信が進む。
  • CloudFront障害時はRoute 53のフェイルオーバールーティングによりALBへトラフィックをルーティングする。
  • 特定のIPアドレスのみ許可するため、ALBリスナールールに次を設定
    • HTTP Header
    • X-Forwarded-Forが通信OKのIPアドレスの場合、ターゲットのEC2インスタンスへトラフィックをルーティングする。
      Image from Gyazo
  • CloudFrontからALBへcustom headerは渡さない
    • フェイルオーバー時にCloudFrontを経由しないため、custom headerを設定するとフェイルオーバールーティングがALBではじかれるため

Image from Gyazo

課題

CloudFrontに障害が発生し、Route 53によりALBへフェイルオーバールーティングが行なわれた場合

CloudFrontを経由しないため、X-Forwarded-Forのリスナールールに一致せず、ALBでエラーを返してしまう。
cb5110df64f832ccd391648c8156cc5e (1).png

custom headerを渡さないだけでなく、次の両者ともにALBのターゲットであるEC2インスタンスへの通信を可能な状態にしたい。

  • トラフィックがCloudFront経由(X-Forwarded-For)でALBに来る場合
  • トラフィックがCloudFrontを経由せずにALBに来る場合

改善案

ALBにおいてCloudFront経由(X-Forwarded-For)で来る場合とCloudFrontを経由しない場合のどちらのIPアドレスにもtargetへのルーティングを許可します。

解決策としては以下の2点を考えました。

  1. ALBリスナールールにX-Forwarded-Forに加え、送信元IPアドレスを追加し、targetへ通信を許可する
    cb5110df64f832ccd391648c8156cc5e.png

    • メリット
      • 無料で設定可能
    • デメリット
      • リスナールールには上限あり
      • リスナールールが煩雑になり、管理しにくく漏れが発生する可能性あり。
  2. AWS WAFを利用してIPのホワイトリストを設定し。ALBにアタッチ

    • メリット
      • 管理がしやすい
    • デメリット
      • 料金がかかる

設定方法等はこちらがわかりやすかったです。

解決

結局、管理面を考慮し、AWS WAFにルールを設けることになりました。
え、リスナールールの方が簡単だし、無料じゃん!とも思われますが、実際の環境ではたくさんの許可IPアドレスが存在し、さらにいくつかのパスも指定しなければいけませんでした。
リスナールールが複雑になってわかりにくいためWAFを利用しました。

最後に

AWSの業務をする時が一番楽しいなと感じる今日このごろ。
設計も答えは一つではなく、様々なパターンがあるんだなと日々勉強になっています。
そもそもCloudFrontに障害が起こる可能性ってどれくらいなのかなーと思ったりします。
調べてみるとちょこちょこあってるみたいですねー!
日々勉強です!
もっとこういう設計にすればいいじゃないという意見があればください!

参考

10
1
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
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?