AWS Shield Advancedの設定方法と注意点

AWS Shield Advancedを設定する機会があったので設定方法と注意点をまとめました。特に保護するリソースが多いと手間取りやすいので事前の準備をしっかりしたほうがいいです。
2018.08.24

こんにちは、臼田です。

みなさん、AWSリソースをちゃんと守っていますか?

今回はAWS Shield Advancedを設定する機会がありましたのでその設定方法と、設定にあたりいろいろ気をつけないといけないことを感じたので注意点をまとめました。

公式の手順は下記にあります。

AWS Shield アドバンスド の開始方法 - AWS WAF、AWS Firewall Manager、および AWS Shield アドバンスド

また、以前下記ブログでも手順についてまとめていますが、設定方法やUIが結構変更されているので注意です。

AWS Shield Advancedを試してみた

事前準備

設定を行う前に下記情報を整理しておく必要があります。

保護リソースの洗い出し

保護対象には下記4種類を設定することが可能です。

  • CloudFront distribution
  • ELB (Application Load Balancer and Classic Load Balancer)
  • Route53 Hosted Zone
  • Elastic IP (EC2)

CloudFrontとELBは実態の通りなので問題ないですが、Route53は設定されているレコードやサブドメインではなくHosted Zone単位となることと、EC2はインスタンスIDで指定ではなくEIPで指定になります。

リソース数が多い場合や、すべてを保護対象としない場合には各リソースごとARNも合わせて控えておくと楽です。理由は後述します。

上限緩和

AWS Shield Advancedの上限は、上記に上げた各リソース種類ごとに100個までがデフォルトになっています。

AWS Shield アドバンスド の制限 - AWS WAF、AWS Firewall Manager、および AWS Shield アドバンスド

これを超える場合、またはその見込みがある場合には事前にAWSサポートに問い合わせて上限緩和申請を行いましょう。

通知用SNS準備

DDoSを検知した場合などにCloudWatch AlarmsからSNSを経由して通知する設定を行えます。

任意ではありますが、設定しておくことが好ましいと思います。

なお、各リソースのリージョンごとにSNSトピックも必要になりますが、CloudFrontやRoute53はグローバルリソースになるので利用するSNSはバージニア(us-east-1)になります。こちらにもSNSトピックを作成しておきましょう。

設定方法

それでは設定方法を説明します。

まずはマネジメントコンソールからWAF & Shieldにアクセスします。WAFを利用している場合には下記のようにWAFの画面が出てくるので左カラムのShieldメニューを選択します。WAF等を利用していなければGetting Startの画面が出てくるのでそこからShieldを選択する形になると思います。

AWS ShieldのStandardとAdvancedの違いについて説明が出ますのでActivate AWS Shield Advancedを選択します。

月額$3,000かかることや12ヶ月利用するコミット等利用条件が表示されますので同意するためのチェックをすべて入れてActivate serviceを選択します。なお、この段階でActivate自体は走るので、次の画面で設定をキャンセルしてもAWS Shield Advancedは有効化された状態となります。

有効化されたメッセージが表示され、保護するリソースを選択する画面になります。リソースを選択する方法は下記の2種類があります。

  • フォームからリソースを選択する
  • リソースARNを入力する

先述の通りリソース数が多く、しかしすべてのリソースに適用しない場合には一個一個チェックを入れたり外したりしないといけないので、ARNを流し込めると作業が煩雑にならないと思います。

RegionやResource Typeは選択する項目を絞る形になりますが、基本的にはそのままの状態で実際のリソースを選択していく形になると思います。

リソースの選択画面は上記画面の下に表示されていて下記のようになっています。デフォルトではページあたり10リソースですが、100リソースまで一度に表示でき、正直圧巻です。

もしフォームで一部のリソースを選択していくなら、ページ下部のUnselect Allを押して各リソースごとすべてのチェックを外してから、チェックを入れるリソースIDをブラウザの機能で検索し、1つずつチェックを入れていくと誤って設定することはなくなると思います。外すものだけ外していくと、洗い出したリストに漏れがあると予期せぬ結果になります。

ただ、細かくチェックを行う必要が出てくるようならEnter ARNs of resourcesを選択してリストを流し込むほうがいいでしょう。もしくは、awscliやSDKからcreate-protection apiを実行するといいでしょう。

ARNのフォーマットは先述のリファレンスにもありますが、特にEIPはallocation-idのARNになるので、EC2インスタンスのARNではないことに注意です。

必要なものを選択したらProtect selected resourcesを選択します。ここでもボタンを押した段階で設定が保存されるので、次の画面でマネジメントコンソールのセッションが切れても大丈夫です(実話)。

次の画面ではAWS WAFのRate-basedルールを保護対象のリソースに設定できる画面です。AWS ShieldのDDoS保護以外にこれも設定しておくといいよって書いてありますが、大体この設定をされている方はそちらも検討済みだと思いますので、今回はこの画面では特に設定しません。デフォルトでチェックが入っているので外してContinueを選択します。

Rate-basedルールを利用する場合は下記をご参照ください。

[新機能] AWS WAFでレートベースのルールが作成可能になりました [DDoS/Brute force対策]

次の画面ではAWSのDDoS Response Team(DRT)がAWS WAF等を操作してDDoSを止める設定を行う場合に必要な権限を設定する画面です。この設定は任意ではありますが、DRTに守るための設定をしてもらえることはAWS Shield Advancedの大きなメリットのうちのひとつなので、可能な限り設定することが好ましいと思います。設定する場合にはCreate ...を選択して任意のIAM Role名(今回はAWSShieldDRTAccessRole)を入力します。既存のRoleを選択することも可能ですが、個別にサービスロールのアタッチ等も必要になるのでここで作成するほうが楽です。

その下にはVPCフローログを保存しているS3バケットへのアクセスを許可する設定があります。VPCフローログまでDRTに見てほしい場合にはバケット名を入力してAdd bucketします。

一番下はDRTからの連絡に追加で連絡がほしいメールアドレスを追加することが可能です。デフォルトではルートアカウントのメールアドレス宛に連絡が来るので、それ以外のアドレスを登録したい場合にはこちらに登録します。問題なければSave settingsを押して次へ進みます。

次の画面ではDDoSを検知した際のCloudWatch AlarmsとSNSトピックによる通知の設定ができます。リージョンごとまとめて設定することができ、対象リソースについては個別に有効/無効を選択することもできます。必要な項目を選択したらFinishを選択して完了します。

以上で設定が完了です。

設定変更

設定変更はProtected resources画面から可能です。リソースの追加はAdd protected resourcesから、既存リソースのRate-basedルール追加やCloudWatch Alarms + SNSへの追加はManage existing protectionsから可能です。リソースを保護対象から外す場合にはリソースにチェックを入れDelete selected protectionを押します。

まとめ

AWS Shield Advancedを設定する際の方法と注意点についてまとめました。

リソースがたくさんある場合にはセッションタイムアウトが怖いのでARNを洗い出しておいたほうがいいです、本当に。

準備をしっかりして間違いなく設定しましょう。