OpenBao - это решение для управления секретами с открытым исходным кодом и форк HashiCorp Vault. Современные приложения полагаются на секреты, в том числе на ключи API, пароли баз данных, сертификаты TLS и ключи шифрования. Когда хардкодированные, хранящиеся в простых файлах или распределенные небезопасно, эти секреты представляют серьезную угрозу безопасности. OpenBao решает эту проблему, предоставляя безопасное, централизованное решение для управления чувствительной информацией. Он обеспечивает секретное хранение, динамическое кредециальное поколение, шифрование как сервис, и мелкозернистый контроль доступа.

Эта статья объясняет, как настроить готовый к производству сервер OpenBao на Ubuntu 24.04. Он включает в себя установку OpenBao, создание сертификатов TLS с помощью Let’s Encrypt, настройку OpenBao для безопасной операции, инициализацию его с помощью нецелевых клавиш и доступ к CLI и веб-UI.

Предварительные условия

  • Сервер под управлением Ubuntu 24.04 или любой другой ОС Linux.
  • Привилегии пользователя: пользователь root или не root с привилегиями sudo.

Конвенции

1
2
# — данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ – данные команды должны выполняться от имени обычного пользователя

Шаг 1. Обновите систему

Мы предполагаем, что у вас установлена ​​новая версия Ubuntu 24.04. Нам необходимо обновить системные пакеты до последних доступных версий. Для этого выполните следующие команды:

1
$ sudo apt update -y && sudo apt upgrade -y

Система может нуждаться в перезагрузке после обновления.

1
$ sudo reboot -f

Шаг 2. Установка OpenBao

Теперь нам нужно загрузить последнюю соответствующую версию OpenBao со страницы загрузок.

1
$ wget https://github.com/openbao/openbao/releases/download/v2.5.0/openbao_2.5.0_linux_amd64.deb

Установить пакет:

1
$ sudo dpkg -i openbao_2.5.0_linux_amd64.deb

Проверьте успешную установку, проверив версию OpenBao:

1
2
$ bao version
OpenBao v2.5.0

Включить автозаполнение при запуске:

1
$ bao -autocomplete-install
⚠️ Предупреждение
Обязательно перезапустите свою оболочку после установки автозаполнения!

Шаг 3. Проверить лимиты памяти Swap

После установки OpenBao вы можете предпринять дополнительные шаги для его обеспечения. против утечки ваших секретов.

1
$ sudo systemctl cat openbao
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# /usr/lib/systemd/system/openbao.service
[Unit]
Description="OpenBao - A tool for managing secrets"
...

[Service]
...
TimeoutStopSec=30
LimitNOFILE=65536
MemorySwapMax=0

[Install]
WantedBy=multi-user.target

Проверьте, что MemorySwapMax=0 отображается в результатах по разделу Service.

Шаг 4. Настройка доступа к файрволу

В этом разделе откройте необходимые порты в брандмауэре, чтобы быть доступным. Шаги настраивают UFW, чтобы разрешить доступ HTTPS к OpenBao UI.

Разрешить доступ HTTPS в порту 8200, где работает веб-UI OpenBao.

1
$ sudo ufw allow 8200/tcp

Открытый порт 80 временно позволяет Certbot выдавать сертификаты TLS.

1
$ sudo ufw allow 80/tcp

Перезагрузите брандмауэр.

1
$ sudo ufw reload

Шаг 5. Создание сертификатов TLS с помощью Let’s Encrypt

Этот раздел охватывает получение сертификатов TLS с помощью Certbot. Установка и использование Certbot для получения бесплатных сертификатов от Let’s Encrypt.

1
$ sudo apt install certbot -y

Получите сертификат для вашего домена. Замените openbao.example.com своим доменом и адресом электронной почты.

1
$ sudo certbot certonly --standalone -d openbao.example.com --non-interactive --agree-tos --email your-email@example.com

Удалите правило порта 80 из брандмауэра после получения сертификатов TLS.

1
$ sudo ufw delete allow 80/tcp

Перезагрузите брандмауэр.

1
$ sudo ufw reload

