Keycloak: интеграция с Bank-Vaults

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

Для упро­ще­ния досту­па к внут­рен­ним ресур­сам, типа Grafana, ArgoCD было реше­но попро­бо­вать инте­гри­ро­вать Keycloak с Vault. В нашем слу­чае — это Bank-Vaults Operator кото­рый исполь­зу­ет­ся в Kubernetes.

В дан­ный момент у нас не сто­я­ла зада­ча рас­пре­де­лить по ролям, настро­ить для каж­дой свои поли­ти­ки — основ­ной роли default с воз­мож­но­стью создавать/удалять/смотреть/апдейтить сек­ре­ты вполне хва­та­ет. Поэто­му ниже будет при­ве­ден при­мер имен­но такой настрой­ки — счи­тай дефолтной.

Во-пер­вых нач­нем с настрой­ки кли­ен­та, для это­го перей­дем в админ­па­нель Keycloak и созда­дим client в нуж­ном rearm’e.

Пере­хо­дим в Keycloak, в пра­вом меню нажи­ма­ем Clients, далее в таб­ли­це жмем кноп­ку Create

Далее, запол­ня­ем поля

Client ID

Root URL

В поле Client ID ука­зы­ва­ем имя кли­ен­та, а в поле Root URL — ссыл­ку на

Vault (глав­ное без сле­ша в кон­це!) и жмем Save.

Далее откры­ва­ем дан­ный Client ID, нажав на него в таб­ли­це в раз­де­ле Clients.

В открыв­шей­ся вклад­ке Settings нам необ­хо­ди­мо изме­нить поля:

Access Type

Valid Redirect URIs

Base URL

Admin URL

Web Origins

Теперь опи­шем, что необ­хо­ди­мо в них заполнить:

  • Access Type ука­зы­ва­ем confidential
  • Valid Redirect URIs ука­зы­ва­ем https://my-vault.com/ui/vault/auth/oidc/oidc/callback где my-vault.com домен на кото­ром рас­по­ло­жен Hashicorp Vault.
  • Base URL ука­зы­ва­ем просто /
  • Admin URL и Web Origins ука­зы­ва­ем домен Vault https://my-vault.com
  • И жмем сно­ва Save.

В появив­шей­ся вклад­ке Credentials копи­ру­ем Secret, он нам пона­до­бит­ся при запол­не­нии пере­мен­ным чарта.

Далее пере­хо­дим на вклад­ку Client Scopes в боко­вом меню и жмем Create

Далее созда­ем scope с име­нем groups

В настрой­ках ука­зы­ва­ем Protocol — openid-connect и жмем Save

Далее пере­хо­дим сно­ва в настрой­ки наше­го кли­ен­та (в боко­вом меню выби­ра­ем Clients и далее жмем на имя клиента)

Во вклад­ке кли­ен­та Client Scopes выби­ра­ем groups в поле Default Client Scopes и жмем Add selected

Далее, мы пере­хо­дим во вклад­ку Mappers и созда­ем Protocol Mapper. Для это­го жмем Create. Далее в открыв­шем­ся окне Create Protocol Mapper ука­зы­ва­ем в поле Name — groups, в поле Mapper Type ука­зы­ва­ем Group Membership, в поле Token Claim Name  ука­зы­ва­ем groups, а селек­тор в поле Full group path ста­вим в поло­же­ние Off. Жмем Save.

Соб­ствен­но настрой­ка Keycloak на этом завершена.

Далее, ука­за­на часть кон­фи­гу­ра­ции для Custom Resource уже уста­нов­лен­но­го Vault Operator.

При­мер настрой­ки кастом­но­го ресур­са мож­но про­смот­реть по ссыл­ке https://github.com/banzaicloud/bank-vaults/blob/main/operator/deploy/cr-oidc.yaml

Ука­зан­ные ниже пара­мет­ры, необ­хо­ди­мо ука­зать в раз­де­ле auth

При­мер части пере­мен­ных Bank-Vaults для настрой­ки OIDC:


где

$HOST — домен, где рас­по­ло­жен Keycloak

$REALM_NAME — имя realm’a

$CLIENT_NAME — имя clientID

$CLIENT_SECRET — cекрет для clientID

$VAULT_DOMAIN — имя доме­на, на кото­ром рас­по­ло­жен Vault

Соб­ствен­но на этом настрой­ка Bank-Vaults завершена.