在GitHub CI/CD的YML中通过Liquibase用私钥连接Snowflake
使用Snowflake私钥通过Liquibase+JDBC连接(GitHub CI/CD场景)
核心参数说明
Snowflake通过RSA私钥认证时,Liquibase需用以下参数,不要用--ssh_key(该参数用于SSH隧道,和Snowflake的RSA私钥认证无关):
--username: 从Azure Key Vault获取的Snowflake用户名--private-key-path: 指向RSA私钥文件的路径(即你查到的rsa_key.p8)- (可选)若私钥设置了密码,需额外添加
--private-key-password参数
GitHub CI中动态创建私钥文件的步骤
CI环境为临时环境,无法提前预存私钥文件,需将从Azure Key Vault拿到的私钥内容动态写入临时文件,步骤如下:
- 在GitHub Actions中配置Azure Key Vault访问权限,将私钥、用户名作为秘密变量拉取到CI环境(比如命名为
SNOWFLAKE_USER和SNOWFLAKE_PRIVATE_KEY) - 运行Liquibase命令前,执行以下命令创建私钥文件并设置正确权限:
# 将私钥内容写入临时文件 echo "${{ secrets.SNOWFLAKE_PRIVATE_KEY }}" > /tmp/rsa_key.p8 # 设置文件权限为600(Snowflake要求私钥文件不能被其他用户读取) chmod 600 /tmp/rsa_key.p8
完整的GitHub Actions YML示例
jobs: liquibase-migrate: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Get secrets from Azure Key Vault uses: azure/get-keyvault-secrets@v1 with: keyvault: "your-keyvault-name" secrets: "snowflake-username, snowflake-private-key" id: get-secrets - name: Create Snowflake private key file run: | echo "${{ steps.get-secrets.outputs.snowflake-private-key }}" > /tmp/rsa_key.p8 chmod 600 /tmp/rsa_key.p8 - name: Run Liquibase migration run: | liquibase update \ --url=jdbc:snowflake://${{ secrets.SNOWFLAKE_ACCOUNT }}.snowflakecomputing.com:443/?warehouse=${{ secrets.SNOWFLAKE_WAREHOUSE }}&db=${{ secrets.SNOWFLAKE_DB }}&schema=${{ secrets.SNOWFLAKE_SCHEMA }} \ --username=${{ steps.get-secrets.outputs.snowflake-username }} \ --private-key-path=/tmp/rsa_key.p8
注意事项
- JDBC URL中的端口一般为443(Snowflake默认HTTPS端口),若你的配置是XXX,请确认是否正确
- 确保Azure Key Vault导出的私钥为PEM格式的PKCS#8文件(后缀.p8),若为其他格式需先转换(比如从PKCS#1转成PKCS#8)
- 私钥文件权限必须严格设为600,否则Snowflake会拒绝读取,导致认证失败
内容的提问来源于stack exchange,提问作者sbs
相关产品推荐
相关产品推荐

