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

GitLab托管版CI/CD配置Alembic自动升级AWS RDS Postgres实例

我之前在GitLab托管版上配置Alembic连接AWS RDS Postgres的时候,也碰到过一模一样的问题——没法精准白名单Runner IP,又不想把证书提交到仓库。给你分享几个我亲测有效的方案:

方案1:用GitLab CI/CD变量存储证书内容,临时生成文件

这是最直接的方案,利用GitLab的敏感变量存储证书内容,在流水线执行时临时写入文件:

  1. 先获取AWS RDS的根证书(比如rds-ca-2019-root.pem),把证书的全部内容复制下来。
  2. 打开GitLab项目的「Settings -> CI/CD -> Variables」,添加一个名为RDS_CA_CERT的变量,粘贴证书内容,同时勾选「Mask variable」和「Protect variable」来保护敏感信息。
  3. 在.gitlab-ci.yml中添加前置步骤,把变量内容写入临时文件:
before_script:
  # 将证书内容写入临时文件
  - echo "$RDS_CA_CERT" > /tmp/rds-ca.pem
  1. 修改Alembic的配置(可以是alembic.ini或者env.py),指定SSL参数:
    • 如果用alembic.ini:
    sqlalchemy.url = postgresql+psycopg2://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=verify-full&sslrootcert=/tmp/rds-ca.pem
    
    • 如果用env.py动态生成连接:
    from sqlalchemy import create_engine
    import os
    
    db_url = (
        f"postgresql+psycopg2://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}"
        f"@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}"
        "?sslmode=verify-full&sslrootcert=/tmp/rds-ca.pem"
    )
    engine = create_engine(db_url)
    

方案2:借助AWS Secrets Manager管理证书和凭证

如果你的团队已经在使用AWS Secrets Manager,用它来统一管理证书和数据库凭证会更安全,也方便后续更新:

  1. 将RDS根证书内容(或证书文件)上传到AWS Secrets Manager,创建一个独立的Secret;同时把数据库的用户名、密码也存入另一个Secret。
  2. 在GitLab变量中添加AWS访问密钥(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY),同样勾选敏感保护选项。
  3. 在流水线中通过AWS CLI拉取证书和凭证:
before_script:
  # 拉取RDS证书并写入临时文件
  - aws secretsmanager get-secret-value --secret-id rds-ca-cert --query SecretString --output text > /tmp/rds-ca.pem
  # 拉取数据库凭证并设置为环境变量
  - DB_CRED=$(aws secretsmanager get-secret-value --secret-id db-production-creds --query SecretString --output text)
  - export DB_USER=$(echo "$DB_CRED" | jq -r '.username')
  - export DB_PASSWORD=$(echo "$DB_CRED" | jq -r '.password')
  1. 后续的Alembic配置和方案1一致,指向临时证书文件即可。

方案3:直接下载AWS官方RDS根证书

如果你的RDS实例使用的是AWS官方提供的根证书,可以直接在流水线中下载,不需要提前存储:

before_script:
  # 下载AWS最新的RDS根证书
  - curl -o /tmp/rds-ca.pem https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

注意:AWS会定期更新根证书,需要关注官方通知,及时更新下载链接。

几个关键注意事项

  • SSL模式选择:建议使用sslmode=verify-full,这是最安全的配置,会验证证书的真实性以及服务器主机名是否匹配,避免中间人攻击。
  • 临时文件安全:GitLab Runner的每个Job都是独立运行在容器或虚拟机中,Job结束后所有临时文件会被自动销毁,不用担心证书残留。
  • 敏感变量保护:所有涉及凭证、密钥、证书的变量,一定要勾选「Mask variable」防止在日志中泄露,勾选「Protect variable」限制仅在保护分支中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:44:37