やさしい AWS Shield Advanced
AWS Shield の概要
AWS Shield とは
- Webサービス提供者は、インターネットに公開しているWebアプリケーションを分散型サービス拒否攻撃(DDoS)から適切に保護する必要があります。AWS Shield は、AWS で実行されるWebアプリケーションを DDoS攻撃から保護するマネージド型のサービスです。
- AWS Shield には、Standard・Advanced の2種類があります。
AWS Shield Standard とは
- AWSのリソースには、標準でAWS Shield Standard が適用されており、追加の費用なく、一般的なレイヤー 3 およびレイヤー 4 のDDoS攻撃を防御することができます。
AWS Shield Advanced とは
- AWS Shield Advanced を利用することで、レイヤー 3 およびレイヤー 4 のDDoS攻撃を防御するだけでなく、攻撃の通知や、レイヤー 7(アプリケーションレイヤー)の攻撃を防御でき、DRT(DDoSレスポンスチーム)のサポートを受けることもできます。
- AWS Shield Advanced で保護可能なリソースは、下記となります。API Gateway は対象ではありません。
- Amazon Route 53 ホストゾーン
- Amazon CloudFront ディストリビューション
- Application Load Balancer
- AWS Global Accelerator
- Elastic IP アドレス(EC2だけでなく、EIPが割り当てられたNLBなども対象となります)
- AWS Shield Standard と AWS Shield Advanced の詳しい比較は、下記ドキュメントを参照ください。
AWS Shield Advanced で知りたかったこと
- AWS Shield Advanced は1年間のサブスクリプション契約のため、手軽に試すことができません。私がAWS Shield Advanced を利用するために調べたことをまとめました。
AWS Shield Advanced のメリット
- レイヤー 3 およびレイヤー 4 のDDoS攻撃緩和が自動で行われる。
- CloudFront、ALBに設定した WebACL にレートベースルールを使用することで、レイヤー 7 のDDoS攻撃を防御することができる。レートベースルールは、5分間あたりの同一送信元からのリクエスト数がしきい値(100から20,000,000まで)を超過した場合にBlock or Countを可能とする。
- レイヤー 7 のDDoS攻撃に対する、DRT(DDoSレスポンスチーム)のサポートが利用できます。
- AWS Shield Advanced を使用してリソースを保護した場合、AWS WAF の利用料も含まれるためコスト的なメリットが受けられます。
- DDoS攻撃によってスケーリングした料金のサービスクレジットを受けることができ、予期せぬリソース使用料の増加を回避できます。(但し、サポート経由でのリクエストが必要)
- CloudFront のカスタムオリジンを使用することで、AWS 以外のリソースにも利用できます。
- CloudFront、Route 53 への攻撃は 1 秒未満、ELB への攻撃は 5 分未満で、AWS Shield により検出されたレイヤー 3 およびレイヤー 4の攻撃の 99% が緩和されます。
- AWS Shield Advanced では、DDoS攻撃を検出してから数分以内に通知が行われます。
AWS Shield Advanced の利用料
- 組織あたり 3,000 USD の月額料金(*)かつ1年間のサブスクリプション契約が必要になります。サブスクリプションは、毎年自動で更新されます。
- (*)月額料金は、AWS Shield Advanced をサブスクライブしている組織単位で適用される。1つの組織が複数の AWSアカウントを使用している場合、上記月額料金は、代表のアカウントでまとめて請求される。
- AWS Shield Advanced で保護したリソースのデータ転送(アウト)の料金は、上記月額料金とは別に、AWSアカウント単位で請求が行われます。なお、Route 53 については、追加の料金はありません。
- AWS Shield Advanced を使用してリソースを保護した場合、保護リソースに対する AWS WAF の利用料(WebACL、ルール、リクエストに対する追加料金)が免除されます。
- ※AWS Shield Advanced の有効化だけでなく、保護リソースの設定が必要。
- ※AWS Marketplace で提供されるマネージドルールグループは免除の対象外となる。
- Route 53 ヘルスチェックは、ヘルスチェック毎に課金されます。
DRT(DDoSレスポンスチーム)のSupport
- DRT のサービスを利用するには、「ビジネスサポートプラン」または「エンタープライズサポートプラン」が必要です。また、DRT がWAF および WAFログへアクセスするための権限を設定する必要があります。
- AWS Support に問い合わせることで、DRT のエキスパートからレイヤー 7 のDDoS攻撃を防御するためのサポートが得られる。(例:レートベースのルール見直しなど)
- AWS Shield Advanced の保護リソースに関連付けたRoute 53 ヘルスチェックが異常になった場合、プロアクティブエンゲージメント(DRTからのプロアクティブなサポート)を利用できる。
- 以下、AWS Shield Advanced のオプション設定となりますが、プロアクティブエンゲージメントの前提条件です。
- 正常性ベースの検出(Route 53 ヘルスチェックの関連付け)を設定する。
- WAFのロギングが有効化されており、DRT がWAF のリソースおよび WAFログへアクセスするための権限が設定されている。
- プロアクティブエンゲージメントにコンタクト先を登録する。コンタクト先には、Email address、Phone number、Contact notesを記載する。(10件まで)
- 2021年7月にDRTから SRT(Shield レスポンスチーム)へ名称が変更されました。本記事では、記事作成時点の DRT の表記で説明しております。ご了承ください。
AWS Shield Advanced の構築方法
AWS Shield Advanced 有効化
- AWS マネジメントコンソールから、「WAF & Shield」を選択します。
- AWS Shield の「Getting started」を選択します。「Subscribe to Shield Advanced」ボタンを選択します。 ※AWS Shield Advanced の利用には、3,000 USD の月額料金かつ1年間のサブスクリプション契約が必要となります。不用意に進まないようにご注意ください。
- サービスの利用条件に同意、チェックを入れて、「Subscribe to Shield Advanced」ボタンを選択します。
- 下記の画面が表示されます。「Add resources to protect」ボタンを押し、保護リソース追加の設定に進みます。
保護リソースの追加とオプション設定
- Region、Resource Type を選択し、「Load resources」ボタンを押します。
- 保護リソースを候補から選択し、「Protect with Shield Advanced」ボタンを押します。以下では、CloudFrontディストリビューション、Route 53 Hosted Zone を選択しています。
- 以下の通り、Shield Advanced に保護リソース x2 が追加されました。
- 次に、保護リソースをレイヤー 7 のDDoS攻撃から防御するため、WebACLを関連付けます。「Web ACL」からWebACL のリソース名を選択します。 ※事前にAWS WAF のWebACLを作成しておく必要があります。
- 関連付けしたWebACL に、レートベースのルールを追加します。「Add rate limit rule」ボタンを押します。
- 以下の画面が現れます。Rule name、Rate limit、Action を選択します。Rate limitは、5分間あたりの同一送信元からのリクエスト数となります。
- Rate limit の算出ができない場合、Actionは「Count」を設定し、後からRate limit の見直しを行っても良いです。
- 関連付けしたWebACL に、レートベースのルールが追加されました。
- 次は、保護リソースの正常性ベースの検出の設定(Route 53 ヘルスチェックの関連付け)です。 ※正常性ベースの検出の設定を行う場合は、事前にRoute 53 でヘルスチェックを作成しておく必要があります。
- 正常性ベースの検出の設定は必須ではありませんが、DRT からプロアクティブなサポートを受ける場合の必要条件です。
- 次は、SNS Topic の設定です。DDoS検出時、Rate limit超過時の2つが設定できます。(Route 53 Hosted Zone の場合は、DDoS検出時のSNS Topicしか設定できません)
- 事前にSNS Topic を作成しておきます。なお、CloudFront の場合は、SNS Topic もバージニア北部に作成する必要があります。ご注意ください。
- 設定内容を確認し、「Finish configuration」ボタンを押します。
- 保護リソースの追加とShield Advancedの設定が完了しました。
DRT Support を有効にする前に
- DRT のサポートには、AWS サポートプランがビジネス以上である必要があります。現在のサポートプランをご確認ください。
DRT Support を有効化する
- AWS Shield の Overview を選択します。「3. Configure AWS DRT Support」のStatus が「Incomplete」となっていることが分かります。
- 「Edit DRT access」ボタンを押し、DRTからのアクセス権限を設定します。
- AWS サポートプランがビジネス or エンタープライズでない場合、下記の画面が表示されます。この状態では、DRT Support は有効にできません。
- AWS サポートプランがビジネス以上であれば、下記の画面が表示されます。
- DRT からアクセスに使用するロール名とWAFログが格納されたバケット名を指定します。「Save」ボタンを押します。
- 以下の通り、DRTからアクセスに使用するロールが作成されました。
- また、WAFログが格納されているバケットに、DRTからアクセスするためのポリシーが追加されました。
- バケットポリシーの内容は、下記となっております。
{
"Version": "2012-10-17",
"Id": "PolicyAWSDDoSResponseTeamAccess",
"Statement": [
{
"Sid": "AWSDDoSResponseTeamAccessS3Bucket",
"Effect": "Allow",
"Principal": {
"Service": "drt.shield.amazonaws.com"
},
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::waflog-bucket",
"arn:aws:s3:::waflog-bucket/*"
]
}
]
}
- AWS Shield の Overview において、「3. Configure AWS DRT Support」のStatus が「Complete」に変わりました。
DRT のプロアクティブエンゲージメント有効化
- プロアクティブエンゲージメントを有効化すると、DRT からプロアクティブなサポートを得ることができます。
- 以下、プロアクティブエンゲージメントの前提条件です。ここでご紹介する手順が、3つ目に記載している条件の設定内容になります。
- 正常性ベースの検出(Route 53 ヘルスチェックの関連付け)を設定する。
- WAFのロギングが有効化されており、DRT がWAF のリソースおよび WAFログへアクセスするための権限が設定されている。
- プロアクティブエンゲージメントにコンタクト先を登録する。コンタクト先には、Email address、Phone number、Contact notesを記載する。(10件まで)
- AWS Shield の Overview を選択します。「Proactive engagement and contacts」のStatus が「Disabled」となっていることが分かります。
- Contacts の「Edit」ボタンを押し、コンタクト先を登録します。必要に応じて、Notesに、プライマリ、セカンダリの順位、対応可能な時間帯とタイムゾーンを記載します。
- Notes
- 「Add contact」を押して、10件まで登録できます。
- 「Edit proactive engagement feature」ボタンを押し、プロアクティブエンゲージメントを有効化します。「Enable」を選択し、「Save」ボタンを押します。
- もし、コンタクト先に「」or「Email」が1つも入力されていなければ、下記の警告が表示されます。
- Proactive engagement requires at least one contact with a valid email address and phone number.
- プロアクティブエンゲージメントが有効化されると、以下の様に「Proactive engagement status」が「Enabled」に変わります。
レートベースのルールをカスタマイズする
- WebACL の画面に移動します。Shield Advanced によって作成されたレートベースのルールが追加されていることを確認します。
- レートベースのルールは、カスタマイズ可能です。「Edit」を押します。
- Rate limit の値には、5分間あたりの同一送信元からのリクエスト数を指定します。(100から20,000,000まで)
- デフォルトは、Source IPアドレスを使用しますが、HTTPヘッダー(X-Forwarded-Forなど)のIPアドレスを使用するルールも可能です。
- 以下では、Rate limit のしきい値を超えた場合のAction を「Count」としておりますが、適切な値が設定されたら、「Block」に切り替えます。
- なお、レートベースルールによって制限されたリクエストは、レートがしきい値を下回ることで解除されます。有効になるまで 1~2 分程度かかることがあります。
SNS Topic 関連付けの確認方法
- Shield Advanced の設定において、保護リソースに SNS Topic が関連付けされている場合の確認方法を紹介します。
- CloudWatch → すべてのアラーム を選択します。
- CloudFront or Route 53 Hosted Zone の場合はバージニア北部のリージョン、ALB の場合は対象リージョンを選択します。
- DDoS検出時、Rate limit超過時の2つアラームが作成されていることが確認できます。
参考資料