6 подписчиков

Развертывание Vault на стенде с Microsoft Active Directory (LDAP)

Часть 1 из 2, подготовка стенда

В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде.

Часть 1. Собираем лабу, на что один вечер и уйдет.

1.1 Нам потребуется:

VMware Workstation Player - https://www.vmware.com/products/workstation-player.html

Windows server 2016/2019/2022 – в целом без разницы. Но есть нюанс – раздаваемый много где evaluation у меня не смог при установке найти файл лицензий, и пришлось поискать у поставщиков параллельного импорта. Windows server ставим английский, это сбережет массу времени и сейчас и в будущем.

Debian 11 (или позже, но сейчас 11.4 - брать тут

(Можно и не Debian, но мне он почему-то нравится).

Что потребуется по аппаратной части: 6 гигов оперативки и 80 гигов места – 60 под Windows Server с развернутой AD (хватит и 25) и 20 под Debian. Правильней ставить сразу отдельно второй сервер с Windows CA – но в другой раз.

Систему можно запустить на любом домашнем ПК старше 2012 года: A compatible 64-bit x86/AMD64 CPU launched in 2011 or later , но все равно надо много оперативки.

1.2 Подготовка стенда. VMware player или что-то интересней.

Hyper-V прекрасен, но в моем Windows Home 11 я не уверен, есть он или нет. Да и привык я к VMware, поэтому ставим VMware player, к тому же он бесплатный для дома: VMware Workstation Player is free for personal, non-commercial use (business and nonprofit use is considered commercial use). If you would like to learn about virtual machines or use them at home, you are welcome to use VMware Workstation Player for free.

Ставим, далее-далее-готово. Создаем и заполняем у себя текстовый файл – Windows server administrator, debian user/password, debian root.

В моем случае:

Windows: Domain Administrator - Pa$$word1

Пароль восстановления AD нам не потребуется на этот раз, поэтому его заводим как “Restore1”

Debian:

vuser / vPa$$word

root / rootPa$$word

НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ПРОСТЫЕ ПАРОЛИ И ПАРОЛИ ИЗ ПРИМЕРОВ В РАБОЧЕЙ СЕТИ.

Создаем VM (Тип сети – NAT), ставим Windows + AD. Правильнее, конечно, развернуть еще CA на отдельном сервере, но про это я напишу попозже и отдельно.

Процесс скучен. Не забываем после установки Windows: поставить пароль локальному администратору (который станет доменным), переименовать VM (у меня это dc001), поставить патчи. Ставить патчи стоит до настройки AD и до настройки статического IP, чтобы на первом этапе не возиться с настройками DNS в домене.

После перезагрузок включить RDP, и зайти через него. Почему RDP: потому что в дальнейшем будет какое-то количество скриптов, и их удобней копировать в RDP сессии. Хотя в VMware workstation с установленными tools работает и Copy-paste over console. В VMware ESXi наоборот, Copy-paste over console по умолчанию выключен – поэтому сразу привыкаем к RDP.

Start-Run – mstsc / User name: ./Administrator и поехали

В Windows среде вопрос copy-paste в консоль (RSXi, vnc, idrac и прочие) давно решен через простой скрипт:

$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')

(скрипт отсюда )

После установки останется настроить static IP, DNS, затем добавить роль AD. В моем случае домен будет Contoso.lab, первый сервер в новом лесу, далее-далее-готово.

Просмотр IP, если кто забыл – правую кнопку мыши – run – powershell ise , ipconfig/all

Get-NetAdapter

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.

Get-NetIPAddress

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-2

Get-NetIPConfiguration

Было:

IPv4DefaultGateway : 192.168.31.2

DNSServer 192.168.31.2

Стало:

Set-DnsClientServerAddress -InterfaceIndex 10 -ServerAddresses 192.168.31.151
New-NetIPAddress -InterfaceIndex 10 -IPAddress 192.168.31.151 -PrefixLength 24 -DefaultGateway 192.168.31.2

(на этом моменте rdp вы потеряете)

Что касается IP v6, то отключать его НЕ НАДО НИ В КОЕМ СЛУЧАЕ.

О чем много лет написано в Guidance for configuring IPv6 in Windows for advanced users - We do not recommend that you disable IPv6 or its components

но можно сделать, как давно описано: нажать правую кнопку на пуске, выбрать run – powershell ISE и выполнить простейший скрипт:

Break #In case you paste this in to PowerShell ISE and press run script:)
#Check if IPv4 IP address is preferred
ping $env:COMPUTERNAME
#If the reply is IPv6 address, run following registry setting to just prefer ipv4 and reboot
New-ItemProperty “HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\” -Name “DisabledComponents” -Value 0x20 -PropertyType “DWord”
#If DisabledComponents exists, use the set cmdlet
Set-ItemProperty “HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\” -Name “DisabledComponents” -Value 0x20
#You need to reboot the computer in order for the changes to take effect
Restart-Computer

Окей, статический IP настроен, AD установлен, сервер перезагружен, заходим как administrator@contoso.lab

И сразу настроим DNS – можно в GUI

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-3

Лучше в powershell:

Get-DnsServer -ComputerName “dc001.contoso.lab” | Export-Clixml -Path "c:\DnsServerConfig.xml"

Notepad "c:\DnsServerConfig.xml"

- это чтобы не привыкали к хорошему, потому что настройка DNS forward вызывается отдельно, и мало того – видна только при запуске powershell от имени администратора.

Жизнь без бороды в консоли без запуска ее от администратора

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-4

Жизнь с бородой в консоли от администратора

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-5

(я уже из gui настроил 8.8.4.4 )

Но все равно добавим

Add-DnsServerForwarder -IPAddress 8.8.8.8 –PassThru

Часть 1.3 – Создаем пользователей в AD.

Создадим OU для имитации рабочей среды, и пользователей: трех сотрудников и служебную учетную запись.

Создаем:

Organizational unit (OU): Zoo MSK/N Watch, Robo base/Vault

Такие странные имена добавлены для того, чтобы показать возможность работы с пробелами в имени OU.

В Zoo MSK/N Watch создаем трех пользователей и группу:

В OU Zoo MSK/N Watch – Ivan Ivanov (contoso/ivanov), Ivan Petr(contoso/petr), Иван Волк и группу vault login

Петрова сразу включим в группу vault login.

В OU Robo base/Vault – создаем vault connector (contoso/vault)

OU, двух сотрудников и служебную запись можно (нужно) создать скриптом, это сэкономит немного времени, но добавит поучительных проблем.

Внимательно следим за пробелами при изменении под себя.

Создаем OU (документация по OU)

-ProtectedFromAccidentalDeletion $False используется, поскольку это стенд и каждый раз снимать чекбокс «разрешить удаление» в GUI / ADUC мне лень.

New-ADOrganizationalUnit -name "Zoo MSK" -Path "DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "N Watch" -Path "OU=Zoo MSK,DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "Robo base" -Path "DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "Vault" -Path "OU=Robo base,DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False

Создаем пользователей:

Документ по созданию поновей,

документ по созданию постарей, но интересней.

Внимательно следим за пробелами и кавычками при изменении под себя, иначе вставите пару пробелов и получите ошибку - New-ADUser : Directory object not found

$Pwd = ConvertTo-SecureString "Pa$$word2" -AsPlainText -Force

New-ADUser -name "Vault connector" -Accountpassword $Pwd -DisplayName "Vault connector" -Enabled $true -Path "OU=Vault,OU=Robo base,DC=CONTOSO,DC=LAB" -SamAccountName "VaultSAM" -userPrincipalName "VaultUPN"

Remove-Variable -Name Pwd

Теперь сходите в GUI и посмотрите, какая фигня вышла. Но нам так и надо для примера, что с такими именами и паролями все будет работать плохо. Увидите ниже.

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-6

Заводим остальных

$OUP = "OU=N Watch,OU=Zoo MSK,DC=CONTOSO,DC=LAB"
$Pwd = ConvertTo-SecureString "Pa$$word3" -AsPlainText -Force
New-ADUser -name "Ivan Ivanov" -Accountpassword $Pwd -DisplayName "Ivan Ivanov" -Enabled $true -Path $OUP -SamAccountName "Ivanov" -userPrincipalName "Ivanov"
Remove-Variable -Name Pwd
$Pwd = ConvertTo-SecureString "Pa$$word4" -AsPlainText -Force
New-ADUser -name "Ivan Petr" -Accountpassword $Pwd -DisplayName "Ivan Petr" -Enabled $true -Path $OUP -SamAccountName "Petrov" -userPrincipalName "Petrov"
Remove-Variable -Name Pwd
New-ADGroup -Name "Vault login" -SamAccountName "VltADM" -GroupCategory Security -GroupScope Global -Path $OUP -Description "Example"
Add-ADGroupMember -Identity "VltADM" -Members Petrov
Get-ADGroupMember -Identity "VltADM" | ft

И одного пользователя в OU OU=N Watch,OU=Zoo MSK создаем из GUI – Иван Волк, username Volk, пароль Pa!!word5 (обратите внимание, у двух пользователей пароли Pa$$word, у третьего – Pa!!word5)

На этом настройка Windows server и AD завершена.

Часть 1.4 Настраиваем Debian 11 для Vault

Скачиваем ISO, создаем VM, тип сети – NAT, далее-далее, LVM – все на одном диске.

Можно и без LVM, нам диск расширять не придется. В случае рабочей сети, возможно, стоит LVM зашифровать. Хуже не будет. Лучше впрочем тоже, хотя в любом случае нужен бекап.

Устанавливаем без GUI, только SSH (на скрине не выбран) и standard

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-7

После установки заходим как юзер (vuser), смотрим адрес (ip a) и дальше работаем по SSH

Вспоминаем, что 192.168.31.151 выдан AD. В больших организациях за статическими адресами нужен учет, в любом IPAM – хоть в SolarWinds IPAM, хоть в Netbox, хоть в phpIPAM. Netbox, по моему, лучший.

Vi тут и застрять можно, и никакого q!

su

nano /etc/network/interfaces

До изменений:

# The primary network interface

allow-hotplug ens33

iface ens33 inet dhcp

После изменений:

iface ens33 inet static

address 192.168.31.155

netmask 255.255.255.0

gateway 192.168.31.2

dns-nameserver 192.168.31.151

Сразу настроим NTP

systemctl status systemd-timesyncd

nano /etc/systemd/timesyncd.conf

(и пропишем что нам надо)

Поставим массу нужного и не нужного.

nano /etc/apt/sources.list

закомментируем DVD, и если уж очень хочется – добавим

deb http://deb.debian.org/debian bullseye main contrib non-free

Поехали.

apt update

apt list --upgradable

apt upgrade –y

apt install sudo curl gnupg2 gpg git unzip openssl ldap-utils tcpdump –y

(нужно из этого не все, но часть нужна для примеров отладки)

В рабочей среде не забываем про использование sudo - правим

nano /etc/sudoers

Где-то тут перезагрузимся и, наконец, переходим к установке vault.

Часть 2. Установка Vault.

При попытке сделать по руководству

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg >/dev/null

получим запрет. Свободная свобода не для всех.

Часть 2.1 Выбор дистрибутива.

Если верить release notes, то ничего новее 11.0 не было с 21 июня. При этом на https://www.vaultproject.io/downloads лежит ссылка на https://releases.hashicorp.com/vault/1.11.2/vault_1.11.2_linux_amd64.zip

с sha256 – ace4138269cb7214c73529f984b793d66074e3a3ad373eaa77bc9b39490d9ef9 vault_1.11.2_linux_amd64.zip

следите за цифрами, я по ошибке сначала скачал vault_1.1.2_linux_amd64.zip вместо vault_1.11.2_linux_amd64.zip, и потом минут 20 пытался понять, почему у меня «Unknown storage type raft»

Сверяем md5 и прочие sha на хосте-

Get-FileHash vault_1.11.2_linux_amd64.zip -Algorithm SHA256

Закачаем архив куда положено ему. Из командной строки

pscp c:\soft\vault_1.11.2_linux_amd64.zip vuser@192.168.31.155:/home/vuser

или из powershell

.\pscp c:\soft\vault_1.11.2_linux_amd64.zip vuser@192.168.31.155:/home/vuser

(pscp из комплекта к putty, можно Winscp заменить или как угодно еще).

Пойдем обратно в терминал Debian

cd /home/vuser
Ls

Распакуем архив

unzip vault_1.11.2_linux_amd64.zip

и дальше пойдем от рута, хотя это и неправильно.

Su
mv ./vault /usr/local/bin/
vault –h
Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-8

На следующем шаге все руководства, включая официальное, рекомендуют запустить в dev-режиме. Dev режим – когда конфигурация не сохраняется, все в памяти.

Окей,

vault server -dev

оно запустилось, и что? CTRL-C

Дальше надо читать много про hcl файлы и секреты из официальной документации, и я настоятельно рекомендую это сделать и попробовать до проведения следующих шагов.

Часть 2.2 Первичная установка Vault

Нам интересно настроить связку с AD, поэтому пойдем быстро и без SSL (и CA для SSL у меня в стенде пока нет) –

Cd /
mkdir datalab
cd datalab
mkdir vaultdata
cd /home/vuser
nano vaultcongig1.hcl

Содержимое:

storage "raft" {
path = "/datalab/vaultdata"
node_id = "node1"
}
listener "tcp" {
address = "192.168.31.155:8200"
tls_disable = "true"
}
api_addr = "http://192.168.31.155:8200"
cluster_addr = "https://192.168.31.155:8201"
ui = true

Важный момент: следите за пробелами и учитывайте перенос строк – точнее их разницу между Windows и linux. В дальнейшем это мне здорово портило жизнь.

Запускаемся в сессии рута:

vault server -config=/home/vuser/vaultcongig1.hcl

И на этом в данной сессии (рута) больше работ нет.

Возникает вопрос, а не запустить ли все это сразу как сервис? И да, и нет. Если делать шифрованный LVM, то при каждой перезагрузке на сервер все равно ходить вручную и вводить ключ. Если делать автозагрузку сервиса, то все равно после каждой перезагрузки по умолчанию надо вводить три ключа из пяти. Если прописать и ввод ключей дешифровки в автозагрузку, то я не очень понимаю, насколько это безопасно. Однако тут каждый сам решает, как ему лучше делать в продуктивной среде.

Часть 2.3 Первичная настройка Vault

Дальше есть два пути. Странный и более-менее правильный.

Странный. Открываем браузер и идем на http://192.168.31.155:8200

Получаем вот такую живопись (описанную в руководстве чуть позже, чем ssh – в разделе Web UI )

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-9

Более-менее правильный, и в соответствии с руководством: Открываем новую ssh сессию, настраиваем переменную

export VAULT_ADDR="http://192.168.31.155:8200"

и выполняем первичную инициализацию хранилища. Кавычки имеют значение, проверяйте.

Пример неправильных кавычек:

получаем пять ключей (параметр вроде настраивается, но по умолчанию 5) и One Ring to rule them all и самый главный root токен. Схороните, распечатайте, а распечатку в сейф.

Пока все идет как по руководству

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-11

Если сейчас сходить в браузер, то получим запрос на ввод ключей разблокировки (unseal). Можно ввести там любые три из пяти. Можно в SSH –

vault operator unseal

Можно в GUI

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-12

Часть 2.4 Мои первые секреты

Для проверки работы авторизации создадим (из GUI) два key-value хранилища.

Path - kv_userAD – и в нем секрет adsecret-user c какой-то парой key/value

Path - kv_groupAD и в нем секрет adsecret-group c другой парой key/value

Часть 2.5 Проверка LDAP

Перед тем как идти дальше в Vault, проверим работу ldap search

ldapsearch -x -b "dc=contoso,dc=lab" -H ldap://192.168.31.151

и получим result: 1 Operations error

Сделаем чуть лучше, зря чтоли специального пользователя заводили?

Сначала посмотрим в AD, какой CN мы сотворили

Открываем RDP, AD users and computers, включаем advanced features

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-13

Идем в Attribute editor, листаем до CN

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-14

И DN (можно оттуда и скопировать, если печатать лень) –

CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-15

Выполняем

(-b searchbase, -x = Use simple authentication instead of SASL.)

ldapsearch -b "OU=Robo base,DC=contoso,DC=lab" -H ldap://192.168.31.151 -D "CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab" -W

если у вас на этом этапе сыплются ошибки, при вроде правильном пароле - то проверьте кавычки, - или тире, и главное – журнал событий Windows, есть в нем ошибки входа или нет. Если ошибок входа нет – то проблема где-то в CN/OU/кавычках. Иначе вы должны видеть ошибку входа в Event viewer / Security

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-16

В Debian должны валиться ошибки:

ldap_bind: Invalid credentials (49)

additional info: 80090308: LdapErr: DSID-0C090436, comment: AcceptSecurityContext error, data 52e, v4f7c

Валятся? Отлично. В AD users and computers нажмите правую кнопку на юзере и смените ему пароль на Pa!!word2

Проверяем:

ldapsearch -b "OU=Robo base,DC=contoso,DC=lab" -H ldap://192.168.31.151 -D "CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab" -W

Часть 1 из 2, подготовка стенда В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде. Часть 1. Собираем лабу, на что один вечер и уйдет. 1.-17

Нам, между тем, нужен другой OU -

ldapsearch -b "OU=N Watch,OU=Zoo MSK,DC=contoso,DC=lab" -H ldap://192.168.31.151 -D "CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab" -W