Развёртывание Secret Manager

Подготовьте сервер со статическим IP или DNS-адресом. Выпишите для openbao пару сертификата и ключа в формате X.509 v3 с обязательным указанием в SAN этого IP и/или DNS-адреса.

Для развёртывания OpenBao на отдельном внешнем сервере можно воспользоваться инструкцией. Здесь вам также потребуются выпущенные сертификаты вместе с сертификатом сертифицирующего центра CA, подписавшего ваши сертификаты. Их необходимо поместить в папку ssl репозитория с предопределёнными именами.

Важный момент: если ваш сертификат выпущен промежуточным CA, а в папку ssl вы кладёте сертификат его родителя ROOT CA, то, возможно, вам потребуется создать chain. Например, сертификат для openbao у вас будет называться my-openbao.crt, промежуточного CA - middleCA.crt, а root CA - ca.crt. Тогда под видом требуемого в инструкции openbao.crt вы должны положить не выпущенный для openbao сертификат, а chain, созданный таким образом:

cat my-openbao.crt  middleCA.crt > openbao.crt

Настройка

Основная часть

Установите пакет openbao на компьютер, с которого планируете управлять сервером:

apt-get install openbao

Установите переменные среды с информацией для удалённого подключения через клиент openbao:

  • VAULT_ADDR — URL вашего сервера,
  • VAULT_CACERT — путь к PEM-файлу корневого CA,
  • VAULT_TLS_SERVER_NAME — имя/IP, которое должно совпадать с сертификатом сервера.

Например:

export VAULT_ADDR='https://10.10.7.200:8200'
export VAULT_CACERT="$HOME/ca.crt" # Путь к копии того самого ROOT CA, который вы использовался при установке OpenBao на сервере
export VAULT_TLS_SERVER_NAME='10.10.7.200'

Запустите команду, чтобы получить токен управления и ключи для операции unseal:

bao operator init # Сохраните полученные ключи и токен в безопасном месте

Непосредственно перед логином вам, возможно, нужно провести операцию unseal с помощью введения полученных ранее ключей через команду:

bao operator unseal # вводится несколько раз для каждого ключа

Входим в режим управления хранилищем:

bao login <INITIAL_ROOT_TOKEN>

Для altflow нам понадобится не kv-v2, а обычный non-versioned KV (KV v1), включить который нужно так:

bao secrets enable -path=kv kv

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

Примечание! Данная инструкция может помощь в упрощённом развёртывании altflow. В реальности же правильно рассмотреть развёртывание openbao внутри кластера kubernetes.

Создание AppRole

Для доступа из kubernetes, вероятнее всего, потребуются RoleID и SecretID.

Для того чтобы создать их, включите AppRole auth method:

bao auth enable approle

Создайте policy только на чтение нужных секретов в отдельном файле altflow-read.hcl:

cat > altflow-read.hcl <<'EOF'
path "kv/altflow-system-helm-secrets/*" {
  capabilities = ["read", "list"]
}

path "kv/altflow-builds" {
  capabilities = ["create", "update", "read", "list"]
}

path "kv/altflow-builds/*" {
  capabilities = ["create", "update", "read", "list"]
}
EOF

Загрузите policy в OpenBao:

bao policy write altflow-read altflow-read.hcl

Создайте AppRole (в документации AppRole описано, что роль создаётся на пути auth/approle/role/<name>):

bao write auth/approle/role/altflow-secrets \
  token_policies="altflow-read" \
  token_ttl="1h" \
  token_max_ttl="24h"

Получите RoleID:

bao read auth/approle/role/altflow-secrets/role-id

Сгенерируйте SecretID:

bao write -f auth/approle/role/altflow-secrets/secret-id