Перейти к основному содержимому
Версия: Privileged Access Manager 3.4

Ansible Lookup Plugin

С помощью Ansible Lookup Plugin можно управлять учетными данными Indeed PAM в Ansible-плейбуках.
Все запросы на получение и просмотр учетных данных записываются в журнал События.

Чтобы получить учетные данные с помощью Ansible Lookup Plugin:

  1. Выполните предварительную настройку.
  2. Настройте конфигурацию Ansible для доступа к серверу Indeed PAM.
  3. Воспользуйтесь нужным плагином.
Примечание

Для управления данными учетных записей Indeed PAM используется метод Application to Application Password Management (AAPM).

Требования

Для работы с Ansible Lookup Plugin требуется наличие AAPM-лицензии.
Убедитесь, что на хосте, на котором запускается плейбук, установлены следующие компоненты:

Предварительные настройки

Чтобы настроить работу с Ansible Lookup Plugin:

  1. Перейдите в папку с пакетом AAPM для Python SDK и выполните команду:

    pip install pam_aapm-3.4.0-py3-none-any.whl
  2. Перейдите в папку с дистрибутивом Lookup Plugin для Ansible Collection и выполните команду:

    ansible-galaxy collection install indeed-pam-3.4.0.tar.gz
  3. Перейдите в консоль администратора Indeed PAM и добавьте приложение.
  4. Для приложения добавьте разрешение с включенной опцией Разрешить просмотр учетных данных.
    Разрешение позволит приложению использовать пароли и SSH-ключи учетных записей PAM.
  5. Назначьте администраторов, которые могут просматривать пароль приложения.
  6. Откройте консоль пользователя Indeed PAM и перейдите на вкладку Приложения.
  7. Просмотрите пароль от приложения и сохраните его.

Настройка Ansible

Чтобы установить соединение с сервером Indeed PAM и получить токены доступа, настройте конфигурацию Ansible одним из способов:

  • Конфигурационный файл ansible.cfg — укажите переменные в файле, если конфигурация между запусками сценария не меняется. Рекомендуется шифровать учетные данные или передавать их через переменные окружения.
  • Переменные окружения — укажите переменные в терминале перед запуском сценария. Переменные существуют только в рамках текущей сессии. Рекомендуется использовать в CI/CD-автоматизациях.
  • Ansible-плейбук — передайте параметры как именованные аргументы при вызове функции lookup(). Способ подходит, когда нужно обратиться к другому серверу или переопределить параметр, например ca_cert.

Также вы можете определить конфигурацию несколькими способами одновременно.
Подробнее о работе этого сценария — в документации Ansible.

Параметры конфигурации
ПараметрПеременная окруженияТребование
Описание
idp_serverPAM_IDP_SERVERОбязательныйURL-адрес компонента Indeed PAM IdP
core_serverPAM_CORE_SERVERОбязательныйURL-адрес компонента Indeed PAM Core
usernamePAM_USERNAMEОбязательныйНазвание приложения
passwordPAM_PASSWORDОбязательныйПароль указанного приложения. Администратор приложения может просмотреть пароль в консоли пользователя.
timeoutPAM_TIMEOUTНеобязательныйВремя ожидания ответа на запрос в секундах.
Значение по умолчанию: 30.0.
verify_sslPAM_VERIFY_SSLНеобязательныйВыполнить проверку SSL-сертификата сервера. Возможные значения:
  • True
  • False
Значение по умолчанию: True.
Примечание: Отключение проверки SSL-сертификата сервера повышает риск перехвата данных. Если вы отключили проверку — рекомендуется в коде оставить комментарий с обоснованием.
ca_certPAM_CA_CERTНеобязательныйПуть к сертификату для проверки SSL-соединения. Укажите, если сервер PAM использует сертификат, подписанный внутренним УЦ. Сертификат должен быть в формате PEM.

Пример: ca_cert="/path/to/ca.crt".
Значение по умолчанию: None.
Примеры
[pam]
idp_server = https://pam.company.com/idp
core_server = https://pam.company.com/core
username = my-app
password = your-app-password
timeout = 30
verify_ssl = true
ca_cert = /path/to/ca.crt

Плагины

Примечание

Используйте параметр no_log: true, чтобы не выводить учетные данные в консоль после завершения задачи.

Плагины Ansible вызываются через функцию lookup() и позволяют получить из Indeed PAM:

get_password

Плагин используется для получения пароля учетной записи PAM.

Параметры get_password
ПараметрТребование
Описание
_termsОбязательныйИмя учетной записи в формате:
  • LOCATION/username — рекомендуемый формат
  • LOCATION\username — требует экранирования в Python-скриптах, например "SERVER\\admin"
Передается вторым аргументом после имени плагина.
reasonНеобязательныйПричина получения учетных данных. Необходимость указать причину определяется политикой, действующей на учетную запись.
errorsНеобязательныйРежим обработки ошибок:
  • strict — выводит ошибку и прерывает выполнение задачи. Используйте, когда выполнение сценария без пароля невозможно.
  • warn — выводит предупреждение и присваивает переменной пустую строку. Используйте, если отсутствие пароля не влияет на сценарий.
  • ignore — не выводит сообщения и присваивает переменной пустую строку. Используйте, если ошибку обрабатываете самостоятельно.
