【发布时间】:2021-05-21 00:51:19
【问题描述】:
我在 Azure 上创建了调用外部 API 服务的 Python 函数,该服务仅允许访问白名单 IP。
根据 Microsoft 文档 (https://docs.microsoft.com/en-us/azure/azure-functions/ip-addresses),我找到了所有 OutboundIPAddresses 和 PossibleOutboundAddresses 并将它们全部列入白名单。尽管 IP 已被列入白名单,但我仍不断收到来自服务的 403 Forrbiden 错误。
我还通过在函数中添加以下代码来验证请求的 IP 地址:
ip = requests.request('GET','https://api.ipify.org').text logging.info('Request send from IP: {}'.format(ip))
似乎实际的出站 IP 地址是不同的,然后在 OutboundIPAddress 和 PossibleOutboundAddresses 列表中指定。
感谢您的帮助。
【问题讨论】:
-
是否有其他形式的身份验证或是否对选定的 IP 开放?
-
还有 user:password 身份验证,但是如果用户或密码不正确,服务会返回另一个错误代码(功能应用程序可以在端点不需要白名单的服务阶段环境中正常工作)。我要求提供者验证服务日志 - 结果表明从功能应用发送的请求具有随机 IP 地址。
-
切换到具有确定性出站 IP 分配的专用应用服务计划。然而,这个 IP 过滤的东西在云中非常脆弱,我不会碰它。相反,要么使用 OAuth 向它调用的端点(可能是客户端凭据流)验证你的函数,要么使用静态的东西,比如存储在应用程序设置中的秘密,你通过 HTTP 标头发送。然后检查标头的值,如果它通过验证,则处理请求。
标签: python azure networking azure-functions