AWS WAF(Web Application Firewall)は、一般的なウェブの脆弱性やボットからウェブアプリケーションやAPIを保護するためのマネージドファイアウォールサービスです。AWS WAFを使用することで、SQLインジェクション、クロスサイトスクリプティング(XSS)などの攻撃からアプリケーションを保護し、特定のトラフィックパターンをフィルタリングすることができます。AWS WAFは、Amazon CloudFront、Application Load Balancer、Amazon API Gateway、AWS AppSyncなどのAWSリソースと統合して使用できます。
AWS WAFの基本的な仕組みは以下の通りです:
クライアント → AWS WAF → ルール評価 → アクション(許可/ブロック/カウント/CAPTCHA) → 保護されたリソース(CloudFront/ALB/API Gateway/AppSync)
AWS WAFは、以下の主要なコンポーネントで構成されています:
ウェブACLは、AWS WAFの中心的なコンポーネントで、保護するリソースに関連付けられます。ウェブACLには、トラフィックを検査するためのルールと、それらのルールに一致するリクエストに対して実行するアクションが含まれています。
ルールは、ウェブリクエストのどの部分を検査するか、どのような条件で一致とみなすか、一致した場合にどのようなアクションを実行するかを定義します。ルールには、以下のタイプがあります:
ルールステートメントは、ウェブリクエストのどの部分を検査するか、どのような条件で一致とみなすかを定義します。ルールステートメントには、以下のタイプがあります:
ステートメントタイプ | 説明 | 例 |
---|---|---|
文字列一致 | リクエストの特定の部分に特定の文字列が含まれているかどうかを検査 | URLパスに「admin」が含まれているかどうか |
正規表現一致 | リクエストの特定の部分が正規表現パターンに一致するかどうかを検査 | クエリ文字列が特定のパターンに一致するかどうか |
地理的一致 | リクエストの送信元の国を検査 | リクエストが特定の国から送信されたかどうか |
IPセット一致 | リクエストの送信元IPアドレスが特定のIPセットに含まれているかどうかを検査 | リクエストが許可または禁止されたIPアドレスから送信されたかどうか |
サイズ制約 | リクエストの特定の部分のサイズを検査 | リクエストボディが特定のサイズを超えているかどうか |
SQLインジェクション | リクエストにSQLインジェクションコードが含まれているかどうかを検査 | クエリ文字列にSQLインジェクションコードが含まれているかどうか |
クロスサイトスクリプティング | リクエストにXSSコードが含まれているかどうかを検査 | リクエストボディにXSSコードが含まれているかどうか |
論理演算子 | 複数のステートメントを組み合わせて複雑な条件を作成 | AND、OR、NOTを使用して複数の条件を組み合わせる |
レートベース | 特定の期間内に送信されるリクエストの数を制限 | 5分間に100リクエストを超えるIPアドレスをブロック |
アクションは、ルールに一致するリクエストに対して実行される操作を定義します。AWS WAFは、以下のアクションをサポートしています:
AWS WAFは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。
aws wafv2 create-web-acl \
--name my-web-acl \
--scope REGIONAL \
--default-action Allow={} \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=my-web-acl-metric \
--region us-west-2
aws wafv2 create-ip-set \
--name my-ip-set \
--scope REGIONAL \
--ip-address-version IPV4 \
--addresses 192.0.2.0/24 198.51.100.0/24 \
--region us-west-2
aws wafv2 update-web-acl \
--name my-web-acl \
--scope REGIONAL \
--id abcdef12-3456-7890-abcd-ef1234567890 \
--default-action Allow={} \
--rules '[
{
"Name": "block-ip-rule",
"Priority": 1,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-west-2:123456789012:regional/ipset/my-ip-set/abcdef12-3456-7890-abcd-ef1234567890"
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "block-ip-rule-metric"
}
}
]' \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=my-web-acl-metric \
--region us-west-2 \
--lock-token "9e92ea24-5c73-4c13-a5c3-0d1e5EXAMPLE"
aws wafv2 update-web-acl \
--name my-web-acl \
--scope REGIONAL \
--id abcdef12-3456-7890-abcd-ef1234567890 \
--default-action Allow={} \
--rules '[
{
"Name": "AWS-AWSManagedRulesCommonRuleSet",
"Priority": 0,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet"
}
},
"OverrideAction": {
"None": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "AWS-AWSManagedRulesCommonRuleSet"
}
}
]' \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=my-web-acl-metric \
--region us-west-2 \
--lock-token "9e92ea24-5c73-4c13-a5c3-0d1e5EXAMPLE"
aws wafv2 associate-web-acl \
--web-acl-arn arn:aws:wafv2:us-west-2:123456789012:regional/webacl/my-web-acl/abcdef12-3456-7890-abcd-ef1234567890 \
--resource-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-alb/1234567890abcdef \
--region us-west-2
aws wafv2 associate-web-acl \
--web-acl-arn arn:aws:wafv2:us-east-1:123456789012:global/webacl/my-web-acl/abcdef12-3456-7890-abcd-ef1234567890 \
--resource-arn arn:aws:cloudfront::123456789012:distribution/E1234EXAMPLE
AWS WAFは、一般的なウェブの脆弱性やボットから保護するための事前設定されたマネージドルールグループを提供しています。これらのルールグループは、AWSやAWSマーケットプレイスのパートナーによって作成および維持されています。
AWSが提供するマネージドルールグループには、以下のようなものがあります:
ルールグループ | 説明 |
---|---|
AWSManagedRulesCommonRuleSet | 一般的なウェブの脆弱性から保護するための基本的なルールセット |
AWSManagedRulesAdminProtectionRuleSet | 管理ページへのアクセスを保護するためのルールセット |
AWSManagedRulesKnownBadInputsRuleSet | 既知の悪意のある入力パターンから保護するためのルールセット |
AWSManagedRulesSQLiRuleSet | SQLインジェクション攻撃から保護するためのルールセット |
AWSManagedRulesLinuxRuleSet | Linuxオペレーティングシステムの脆弱性を悪用する攻撃から保護するためのルールセット |
AWSManagedRulesWindowsRuleSet | Windowsオペレーティングシステムの脆弱性を悪用する攻撃から保護するためのルールセット |
AWSManagedRulesPHPRuleSet | PHPアプリケーションの脆弱性を悪用する攻撃から保護するためのルールセット |
AWSManagedRulesWordPressRuleSet | WordPressアプリケーションの脆弱性を悪用する攻撃から保護するためのルールセット |
AWSManagedRulesAmazonIpReputationList | AWSの脅威インテリジェンスに基づく悪意のあるIPアドレスからの保護 |
AWSManagedRulesAnonymousIpList | 匿名プロキシ、VPN、Torノードなどの匿名IPアドレスからの保護 |
AWSManagedRulesBotControlRuleSet | 悪意のあるボットからの保護 |
AWS Marketplaceでは、サードパーティのセキュリティベンダーが提供するマネージドルールグループも利用できます。これらのルールグループは、特定の脅威や業界固有の要件に対応するために設計されています。
AWS WAFは、ウェブアプリケーションとAPIを保護するための多層防御の一部として使用できます。以下は、AWS WAFを使用したセキュリティのベストプラクティスです:
AWS WAFは、AWS Shieldと統合して、DDoS攻撃からの保護を強化できます。AWS Shield Standardは、すべてのAWSユーザーに無料で提供される基本的なDDoS保護サービスです。AWS Shield Advancedは、より高度なDDoS保護機能を提供する有料サービスです。
AWS WAFは、ウェブリクエストのログ記録とモニタリングのための機能を提供しています:
AWS WAFのログには、ウェブACLが評価したすべてのリクエストの詳細情報が含まれています。ログは、Amazon S3、Amazon CloudWatch Logs、Amazon Kinesis Data Firehoseに送信できます。
aws wafv2 put-logging-configuration \
--resource-arn arn:aws:wafv2:us-west-2:123456789012:regional/webacl/my-web-acl/abcdef12-3456-7890-abcd-ef1234567890 \
--logging-configuration 'ResourceArn=arn:aws:firehose:us-west-2:123456789012:deliverystream/aws-waf-logs,RedactedFields=[{SingleHeader={Name=authorization}}]' \
--region us-west-2
AWS WAFは、CloudWatchと統合して、ウェブACLとルールのメトリクスを提供します。これらのメトリクスを使用して、アラームを設定したり、ダッシュボードを作成したりできます。
aws cloudwatch put-metric-alarm \
--alarm-name waf-blocked-requests-high \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--metric-name BlockedRequests \
--namespace AWS/WAFV2 \
--period 300 \
--statistic Sum \
--threshold 100 \
--alarm-actions arn:aws:sns:us-west-2:123456789012:my-topic \
--dimensions "Name=WebACL,Value=my-web-acl" "Name=Region,Value=us-west-2" "Name=Rule,Value=block-ip-rule"
AWS WAFは以下のようなユースケースに適しています:
AWS WAFは他のAWSサービスと統合して、より強力なセキュリティソリューションを構築できます:
サービス | 統合の利点 |
---|---|
Amazon CloudFront | エッジでのウェブアプリケーションの保護 |
Application Load Balancer | リージョンレベルでのウェブアプリケーションの保護 |
Amazon API Gateway | RESTおよびWebSocket APIの保護 |
AWS AppSync | GraphQL APIの保護 |
AWS Shield | DDoS攻撃からの保護 |
Amazon CloudWatch | メトリクスのモニタリングとアラート |
Amazon S3 | ログの保存と分析 |
Amazon Kinesis Data Firehose | リアルタイムログの処理と分析 |
AWS Lambda | カスタムレスポンスの生成とログの処理 |
AWS WAF(Web Application Firewall)は、一般的なウェブの脆弱性やボットからウェブアプリケーションやAPIを保護するためのマネージドファイアウォールサービスです。AWS WAFを使用することで、SQLインジェクション、クロスサイトスクリプティング(XSS)などの攻撃からアプリケーションを保護し、特定のトラフィックパターンをフィルタリングすることができます。
AWS WAFの主な利点は以下の通りです:
AWS WAFを効果的に活用するには、マネージドルールとカスタムルールの適切な組み合わせ、レート制限と地理的制限の設定、ログの有効化と定期的なレビュー、他のセキュリティサービスとの統合が重要です。また、新しいルールを本番環境に適用する前にテストモードで評価し、定期的にルールの有効性を評価することをお勧めします。