You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PyMongo自动添加访问IP至MongoDB Atlas白名单?

解决MongoDB Atlas动态IP白名单问题

PyMongo本身没有内置函数可以直接将IP添加到MongoDB Atlas的白名单——因为IP白名单属于Atlas的管理级配置,不在数据库驱动的核心功能范围内。不过你可以通过MongoDB Atlas的管理API实现自动添加当前IP的需求,具体方案如下:

方案一:通过Atlas管理API自动添加IP

前置准备

  1. 登录MongoDB Atlas面板,进入「Project Settings」→「API Keys」,创建一个拥有Network Access或Project Owner权限的API密钥,保存好生成的公钥和私钥。
  2. 确保生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:36:17