VMware ESXi上で稼働しているWindowsのWinRM(HTTPS)の有効化をAnsibleで自動化する方法 | 日常系エンジニアのTech Blog

VMware ESXi上で稼働しているWindowsのWinRM(HTTPS)の有効化をAnsibleで自動化する方法 | 日常系エンジニアのTech Blog

WindowsをAnsibleから操作するには、現段階だとWinRM経由からとなります。
WinRM(Windows Server 2016/2012)は標準でHTTPSが有効になっていません。
そこで、ansibleのリポジトリで ConfigureRemotingForAnsible.ps1 というスクリプトが用意されています。
これを使えば簡単にHTTP/HTTPSでの接続が有効化できますが、スクリプトの内容通りの証明書しかできなかったりBasic認証が有効化されたりします。
また、以下のような 注意書 きがあります。

The ConfigureRemotingForAnsible.ps1 script is intended for training and development purposes only and should not be used in a production environment, since it enables settings (like Basic authentication) that can be inherently insecure.

要件次第では、自己証明書でも、それぞれ秘密鍵を分けたいとかファイルを管理しておきたいなど出てくるかもしれません。
また、一つ一つWindowsのWinRMを有効化するのも大変です。自動化したいと思ってる人は多いと思います。
そこでここでは、証明書の作成からWinRMのHTTPS有効化までAnsibleを使って自動化する例を書いてみようと思います。
※Ansibleを使うためにAnsibleで自動化するというのも面白いですね 🙂

環境

バージョン情報

項目 バージョン
Ansible 2.8.2
Windows Server 2016
vCenter 6.7.0
ESXi 6.7.0
CentOS 7.6
Python 3.6

登場人物

ホスト名 IP 説明
Windows01 192.168.0.155 WinRMのHTTPSを有効化するホスト
Windows01 192.168.0.155 WinRMのHTTPSを有効化するホスト

処理の流れ

今回やる処理の流れは以下のようになっています。

  • それぞれのサーバの証明書(秘密鍵、CSR、サーバ証明書、PKCS12)を作成
  • PKCS12のインポートおよびWinRMのHTTPSを有効化するpowershellを自動で作成
  • vSphere API経由でWindows Serverにファイル(PKCS12, powershell)を転送
  • vSphere API経由でpowershellを実行
  • Windows Serverに保存したPKCS12とpowershellを削除
  • ネットワーク経由でWinRMを有効化したWindowsの5986ポートリッスンをチェック
  • 最後に win_ping モジュールを使って疎通確認

それでは、実際にやってみましょう 🙂

準備

ansible-vmware-windows-winrm-setupの取得

今回は事前に作ってある ansible-vmware-windows-winrm-setup を使います。
以下のコマンドを実行してクローンしてください。

クローンしたディレクトリへ移動します。

1

2

(venv) $ cd ansiblevmwarewindowswinrmsetup/

変数ファイルの修正

変数ファイルは以下のように2つあります。

1

2

3

4

vars/

|