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

基于子网IP的AWS API Gateway资源访问策略控制失效求助

我来帮你排查这个问题!你遇到的资源策略不生效,核心原因是无公网IP的EC2实例访问API Gateway时,走的是VPC接口端点,而不是公网路径,这时候API Gateway无法识别到EC2的私有子网IP,所以基于aws:SourceIp的条件根本不会触发。

问题根源

无公网IP的EC2实例要访问AWS API Gateway,必须通过Interface类型的VPC端点实现内网访问。这时候API Gateway收到的请求来自VPC端点,而非EC2的私有IP,你原来基于子网CIDR/IP的aws:SourceIp条件自然无法生效。

正确的资源策略写法

针对你的场景,有两种精准的策略配置方式:

方式1:允许指定VPC内的资源访问(适合两台EC2在同一VPC的不同子网)

如果两台EC2在同一个VPC下的独立子网,直接限制VPC ID即可:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:你的区域ID:你的AWS账号ID:你的API Gateway ID/*/*/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpc": "你的VPC ID"
                }
            }
        }
    ]
}

方式2:允许指定VPC端点访问(更严格,适合多VPC或需精准控制的场景)

如果两台EC2在不同VPC,或者你想只开放给特定的VPC端点,可以用aws:SourceVpcEndpoint条件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:你的区域ID:你的AWS账号ID:你的API Gateway ID/*/*/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpcEndpoint": "你的VPC端点ID"
                }
            }
        },
        // 如果有第二个VPC端点,添加这个Statement
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:你的区域ID:你的AWS账号ID:你的API Gateway ID/*/*/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpcEndpoint": "第二个VPC端点ID"
                }
            }
        }
    ]
}
额外必须配置的步骤

光有资源策略还不够,你得确保VPC端点的配置正确:

  • 为API Gateway创建Interface类型的VPC端点,服务名称格式是com.amazonaws.你的区域.execute-api
  • 确保EC2所在的子网已关联包含VPC端点路由的路由表(路由目标是VPC端点的ID,目标地址是API Gateway服务域名对应的IP范围)
  • 验证EC2的安全组允许出站访问VPC端点的443端口(HTTPS)
  • 资源策略里的Resource ARN必须精准:替换区域(比如us-east-1)、AWS账号ID、API Gateway的ID;/*/*/*表示允许所有API的所有方法,若要限制特定API,可改成更具体的路径(比如API_ID/prod/GET/users)
验证策略是否生效

配置完成后,你可以在EC2上用curl测试API Gateway的内网域名(VPC端点提供的域名),如果能正常访问说明策略生效;用其他VPC内的资源测试则会被拒绝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:13:52