You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AWS WAF或ALB限制特定IP访问/admin.php路径

针对ALB后/admin.php的IP访问控制方案

问题背景

有两台部署在Application Load Balancer(ALB)后的实例,需要仅允许特定IP访问/admin.php脚本。当前Terraform配置的AWS WAF规则为全局生效,需调整为针对指定路径的IP访问控制,同时也接受更简便的ALB原生配置方案。


方案一:调整AWS WAF规则(推荐)

通过修改WAF规则,实现仅当请求路径为/admin.php时才校验客户端IP,其他路径不受限制。以下是调整后的Terraform代码:

resource "aws_wafv2_ip_set" "allowed_ips" {
  name                = "allowed-ips"
  scope               = "REGIONAL"
  description         = "IP set containing allowed IP addresses for /admin.php"
  ip_address_version  = "IPV4"
  addresses           = var.allowed_ip_addresses
}

resource "aws_wafv2_web_acl" "web_acl" {
  name        = "example-web-acl"
  description = "Web ACL restricting /admin.php to allowed IPs"
  scope       = "REGIONAL"
  
  # 默认动作改为允许所有请求(非/admin.php路径无需限制)
  default_action {
    allow {}
  }

  visibility_config {
    cloudwatch_metrics_enabled = false
    metric_name                = "web-acl-metric"
    sampled_requests_enabled   = false
  }

  # 新增规则:拦截访问/admin.php且IP不在允许列表的请求
  rule {
    name     = "block-unauthorized-admin-access"
    priority = 1

    statement {
      and_statement {
        statement {
          # 匹配请求路径为/admin.php
          byte_match_statement {
            field_to_match {
              uri_path {}
            }
            positional_constraint = "EXACTLY"
            search_string         = "/admin.php"
            text_transformation {
              priority = 1
              type     = "NONE"
            }
          }
        }

        statement {
          # 匹配IP不在允许列表内的请求
          not_statement {
            statement {
              ip_set_reference_statement {
                arn = aws_wafv2_ip_set.allowed_ips.arn
              }
            }
          }
        }
      }
    }

    action {
      block {}
    }

    visibility_config {
      cloudwatch_metrics_enabled = false
      metric_name                = "block-unauthorized-admin-access-metric"
      sampled_requests_enabled   = false
    }
  }
}

resource "aws_wafv2_web_acl_association" "load_balancer_acl_association" {
  resource_arn = aws_lb.external_alb.arn
  web_acl_arn  = aws_wafv2_web_acl.web_acl.arn
}

关键调整说明

  • 将WAF默认动作从block改为allow,确保非/admin.php路径的请求正常通行
  • 使用and_statement组合两个条件:请求路径为/admin.php 且 IP不在允许列表中
  • 对符合上述条件的请求执行block动作,实现精准的路径+IP访问控制

方案二:ALB原生配置(局限性说明)

ALB本身无法直接实现路径+IP的组合访问控制:

  • ALB的安全组仅能控制全局IP访问,无法区分请求路径
  • ALB监听器规则支持路径匹配,但不支持IP匹配条件

若要通过ALB原生能力实现,需结合Lambda(或Lambda@Edge)处理请求:

  1. 创建Lambda函数,从X-Forwarded-For头获取客户端IP,校验IP是否在允许列表且请求路径为/admin.php
  2. 在ALB监听器中添加规则,将/admin.php的请求转发至Lambda函数
  3. Lambda函数根据校验结果决定允许或拒绝请求

但该方案配置复杂度高于WAF,且需要额外维护Lambda资源,因此更推荐使用方案一的WAF调整方案。


内容的提问来源于stack exchange,提问作者user12482025

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:10:31