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可)。※DBにRDSを使うならDNSホスト名を有効化しておく。

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

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

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

ElasticIPで新しいIPアドレスを割り当て(割り当てという言葉が分かりにくいのですが、要は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内のインスタンスをグループ化したもの。通信コストを下げる)はスプレッドで作ります。

※EC2インスタンスを停止すると、service httpd start のapache起動コマンドが再度必要な場合があるので気を付けてください。Linux起動時にhttpdの自動起動を設定してないとなります。

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:80 のリスナーはルールの編集でHTTPSにリダイレクトさせる。この時点ではJSとCSSなどの静的スクリプトファイルは、リダイレクトされないので注意。そして、リスナーの追加でHTTPS:443を作り、ACMの証明書を適用し、ルールでIFに「独自ドメイン」または「www.独自ドメイン」の転送先をELBのターゲットグループに設定する。

※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のテストをしながらダッシュボードログイン可否確認を行い、出来ないものについては理由を調べてアプリケーション側で実装を行う。

※その他

DBにRDSを使う場合、EC2インスタンスにmysql-communityリポジトリのダウンロードとインストールを行ってRDSにMySQlコマンドで接続します。セキュリティグループでMySQL/Auroraプロトコルの3306ポートが開いているかどうか確認も行ってください。

RDS構築でパブリックアクセス(パブリックアクセシビリティ)「なし」を選んでも、エンドポイントは表示されます。そのエンドポイントでEC2から接続できます。

RDSは

  1. パブリックアクセス「なし」
  2. データベース認証「パスワードとIAMデータベース認証」
  3. 暗号化「暗号を有効化」

とすることでセキュアに構築されます(暗号化などは、無料枠で対応できないです)。

AWSの記事でコメントをいただくことがしばしばあるため、コメント機能を有効化しました。
ただ、申し訳ないのですが過去のコメントについては、WPの仕様で基本的に表示できません。
そのうち調べて表示します。お気軽にコメントください。

コメントを残す

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

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