现场是这样的。给 key 配了 4 个办公网出口 IP 的白名单,网络组把出口切到新的 NAT 网关后所有请求返回 403,原文 is not allowed to access this resource,家里用同一个 key 却正常。
中间走过弯路,把「负载均衡回源地址与客户端出口不是一个」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。新 NAT 的出口地址不在白名单里;白名单只支持 IPv4,而新出口优先走 IPv6;运营商给的是动态地址,隔天就变。
上来先看当前实际出口地址
curl -s https://api.ipify.org?format=json
随后把白名单按网段而不是单 IP 配置
curl -X PATCH https://api.openai.com/v1/organization/projects/proj_a/api_keys/key_abc -H "Authorization: Bearer $ADMIN_KEY" -d '{"allowed_cidrs":["203.0.113.0/24"]}'
再往下用新出口再请求一次确认放行
curl -s -o /dev/null -w '%{http_code}\n' https://api.openai.com/v1/models -H "Authorization: Bearer $KEY"
等前面都确认过,再在监控里加一条 403 比例告警
python alert_rule.py --metric api_403_ratio --threshold 0.05 --window 5m
恢复的判定其实很直接。新出口请求返回 200,403 比例回落到零,换回旧网络用宽网段配置也能通过。
出口 IP 变更要提前和网络组对齐,白名单写 /24 比写单个地址稳,IPv6 出口记得单独确认一遍。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
