You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MongoDB Compass通过IAM认证连接AWS DocumentDB时授权失败问题求助

MongoDB Compass通过IAM认证连接AWS DocumentDB时授权失败问题求助

我现在遇到个头疼的问题:用MongoDB Compass通过IAM认证连接AWS DocumentDB一直报Authorization Failure,但用mongosh却能正常连上,实在搞不懂哪里出问题了,想求助大家帮我排查下细节。

我的环境与前置操作

  • 身份凭证:通过AWS Identity Center获取的临时访问密钥(带会话令牌),已经在终端导出了环境变量:
    export AWS_ACCESS_KEY_ID="ASIAXAMPLEKEY123456"
    export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
    export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEMz//////..."
    
  • DocumentDB集群:连接地址为docdb-cluster.cluster-abc123.us-east-1.docdb.amazonaws.com:27017,需TLS加密,CA证书文件已准备完成
  • 工具版本:MongoDB Compass v1.49.1(MacOS系统),mongosh可正常连接集群

能成功的操作(mongosh连接)

用以下命令可以毫无障碍地连接到DocumentDB集群:

mongosh "mongodb://docdb-cluster.cluster-abc123.us-east-1.docdb.amazonaws.com:27017" \
--authenticationMechanism=MONGODB-AWS \
--authenticationDatabase='$external' \
--tls \
--tlsCAFile=<cert>

全部失败的Compass连接尝试

不管用哪种方式启动或配置Compass,最终都触发Authorization Failure

  1. 直接打开Compass,使用和mongosh完全相同的连接字符串(依赖终端已导出的环境变量,未手动输入密钥),连接失败
  2. 手动在Compass的AWS IAM认证区域填写访问密钥、密钥ID和会话令牌,同样报授权失败
  3. 尝试论坛看到的命令行启动Compass的方式,依然失败:
    先编码会话令牌:
    ENCODED_TOKEN=$(node -p "encodeURIComponent(\"${AWS_SESSION_TOKEN}\")")
    
    再启动Compass:
    /Applications/MongoDB\ Compass.app/Contents/MacOS/MongoDB\ Compass \
    --username="${AWS_ACCESS_KEY_ID}" \
    --password="${AWS_SECRET_ACCESS_KEY}" \
    --trustedConnectionString \
    "mongodb://docdb-cluster.cluster-abc123.us-east-1.docdb.amazonaws.com:27017/?authMechanism=MONGODB-AWS&authSource=\$external&tls=true&tlsCAFile=/Users/username/global-bundle.pem&replicaSet=rs0&retryWrites=false&authMechanismProperties=AWS_SESSION_TOKEN:${ENCODED_TOKEN}"
    

我的疑问

  • 为什么mongosh能正常认证,Compass却不行?两者用的是同一套凭证和连接参数
  • 有没有针对临时会话令牌的特殊处理是Compass需要但我没做的?
  • 是不是Compass的MONGODB-AWS认证机制对临时凭证的支持有什么隐藏的坑?

火山引擎 最新活动