Azure Databricks连接Snowflake:HEX64格式PEM密钥生成及错误解决
问题背景
使用Azure Databricks UI通过PEM密钥连接Snowflake时,触发错误:
summary: IllegalArgumentException: Input PEM private key is invalid, data: {"type":"baseError","stackFrames":
已通过以下命令生成无加密的PKCS8私钥(因Databricks无密码输入字段):openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out privatekey.p8 -nocrypt
但Databricks UI要求HEX64格式的PEM私钥,需完成格式转换并生成对应公钥用于Snowflake用户配置。
解决方案步骤
1. 生成无加密PKCS8私钥(若未生成)
如果还未生成目标私钥,执行以下命令生成无密码的PKCS8格式私钥:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out privatekey.p8 -nocrypt
2. 将PEM私钥转换为HEX64格式
Databricks UI需要的是去掉PEM头、尾及所有换行符的纯HEX编码字符串,执行以下命令完成转换:
# 提取私钥二进制内容并转为HEX格式,输出到文件 openssl pkcs8 -in privatekey.p8 -nocrypt -topk8 -outform DER | xxd -p -c 256 > privatekey_hex.txt
打开privatekey_hex.txt,复制其中的纯HEX字符串,直接粘贴到Databricks UI的密钥输入框即可。
3. 生成对应公钥用于Snowflake用户配置
生成与私钥匹配的公钥,用于Snowflake用户的密钥绑定:
# 从私钥导出PEM格式公钥 openssl rsa -in privatekey.p8 -pubout -out publickey.pub
复制publickey.pub中的完整内容(包含-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----),在Snowflake中执行以下SQL关联目标用户:
ALTER USER YOUR_USER_NAME SET RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----';
将语句中的YOUR_USER_NAME替换为实际Snowflake用户名,公钥内容替换为你生成的内容。
验证要点
- 确保HEX格式私钥无换行、空格或其他多余字符
- Snowflake公钥配置需保留完整的PEM头尾部,无需转换为HEX格式
- 确认Databricks集群网络可正常访问Snowflake的服务端点
内容的提问来源于stack exchange,提问作者lem

