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-WindowsFeatureAdd-WindowsFeature Powershell コマンドレットを組み合わせることに似ています。インストールしようとしている機能に使用されている名前がわからない場合は、 Get-WindowsFeature コマンドレットを使うと、インストール可能な機能を一覧表示できます。

Windows ドメインモジュール ( win_domainwin_domain_controllerwin_domain_groupwin_domain_membershipwin_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 で実行するパッケージ管理について詳しく説明します。

お問い合わせ・製品のご紹介

Red Hat Ansible Automationについてのお問い合わせは

ansible-jp@redhat.com

Red Hat Ansible Automation製品について

詳細はこちら