Azure环境Python Notebook调用外部API失败,需哪些前置配置?
解决Azure环境中Python Notebook调用外部REST API的信任及连接问题
针对你在Azure环境下通过Python Notebook调用Splunk、ServiceNow CMDB等REST API失败的问题,结合你怀疑的“请求未被信任”点,下面是具体的排查方向和对应的Azure配置操作:
1. 先确认Azure网络层面的放行配置
如果你的Notebook运行在Azure托管资源(如Azure VM、Azure ML Compute实例)上,首先排查网络是否允许出站请求:
- NSG(网络安全组)出站规则:登录Azure门户,找到对应资源关联的NSG,添加出站规则,允许访问目标API的端口(比如Splunk默认8089,ServiceNow默认443),目标可以是具体IP段或域名。
- Azure防火墙/代理:若企业Azure环境部署了Azure防火墙或强制代理,需要:
- 在Python代码中配置代理信息:
import requests proxies = { 'http': 'http://your-azure-proxy-address:port', 'https': 'http://your-azure-proxy-address:port' } # 示例调用ServiceNow resp = requests.get('https://your-servicenow-instance/api/now/table/cmdb_ci', proxies=proxies) - 在Azure防火墙中添加应用/网络规则,放行目标API的域名或IP地址。
- 在Python代码中配置代理信息:
2. SSL证书信任问题(对应你怀疑的“请求未被信任”)
这是最常见的原因,尤其是目标服务使用自签名或企业内部CA签发的证书时:
- 把企业CA证书导入Python环境的信任存储,或者在requests调用时直接指定证书路径:
# 示例调用Splunk时指定CA证书 resp = requests.get('https://your-splunk-instance/services/search/jobs', verify='/path/to/enterprise-ca.crt') - 若使用Azure托管Notebook(如Azure ML),可设置环境变量
REQUESTS_CA_BUNDLE指向证书文件,让requests全局信任该证书。
3. Azure AD身份验证配置(若目标服务集成Azure AD)
如果Splunk/ServiceNow通过Azure AD做身份验证,直接调用API需要先获取Azure AD令牌:
- 使用Azure Identity库获取令牌,再携带到请求头:
import requests from azure.identity import DefaultAzureCredential # 获取令牌,替换为目标服务的Azure AD受众 cred = DefaultAzureCredential() token = cred.get_token("https://your-service-aad-audience/.default") headers = { 'Authorization': f'Bearer {token.token}', 'Content-Type': 'application/json' } resp = requests.get('https://target-api-endpoint', headers=headers) - 确保你的身份(VDI登录身份或Notebook托管身份)在Azure AD中被授予了访问目标服务的权限,需在Azure AD应用注册中配置对应的API权限并同意。
4. 快速定位问题的小技巧
先捕获requests的详细错误信息,精准定位问题类型:
import requests try: resp = requests.get('https://target-api-url') resp.raise_for_status() except Exception as e: print(f"错误详情:{type(e).__name__} - {str(e)}")
比如SSLError指向证书问题,ConnectionError指向网络/代理问题,401 Unauthorized指向身份验证问题。
内容的提问来源于stack exchange,提问作者Rishav kumar
相关产品推荐
相关产品推荐

