The Inside Playbook
ACTIVE DIRECTORY と ANSIBLE TOWER
2018年5月6日、寄稿者: John Lieske
※訳注:文中に 「Play」という表現があります。「Play」の概念については、 こちらのドキュメント(英語)を ご参考ください。

Windows 向け「はじめに 」シリーズ第 2 回へようこそ。
前回は、 Ansible を Windows ホストに接続する方法 について説明しました。また、 LDAP ディレクトリの認証 で Ansible Tower へもログインする方法についても見てきました。このブログ記事では、Ansible を使用して Microsoft の Active Directory を管理する方法を紹介します。AD は多くの Windows 環境に関与しているため、Ansible による Windows の管理には、 Active Directory ドメインに対するコマンドの実行が必要になるでしょう。
プロトコルを設定する
Windows ホストへの接続には WinRM を使用します。したがって、Ansible あるいは Tower でこれを設定しておく必要があります。マシンの認証情報は、Ansible Tower では変数と合わせて作成、使用できますが、端末で Ansible を使用する場合、Playbook で変数を使用して明示する必要があります。
---
- name: Your Windows Playbook
hosts: win
vars:
ansible_ssh_user: administrator
ansible_ssh_pass: ThisIsWhereStrongPassesGo
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
- tasks:
ここでローカルの管理者アカウントとパスワードを指定するとともに、接続方法として WinRM を明示的に指定します。認証の検証を無視する変数はドメインに属さないスタンドアローンのホスト用です。なぜなら、ドメインに参加しているインスタンスにはドメインで検証された証明書があるからです。
ドメインの場所
ドメインが存在しない場合、Ansible で新しく追加することもできます。
次の例では、Ansible (上記の設定を使用) が、Server Management から AD Domain Services 機能をインストールし (win_feature
)、ドメインが存在しない場合は、指定の AD セーフモードパスワードで新しい Active Directory ドメインを作成します (win_domain
)。
- name: Install AD Services feature
win_feature:
name: AD-Domain-Services
include_management_tools: yes
include_sub_features: yes
state: present
register: result
- name: Create new forest
win_domain:
dns_domain_name: tycho.local
safe_mode_password: RememberTheCant!
register: result
- name: Reboot after creation
win_reboot:
msg: "Server config in progress; rebooting..."
when: result.reboot_required
ドメインの作成後、サーバーはログインしているユーザーにサーバーが再起動されることを伝えるメッセージを送信し、再起動を開始します。本番環境で使える品質の Playbook ではないものの、これは数個の短い play で迅速に構成できることを示す良い一例です。
テスト用のドメインが既に存在する場合、ドメインの作成は不要ですが、既存のドメインに参加すべきテストマシンが存在する場合があります。Ansible を使うと、そのタスクも同様に数個の play で短縮できます。
- name: Configure DNS
win_dns_client:
adapter_names: "Ethernet 2"
ipv4_addresses:
- 10.0.0.1
- name: Promote to member
win_domain_membership:
dns_domain_name: tycho.local
domain_admin_user: drummer@tycho.local
domain_admin_password: WeNeed2Hydrate!
state: domain
register: domain_state
- name: Reboot after joining
win_reboot:
msg: "Joining domain. Rebooting..."
when: domain_state.reboot_required
手順はご覧の通りです。マシンがディレクトリサーバーと通信できることを確認してから (win_dns_client
)、ドメインに参加すると (win_domain_membership
)、ターゲットが再起動して、ディレクトリへの参加が完了します。難しいことは何もありません。
何ができるのか
win_feature
を使ったロールの管理は、Install-WindowsFeature
と Add-WindowsFeature Powershell
コマンドレットを組み合わせることに似ています。インストールしようとしている機能に使用されている名前がわからない場合は、 Get-WindowsFeature
コマンドレットを使うと、インストール可能な機能を一覧表示できます。
Windows ドメインモジュール ( win_domain
、win_domain_controller
、win_domain_group
、win_domain_membership
、win_domain_user
) は、Active Directory に対して実行される一般的なタスクに対応します。ほとんどのWindows モジュール
では、ローカルアカウントの場合と同様に、適切な特権を持つドメインアカウントをマシン認証 (DOMAIN/User または User@domain.tld を使用)として設定する必要があります。
まとめ
このブログ記事では、WinRM を使用して Windows ホストに接続し、Ansible で win_feature
モジュールを使用して Server Management から AD Domain Services 機能をインストール (新しい Active Directory ドメインが存在しない場合は、win_domain
モジュールを使用して AD ドメインを作成) し、マシンが win_dns_client
を使用してディレクトリサーバーと通信できることを確認してから、win_domain_membership
でドメインに参加する方法について説明しました。
Windows ノード用の Playbook で、ansible_connection: winrm
(必須) および ansible_winrm_server_cert_validation: ignore
(信頼できるローカル CA を追加していない場合) を明示し、接続変数を必ず設定してください。この投稿の冒頭で説明した通り、これら 2 つの変数は、Ansible Playbook の vars:
の後の接続アカウント変数に従っています。Ansible Tower では、これらの変数はジョブテンプレートに含まれます。
Microsoft の Active Directory で Ansible を使用する方法については以上です。次回の投稿では、Ansible と Windows で実行するパッケージ管理について詳しく説明します。