やさしい AWS Shield Advanced

6月 29, 2021AWS,AWS Shield

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に、プライマリ、セカンダリの順位、対応可能な時間帯とタイムゾーンを記載します。
    • Email
    • 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つアラームが作成されていることが確認できます。

 

 

参考資料

 

AWS,AWS Shield

Posted by takaaki