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

AWS API Gateway能否直接引用托管前缀列表控制IP访问?

问题解答

1. 能否直接在API Gateway资源策略中引用托管前缀列表?

不行。AWS API Gateway的资源策略目前不支持直接引用VPC托管前缀列表(Prefix List),aws:SourceIp条件只能接受具体的CIDR地址数组,无法通过前缀列表ARN来动态关联。

2. 替代实现方式

方式一:用Terraform自动同步前缀列表到资源策略

Terraform可以通过数据源获取托管前缀列表的CIDR,自动注入到API Gateway的资源策略中,彻底避免手动复制的麻烦:

示例代码:

# 读取第一组托管前缀列表的CIDR数据
data "aws_vpc_prefix_list" "vpn_gateways" {
  prefix_list_id = "pl-xxxxxx" # 替换为你的前缀列表ID
}

# 读取第二组托管前缀列表的CIDR数据
data "aws_vpc_prefix_list" "internal_hosts" {
  prefix_list_id = "pl-yyyyyy" # 替换为另一组前缀列表ID
}

# 合并多个前缀列表的CIDR到一个数组
locals {
  allowed_cidrs = concat(
    data.aws_vpc_prefix_list.vpn_gateways.cidr_blocks,
    data.aws_vpc_prefix_list.internal_hosts.cidr_blocks
  )
}

# 创建并关联API Gateway资源策略
resource "aws_api_gateway_rest_api_policy" "api_policy" {
  rest_api_id = aws_api_gateway_rest_api.my_api.id # 替换为你的API ID
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = "*"
        Action = "execute-api:Invoke"
        Resource = "${aws_api_gateway_rest_api.my_api.execution_arn}/*"
        Condition = {
          IpAddress = {
            "aws:SourceIp" = local.allowed_cidrs
          }
        }
      }
    ]
  })
}

每次执行terraform apply时,会自动拉取最新的前缀列表CIDR并更新资源策略,无需手动维护。

方式二:使用WAF与API Gateway集成

如果需要更灵活的访问控制,可将托管前缀列表配置到AWS WAF的IP集中,再将WAF规则关联到API Gateway:

  • 创建WAF IP集,选择导入VPC前缀列表的CIDR
  • 创建WAF规则,允许来自该IP集的请求
  • 将WAF WebACL关联到目标API Gateway
    这种方式无需修改API Gateway资源策略,还支持更复杂的过滤逻辑,且IP规则可单独管理。

方式三:通过Lambda授权器动态验证

在API Gateway的请求阶段触发Lambda授权器,Lambda中调用AWS SDK获取托管前缀列表的CIDR,验证请求源IP是否在范围内。不过这种方式会增加请求延迟,适合有特殊访问控制逻辑需求的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:13:17