AWS WAF OWASP Top10 2017 テンプレート実装手順(ELBのALB利用)

OWASP Top 10 2017 AWS WAF

 各AWSリソースへの命名ルールが結構大事です。AWSリソースの識別に役立ちます。プロジェクトの接頭辞を決めておくことをおすすめします。セキュリティグループのdescriptionには、プロトコルとポートを明記すると便利です。

AWS WAFのCondition(コンデイション)で自己IPを登録する時、サブネットマスクの値は/32を使います。それ以外は設定できませんのでご注意ください。

AWS WAFで特定リクエストのフィルタリングとカウント、ログ管理を行い、独自にルール運用を行う事も可能です。

この記事はCloudFrontではなく、ELBのALBを使ったAWS WAF構築の手順となります。ACMによるSSL/TLSも含みます。

以下、SlideShareにて、

OWASP Top10 2017 AWS WAF テンプレートについて 〜WordPressの場合 〜 

もご参考ください。

 

以下より手順です。

 

プロジェクト用のIAMグループとIAMユーザーを作る

VPCを作る(デフォルトVPC可)

サブネットを2つ以上で作る(ELB/ALB使う場合、サブネットは必ず2つ以上必要です。冗長化などを考える場合、CIDRとサブネットは余裕のある設計にする事を強くお勧めします)

EC2インスタンス用セキュリティグループを作る

独自ドメインを準備(Freenomを使えば12ヶ月無料です)

ElasticIPで新しいIPアドレスを割り当て、Route53のAレコードを新しいIPアドレスに設定。独自ドメインのNSをRoute53に設定。Route53を使わないと、ELBを使えないので注意(CDNのAWS CloudFrontでもAWS WAFを使えます)。

※NI(ネットワークインターフェイス)をEC2構築の前に作ると、EC2構築時に、作っておいたNIでは自動割当パブリックIPを付けられないので、ElasticIPを使わない方は気を付けてください。

Aレコードはwww有りと無し両方で作ります。

VPCに付けるインターネットゲートウェイがあるか?プロジェクト用のVPC IDになっているか?などを確認しておく。

KMSでEC2インスタンス向けキーペアを作る。EC2向けIAMロールを作る。

EC2インスタンス用セキュリティグループを作る

※http、https、sshの3種インバウンドを設定しておく。

10

EC2インスタンスを作る

CloudWatchは有効化をおすすめします。また、プレイスメントグループ(単一AZ内のインスタンスをグループ化したもの。通信コストを下げる)はスプレッドで作ります。

11

EC2インスタンスにLAMP構築、Wordpressインストール

12

IGW(インターネットゲートウェイ)をVPCにアタッチ。IGWとlocalをtargetとしたルートテーブルをVPCに設定

13

ACMでSSL証明書を作る。Route53のCNAMEで「DNSの検証」を行いSSLを実装。

14

ALB用のセキュリティグループを作っておく(httpとhttpsを開けておく)

15

EC2インスタンスのELBでALBを作り、Route53でIPアドレスAレコードを削除、ALIASをALBに設定。

ALBでHTTPのリスナーはルールの編集でHTTPSにリダイレクトさせる。この時点ではJSとCSSなどの静的スクリプトファイルは、リダイレクトされないので注意。ELBのUIは、リスナーのルール変更画面まで辿りつきにくいです。UIがわかりにくいです。

16

IPv4アドレスとパブリックDNSによるhttp/https通信を遮断

17

S3用のIAMロールを作る

18

S3にOWASP Top 10 AWS WAF ymlテンプレートをアップロード、S3のURLコピー

19

CloudFormation用のIAMロールを作る

20

CloudFormationで OWASP Top10 のスタックを作る。S3のURLを貼り付ける。

21

WAF&Shield→AWS WAFweb ACLsFilterで該当するリージョンを選択RulesResoucesでALBを選択してAWS WAFとALBを紐付け

22

条件(Condition)に会社などの固定IP、stringでwp-admin、wp-login.phpを登録。Ruleに追加。WebACLsでallow設定にする。

※ダッシュボードログインRLを独自に変更している場合は、stringも独自に変えてください。

23

web ACLで、RulesのAllowとBlockのテストをしながらダッシュボードログイン可否確認を行い、出来ないものについては理由を調べてアプリケーション側で実装を行う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください