Добавление PowerShell хоста к vRealize Orchestrator c Kerberos аутентификацией по HTTPS

В данной статье разберем как подключить Windows Sever в качестве PowerShell хоста к vRealize Orchestrator c использованием аутентификации Kerberos и с шифрованием HTTPS. Kerberos и HTTPS являются де-факто стандартами в современном enterprise и ни одна инфраструктура, где есть хоть малейшее понятие о безопасности не пренебрегает ими, а уж тем более та, где есть потребность в продуктах vRealize.

В принципе на первый взгляд может показаться что задача не является «осадой Трои» и никаких подводных камней не ожидается, да и документация у VMware достаточно полная. Но как раз эта задача отняла у меня много времени и что бы сэкономить чьё-то и родился данный пост.

Что мы имеем:

  • Развернутый vRealize Automation & Orchestrator 8.x.
  • Windows Server 2019 добавленный в домен Active Directory.
  • Домен Active Directory
  • Как написано выше аутентификация Kerberos и обмен пакетами по HTTPS для безопасности.
  • Учетная запись с правами Администратора на Windows Server.

А теперь что нам нужно будет сделать.

Включить PSRemoting на Windows Server

Для того чтобы удаленно управлять хостом Windows с помощью PowerShell, эту функцию нужно на нем для начала включить. Это делается простой командой:

Enable-PSRemoting –Force 

Данная команда включает службу WinRM, служба переходит в режим автозапуска, создается сокет HTTP на порту 5985, создается правило Firewall и так далее. В общем включается удаленное управление операционной системой.

На современных Windows Server системах (2016 и 2019) PSRemoting включен по умолчанию, но позволяет подключаться только устройствам из той же подсети.

Если же Windows Server в домене (как в нашем случае), то проблем быть не должно и скорее всего PSRemoting настроен с помощью групповых политик.

По умолчанию на Windows Server включен только HTTP листенер на порту 5985 и подключиться по HTTPS не выйдет. По HTTPS WinRM слушает 5986-й порт. Проверить, доступен ли WinRM по HTTPS можно командой:

winrm identify -r:https://<ps-host.domain.local>:5986 -auth:kerberos -u:<username@domain.local> -p:<password> -encoding:utf-8 

Запускаем ее на нашей локальной машине и указываем вместо <ps-host.domain.local> — FQDN нашего Windows server, вместо <username@domain.local> – учетную запись локального администратора и вместо <password> его пароль. Скорее всего нам покажут, что соединение не может быть установлено, так как не запущен листенер на HTTPS. Этой же командой можно проверить доступность WinRM и по HTTP, на предмет того настроен ли PSRemoting вообще.

winrm identify -r:http://<ps-host.domain.local>:5985 -auth:kerberos -u:<username@domain.local> -p:<password> -encoding:utf-8 

Что бы настроить WinRM на HTTPS, нужно сначала сгенерировать для этого сертификат. Сделать это можно либо с помощью CA (этот пример тут не рассматривается), либо сгенерировать само-подписной сертификат на нашем PowerShell хосте руками. Открываем PowerShell от имени администратора на нашем будущем PS хосте и вводим команду ниже, естественно подставляя свои значения.

New-SelfSignedCertificate -DnsName <ps-host.domain.local> -CertStoreLocation Cert:\LocalMachine\My 

В выводе команды получаем Thumbprint (отпечаток) свеже-сгенерированного сертификата, выделяем его и копируем, он нам сейчас пригодиться. Далее открываем уже командную строку от имени администратора и вбиваем следующую команду.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=”<ps-hostname>”; CertificateThumbprint=”<xxxxxxxxxxx>”} 

Где, <ps-hostname> — FQDN нашего PowerShell хоста, а вместо <xxxxxxxxxxx> вставляем отпечаток сгенерированного в прошлом шаге сертификата. Эта команда запускает сокет для HTTPS службы WinRM на нашем PowerShell хосте и определяет для него сертификат. Можно повторно проверить доступность WinRM через HTTPS командой выше и убедиться, что теперь служба доступна. На этом с PowerShell хостом закончили.

Конфигурируем vRO для Kerberos

