Параметры СУБД#

В составе платформы Astra Automation используются две СУБД:

  • PostgreSQL – реляционная;

  • Redis – нереляционная.

PostgreSQL#

СУБД PostgreSQL необходима для хранения данных компонентов платформы. Возможно использование уже существующего кластера PostgreSQL, например, развернутого в одном из облачных сервисов управляемых баз данных. Если отдельного кластера PostgreSQL нет, экземпляр СУБД можно средствами платформы развернуть на одном из узлов.

Примечание

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

Развертывание средствами платформы#

Чтобы средствами платформы развернуть экземпляр СУБД на отдельном узле, выполните следующие действия:

  1. Создайте в инвентаре группу database и добавьте в нее сведения об узле, например:

    [database]
    database.example.com   ansible_host=192.0.2.101
    
    database:
      hosts:
        database.example.com:
          ansible_host: 192.0.2.101
    
  2. В глобальных переменных укажите значения параметров подключения к СУБД.

При развертывании СУБД средствами платформы в систему автоматически устанавливается расширение hstore. Дополнительные действия не требуются.

Предупреждение

Известная проблема безопасности

При установке Astra Automation с развертыванием сервера PostgreSQL средствами платформы вывод команды содержит пароль пользователя в открытом виде. Чтобы избежать этого, запустите установку с передачей дополнительной переменной:

sudo ./aa-setup -- --extra-vars postgres_users_no_log=true

Проблема проявляется при использовании минимальной или базовой топологий и не распространяется на топологию уровня предприятия.

Проблема будет исправлена в версии 1.2-upd4.

Внешняя СУБД#

Если у вас уже есть кластер PostgreSQL, выполните следующие действия:

  1. Создайте в кластере PostgreSQL пользователей и принадлежащие им базы данных для используемых компонентов платформы.

  2. Убедитесь, что в инвентаре установщика группа database существует, но не содержит узлов.

  3. В глобальных переменных укажите значения параметров подключения к СУБД.

  4. Проверьте, установлено ли расширение hstore для базы данных Private Automation Hub:

    psql -d <pah_database> -c "SELECT * FROM pg_available_extensions WHERE name='hstore';"
    

    Здесь <pah_database> – название базы данных.

    Если расширение не установлено, выполните следующие действия:

    1. Установите дополнительные пакеты для PostgreSQL:

      sudo apt install postgresql-contrib
      
    2. Создайте расширение hstore в базе данных Private Automation Hub:

      psql -d <pah_database> -c "CREATE EXTENSION hstore;"
      
    3. Проверьте корректность установки расширения:

      psql -d <pah_database> -c "SELECT * FROM pg_available_extensions WHERE name='hstore';"
      

      Если расширение установлено и настроено корректно, в терминал выводится таблица следующего вида:

      name   | default_version | installed_version | comment
      -------+-----------------+-------------------+------------------------------------------------------
      hstore |      1.7        |       1.7         | data type for storing sets of (key, value) pairs
      (1 row)
      

Параметры подключения к PostgreSQL#

Параметры подключения Automation Controller, Private Automation Hub и контроллера Event-Driven Ansible к СУБД задаются в глобальных переменных:

# ...
[all:vars]
# СУБД для Automation Controller
pg_host='database.example.com'
pg_port=5432
pg_database='awx'
pg_username='automationcontroller'
pg_password='ctrlpassword'
pg_sslmode='prefer'
postgres_use_ssl='true'
postgres_ssl_cert='/path/to/ssl/cert'
postgres_ssl_key='/path/to/ssl/key'

# СУБД для Automation Hub
automationhub_pg_host='database.example.com'
automationhub_pg_port=5432
automationhub_pg_database='automationhub'
automationhub_pg_username='automationhub'
automationhub_pg_password='hubpgpassword'
automationhub_pg_sslmode='prefer'

