Доступ к паролям в Hashicorp Vault для GitLab

Thank you for reading this post, don't forget to subscribe!

Наша зада­ча состо­ит в том, что­бы свя­зать Vault и GitLab — послед­ний дол­жен заби­рать сек­ре­ты, хра­ня­щи­е­ся в цен­тра­ли­зо­ван­ном хра­ни­ли­ще. Пред­по­ла­га­ет­ся, что у нас уже есть сер­ве­ры Vault и GitLab

Для при­ме­ра, мы выта­щим логин и пароль для досту­па к базе дан­ных MariaDB. Мы будем исполь­зо­вать меха­низм JSON Web Token (JWT), кото­рый под­дер­жи­ва­ет­ся в GitLab, начи­ная с вер­сии 12.10.

Настройка Vault

Раз­ре­шим меха­низм рабо­ты с сек­ре­та­ми по пути secret:

vault secrets enable -path=secret/ kv

Созда­дим сек­рет по пути secret/projects/test/mariadb и доба­вим 2 записи:

vault kv put secret/projects/test/mariadb login=testuser password=testpassword

* в создан­ном сек­ре­те будет хра­нить­ся две пары login=testuser и password=testpassword. Имен­но эти дан­ные мы и долж­ны будем полу­чить в GitLab.

Раз­ре­ша­ем меха­низм JWT:

vault auth enable jwt

Созда­ем поли­ти­ку досту­па к секрету:

* поли­ти­ка с назва­ни­ем project-test опи­сы­ва­ет доступ толь­ко на чте­ние к сек­ре­ту secret/projects/test.

Созда­ем роль:

* где обра­тим вни­ма­ние на:

  • role_type — роль типа jwt (JSON Web Token) для созда­ния токе­нов досту­па, осно­ван­ный на фор­ма­те JSON.
  • policies — при­вя­зы­ва­ем роль к ранее создан­ной политике.
  • project_id — иден­ти­фи­ка­тор про­ек­та в GitLab, к кото­ро­му будет при­вя­за­на дан­ная роль. Дру­гие про­ек­ты не смо­гут вза­и­мо­дей­ство­вать с ней и полу­чать доступ к секретам.

Настра­и­ва­ем кон­фи­гу­ра­цию для про­вер­ки запро­сов от гитлаба:

vault write auth/jwt/config jwks_url="http://gitlab.test.com/-/jwks" bound_issuer="gitlab.test.com"

* дан­ная настрой­ка ска­жет нашей систе­ме Vault, что мож­но при­ни­мать запро­сы jwt от узла gitlab.test.com.

Настройка GitLab

На сто­роне GitLab нам необ­хо­ди­мо настро­ить runner и создать файл .gitlab-ci.yml

И так, в корне про­ек­та созда­ем файл .gitlab-ci.yml со сле­ду­ю­щим содержимым:

Мы долж­ны уви­деть наши логин и пароль, кото­рые gitlab запро­сил у Vault.