Так уж получилось, что просто так взять и добавить PowerShell хост к Оркестратору по Kerberos не получиться. Мы получим кучу всевозможных ошибок. И происходит это из-за неготовности vRealize Orchestrator из коробки работать с Kerberos. Что бы исправить это нужно подключиться к vRO по SSH и произвести пару манипуляций. В типовых инфраструктурах vRO работает на одной VM вместе с VRA, но бывают случаи, когда к vRA подключают standalone vRO, работающий на отдельной виртуальной машине. Нужно понимать на какой машине работает интересующий нас Оркестратор и подключаться к ней.

Подключаемся по SHH к vRO, переходим в директорию /data/vco/usr/lib/vco/app-server/conf/.

cd /data/vco/usr/lib/vco/app-server/conf/ 

Смотрим. Присутствует ли там файл под названием krb5.conf. Если его нет, то создаем, если есть, то редактируем. Нам нужно привести его к следующему виду.

[libdefaults]
default_realm = LAB.LOCAL
udp_preference_limit = 1
[realms]
LAB.LOCAL = {
kdc = LAB.LOCAL
admin_server = LAB.LOCAL
default_domain = LAB.LOCAL
}
[domain_realm]
.lab.local=LAB.LOCAL
lab.local=LAB.LOCAL

Меняем все LAB.LOCAL на имя вашего домена AD. Осторожнее с предпоследней строчкой, там точку нужно оставить. Далее сохраняем конфиг и назначаем ему разрешения 644.

chmod 644 /data/vco/usr/lib/vco/app-server/conf/krb5.conf 

Теперь переходим к следующему шагу. Службы Оркестратора, как и в принципе большинство сервисов продуктов VMware работают в контейнерах Kubernetes внутри VM. Нам нужно перезапустить под Оркестратора, что бы он принял новые настройки. Сначала найдем этот под. В консоли SSH вводим команду ниже.

kubectl -n prelude get pods 

Нам будет предоставлен список всех подов, работающих на этой VM. Нам нужен под с названием в виде — vco-app-xxxxxx, где xxxx это рамдомный ID. Копируем его название и вводим следующую команду, где подставляем скопированный текст вместо <vco-app-xxxxx>.

kubectl -n prelude delete pod <vco-app-xxxxx>

Данная команда остановит под vRO и потребуется несколько минут для его перезапуска, в это время служба Оркестратора работать не будет. Ждем некоторое время. Можно с помощью команды kubectl -n prelude get pods мониторить запуск пода vRO. После того как под запуститься и vRO станет функциональным можно покинуть консоль SHH и перейти к следующему шагу.

Добавление PowerShell хоста к vRO

Последний этап. Мы подготовили инфраструктуру и осталось дело за малым, добавить хост к vRO. Заходим в панель нашего vRO и переходим в Workflows/Library/PowerShell/Configuration, выбираем Add a PowerShell host и нажимаем RUN. Нам нужно будет заполнить несколько полей и запустить workflow.

На вкладке PowerShell Host заполняем поля:

Name – просто имя ни на что не влияет, но стоит дать его вменяемо.

Host/IP – заполняем FQDN нашего PS хоста, IP адрес или просто hostname не подойдут для Kerberos.

Port – опционально, стоит заполнить если на PS хосте используется отличный от 5986 порт.

Далее вкладка Host Type.

Думаю, тут объяснения излишни. HTTPS, Kerberos и принятие незнакомого vRO сертификата. Следующая вкладка User Credentials.

Session Mode – тут мы можем определить какие учетные данные использовать при работе с этих хостом в дальнейшем, пользователя запускающего workflow (Per User Session) либо определенную учетку (Shared Session). Наш выбор – Shared Session.

User Name – указываем учетку с правами Администратора на PS хосте. Указать нужно именно в виде user@domain.name.

Во вкладке Advanced Options нужно проследить что бы стояло UTF8, остальные параметры опциональны и их можно не трогать. Жмем RUN и через какое-то время PowerShell хост будет добавлен к vRO. После добавления PS хост можно увидеть в Inventory. Далее его можно использовать для запуска PowerShell скриптов, расположенных как нем, так и отправлять на него команды непосредственно с Оркестратора. Результатом выполнения сценариев PowerShell на PS хосте, отправленных с vRO, будет возвращаемый на vRO PS объект, который мы можем использовать для дальнейших действий.

Как видим добавление PowerShell хоста к vRealize Orchestrator с использованием HTTPS и Kerberos не является совсем уж простой операцией и требует определенной подготовки как vRO так и самого хоста.

P.S:

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