# СУБД для контроллера Event-Driven Ansible
automationedacontroller_pg_host='database.example.com'
automationedacontroller_pg_port=5432
automationedacontroller_pg_database='automationedacontroller'
automationedacontroller_pg_username='automationedacontroller'
automationedacontroller_pg_password='edapassword'
automationedacontroller_pg_sslmode='prefer'
---
# ...
all:
  vars:
    # СУБД для Automation Controller
    pg_host: database.example.com
    pg_port: 5432
    pg_database: awx
    pg_username: automationcontroller
    pg_password: ctrlpassword
    pg_sslmode: prefer
    postgres_use_ssl: true
    postgres_ssl_cert: /path/to/ssl/cert
    postgres_ssl_key: /path/to/ssl/key

    # СУБД для Automation Hub
    automationhub_pg_host: database.example.com
    automationhub_pg_port: 5432
    automationhub_pg_database: automationhub
    automationhub_pg_username: automationhub
    automationhub_pg_password: hubpgpassword
    automationhub_pg_sslmode: prefer

    # СУБД для контроллера Event-Driven Ansible
    automationedacontroller_pg_host: database.example.com
    automationedacontroller_pg_port: 5432
    automationedacontroller_pg_database: automationedacontroller
    automationedacontroller_pg_username: automationedacontroller
    automationedacontroller_pg_password: edapassword
    automationedacontroller_pg_sslmode: prefer

Здесь:

  • pg_host, automationhub_pg_host и automationedacontroller_pg_host– IP-адреса или FQDN серверов СУБД для Automation Controller, Private Automation Hub и контроллера Event-Driven Ansible соответственно.

    Значение по умолчанию: пустая строка (используется локальное подключение).

  • pg_port, automationhub_pg_port и automationedacontroller_pg_port – порты для подключения к серверам СУБД для Automation Controller, Private Automation Hub и контроллера Event-Driven Ansible соответственно.

    Значение по умолчанию: 5432.

  • pg_database, automationhub_pg_database и automationedacontroller_pg_database – названия БД для Automation Controller, Private Automation Hub и контроллера Event-Driven Ansible соответственно.

    Примечание

    Если СУБД развернута средствами платформы, используйте название awx для базы данных Automation Controller (переменная pg_database в инвентаре установщика). В противном случае работа утилиты aa-setup будет прервана из-за ошибки.

  • pg_username, automationhub_pg_username и automationedacontroller_pg_username – названия учетных записей пользователей БД Automation Controller, Private Automation Hub и контроллера Event-Driven Ansible соответственно.

  • pg_password, automationhub_pg_password и automationedacontroller_pg_password – пароли пользователей БД Automation Controller, Private Automation Hub и контроллера Event-Driven Ansible соответственно.

    При использовании локального подключения пароль указывать не требуется.

  • pg_sslmode, automationhub_pg_sslmode и automationedacontroller_pg_sslmode – режим использования SSL.

    Может принимать следующие значения:

    • prefer – подключение к БД будет защищено с помощью SSL, если использование шифрования поддерживается настройками сервера (по умолчанию);

    • verify-full – защита подключения с помощью SSL необходима, производится строгая верификация сервера.

  • postgres_use_ssl – использование SSL при подключении к БД Automation Controller:

    • true – включено;

    • false – выключено.

  • postgresql_ssl_cert – полный путь к файлу сертификата, который используется для защиты подключения к серверу СУБД PostgreSQL, развернутому установщиком платформы.

  • postgresql_ssl_key – полный путь к файлу ключа сертификата, который используется для защиты подключения к серверу СУБД PostgreSQL, развернутому установщиком платформы.

    Примечание

    Файлы сертификата и его ключа должны размещаться в каталоге /opt/rbta/aa/astra-automation-setup/ или одном из его подкаталогов.

    Подробности о поддерживаемых параметрах шифрования см. в документации PostgreSQL.

Redis#

