継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

『Amazon Builder's Library』の『シャッフルシャーディングを使ったワークロードの分離』

タダです.

Amazon Builder's Library」のオンライン輪読会で今週のテーマが「シャッフルシャーディングを使ったワークロードの分離」という記事なので内容を理解するために記事の整理をします.

輪読の記事 aws.amazon.com

記事の整理

今回の記事で話題になっているのは Route53 という AWS のマネージド DNS サービスとサービスで使われている「シャッフルシャーディング」技術および採用の経緯が書かれていました.

記事の構成

  • はじめに
  • DNS ホスティングの対応開始
  • DDoS 攻撃への対処
  • シャッフルシャーディングとは?
  • Amazon Route53 とシャッフルシャーディング
  • まとめ

DDoS対策としてのシャッフルシャーディング

Amazon では DNS ホスティングがビジネス全体へ大きな影響と需要があることを認識しつつサービス開発にあたっていました.その中での最大の課題が DDoS 対策でした.DDoS 攻撃では DNS サーバーが標的になるため,攻撃(DNS フラッド攻撃)に対策が必要になります.

www.shadan-kun.com

開発チームは DDoS 対策で Route53 で行ったのは攻撃を受けているドメインの防御だけにサーバーリソースを制御するための方法を検討し,シャッフルシャーディングを採用しました.

シャッフルシャーディングについて

シャッフルシャーディングとは,サーバーでのトラフィック処理効率性を抑えるもののサーバーへの攻撃影響範囲を狭めるための技術です.例えば,8台のサーバーがあった際に,通常であれば8台のサーバーが全てのリクエストを処理することになります.これは効率や冗長性は取れた手法ですが,1つのサーバーが攻撃を受けた場合,数珠つなぎのように他のサーバーも攻撃を受けてダウンする恐れがあります.その影響を抑えるためにリクエストをさばくサーバーを分割(シャード)して,攻撃を抑制します.

8台のサーバーで例えば,1つのリクエストを2つのサーバーで捌くようにリソースを分割します.仮にそのうちの特定の2つのサーバーのみ攻撃を受けても他のサーバーは影響を受けません.また,特定のサーバーにしか攻撃を対象を隔離することで他のサーバーを利用しているユーザーにも影響を与えないようになります.これがシャッフルシャーディングの効果です.

Route53 のシャッフルシャーディング

それでは,Route53 のシャッフルシャーディングがどのように実装されているのでしょうか?Route 53 では、全 2048 の仮想ネームサーバーにサーバーリソースを振っています.各ユーザーのドメインは4つのネームサーバーが作られてこれらに対してシャッフルシャードされていくのですが,Route53 でドメインを作るたびに自動で生成されるネームサーバが4つある理由がわかりました.

Amazon Route 53 によって、ホストゾーンと同じ名前のネームサーバー (NS) レコードが自動的に作成されます。これには、ホストゾーンの 4 つの正式なネームサーバーがリストされます。このレコードに対して、ネームサーバーを追加、変更、または削除しないでください。

次の例は、Route 53 ネームサーバーの名前の形式を示してます (これらはサンプルとして提供されています。これらをレジストラのネームサーバーレコードを更新するときに使用しないでください)。

ns-2048.awsdns-64.com

ns-2049.awsdns-65.net

ns-2050.awsdns-66.org

ns-2051.awsdns-67.co.uk

ドキュメント

そして,シャッフルシャーディングによって DDoS 攻撃があっても特定のドメインにおけるネームサーバへのトラフィックが増えるものの,他のドメインは影響受けません.また,攻撃を受けているドメインへのサーバーリソースを足しつつ攻撃されている箇所を隔離することが可能です.更に,AWS Shield Standard を無料で利用者は自動で使っているためレイヤー3および4の攻撃を防御してくれています.AWS における DDoS 対策についてはホワイトペーパーにも記載があるため気になる方は参照しておこうと思います.

aws.amazon.com

aws.amazon.com

いずれにせよ,Route53 のシャッフルシャーディングによって利用者はたとえ DDoS 攻撃を受けていてもサービス利用が止まることなく操作できるようになっています.シャッフルシャーディングの実装部分は GitHub のソースコードが公開されています.

まとめ

シャッフルシャーディングを使ったワークロードの分離」の記事の内容整理をしました.シャッフルシャーディングの実装について確認しつつ資料を作っていきます!