Вопрос или проблема
Я совсем новичок в Vault. Я пытаюсь добавить аутентификацию LDAP в config.hcl, но не могу понять, как это сделать. Я хочу, чтобы LDAP был предварительно настроен при запуске контейнера Docker, чтобы мне не приходилось входить и вручную настраивать его через веб-интерфейс каждый раз при запуске контейнера Docker.
Например, я хотел бы, чтобы следующее эквивалентное действие выполнялось при запуске контейнера Docker:
# Включить аутентификацию LDAP
vault auth enable ldap
# Настроить аутентификацию LDAP
vault write auth/ldap/config \
url="ldaps://ldap.example.com" \
binddn="cn=read-only-admin,dc=example,dc=com" \
bindpass="вашпароль" \
userattr="uid" \
userdn="ou=People,dc=example,dc=com" \
groupdn="ou=Groups,dc=example,dc=com" \
groupfilter="(&(objectClass=posixGroup)(memberUid={{.Username}}))" \
groupattr="cn"
Ответ или решение
Для настройки аутентификации LDAP в HashiCorp Vault в Docker-контейнере с предварительной конфигурацией, вам необходимо будет использовать config.hcl
файл и прописать необходимые команды в сценарии инициализации. Ниже приведены шаги, которые помогут вам выполнить эту задачу:
Шаги для настройки аутентификации LDAP в контейнере Docker Vault
-
Создайте файл конфигурации (
config.hcl
) для Vault. Этот файл будет использоваться для настройки Vault, в том числе для включения аутентификации LDAP. Пример содержимого файла:storage "file" { path = "/vault/file" } listener "tcp" { address = "0.0.0.0:8200" tls_disable = 1 } disable_mlock = true ui = true
-
Создайте скрипт инициализации (например,
init.sh
). Этот сценарий будет запускаться при старте контейнера и будет включать аутентификацию LDAP и настраивать её.#!/bin/sh # Запуск сервиса Vault vault server -config=/vault/config/config.hcl & # Ожидание, пока Vault запустится sleep 5 # Инициализация Vault (сначала не забудьте проверить, был ли он уже инициализирован) if ! vault status | grep -q "Initialized: true"; then vault operator init -key-shares=1 -key-threshold=1 > /vault/file/init_output.txt cat /vault/file/init_output.txt | grep 'Unseal Key 1:' | awk '{print $NF}' > /vault/file/unseal_key.txt VAULT_UNSEAL_KEY=$(cat /vault/file/unseal_key.txt) vault operator unseal $VAULT_UNSEAL_KEY vault login $(cat /vault/file/init_output.txt | grep 'Initial Root Token:' | awk '{print $NF}') fi # Включение аутентификации LDAP vault auth enable ldap # Настройка аутентификации LDAP vault write auth/ldap/config \ url="ldaps://ldap.example.com" \ binddn="cn=read-only-admin,dc=example,dc=com" \ bindpass="yourpassword" \ userattr="uid" \ userdn="ou=People,dc=example,dc=com" \ groupdn="ou=Groups,dc=example,dc=com" \ groupfilter="(&(&(objectClass=posixGroup)(memberUid={{.Username}})))" \ groupattr="cn" # Ожидание поступления сигналов wait
Не забудьте сделать ваш скрипт исполняемым:
chmod +x init.sh
-
Создайте Dockerfile для сборки контейнера. Ваш Dockerfile будет выглядеть примерно так:
FROM hashicorp/vault:latest # Копируем файл конфигурации и скрипт инициализации в контейнер COPY config.hcl /vault/config/config.hcl COPY init.sh /vault/init.sh # Устанавливаем права на выполнение RUN chmod +x /vault/init.sh # Указываем команду, которая будет выполняться при старте контейнера CMD ["/vault/init.sh"]
-
Соберите образ Docker:
docker build -t vault-with-ldap .
-
Запустите контейнер:
docker run -d --name vault-container -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' -p 8200:8200 vault-with-ldap
Теперь ваш Vault будет автоматически настраиваться с аутентификацией LDAP каждый раз, когда вы запускаете контейнер. Вы сможете избежать ручной настройки через веб-интерфейс, так как конфигурация будет загружена автоматически из скрипта на этапе инициализации.