如何通过PyMongo自动添加访问IP至MongoDB Atlas白名单?
解决MongoDB Atlas动态IP白名单问题
PyMongo本身没有内置函数可以直接将IP添加到MongoDB Atlas的白名单——因为IP白名单属于Atlas的管理级配置,不在数据库驱动的核心功能范围内。不过你可以通过MongoDB Atlas的管理API实现自动添加当前IP的需求,具体方案如下:
方案一:通过Atlas管理API自动添加IP
前置准备
- 登录MongoDB Atlas面板,进入「Project Settings」→「API Keys」,创建一个拥有
Network Access或Project Owner权限的API密钥,保存好生成的公钥和私钥。 - 确保生成API密钥时,将当前IP加入该密钥的白名单(否则无法调用管理API)。
实现代码
下面的代码会先获取当前设备的公网IP,再调用Atlas API将其添加到集群的IP白名单,最后连接数据库:
import requests import pymongo as pm def get_public_ip(): """获取当前设备的公网IP""" try: resp = requests.get("https://api.ipify.org") resp.raise_for_status() return resp.text.strip() except Exception as e: print(f"获取公网IP失败: {str(e)}") return None def add_ip_to_atlas_whitelist(project_id, api_public_key, api_private_key, ip): """调用Atlas API添加IP到白名单""" api_url = f"https://cloud.mongodb.com/api/atlas/v1.0/groups/{project_id}/accessList" auth = (api_public_key, api_private_key) payload = { "ipAddress": ip, "comment": "Auto-added by application" } try: resp = requests.post(api_url, json=payload, auth=auth) resp.raise_for_status() print(f"IP {ip} 已成功添加到Atlas白名单") except requests.exceptions.HTTPError as e: # 处理IP已存在的情况 if resp.status_code == 409: print(f"IP {ip} 已在白名单中,无需重复添加") else: print(f"添加IP失败: {str(e)}") if __name__ == "__main__": # 替换为你的Atlas配置信息 ATLAS_PROJECT_ID = "你的项目ID" ATLAS_API_PUB_KEY = "你的API公钥" ATLAS_API_PRIV_KEY = "你的API私钥" MONGO_CONN_URI = "mongodb+srv://user:password@clusterName.ecc.." current_public_ip = get_public_ip() if current_public_ip: add_ip_to_atlas_whitelist(ATLAS_PROJECT_ID, ATLAS_API_PUB_KEY, ATLAS_API_PRIV_KEY, current_public_ip) # 连接数据库 client = pm.MongoClient(MONGO_CONN_URI) db = client.get_database('name_db') print("数据库连接成功")
方案二:临时开放所有IP(仅测试环境)
如果是测试场景,可以在Atlas的「Network Access」页面添加0.0.0.0/0作为白名单条目,这样任何IP都能连接集群。注意:此方法绝对不能用于生产环境,会直接暴露数据库到公网,带来极高的安全风险。
内容的提问来源于stack exchange,提问作者Sim81
相关产品推荐
相关产品推荐

