Как выполнить поиск по cyberarkpassword для всех хостов в группе инвентаризации и записать ключи в отдельные файлы pem? - PullRequest
0 голосов
/ 15 июня 2019

Ansible версия 2.7.9

Я пишу сборник рассказов для развертывания части программного обеспечения в среде Linux.Доступ SSH к этим системам защищен CPM (Cyberark), который используется как менеджер ключей ssh.

Я понял большую часть логики, за исключением одного куска.Плейбук должен пройтись по хостам в группе инвентаризации, найти закрытый ключ ssh в Cyberark для каждого хоста, а затем использовать каждый ключ для подключения ssh к каждому хосту в группе инвентаризации для установки программного обеспечения.Я борюсь с тем, как сделать так, чтобы это работало в ANSIBLE.

Я прочитал документацию add_host и cyberarkpassword , а также около 4 часов поиска по стеку и в блогах, и не смог найти ни одного примера, даже близкого к тому, что япытаясь сделать.

Что касается того, как я думаю , это должно работать:

  • Используя модуль поиска cyberarkpassword, прокрутите хосты в группе ресурсов, указанной в {{ env }}.Значение для этого будет передано через --extra-args.
  • Получить закрытый ключ ssh для каждого хоста.
  • Зарегистрировать вывод из поиска и скопировать на диск, снова просматриваякаждого хоста и присвоив файлу имя {{ inventory_hostname }} .pem
  • Наконец, чтобы использовать его в следующем воспроизведении, установите переменную ansible_ssh_common_args: "-o StrictHostKeyChecking=no -i {{ deploy_temp_dir}}/keys/{{ inventory_hostname }}.pem"

Но я не могу понятьиз того, как соединить часть цикла loop-lookup-write на диск.

Пример файла инвентаризации

[local]
localhost

[local:vars]
ansible_connection=local

[corp:children]
corp-onprem-dev
corp-onprem-stage
corp-onprem-prod
corp-cloud-dev
corp-cloud-stage
corp-cloud-dev

[corp-onprem-dev]
host1
host2
host3

[corp-onprem-stage]
host1
host2
host3
[corp-onprem-prod]
host1
host2
host3
[corp-cloud-dev]

[corp-cloud-stage]

[corp-cloud-prod]

deploy.yml - этот код не работает , только моя попытка выяснить это.

- name: retrieve ssh keys for hosts in the specified group, and write them to disk
  hosts: local
  gather_facts: no
  tasks:
    - name: lookup ssh private key for each host
      debug: msg={{ lookup("cyberarkpassword", cyquery)}}
      vars:
        cyquery:
          appid: 'myapp'
          query: 'Safe=mysafe;Folder=Root;Object={{ env[0] }}'
          output: 'Password'
      loop: groups['{{ env }}']
      register: sshkeys
    - name: Copy ssh key to disk
      copy:
        content: "{{ sshkeys }}"
        dest: "{{ deploy_temp_dir }}/keys/{{ env[0] }}.pem"
        mode: 0600
      loop: groups['{{ env }}']

1 Ответ

0 голосов
/ 15 июня 2019

Неясно, как «использовать каждый (закрытый) ключ для ssh на каждом хосте».

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

Предположим, localhost (контроллер) может подключить хосты.

Посмотрите на содержимое переменной sshkeys

- debug:
    var: sshkeys

Среди списков вы, вероятно, увидите 2 элемента, которые вы ищете.(Установите код в соответствии с тем, что вы получаете.)

sshkeys.results[].item  ...... inventory_hostname
sshkeys.results[].password ... ssh private key

Используйте template для хранения ключей в файлах.Поскольку воспроизведение выполняется на localhost Delegate_to , должно использоваться для хранения файлов на хостах.

- template:
    src: hostname.pem.j2
    dest: "{{ deploy_temp_dir }}/keys/{{ item.item }}.pem"
  loop: "{{ sshkeys.results }}"
  delegate_to: "{{ item.item }}"

.

$ cat hostname.pem.j2
{{ item.password }}

(Не проверено. У меня нет CyberArk. Хранение паролей в дисковых файлах может нарушать стандарты безопасности.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...