- name: Получить пароль администратора
ansible.builtin.set_fact:
admin_password: "{{ lookup('indeed.pam.get_password', 'PROD-SERVER/admin',
reason='Обслуживание', errors='strict') }}"
no_log: true

get_key

Плагин используется для получения SSH-ключа учетной записи PAM.

Параметры get_key
ПараметрТребование
Описание
_termsОбязательныйИмя учетной записи в формате:
  • LOCATION/username — рекомендуемый формат
  • LOCATION\username — требует экранирования в Python-скриптах, например "SERVER\\admin"
Передается вторым аргументом после имени плагина.
decryptНеобязательныйПолучить расшифрованный SSH-ключ. Возможные значения:
  • True
  • False
Значение по умолчанию: True.
reasonНеобязательныйПричина получения учетных данных. Необходимость указать причину определяется политикой, действующей на учетную запись.
errorsНеобязательныйРежим обработки ошибок:
  • strict — выводит ошибку и прерывает выполнение задачи. Используйте, когда выполнение сценария без SSH-ключа невозможно.
  • warn — выводит предупреждение и присваивает переменной пустую строку. Используйте, если отсутствие SSH-ключа не влияет на сценарий.
  • ignore — не выводит сообщения и присваивает переменной пустую строку. Используйте, если обрабатываете ошибку самостоятельно.
Параметры ответа
ПараметрОписание
Если в запросе decrypt=True
keySSH-ключ учетной записи в формате PEM
Если в запросе decrypt=False
keyЗашифрованный SSH-ключ
passphraseПароль зашифрованного ключа
# Расшифрованный ключ (по умолчанию)
- name: Развернуть SSH-ключ
ansible.builtin.copy:
content: "{{ lookup('indeed.pam.get_key', 'LINUX-SERVER/automation',
reason='Обслуживание', errors='warn')) }}"
dest: /home/deploy/.ssh/id_rsa
mode: '0600'
no_log: true

# Зашифрованный ключ с паролем
- name: Получить SSH-ключ и его пароль
ansible.builtin.set_fact:
ssh_creds: "{{ lookup('indeed.pam.get_key', 'LINUX-SERVER/automation',
decrypt=false) }}"
no_log: true

get_accounts

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

Параметры ответа

Ответ содержит список учетных записей в формате словаря (dict) с параметрами из таблицы.

Параметр
Описание
display_nameИмя учетной записи
requires_reasonПараметр определяет необходимость указать причину для просмотра учетных данных согласно политике. Возможные значения:
  • true
  • false
- name: Показать доступные учетные записи
ansible.builtin.debug:
msg: "{{ lookup('indeed.pam.get_accounts') }}"

- name: Показать только имена учетных записей
ansible.builtin.debug:
msg: "{{ lookup('indeed.pam.get_accounts') | map(attribute='display_name') | list }}"

Использование Ansible Vault

Рекомендуется шифровать учетные с помощью компонента Ansible Vault, а не хранить их в открытом виде.

Чтобы зашифровать пароль приложения:

  1. Откройте терминал и выполните команду:

    ansible-vault encrypt_string --ask-vault-pass '<password>' --name '<variable>'
    • password — пароль приложения Indeed PAM, который нужно зашифровать
    • variable — имя переменной для шифрования
  2. Введите пароль, который используется для расшифровки переменной при запуске плейбука.
    В результате в терминале отобразится зашифрованная переменная.

  3. Создайте файл в формате YAML или JSON и сохраните в него результат команды.

    vault_pam_password: !vault |
    $ANSIBLE_VAULT;1.1;AES256
    31643864386664376639656162346664313937633035346638656139376138656163376638656164
    6337663961383964666137633930626439656637666137660a31323334353637383930616263646566
    30313233343536373839616263646566303132333435363738396162636465660a6162636465663132
  4. Укажите параметры переменной в плейбуке:

    • vars_files — путь к файлу, в котором хранится зашифрованная переменная
    • password — имя переменной

    Пример
    - name: Получить пароль с использованием Vault
    hosts: localhost
    gather_facts: false
    vars_files:
    - ./vault.yml
    tasks:
    - name: Запросить пароль учетной записи из PAM
    ansible.builtin.set_fact:
    db_password: "{{ lookup('indeed.pam.get_password',
    'SERVER/admin',
    idp_server='https://pam.company.com/idp',
    core_server='https://pam.company.com/core',
    username='my-app',
    password=vault_pam_password) }}"
    no_log: true
  5. Запустите плейбук с параметром --ask-vault-pass, чтобы Ansible запросил пароль для расшифровки переменной:

    Если настройки подключения указаны в плейбуке
    ansible-playbook playbook.yml --ask-vault-pass
    Если настройки подключения указаны в файле inventory.yml
    ansible-playbook playbook.yml -i inventory.yml --ask-vault-pass

Рекомендации по безопасности

  1. Используйте параметр no_log: true, чтобы не выводить учетные данные в консоль при завершении задачи.
  2. Не храните пароли в открытом виде — используйте Ansible Vault для шифрования учетных данных.
  3. Проверка SSL-подключения включена по умолчанию. Отключайте ее только для тестирования в изолированных средах.
  4. При одновременном запуске сценария на разных хостах рекомендуется указывать адрес хоста в причине подключения. Пример: reason='host={{ ansible_host }}; operation=maintenance'.