Компоненты Astra Automation могут использовать для кеширования данных сервер Redis. Для соответствия требованиям информационной безопасности в продукте предусмотрена возможность шифрования всех соединений с сервером Redis с помощью TLS.

Добавлено в версии 1.2-upd3.

Режимы работы#

Сервер Redis в Astra Automation может работать в двух режимах:

  • без защиты подключения с помощью TLS – сервер слушает сокет /var/run/redis.sock, а данные передаются в открытом виде;

  • с защитой подключения с помощью TLS – сервер принимает подключения только по адресу 127.0.0.1 на порту 6379, все соединения с сервером шифруются.

Предупреждение

Используйте режим работы сервера Redis без защиты подключения с помощью TLS только в тестовых средах и в целях диагностики.

Включение защиты соединения#

Для включения защиты соединения с сервером Redis с помощью сертификата TLS добавьте в инвентарь установщика глобальную переменную redis_set_tls_mode со значением true:

redis_set_tls_mode='true'

При необходимости можно задать пароль для доступа к серверу Redis с помощью параметра redis_password.

Расположение сертификатов#

Если сервер Redis использует защиту подключения с помощью TLS, при подключении к нему компоненты платформы используют следующие файлы:

  • /etc/astra-automation/redis/client_certs/client.crt – клиентский сертификат;

  • /etc/astra-automation/redis/client_certs/client.key – приватный ключ клиентского сертификата;

  • /etc/astra-automation/ca/astra-automation-managed-ca-cert.crt – корневой сертификат центра сертификации.

Примечание

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

Проверка работы защиты соединения#

Для проверки работы защиты соединения с помощью сертификата TLS выполните следующие действия на управляющих узлах Automation Controller после развертывания платформы:

  1. Проверьте настройки сервера Redis:

    sudo grep -i tls /etc/redis/redis.conf
    

    В выводе ожидается наличие строки tls-port 6379.

  2. Убедитесь, что к серверу Redis невозможно подключиться по незащищенному соединению:

    redis-cli -h localhost ping
    

    Ожидаемый результат:

    Error: Connection reset by peer
    
  3. Убедитесь в использовании сертификата TLS при подключении:

    sudo -u awx redis-cli \
      --tls \
      --cert /etc/astra-automation/redis/client_certs/client.crt \
      --key /etc/astra-automation/redis/client_certs/client.key \
      --cacert /etc/astra-automation/ca/astra-automation-managed-ca-cert.crt \
      ping
    

    Ожидаемый результат:

    PONG
    
  4. Обновите список доступных пакетов:

    sudo apt update
    
  5. Установите утилиту tcpdump:

    sudo apt install tcpdump
    
  6. С помощью утилиты tcpdump убедитесь, что содержимое передается в зашифрованном виде:

    sudo tcpdump -i lo -A -n port 6379 -v
    

    В теле пакетов не должно быть читаемого текста, содержимое должно выглядеть как случайный набор символов, например:

    OM-r^ZM-^PM-~M-^DM-E~M-nM-NVM-^@M-7@+09M-^]M-^XM\M-9M-XM-Z+MM-^A-M-QM-+M->+M-^BM- M-^@M-o^EbbM-}M-^EM-Y)M-^CVM-COM-^Y~tM-.^Ts]^\^ZEM-?a^N#M-zM-^NM-rM-kM-BM-XM-RY-M-^M_[cbM-}M-]M-:M-o=[MM-'^HM-1w^OM-^X+^?oM-WM-_T" "M-hM-1M-^[M-%M-nM-KU,M-^WM-`L;o1M->])M-^YM-gM-^MM-U^HM-^N^VhM-}M-^HM-jT^QM-oM-^J.M-\M-xM-L%DM-^]^V^HmlM-^W-^NuM-nM-&vM-DM-^JXM-^Jt1M-.M-/f^WM-Z^?iM-^W*M-l/C0`lM-Y^O{0M-<M-^_M-BvM-NM-?2M-LM-"^K`4M-