API Gateway使用x-api-key请求头时配额限制未生效问题排查
x-api-key导致Google API网关配额失效的原因
配置详情
配额与指标配置
x-google-management: metrics: - name: "read-requests" displayName: "Read requests" valueType: INT64 metricKind: DELTA quota: limits: - name: "read-limit" metric: "read-requests" unit: "1/min/{project}" values: STANDARD: 3
API路径配置
paths: /v1/foo: get: summary: foo Data operationId: fooData x-google-backend: path_translation: APPEND_PATH_TO_ADDRESS address: ${PUB_API_FNC_URL} x-google-quota: metricCosts: "read-requests": 1
该API网关路径的后端为Cloud Function
问题描述
当请求中添加x-api-key请求头时,无论头中值是什么,配额限制均未生效;但不添加该请求头时,配额可正常工作。
补充细节:OpenAPI规范中未配置任何安全定义,且x-api-key未在配置中与任何项目显式关联。
原因分析
当请求携带x-api-key头时,Google API网关会默认将请求归属到该API密钥绑定的GCP项目,而非网关所在的默认项目。你的配额配置是以{project}为维度的按项目配额,但你既没为这个API密钥对应的项目设置配额限制,也没配置安全规则验证密钥有效性——这就导致网关跳过了默认项目的配额校验,直接放行请求。
具体逻辑:
- 不带
x-api-key时,请求归属网关所在项目,触发你配置的STANDARD配额规则(3次/分钟)。 - 带
x-api-key时,请求被归属到密钥关联的项目,而该项目无对应配额限制,因此配额校验失效,请求无限制通过。
另外,因为你没配置安全定义,网关不会验证x-api-key的合法性,哪怕是无效密钥,也会触发上述项目归属逻辑,导致配额不生效。
内容的提问来源于stack exchange,提问作者Alex Portnoy
相关产品推荐
相关产品推荐

