【问题标题】:Gitlab integration with Hashicorp VaultGitlab 与 Hashicorp Vault 的集成
【发布时间】:2021-03-03 18:02:38
【问题描述】:

我已将我的自托管 Gitlab 与 Hashicorp 保险库集成。我已按照https://docs.gitlab.com/ee/ci/examples/authenticating-with-hashicorp-vault/ 此处的步骤操作并尝试运行管道。

我在运行管道时收到证书错误。

Error writing data to auth/jwt/login: Put "https://vault.systems:8200/v1/auth/jwt/login": x509: certificate signed by unknown authority

我的 .gitlab yml 文件 -

Vault Client:
  image:
    name: vault:latest
    entrypoint:
        - '/usr/bin/env'
        - 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
  before_script:

  script:
    - export VAULT_ADDR=https:/vault.systems:8200/
    - export VAULT_TOKEN="$(vault write -field=token auth/jwt/login role=staging jwt=$CI_JOB_JWT)"
    - export PASSWORD="$(vault kv get -field=password kv/project/staging/db)"
    - echo $PASSWORD

如果我使用-tls-skip-verify 标志,那么它工作正常。

我是否需要将自签名服务器证书放置在 Vault 服务器或 gitlab 服务器上的某个位置? 如果有人对此有任何想法,请告诉我?

【问题讨论】:

    标签: gitlab hashicorp-vault


    【解决方案1】:

    由 docker/kube 执行器管理的容器必须配置为信任自签名证书。您可以编辑config.toml 让您的跑步者在受信任的证书/CA 根目录中挂载到 GitLab CI 作业容器

    例如,在基于 Linux 的 docker 执行器上:

      [[runners]]
       name = "docker"
       url = "https://example.com/"
       token = "TOKEN"
       executor = "docker"
    
       [runners.docker]
         image = "ubuntu:latest"
    
         # Add path to your ca.crt file in the volumes list
         volumes = ["/cache", "/path/to-ca-cert-dir/ca.crt:/etc/gitlab-runner/certs/ca.crt:ro"]
    

    请参阅docs 了解更多信息。

    【讨论】:

    • 您好,感谢您的回复。所以这就是我运行我的 gitlab runner 容器docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /app/log/docker-rootless/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest 的方式,并且我已经使用卷放置了我的服务器证书vault.systems.crt,但这仍然没有奏效。我想这就是你所指的对吗?我还有什么遗漏的吗?
    • @mikitaagrawal 您不仅需要将证书挂载到运行程序本身,还需要在config.toml 中进行更改,以便运行程序创建的容器在​​运行作业时也安装证书.毕竟,作业不在 runner 容器中运行,它们在单独的容器中运行。
    • 那么我如何以及在哪里放置证书?只是我需要放置的vault.systems.crt。如果您能帮助我完成这些步骤,将不胜感激。
    【解决方案2】:

    我能够通过在我的 gitlab.yml 文件中使用这个变量 VAULT_CACERT 来解决这个问题: - export VAULT_CACERT=/etc/gitlab-runner/certs/ca.crt。这里的证书路径是我们在容器启动时指定的挂载容器的路径。

    发布这个,如果有人在寻找它,这就是解决方案。 :)

    【讨论】:

      【解决方案3】:
      Error writing data to auth/jwt/login: Put "https://vault.systems:8200/v1/auth/jwt/login": x509: certificate signed by unknown authority
      

      Vault 正在返回您收到的错误,因此您需要通过 Vault 来接受该证书。在the Deployment Guide 中有一个关于如何做到这一点的不错的注释。 (我曾经在 HashiCorp Vault 工作,所以我知道在哪里挖掘它。)

      【讨论】:

      • 如果 OP 可以绕过客户端标志 -tls-skip-verify 的问题,这将向我表明此错误实际上来自保险库 CLI,而不是保险库服务器。所以我很困惑服务器部署配置如何在这里发挥作用。 Vault 是否不信任自己配置的证书,客户端如何告诉 Vault 跳过此验证?
      【解决方案4】:

      您可以在您的 vault 命令vault kv get -tls-skip-verify -field=password kv/project/staging/db 中使用 -tls-skip-verify,或者如果您有 vault 的 ca-cert,您必须通过将 VAULT_CACERT 设置为正确的路径来导出 CA CERT 路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-20
        • 2021-05-07
        • 2019-07-20
        • 1970-01-01
        • 2022-01-12
        • 2019-11-17
        • 1970-01-01
        • 2021-04-18
        相关资源
        最近更新 更多