はじめに
WindowsのActive Directoryは、ユーザ認証にKerberos認証を採用しています。
そのため、AnsibleのWinRM接続でWindowsドメインアカウントを使用する際は、Kerberos認証を利用します。
AnsibleでKerberos認証を利用するにはpython kerberosモジュールが必要です。
また、Ansibleで利用するWindowsドメインアカウントは、ターゲットマシンの管理者権限が必須です。
本記事は、オフライン環境で行った手順をまとめています。
Ansible側の環境
- OS:CentOS7.6
- Ansible:Ansible2.7
- pywinrmインストール済み
Windows側の環境
本記事では、例として以下の値を利用します。
- ドメイン:example.com
- Active Directory:windows001
- Windowsドメインアカウント:admin
- ターゲットマシン:windows002 , windows003
1. python kerberosモジュールをインストールする
まずはKerberosのクライアントパッケージをインストールします。
$ yum -y install krb5-devel krb5-libs krb5-workstation
以下のパッケージを任意の作業フォルダにコピーします。
- kerberos-1.3.0.tar.gz
- requests-kerberos-0.12.0.tar.gz
- pykerberos-1.2.1.tar.gz
作業フォルダに移動し、python kerberosモジュールをインストールします。
$ pip install -f ./ --no-index kerberos-1.3.0.tar.gz
$ pip install -f ./ --no-index requests-kerberos-0.12.0.tar.gz
2. Kerberosのクライアント設定をする(大文字・小文字に注意)
/etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[libdefaults]
default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
kdc = windows001.example.com
admin_server = windows001.example.com
default_domain = example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
3. Windowsドメインアカウント名でトークンの問い合わせを行う
$ kinit admin
パスワードの入力を求められるので、パスワードを入力します。
以下のコマンドでトークンチケットが取得できていることを確認します。
$ klist
4. hostsファイルを編集する
/etc/ansible/hosts
[windows]
windows002
windows003
[windows:vars]
ansible_user=admin@EXAMPLE.COM
ansible_password=<パスワード>
ansible_port=5986
ansible_connection=winrm
ansible_winrm_transport=kerberos
ansible_winrm_server_cert_validation=ignore
これでwindows002 , windows003に対してPlaybookが実行できるようになります!