狠狠撸

狠狠撸Share a Scribd company logo
AWSで自作CGIをサーバレス実装
してみた ?その2~
株式会社クリック
夏目 祐樹
(NATSUME YUTA)
自己紹介
? 夏目 祐樹 (ナツメ ユウタ)
? HN: 斗山新一、水菱啓、ルシフ
? Twitter: @sinofseven
? Facebook: yuta.natsume.5
? もうすぐ新卒二年目になる新人SE
? 副業で、音ゲーマーと
プロデューサーと提督をやっている
自作CGIのサーバレス実装
間に合いませんでした
AWS WAF
? Web Application Firewall
? Webアプリケーション(Cloud Front)を対象とした
悪意あるリクエストを検出しブロックする。
? ACL (Access Control List), Rule, Condition
の三つの要素から成り立つ。
WAF 全体イメージ
Cloud Front WAF
ACL Rule Condition
cf01
cf02
cf03
ACL02
ACL01 Rule01
Rule02
Rule03
Condition01
Condition02
Condition03
Condition04
Condition (1/2)
? Ruleを構築するための条件(Condition)。
? 種類は次の4つ。
?IP addresses
CIDR形式(172.31.51.22/32 とか)
?SQL injection
?String matching
?Size constrains
? 各Conditionの中で複数のFilter(条件)を持つことができる(たぶんOR結合)。
? IP addresses以外は文字列にある程度の変更ができる。
小文字に変換したり、URIデコード
Condition (2/2) String matching & Size constraints
< Strimg matching >
? 比較する文字列は5つから選択。
?URI
?HTTP method
?Query string
?Header
?Body
? Base64エンコード済みでも使える。
? 文字列の比較は、完全、部分、前方後方一致、単語を含むから選択できる。
< Size constraints >
? サイズを確認できる対象は5つ(String matchingと同じ)
? サイズの比較は, ==, !=, <, <=, >, >=ができる(基本的な比較演算子はできる)。
Rule
? Ruleと言いながら結局は条件だったりする。
来たリクエストが指定したConditionを満たすか満たさないかしか判断できない。
(判断して指定した内容を満たせはTRUEを返すイメージ)
? Conditionは種類にかかわらず複数指定できる。
(これはAnd結合される)
ACL
? これをCloudFrontに紐付ける
? Ruleを満たすリクエストを”Allow”, “Block”, “Count”するか指定する(Action)。
? RuleにはOrderがあって、範囲の広さなどによって順番を調整する、たぶん。
IP addressのブロックは、狭いallow, 広いdenyの順番で書くってどっかにあった。
? Ruleを満たさないリクエストに対するDefault Actionを指定する。
Allow all requests that don‘t match any rules: 満たさないリクエスト許可
Block all requests that don’t match any rules: 満たさないリクエスト拒否
? CloudWathのメトリクスが自動的に登録されるのでログをみることができる。
まとめ
? WAFはACLとRuleとConditionで構成される。
? CloudFrontはACLと紐付ける。
? Conditionは複数のFilterで構成され、OR条件で結合する。たぶん。
? Ruleは複数のConditionで構成され、AND条件で結合する。
? ACLは複数のRuleで構成され、オーダーとActionを指定し使用する。
(オーダーの詳細は未検証)
? WAFのログはCloudWatchで見れる。たぶん。
? ACL一つにつき$5, ACLのRule一つにつき$1, 1 million Requestにつき$0.6、
個人的にしようするには若干高い。
(ACLに紐付けてないRuleや複数のACLに紐付けたRuleの料金はどうなるんだ?)
? 使ってみると、非常に使いやすい。

More Related Content

AWSで自作CGIをサーバレス実装してみた ~その2~