~~NOCACHE~~
~~DISCUSSION~~
## 3.CloudFront-APIGateway構成でのWAF設置場所
CloudFrontのオリジンにAPIGatewayを設定する際、WAFはCloudFrontに設定するか、APIGatewayに設定するか、はたまた両方なのか。
目的は、直接リクエストできてしまうAPIGatewayのセキュリティを強化する構成を考えたい。
以下の3つ構成で考えてみた。案1で良いんじゃないかな・・・うーんうーーん、いや案3か・・?
{{:Aws:WAF:pasted:20210603-120117.png?direct 0x150}}
{{:Aws:WAF:pasted:20210603-112044.png?direct 0x150}}
{{:Aws:WAF:pasted:20210603-120135.png?direct 0x150}}
## 案1:CloudFront-WAF-APIGateway
### 概要
・CloudFrontでなく、APIGatewayのみにWAFを設定する構成。
・CloudFrontのアドレスに攻撃ができてしまうが、APIGatewayの手前でWAFによるWebリクエストの評価が可能
・APIGatewayのアドレスに対してもWAFによるWebリクエストの評価が可能となる。
### 設定
■CloudFront
・カスタムヘッダと値を設定する。(後続の処理で許可/拒否するために利用)
■WAF(リージョン)
・一般的なWebセキュリティ対策を設定
・CloudFrontで設定されたカスタムヘッダと値を評価し、許可/拒否する。
・CloudFrontのIPレンジをホワイトリストに入れ許可/拒否を設定
■APIGateway
・特になし
## 案2:WAF-CloudFront-APIGateway
### 概要
・CloudFrontのみにWAFを設定する構成で、APIGatewayにはWAFを設定しない。
・APIGatewayのアドレスは公開していなければこの構成でも良いが、API-IDを総当たりでリクエストすれば攻撃を受けることもある。(カスタムドメインの導入で、更に攻撃を受けにくくすることも可能)
・APIGateway側である程度の対策はできるが、Webリクエストはできてしまうことと、APIGatewayごとに設定が必要なため運用面が課題となる。
### 設定
■WAF(グローバル)
・一般的なWebセキュリティ対策を設定
■CloudFront
・カスタムヘッダと値を設定する。(後続の処理で許可/拒否するために利用)
■APIGateway
・メソッドリクエストの必須HTTPリクエストヘッダーでカスタムヘッダを指定する。
・リソースポリシーにて、CloudFrontのIPレンジで許可/拒否を設定
## 案3:WAF-CloudFront-WAF-APIGateway
### 概要
・CloudFrontとAPIGatewayの両方にWAFを設定する構成。
・CloudFrontとAPIGatewayどちらのアドレスに対してもWAFによるWebリクエストの評価が可能
・CloudFront経由の場合、WAFで2重で評価されるためWAFに関してコストが約2倍かかることとなる。
(コスト面は案1ではCloudFront、案2ではAPIGatewayに対してWAFによるレート制限がない為、一概に評価ができない)
### 設定
■WAF(グローバル)
・後続でセキュリティ対策をするので、レート制限のみ設定
■CloudFront
・カスタムヘッダと値を設定する。(後続の処理で許可/拒否するために利用)
■WAF(リージョン)
・一般的なWebセキュリティ対策を設定
・CloudFrontで設定されたカスタムヘッダと値を評価し、許可/拒否する。
・CloudFrontのIPレンジをホワイトリストに入れ許可/拒否を設定
■APIGateway
・特になし
## サマリ
・セキュリティ面は案1も案3も同等で、案2が低くなる。※CloudFrontのWAFとAPIGatewayのWAFでは内部エラーが発生した際の違いはある。APIGatewayの方がセキュリティが高い
・コスト面は一概に言えないが案3>案2>案1となると思われる。
・運用面では案2がAPIGatewayごとに設定が必要で、案3がWAFの2重管理となる。
^ 項目 ^ 運用 ^ セキュリティ ^ コスト ^ 備考 ^
| 案1:CF-WAF-APIGW | 〇 | 〇 | ー | CloudFrontはコンテンツ配信しなければコスト面は大した額でないので、運用面の手間が少なく\\ セキュリティも高いこの案で良いんじゃないだろうか。 |
| 案2:WAF-CF-APIGW | × | △ | ー | APIGatewayのアドレス漏洩は考えすぎだろうか、内部の人間ならわかるから考慮すべきですよね。\\ CloudFrontのカスタムヘッダも内部の人間ならわかるから、やはりセキュリティ面が弱いと思う。 |
| 案3:WAF-CF-WAF-APIGW | △ | 〇 | ー | WAFがグローバルとリージョンで2重管理となる。\\ 運用面で設定変更が手間になるが、セキュリティは高いと思われる。レイテンシ・・・は不明 |
ちなみにCloudFrontのIPアドレスは下記から取得できますが、更新されることがあるのでメンテは必要になります。
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.html
### 引用(CloudFrontのWAFとAPIGatewayのWAFの違い)
ごくまれに、AWS WAF で、リクエストを許可またはブロックするかどうかについて、
API Gateway、CloudFront、または Application Load Balancer への応答を遅らせる内部エラーが発生する場合があります。
そのような場合は通常、CloudFront はリクエストを許可またはコンテンツを提供します。
API Gateway および Application Load Balancer は、通常、リクエストを拒否し、コンテンツを提供しません。
[[https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/classic-how-aws-waf-works.html|AWS WAF Classic 仕組み]]
{{tag>AWS CloudFront WAF APIGateway}}