AWSのアクセスコントロール: CloudFrontからセキュリティグループまでの完全ガイド
はじめに
AWS のリソースにはリダイレクトやルーティングなど、アクセスコントロールが可能なリソースがたくさんあります。
リソースごとに指定できる条件やアクションなども異なり、同じ機能を複数のリソースが提供している場合もあります。
しかし、個人的にはなるべく重複した設定を避けて、全体的な構成から最適なリソースでアクセスコントロールが実行できるようにしたいです。
そのために、それぞれのリソースで指定可能な条件とアクション、アタッチ先をリストに整理しました。
また、実際に AWS でアクセスコントロールする際に、どのリソースを利用すればいいかについても、まとめてみました。
アクセスコントロール可能なリソース一覧
CloudFront を利用した構成を想定して、リソースをまとめました。
Web Server は Nginx, Apache などのミドルウェアを表しています。
AWS リソースではありませんが、アクセスコントロールが可能なリソースであるため、リストに載せています。
Resource | 条件 | アクション | アタッチ先 |
---|---|---|---|
CloudFront | Header, QueryString, Path, Method, IP, Region, etc | リダイレクト、Origin へのルーティング、Lambda 呼び出し、エラーページ返却 | - |
WAF | IP, Header, URI Path, HTTP body, attacks | 通信のカウント、ログ記録、チャレンジ、リダイレクト、許可、503 エラー、ブロック | CloudFront, ELB, etc |
ACL | IP, Port | 通信の拒否 | Subnet, etc |
ELB | Header, Path, Method, IP, Port, QueryString | 固定応答、別 URL へのリダイレクト、TargetGroup への転送 | - |
Security Group | IP, Port, SG | 通信の許可 | EC2, ELB, etc |
Web Server | IP, Port, Header | さまざまなアクションが実行可能で、利用する module などに依存 | - |
それでは、この表をもとに、実際の利用を想定してどのようにアクセスコントロールを設定していくか考えてみます。
CloudFront がある場合
この場合、まずはCloudFront と WAFを中心に組み立てていくようにしましょう。
理由としては、
- 構成上一番外部に位置するリソースなので、VPC に入る前にトラフィックの調整が可能
- WAF と CloudFront の機能が他のリソースよりも高機能で調整が柔軟
という 2 点が挙げられます。
Resource | 役割 |
---|---|
CloudFront | Origin へのルーティング、Lambda 呼び出し、エラーページ返却 |
WAF | 通信のカウント、ログ記録、チャレンジ、リダイレクト、許可、503 エラー、ブロック |
では、その他のリソースの設定は不要であるかと言われると、そうではないです。
CloudFront や WAF でカバーできない部分や、VPC 内部の設定に関しては、下記のリソースで設定を行いましょう。
Resource | 役割 |
---|---|
ACL | 通信の拒否 |
ELB | 固定応答、別 URL へのリダイレクト、TargetGroup への転送 |
Security Group | 通信の許可 |
最終手段として、VPC 内部のリソースでもカバーできない部分に関しては、Web Server の設定を利用するようにしましょう。
Resource | 役割 |
---|---|
Web Server | さまざまなアクションが実行可能で、利用する module などに依存 |
CloudFront がない場合
こちらも変わらず、基本的には WAFを中心に組み立てていきましょう。
Resource | 役割 |
---|---|
WAF | 通信のカウント、ログ記録、チャレンジ、リダイレクト、許可、503 エラー、ブロック |
WAF でカバーできない部分や VPC 内部の設定に関しては、下記のリソースで設定を行うのが良いでしょう。
Resource | 役割 |
---|---|
ACL | 通信の拒否 |
ELB | 固定応答、別 URL へのリダイレクト、TargetGroup への転送 |
Security Group | 通信の許可 |
最終手段として、VPC 内部のリソースでもカバーできない部分に関しては、Web Server の設定を利用す流用にしましょう。
Resource | 役割 |
---|---|
Web Server | さまざまなアクションが実行可能で、利用する module などに依存 |
おわりに
整理しながら気づきましたが、ネットワークのリソースは外から内へ設定を進めていくのがよさそうですね。
こちらもおすすめ
Discussion