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

GitLab CI/CD中如何通过.gitlab-ci.yml向Python脚本传递Vault数据库凭证?

GitLab CI/CD中从Vault传递凭证到Python脚本的最佳方式

方案1:利用GitLab CI原生Vault集成注入环境变量

这是最贴合GitLab CI最佳实践的方式,无需额外安装工具,安全且配置简洁。

  1. 先在GitLab项目中配置Vault连接(路径:项目设置 > CI/CD > 变量 > Vault),关联对应的Vault实例和密钥路径。
  2. 在.gitlab-ci.yml中直接引用Vault中的密钥作为环境变量:
stages:
  - run_script

run_db_script:
  stage: run_script
  image: python:3.11
  variables:
    DB_USER: ${VAULT_PATH/db/creds/readonly/username}
    DB_PASSWORD: ${VAULT_PATH/db/creds/readonly/password}
  script:
    - pip install psycopg2-binary  # 示例依赖,根据你的数据库调整
    - python your_db_script.py
  1. Python脚本中直接读取环境变量:
import os
import psycopg2

conn = psycopg2.connect(
    user=os.getenv("DB_USER"),
    password=os.getenv("DB_PASSWORD"),
    host="your-db-host",
    port="5432",
    dbname="your-db-name"
)

方案2:通过Vault CLI在CI阶段获取凭证

如果无法使用GitLab原生Vault集成,可以在CI环境中安装Vault CLI,手动登录并提取凭证:

  1. 在.gitlab-ci.yml的before_script中完成Vault登录和凭证提取:
stages:
  - run_script

run_db_script:
  stage: run_script
  image: python:3.11
  before_script:
    - apt-get update && apt-get install -y unzip
    - wget https://releases.hashicorp.com/vault/1.15.0/vault_1.15.0_linux_amd64.zip
    - unzip vault_1.15.0_linux_amd64.zip && mv vault /usr/local/bin/
    - vault login -method=gitlab role=your-vault-role jwt=$CI_JOB_JWT
    - export DB_USER=$(vault read -field=username db/creds/readonly)
    - export DB_PASSWORD=$(vault read -field=password db/creds/readonly)
  script:
    - pip install psycopg2-binary
    - python your_db_script.py
  1. Python脚本读取环境变量的方式和方案1一致。

方案3:Python脚本直接调用Vault API(不推荐)

让Python脚本直接请求Vault API获取凭证,但需要在CI中传递Vault地址、token等敏感信息,风险较高,仅适用于特殊场景:

import os
import requests

VAULT_ADDR = os.getenv("VAULT_ADDR")
VAULT_TOKEN = os.getenv("VAULT_TOKEN")

response = requests.get(
    f"{VAULT_ADDR}/v1/db/creds/readonly",
    headers={"X-Vault-Token": VAULT_TOKEN}
)
creds = response.json()["data"]

# 后续用creds["username"]和creds["password"]连接数据库

注意:无论哪种方案,都要确保CI作业的权限最小化,只授予Vault中必要的密钥读取权限,避免泄露敏感数据。

内容的提问来源于stack exchange,提问作者patap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:25:16