【问题标题】:Outbound IP for Python Azure Function - requests IP not match list of function outbound IPPython Azure 函数的出站 IP - 请求 IP 与函数出站 IP 列表不匹配
【发布时间】: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


【解决方案1】:

根据我们的文档

当在消费计划或高级版上运行的功能应用 如果计划被扩展,则可能会分配新的出站 IP 地址范围。 在使用这些计划中的任何一个时,您可能需要添加整个 数据中心加入许可名单。

如果您需要将函数应用使用的出站 IP 地址添加到白名单,另一种选择是将函数应用的数据中心(Azure 区域)添加到白名单。你可以download a JSON file that lists IP addresses for all Azure data centers。然后找到适用于您的函数应用运行所在区域的 JSON 片段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多