Включение модуля salt-api

  1. Создайте конфигурационный файл /etc/salt/master.d/salt-api.conf и задайте в нем значения параметров согласно приведенному примеру:

    rest_cherrypy:
      port: 8000
      host: 0.0.0.0
      debug: "True"
      disable_ssl: "True"
    
    netapi_enable_clients:
    - local
    - local_async
    - local_batch
    - local_subset
    - runner
    - runner_async
    - ssh
    - wheel
    - wheel_async

    Где:

    • rest_cherrypy — параметры управления конфигурацией встроенного веб-сервера Cherrypy, который использует salt-api:

      • port — укажите порт, который будет запущен salt-api (например, 8000);

      • host — укажите хост; значение 0.0.0.0 указывает, что сервер будет доступен по всем IP-адресам;

      • debug — (опционально) включите (True) или отключите (False) режим отладки (debug mode) для salt-api;

      • disable_ssl — (опционально) если в первом шаге вы не установили SSL-сертификаты, задайте значение True;

    • netapi_enable_clients — клиенты, которые могут использовать salt_api для выполнения команд и получения информации:

      • local — позволяет выполнять команды локально на целевых системах;

      • local_async — позволяет выполнять команды локально асинхронно, что означает, что вызов не блокирует выполнение и возвращает управление сразу;

      • local_batch — позволяет выполнять команды в пакетном режиме, что может быть полезно для управления группами хостов;

      • local_subset — позволяет выполнять команды на подмножестве целевых систем;

      • runner — позволяет использовать функции runner, которые предназначены для выполнения задач управления и получения информации о состоянии системы;

      • runner_async — позволяет использовать функции runner, но выполняет команды асинхронно;

      • ssh — позволяет использовать SSH для выполнения команд на удаленных системах;

      • wheel — позволяет использовать функции wheel для управления и мониторинга систем в реальном времени;

      • wheel_async — позволяет использовать функции wheel, но выполняет команды асинхронно.

  1. Cоздайте конфигурационный файл /etc/salt/master.d/api_auth.conf и задайте в нем настройки аутентификации в модуле salt-api.

    Пример файла при использовании PAM-аутентификации:

    external_auth:
      pam:
        salt_api:
           - ".*"
           - "@runner"
           - "@wheel"
           - "@jobs"

    Где:

    • external_auth — настройки параметров внешней аутентификации для заданных пользователей на выполнение определенных функций на агентах (minions);

      • pam —  для аутентификации используется PAM — стандартный механизм аутентификации в Unix-подобных системах:

        • salt_api — имя пользователя (пользователь должен быть добавлен в систему; для пользователя должен быть задан пароль), для которого применяются правила доступа, перечисленные ниже:

          • .* — разрешает доступ ко всем целям;

          • @runner — разрешает доступ к функциям runner — механизму в SaltStack, который позволяет выполнять задачи управления и получать информацию о состоянии системы;

          • @wheel — разрешает доступ к функциям wheel — механизму в SaltStack, который используется для управления и мониторинга систем в реальном времени;

          • @jobs — разрешает доступ к информации о заданиях (jobs), например, просмотр состояния и результатов выполнения заданий.

    Пример файла при использовании LDAP-аутентификации:

    external_auth:
      ldap:
        <доменный пользователь>:
           - ".*"
           - "@runner"
           - "@wheel"
           - "@jobs"
    auth.ldap.uri: 'ldaps://<ip-адрес контроллера домена>:636'
    
    auth.ldap.scope: 2
    auth.ldap.no_verify: True
    auth.ldap.anonymous: False
    auth.ldap.groupou: 'Groups'
    
    auth.ldap.basedn: DC=<имя домена>,DC=<имя домена>,DC=<имя домена> (пример: DC=test,DC=example,DC=com)
    
    auth.ldap.binddn: CN={{username}},CN=Users,DC=<имя домена>,DC=<имя домена>,DC=<имя домена> пример: DC=test,DC=example,DC=com)
    auth.ldap.bindpw: ""
    
    auth.ldap.filter: uid={{username}}
    auth.ldap.accountattributename: memberUid
    auth.ldap.groupclass: posixGroup

    Где:

    • external_auth — настройки параметров внешней аутентификации для заданных пользователей на выполнение определенных функций на агентах (minions);

      • ldap —  для аутентификации используется LDAP — стандартный механизм аутентификации в Unix-подобных системах:

        • <доменный пользователь> — имя пользователя (пользователь должен быть добавлен в систему; для пользователя должен быть задан пароль), для которого применяются правила доступа, перечисленные ниже:

          • .* — разрешает доступ ко всем целям;

          • @runner — разрешает доступ к функциям runner — механизму в SaltStack, который позволяет выполнять задачи управления и получать информацию о состоянии системы;

          • @wheel — разрешает доступ к функциям wheel — механизму в SaltStack, который используется для управления и мониторинга систем в реальном времени;

          • @jobs — разрешает доступ к информации о заданиях (jobs), например, просмотр состояния и результатов выполнения заданий;

    • auth.ldap.uri — URI для подключения к серверу LDAP с использованием защищенного протокола LDAPS (LDAP Secure);

    • auth.ldap.scope — область поиска в LDAP;

    • auth.ldap.no_verify — определяет, следует или нет проверять сертификат сервера LDAP;

    • auth.ldap.anonymous — определяет, будет ли аутентификация производиться анонимно или нет;

    • auth.ldap.groupou — имя контейнера (или организационной единицы), в котором находятся группы пользователей;

    • auth.ldap.basedn — базовый DN (Distinguished Name) для поиска в LDAP — это корень дерева, где начинается поиск пользователей и групп;

    • auth.ldap.binddn — DN пользователя, который будет использоваться для подключения к серверу LDAP; {{username}} должно быть заменено на имя пользователя во время аутентификации;

    • auth.ldap.bindpw — пароль для пользователя, указанного в binddn; если поле пустое, это означает, что используется другой метод аутентификации или пароль отсутствует;

    • auth.ldap.filter-- фильтр для поиска пользователя в LDAP по его UID (идентификатору пользователя); {{username}} должно быть заменено на фактическое имя пользователя;

    • auth.ldap.accountattributename — атрибут, который используется для определения членов группы в LDAP;

    • auth.ldap.groupclass — класс объектов групп в LDAP, который используется для поиска групп пользователей.

Настройка SSL

Чтобы включить модуль salt-api для модуля координации (SaltStack), используя защищенное SSL-соединение, выполните шаги:

  1. Сгенерируйте SSL-сертификат и закрытый ключ для сервера управления (master). В качестве примера здесь и далее будет использоваться сертификат salt-api.crt и закрытый ключ salt-api.key.

  2. Скопируйте сертификат salt-api.crt и закрытый ключ salt-api.key в директорию /etc/pki/tls/certs/.

  3. В конфигурационном файле /etc/salt/master.d/salt-api.conf укажите пути к файлу с сертификатом и закрытому ключу.

    Пример:

    rest_cherrypy:
      port: 8000
      host: 0.0.0.0
      ssl_crt: /etc/pki/tls/certs/salt-api.crt
      ssl_key: /etc/pki/tls/certs/salt-api.key

    Где:

    • port — порт, на котором будет запущен веб-сервер;

    • host — IP-адрес, на котором будет открыт порт для подключения клиентов;

    • ssl_crt — путь до файла с SSL-сертификатом сервера управления (master);

    • ssl_key — путь до закрытого ключа от SSL-сертификата сервера управления (master).