Создайте каталог для сертификатов хранилища.

1
$ sudo mkdir -p /opt/openbao/tls

Скопируйте сертификаты Let’s Encrypt в директорию хранилища. Заменить openbao.example.com на доменное имя.

1
$ sudo cp /etc/letsencrypt/live/openbao.example.com/fullchain.pem /opt/openbao/tls/cert.pem

Скопируйте частный ключ. Заменить openbao.example.com на доменное имя.

1
$ sudo cp /etc/letsencrypt/live/openbao.example.com/privkey.pem /opt/openbao/tls/key.pem

Установите надлежащую собственность на сертификаты.

1
$ sudo chown -R openbao:openbao /opt/openbao/tls

Установите ограничительные разрешения в файлах сертификатов.

1
$ sudo chmod 600 /opt/openbao/tls/cert.pem /opt/openbao/tls/key.pem

Создайте сценарий автоматического обновления сертификата.

1
2
3
4
5
6
7
8
$ sudo tee /etc/letsencrypt/renewal-hooks/deploy/openbao.sh > /dev/null << 'EOF'
#!/bin/bash
cp /etc/letsencrypt/live/openbao.example.com/fullchain.pem /opt/openbao/tls/cert.pem
cp /etc/letsencrypt/live/openbao.example.com/privkey.pem /opt/openbao/tls/key.pem
chown -R openbao:openbao /opt/openbao/tls
chmod 600 /opt/openbao/tls/*
systemctl reload openbao
EOF

Сделайте сценарий обновления исполняемым.

1
$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/openbao.sh

Шаг 6. Настройка хранилища для производства

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

Сохраните исходный файл конфигурации.

1
$ sudo cp /etc/openbao/openbao.hcl /etc/openbao/openbao.hcl.backup

Создайте конфигурацию производства. Заменить openbao.example.com своим доменом.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ sudo tee /etc/openbao/openbao.hcll > /dev/null << 'EOF'
# Openbao production configuration

# Enable the web UI
ui = true

# Disable memory locking (set to false if you have limited RAM)
disable_mlock = true

# Storage backend - uses local filesystem
storage "file" {
  path = "/opt/openbao/data"
}

# HTTPS listener
listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/opt/openbao/tls/cert.pem"
  tls_key_file  = "/opt/openbao/tls/key.pem"

  # Enforce minimum TLS version
  tls_min_version = "tls12"

  # Use secure cipher suites
  tls_cipher_suites = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"

  # Do NOT require client certificates
  tls_require_and_verify_client_cert = "false"
  tls_disable_client_certs           = "true"
}

# Advertise the correct address to other Openbao nodes
api_addr = "https://openbao.example.com:8200"
cluster_addr = "https://openbao.example.com:8201"
EOF

Включите службу OpenBao, чтобы начать с загрузки.

1
$ sudo systemctl enable openbao

Перезапустите сервис OpenBao с новой конфигурацией.

1
$ sudo systemctl restart openbao

Шаг 7. Настройка окружающей среды хранилища

В этом разделе показано, как настроить переменные среды, Используйте OpenBao CLI (bao) для взаимодействия с запущенным сервером, решая его текущий статус.

Установить переменную среды BAO ADDR. Заменить openbao.example.com своим доменом.

1
$ echo 'export BAO_ADDR="https://openbao.example.com:8200"' >> ~/.bashrc

Перезагрузите конфигурацию.

1
$ source ~/.bashrc

Проверка переменной установлена правильно.

1
$ echo $BAO_ADDR

Вывод:

1
https://openbao.example.com:8200

Испытайте связь с хранилищем.

1
$ bao status

Вывод:

1
2
3
4
5
Key                Value
---                -----
Seal Type          shamir
Initialized        false
Sealed             true

Это показывает, что сервер не был инициализирован и запечатан. Обе эти проблемы должны быть решены, прежде чем вы сможете взаимодействовать с сервером.

Шаг 8. Инициализируйте и разблокируйте хранилище

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

⚠️ Предупреждение
Этот учебник содержит BAO ADDR на https://0.0.0.0:8200 для демонстрационных целей. При развертывании производства он должен соответствовать общедоступному IP-адресу или доменному имени, используемому для подключения к серверу.

Понимание Unseal Process

Когда вы инициализируете хранилище, оно создает:

  • Мастер ключ: Шифрует все ваши секреты
  • Отзывные ключи: Части раздела главного ключа с использованием алгоритма тайного разделения Шамира
  • Root token: Ваш первоначальный доступ к администратору

Настройка по умолчанию создает 5 ключей с порогом 3. Это означает, что вам нужны любые 3 из 5 ключей к unseal OpenBao. Это мешает любому человеку иметь полный доступ.

Инициализируйте хранилище с конфигурацией по умолчанию.

1
$ bao operator init

Вывод:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Unseal Key 1: nk+b+gZRPzUcTx5yDaY7Rxv26m/JqPuuhlYKVLxqvcLV
Unseal Key 2: kXi4dk1pDpTj0efjPekMMEnqMFIGVbbIECyAbYXu4XIi
Unseal Key 3: jPyTlTCeKAMHu16+EYHc6FcmqW+hQ8B9ZN02vQ8VnOmd
Unseal Key 4: 5rvMMnEvcIQdcAtKd+UxQX7FqsDbMEtuHqRijFlyjR9l
Unseal Key 5: igcpq67F04IhxzAFQ/i+VbC5+vPSRNY5Zsg/xHu+qgID

Initial Root Token: s.4H1RRGrHO8cbu2QumVuXUfOV

Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.

Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed!

It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "bao operator rekey" for more information.
📝 Примечание
Обратите внимание: Сохраните эти ключи в отдельных, безопасных местах, так как вы никогда их не увидите.

Используйте следующую команду, чтобы начать распечатывать хранилище. Вы должны запустить эту команду 3 раза с 3 разными ключами.

1
$ bao operator unseal

После этого первого выполнения, значение Unseal Progress показывает 1/3:

1
2
3
...
Unseal Progress    1/3
...

Продолжайте со вторым ключом.

1
$ bao operator unseal
1
2
3
...
Unseal Progress    2/3
...

Используйте третий ключ для завершения.

1
$ bao operator unseal
1
2
3
...
Unseal Progress    3/3
...

В случае успеха вы увидите:

1
2
3
...
Sealed          false
...
📝 Примечание
Обратите внимание: Если отключение не удается, убедитесь, что вы используете 3 разных ключа, а не те же

Для аутентификации CLI с сервером используйте команду bao login с исходным значением Root Token, предоставленным при инициализации хранилища.

1
$ bao login -method=token INITIAL_ROOT_TOKEN

Вывод:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Success! You are now authenticated. The token information displayed below is
already stored in the token helper. You do NOT need to run "bao login" again.
Future OpenBao requests will automatically use this token.

Key                  Value
---                  -----
token                s.4H1RRGrHO8cbu2QumVuXUfOV
token_accessor       4IjIYjvf9TLIPPXgMVFFJYzG
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]

Включить хранилище ключей

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

1
$ bao secrets enable kv

Вывод:

1
Success! Enabled the kv secrets engine at: kv/

Шаг 9. Доступ к веб-UI OpenBao

Теперь к OpenBao можно получить внешний доступ через API. Убедитесь, что любой брандмауэр на экземпляре позволяет трафик на порту 8200.

Этот раздел показывает, как получить доступ к веб-интерфейсу OpenBao, который предоставляет визуальный и интуитивно понятный способ управления секретами вместе с CLI.

Откройте браузер и выберите URL-адрес хранилища:

1
https://openbao.example.com:8200

Вы увидите экран входа в хранилище. Выберите Токен как метод.

Введите свой Root Token и нажмите кнопку Войти.

На панели отображается статус вашего хранилища и доступные секреты.

Завершение

В настоящее время на Ubuntu 24.04 установлена корректная установка с правильным TLS-шифрованием и CLI и веб-доступом. Ваш сервер OpenBao готов надежно хранить и управлять секретами для вашей инфраструктуры.

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