AWSに戻る

AWS WAF (Web Application Firewall)

AWS WAFとは

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の仕組み

AWS WAFの基本的な仕組みは以下の通りです:

  1. ウェブACLの作成: ウェブアクセスコントロールリスト(Web ACL)を作成し、保護するリソース(CloudFront、ALB、API Gateway、AppSync)に関連付けます。
  2. ルールの定義: ウェブACLにルールを追加して、許可、ブロック、カウント、CAPTCHAなどのアクションを定義します。
  3. トラフィックの評価: リクエストがリソースに到達すると、AWS WAFはウェブACLのルールに基づいてリクエストを評価します。
  4. アクションの実行: 評価結果に基づいて、リクエストを許可、ブロック、カウント、またはCAPTCHA検証を要求します。
  5. ログとメトリクスの記録: リクエストの詳細をログに記録し、CloudWatchメトリクスを生成します。

AWS WAFの処理フロー

クライアント → AWS WAF → ルール評価 → アクション(許可/ブロック/カウント/CAPTCHA) → 保護されたリソース(CloudFront/ALB/API Gateway/AppSync)
        

AWS WAFのコンポーネント

AWS WAFは、以下の主要なコンポーネントで構成されています:

ウェブACL(Web Access Control List)

ウェブ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 WAFは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。

ウェブACLの作成

AWS CLIを使用したウェブACLの作成

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

ルールの追加

IPセットの作成

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

IPセットを使用したルールの追加

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"

ウェブACLのリソースへの関連付け

Application Load Balancerへの関連付け

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

CloudFrontディストリビューションへの関連付け

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 WAFは、一般的なウェブの脆弱性やボットから保護するための事前設定されたマネージドルールグループを提供しています。これらのルールグループは、AWSや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 Marketplaceでは、サードパーティのセキュリティベンダーが提供するマネージドルールグループも利用できます。これらのルールグループは、特定の脅威や業界固有の要件に対応するために設計されています。

AWS WAFのセキュリティ

AWS WAFは、ウェブアプリケーションとAPIを保護するための多層防御の一部として使用できます。以下は、AWS WAFを使用したセキュリティのベストプラクティスです:

AWS WAFとAWS Shieldの統合

AWS WAFは、AWS Shieldと統合して、DDoS攻撃からの保護を強化できます。AWS Shield Standardは、すべてのAWSユーザーに無料で提供される基本的なDDoS保護サービスです。AWS Shield Advancedは、より高度なDDoS保護機能を提供する有料サービスです。

AWS WAFのログ記録とモニタリング

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とルールのメトリクスを提供します。これらのメトリクスを使用して、アラームを設定したり、ダッシュボードを作成したりできます。

CloudWatchアラームの作成

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 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のベストプラクティス

まとめ

AWS WAF(Web Application Firewall)は、一般的なウェブの脆弱性やボットからウェブアプリケーションやAPIを保護するためのマネージドファイアウォールサービスです。AWS WAFを使用することで、SQLインジェクション、クロスサイトスクリプティング(XSS)などの攻撃からアプリケーションを保護し、特定のトラフィックパターンをフィルタリングすることができます。

AWS WAFの主な利点は以下の通りです:

AWS WAFを効果的に活用するには、マネージドルールとカスタムルールの適切な組み合わせ、レート制限と地理的制限の設定、ログの有効化と定期的なレビュー、他のセキュリティサービスとの統合が重要です。また、新しいルールを本番環境に適用する前にテストモードで評価し、定期的にルールの有効性を評価することをお勧めします。