diff --git a/DevOps/Hashicorp-Vault/image-2.png b/DevOps/Hashicorp-Vault/image-2.png new file mode 100644 index 0000000..ca1f6ea Binary files /dev/null and b/DevOps/Hashicorp-Vault/image-2.png differ diff --git a/DevOps/Hashicorp-Vault/image-3.png b/DevOps/Hashicorp-Vault/image-3.png new file mode 100644 index 0000000..8540fc8 Binary files /dev/null and b/DevOps/Hashicorp-Vault/image-3.png differ diff --git a/DevOps/Hashicorp-Vault/image-4.png b/DevOps/Hashicorp-Vault/image-4.png new file mode 100644 index 0000000..46195fd Binary files /dev/null and b/DevOps/Hashicorp-Vault/image-4.png differ diff --git a/DevOps/Hashicorp-Vault/image-5.png b/DevOps/Hashicorp-Vault/image-5.png new file mode 100644 index 0000000..0976dc0 Binary files /dev/null and b/DevOps/Hashicorp-Vault/image-5.png differ diff --git a/DevOps/Hashicorp-Vault/vault-with-ldap.md b/DevOps/Hashicorp-Vault/vault-with-ldap.md index 2a23107..4cfe768 100644 --- a/DevOps/Hashicorp-Vault/vault-with-ldap.md +++ b/DevOps/Hashicorp-Vault/vault-with-ldap.md @@ -46,7 +46,7 @@ vault policy write policyuser1 /home/vuser/policyUSER.hcl ``` ![alt text](image-1.png) -Создадим групповую политику +Создадим групповую политику с полным доступом ```bash nano policy_groupad_fullacess1.hcl @@ -63,4 +63,196 @@ vault policy write policy_groupad_fullacess1 /home/vuser/policy_groupad_fullaces ``` vault policy list vault policy read policy_groupad_fullacess1 -``` \ No newline at end of file +``` + +# Привяжем LDAP к AD +Идем и читаем *Auth Methods* https://developer.hashicorp.com/vault/docs/auth + +Без чтения дальше продолжать бессмысленно. Особенно внимательно читаем LDAP Auth Method +Включаем LDAP по руководству, раздел Configuration +``` +vault auth enable ldap +``` +Сначала настроим связку с AD – потому что сейчас в Vault пользователей нет. + +>Учитывать: пробелы и переносы строк значимы, если не поставите пробел перед закрывающим “\”, то получите проблемы. Учтите, в тестовой конфигурации пароль прописан в исполняемом файле в открытом виде, не забудьте потом удалить файл и историю. + +```bash +nano ad_auth_1.sh + +#!/bin/sh +vault write auth/ldap/config \ +url="ldap://192.168.32.155:389" \ +groupdn="OU=N Watch,OU=Zoo MSK,DC=contoso,DC=lab" \ +groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))" \ +userdn="OU=N Watch,OU=Zoo MSK,DC=contoso,DC=lab " \ +userattr=sAMAccountName \ +groupattr="memberOf" \ +insecure_tls=false \ +deny_null_bind=true \ +use_token_groups=true \ +starttls=false +``` +И выполняем +``` +sh ad_auth_1.sh +``` +теперь нам надо бы проверить что все работает и привязать юзеров к политикам. + +Проверим через GUI + +User- Ivanov, Password - Pa$$word3 + +Получаем ошибку: +``` +Authentication failed: 1 error occurred: * error connecting to host "ldap://192.168.32.155:389": LDAP Result Code 200 "Network Error": dial tcp 192.168.32.155:389: connect: connection refused +``` + +Посмотрим в CLI +``` +vault login -method=ldap username=Ivanov +``` +та же ошибка, а все почему? Потому что по невнимательности я прописал + +url="ldap://192.168.32.155:389" \ + +а AD у нас где? 192.168.31.151 + +и заодно, insecure_tls=false – а у нас ничего для TLS нет, так что читаем руководство еще раз, + +insecure_tls - (bool, optional) - If true, skips LDAP server SSL certificate verification - insecure, use with caution! + +**В БОЕВОЙ СРЕДЕ НЕ ЗАБЫВАЕМ СЕРТИФИКАТЫ AD!** + +И мы же не прописали самое главное – bindDN! + +Исправляемся, не зря в ldapsearch проверяли. Не забываем про “\”, кроме последней строки + +`binddn="CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab " \` + +`bindpass="Pa!!word2"` + +Исправляем, выполняем + +``` +vault auth disable ldap +vault auth enable ldap +sh ad_auth_1.sh +``` +Учтите: + +1) При выполнении vault auth disable ldap – будут удалены не только настройки ldap, но и пользователи. У нас пока пользователей нет, а когда будут – попробуйте и увидите. + +2) При каждой удачной команде vault login(и так далее) – вы будете получать новый токен. Поэтому лучше бы держать две SSH сессии – одну с vault login и root token, а вторую для проверок. Я в тексте не пишу про переключение, потому что по лени ввожу vault login каждый раз. + +*Проверяем* + +`vault login -method=ldap username=Ivanov` +Получаем годное красивое + +Error authenticating: Error making API request. + +URL: PUT http://192.168.31.155:8200/v1/auth/ldap/login/Ivanov + +Code: 400. Errors: + +* ldap operation failed: failed to bind as user + +![alt text](image-2.png) + +И если вы на этом этапе подумали – «Ну что ж, заведем юзера в Vault!» - то вовсе не угадали. + +Надо идти в логи AD и смотреть там ошибки авторизации – у какого юзера не идет авторизация. В моем случае – с Source Network Address: 192.168.31.155 прошла успешная авторизация пользователя CONTOSO\VaultSAM + +Может быть, проблема в пароле товарища Иванова? Проверим. Сменим Pa$$word3 на Pa!!word3 –а вот и нет. + +Но у нас есть товарищ Волк, без имени и фамилии. Проверим! + +vault login -method=ldap username=volk + +и все работает! + +![alt text](image-3.png) + + +# Заводим MS AD юзеров в Vault LDAP +Не забудем перейти в соседнюю сессию или перелогинимся +``` +vault login +``` +Юзер у нас ходит, а политик ему не назначили – так заведем. + +``` +vault write auth/ldap/users/Ivanov +``` +и получим ошибку, Must supply data or use –force + +Заведем сразу с политикой - + +``` +vault write auth/ldap/users/Ivanov policies=policyuser1 +vault login -method=ldap username=Ivanov +``` +работает, отлично – политика и токен["default" "policyuser1"],а как с группой быть? + +В конфиге я считерил и сразу прописал + +`groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))` + +В конфиге я считерил и сразу прописал + +`groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))" \` + +это известное читерство, описанное тут Поиск всех групп пользователя AD по протоколу LDAP, и случайно мне попавшееся в обсуждении на hashicorp + +и в google groups ,да и в документации в разделе Group Membership Resolution, но как-то совсем косо, с первого второго и далее раза не очевидно. + +**Проверим**: + +``` +vault login -method=ldap username=Petrov +``` +теперь логинится, и получает политику ["default"] + +Пропишем группу AD + +``` +vault login +vault policy list +vault write auth/ldap/groups/VltADM policies=policy_groupad_fullacess1 +vault login -method=ldap username=Petrov +``` +и получим что: Верно. Индейскую народную национальную избу мы получим. Логин есть – политики нет. + +``` +vault list auth/ldap/groups +vault delete auth/ldap/groups/VltADM +vault write "auth/ldap/groups/Vault login" policies=policy_groupad_fullacess1 +vault login -method=ldap username=Petrov +["default" "policy_groupad_fullacess1"] +``` +**Теперь про неприятное.** + +Удалим пользователя Иванова без очистки токенов. + +`vault delete auth/ldap/users/Ivanov` + +зайдем им + +`vault login -method=ldap username=Ivanov` + +ОП – и у нас по прежнему есть старая политика. Для сброса придется в обязательном порядке отзывать токены – + +Получить список токенов + +`vault list auth/token/accessors` + +![alt text](image-4.png) + +Перебрать каждый + +`vault token lookup -accessor EHlDQ1tFHEgA9aq0R6IptIjo` + +![alt text](image-5.png) + +и так по всем. Не самая удобная процедура с точки зрения CLI, ну так Vault не под CLI заточен. \ No newline at end of file