Google Cloud Platform上でのDDoS保護と影響緩和のベストプラクティス（和訳）

## 訳者からひとこと

Googleが昨年公開したGCPにおけるDDoS対策のドキュメントを和訳しました。
技術文書の和訳は初めてなので至らない点も多いと思います。お気づきの点やよりわかりやすい表現の提案がありましたら、ご指摘お願い致します。

以下、本文です。

## 翻訳元

Best Practices for DDoS Protection and Mitigation on Google Cloud Platform
(https://cloud.google.com/files/GCPDDoSprotection-04122016.pdf)

（翻訳元の）最終更新日: 2016年4月12日

## 導入

DoS攻撃はサービス又はアプリケーションを利用不可能にしようとするものです。また、DDoS攻撃では標的に対して大規模な攻撃を仕掛けるために複数のリソース（多くの場合、多数の侵害されたホスト/インスタンス）が用いられます。この文書では、Google Cloud Platform (GCP) 上のサービスに対するDoS、DDoS攻撃を防ぐためのベストプラクティスを紹介します。

## 共有インフラストラクチャの保護

Googleでは、クラウド・インフラストラクチャとプロダクション・サービスを保護するための仕組みが用意しています。これらの仕組みは単一のサービスが共有インフラストラクチャを圧迫したり、共有インフラストラクチャを使用する顧客間を隔離したりしないように設計されています。その詳細な仕組みについてはこの文書では扱いません。

## GCP上のサービスのためのDDoS保護と影響緩和

GCP上のサービスに対するDDoS攻撃を阻止・処理することはGoogle Cloud Platformとあなたの共通の責任です。DDoS攻撃からの防御には、攻撃者があなたのサービス又はアプリケーションを圧迫したりアクセス不能にしたりするのを防ぐための検出システムの導入、障壁の設置、スケーリングによって攻撃から耐えることが含まれます。Google Cloud Platformはこれらの内いくつかの仕組みを自動的に提供します。以下のベストプラクティスを実行して、GCP上のサービスのセキュリティを確保してください。

* GCEにおいて攻撃の入り口を減らす
    - Google Cloud Virtual Network (https://cloud.google.com/virtual-network/) を用いて、隔離されたセキュアなGoogle Cloudを用意してください。ベストプラクティスはこちら (https://cloud.google.com/docs/enterprise/best-practices-for-enterprise-organizations#networking-and-security) からご覧いただけます。
    - サブネットワークとネットワーク、ファイアウォール・ルール、タグ、アクセス管理 (IAM) を用いてサービスを隔離・保護してください。
    - ファイアウォール・ルール及び（または）プロトコル転送 (https://cloud.google.com/compute/docs/protocol-forwarding/) を用いて、必要なポートとプロトコルへの接続を開くようにしてください。
    - GCPはデフォルトでプライベートネットワーク（IPアドレス）に対するアンチ・スプーフィングを提供します。
    - GCPは自動的に仮想ネットワーク間を隔離します。
* 内部トラフィックを外部から隔離する
    - 必要でない場合はパブリックIPを設定せずにインスタンスをデプロイしてください。
    - NATゲートウェイまたはSSHの踏み台を設定して、インターネットに公開されるインスタンスを制限することができます。
    - 内部クライアントインスタンスが内部的にデプロイされたサービスにアクセスするための内部負荷分散が利用可能になると、外部への公開を回避できるようになります。[2016年後半に利用可能予定の内部LB]
* プロキシベースの負荷分散を用いたDDoS保護
    - HTTP(S)負荷分散またはSSLプロキシ負荷分散を有効にすると、GoogleインフラストラクチャがSYN floods攻撃、IP fragment floods攻撃、ポート枯渇攻撃など、レイヤー4以下の攻撃の多くを軽減・吸収します。
    - 複数のリージョンにあるインスタンスでHTTP(S)負荷分散を使用している場合、世界中のインスタンスに攻撃を分散することができます。
* 攻撃から耐えるためにスケールする
    - Googleフロントエンド・インフラストラクチャによる保護: ユーザートラフィックを終端させるフロントエンド・インフラストラクチャであるGoogle Cloudグローバル負荷分散を用いると、あなたのコンピューティング・インスタンスに到達する前に特定の攻撃（SYN floods攻撃など）を吸収するため、自動的にスケールします。
    - エニーキャストベースの負荷分散: HTTP(S)負荷分散とSSLプロキシは、あなたが全てのリージョンでデプロイしたバックエンドインスタンスを公開するために、1つのエニーキャストIPを用意します。通常、ユーザートラフィックはキャパシティを考慮しつつ最も近いバックエンドに送られます。DDoS攻撃がされた場合、バックエンドがデプロイされている全てのリージョンのうちキャパシティに余裕があるインスタンスにトラフィックを送ることで、この攻撃から耐えるための表面積を増やすことができるという利点も持っています。
    - 自動スケーリング: HTTP(S)またはSSLプロキシ負荷分散を設定すると、ユーザートラフィックを終端させるGoogle フロントエンド・インフラストラクチャがあなたのバックエンドを保護します。あなたは十分な数のインスタンスの提供及び（または）突発的なトラフィックを処理するための自動スケーリング設定をする必要があります。突発的なトラフィックが発生した場合、負荷分散のプロキシ層はキャパシティに余裕がある全てのバックエンドにトラフィックを分配します。並行して、負荷分散システムは処理すべきトラフィックに応じてバックエンドを増やします。
* CDNオフローディングによる保護
    - Google Cloud CDNはクライアントとオリジナルサーバーの間でプロキシとして機能します。キャッシュ可能なコンテンツの場合、Cloud CDNはバックエンドサーバー（インスタンス）にそれらを送る代わりに、そのコンテンツをより近いPOP（提供地点）でキャッシュ、提供します。キャッシュ可能なコンテンツに対してDDoS攻撃がされた場合、そのリクエストはあなたのオリジナルサーバーではなく全世界のPOPに送信されるため、攻撃に耐えるためのより大きな領域を提供することができます。
    - CDN Interconnectを使用する場合、CDN Interconnectパートナーが提供する追加のDDoS保護を活用できます。パートナーが提供するDDoS保護機能の詳細は各パートナーのページ (https://cloud.google.com/interconnect/cdn-interconnect#providers) で確認できます。
* サードパーティ製 DDoS 対策を使用する
    - DDoS攻撃を防止・軽減するための特別な要件を満たすためには、特注のサードパーティ製DDoSソリューションを購入することを検討してください。
    - Google Cloud Launcher (https://cloud.google.com/launcher/) を利用してDDoSソリューションをデプロイすることもできます。
* App Engineへのデプロイについて
    - App Engineは完全なマルチテナントシステムになるように設計されており、1つの有害なアプリケーションがプラットフォーム上の他のアプリケーションのパフォーマンスや可用性に影響を与えないようにするため、いくつかのセーフガードを実装しています。
    - App EngineはSYN floods攻撃、IP fragment floods攻撃、ポート枯渇攻撃など、レイヤー4以下の攻撃の多くを緩和・吸収するGoogleフロントエンドの後ろに位置します。
    - dos.yamlファイル (https://cloud.google.com/appengine/docs/standard/python/config/dos) でIPやIPネットワークを指定することで、そこからあなたのアプリケーションにアクセスされないようにブロックすることもできます。
* Google Cloud Storage
    - Google Cloud Storageのリソースにアクセスするために、ユーザーにGoogle アカウントを要求したくない場合、認証済みURL (https://cloud.google.com/storage/docs/access-control/#Signed-URLs) を用いてアクセスを制御することができます。
* APIレート制限
    - APIレート制限はGoogle Compute Engine API (https://cloud.google.com/compute/docs/reference/latest/) にリクエストできる回数を定義します。APIレート制限はプロジェクトごとに適用されます。
    - 現在のAPIレート制限の上限 (https://cloud.google.com/compute/docs/api-rate-limits) はプロジェクトあたり20リクエスト/秒です。
* リソース割り当て
    - Compute Engineでは様々な理由から、使用できるリソースの割り当て量 (https://cloud.google.com/compute/docs/resource-quotas) を制限しています。たとえば、割り当て量を制限して予期しない使用量の急増を防ぐことでGoogle Cloud Platformユーザーのコミュニティを保護しています。また、Google Cloud Platformの無料トライアル用にプロジェクトでのアクセスを制限した特別な割り当て (https://cloud.google.com/free/docs/frequently-asked-questions#limitations) もあります。

## 結論

Google Cloud Platformには、DDoS攻撃を防ぐための様々な機能が用意されています。上記のベストプラクティスと要件に合わせた他の手法を組み合わせて使用することで GCP上にデプロイしたあなたのサービスをDDoSから回復させることができます。