从AWS Glue连接本地MongoDB遇SSL证书验证失败问题求助
解决AWS Glue连接本地MongoDB的SSL证书验证问题
问题核心
报错提示PKIX路径构建失败,本质是AWS Glue的Java运行环境未信任本地MongoDB的SSL证书,而Glue控制台创建MongoDB连接时无证书上传入口,需通过自定义脚本或环境配置解决。
可行解决方案
方案1:测试环境临时禁用证书验证
仅用于测试连通性,生产环境严禁使用:
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) # 配置MongoDB连接选项,添加证书验证跳过参数 mongo_conn_options = { "uri": "mongodb://<your-mongo-address>:27017", "database": "<target-db>", "collection": "<target-collection>", "ssl": "true", "sslAllowInvalidCertificates": "true", "sslInvalidHostNameAllowed": "true" } # 读取MongoDB数据 df = glueContext.create_dynamic_frame.from_options( connection_type="mongodb", connection_options=mongo_conn_options )
方案2:生产环境导入证书到Glue信任存储
- 导出本地MongoDB CA证书:获取集群使用的CA证书(
.pem或.crt格式)。 - 上传证书到S3:将证书文件上传至私有S3桶,确保Glue作业角色拥有该桶的读取权限。
- 编写初始化脚本:创建Shell脚本
install_mongo_cert.sh,内容如下:
#!/bin/bash # 从S3下载证书到临时目录 aws s3 cp s3://<your-bucket-path>/<cert-file>.pem /tmp/ # 将证书导入Glue默认Java信任存储 keytool -import -trustcacerts -alias mongodb-ca -file /tmp/<cert-file>.pem -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt
- 配置Glue作业:在作业的「安全配置、脚本库和作业参数」中,将「初始化脚本」设置为S3上的脚本路径。
- 修改Glue脚本:仅保留
ssl: "true"参数,移除证书跳过相关配置。
方案3:自定义Glue连接器(进阶复用)
若需多作业复用证书配置,可基于官方MongoDB连接器源码改造:
- 将CA证书添加到连接器项目资源目录
- 修改代码逻辑,在初始化时加载自定义证书到信任存储
- 编译打包为JAR文件,上传至S3后注册为Glue自定义连接器
额外校验项
- 确认Glue作业的VPC、子网、安全组配置可访问本地MongoDB的27017端口
- 确认本地MongoDB的SSL证书域名/IP与连接URI匹配
- 验证Glue角色具备VPC访问、S3读取(方案2需要)权限
内容的提问来源于stack exchange,提问作者Raja
相关产品推荐
相关产品推荐

