Интеграция Gitlab с Hashicorp Vault

Я интегрировал свой собственный 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, он работает нормально.

Нужно ли мне размещать самоподписанный сертификат сервера где-нибудь на сервере хранилища или сервере gitlab? Пожалуйста, дайте мне знать, есть ли у кого-нибудь идеи по этому поводу?


person mikita agrawal    schedule 06.11.2020    source источник


Ответы (4)


Контейнеры, которыми управляет исполнитель docker / kube, должны быть настроены так, чтобы доверять самозаверяющим сертификатам. Вы можете отредактировать config.toml для вашего бегуна, чтобы подключить доверенные сертификаты / корни CA к контейнерам заданий GitLab CI.

Например, для исполнителей докеров на базе Linux:

  [[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"]

См. документы для получения дополнительной информации.

person sytech    schedule 07.11.2020
comment
привет спасибо за ответ. Вот как я запускаю свой контейнер 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, используя том, но это все еще не сработало. Я думаю, это то, о чем вы имели в виду, верно? Что еще мне не хватает? - person mikita agrawal; 07.11.2020
comment
@mikitaagrawal Вам необходимо не только подключить сертификат к самому средству выполнения, но также внести изменения в config.toml, чтобы в контейнерах, создаваемых средством выполнения, также были смонтированы сертификаты при выполнении заданий. В конце концов, задания не выполняются в контейнере runner, они выполняются в отдельном контейнере. - person sytech; 07.11.2020
comment
Как и куда тогда поставить сертификаты? Это просто vault.systems.crt, который мне нужно разместить. Если бы вы могли помочь мне с шагами, я был бы очень признателен. - person mikita agrawal; 07.11.2020

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

Ошибка, которую вы получаете, возвращается из Vault, поэтому вам нужно получить этот сертификат, чтобы принять этот сертификат. Есть приличное примечание о том, как это сделать, в Руководстве по развертыванию. (Раньше я работал в HashiCorp Vault, поэтому знал, где его выкопать.)

person Becca Petrin    schedule 06.11.2020
comment
Если OP может обойти проблему с помощью флага на стороне клиента -tls-skip-verify, который будет указывать мне, что эта ошибка действительно исходит от интерфейса командной строки хранилища, а не сервера хранилища. Поэтому я не понимаю, как здесь вступает в игру конфигурация развертывания сервера. Vault не доверяет собственному настроенному сертификату и как клиент сообщает Vault пропустить эту проверку? - person sytech; 07.11.2020

Я смог решить эту проблему, используя эту переменную VAULT_CACERT в моем файле gitlab.yml: - export VAULT_CACERT=/etc/gitlab-runner/certs/ca.crt. Путь сертификата здесь - это путь к смонтированному контейнеру, который мы указываем при запуске контейнера.

Разместите это так, что если кто-то его ищет, это решение. :)

person mikita agrawal    schedule 09.11.2020

Вы можете использовать -tls-skip-verify в своей команде хранилища vault kv get -tls-skip-verify -field=password kv/project/staging/db , или, если у вас есть сертификат хранилища, вам нужно экспортировать путь CA CERT, задав для VAULT_CACERT правильный путь.

person Mr.Machhour    schedule 03.03.2021