AWS Microsoft ADをAnsibleでユーザ管理する


はじめに

AnsibleでAWS Microsoft ADサービスのユーザ管理をしてみます。
記事ではAWS Microsoft ADにスコープをあてていますが
おそらくそれ以外のActiveDirectoryでも同じように管理できると思います。

参考記事と前処理

  • [AWS Directory Service] Microsoft ADのセットアップ手順

AWS Microsoft ADとADを操作するインスタンスを構築できます。
この記事に従い、AWS Microsoft ADと操作用のインスタンスを立ち上げます。

  • AnsibleでWindowsを操作する準備をする

WindowsでAnsibleのTaskが動くようにしておきます。
オペレーション元はWindowsでなくて大丈夫です。
私は他のLinuxサーバと同じ場所からPlaybookを切り替えて操作できるようにしています。

手順

Windowsサーバのドメイン参加

操作対象のWindowsサーバを、AWS Microsoft ADのドメインに参加させます。
この時、AWS Microsoft ADを作成するときに作成した管理ユーザで
ログインできるか確認しておきます。

ADの利用は、AD上のユーザにログインしてから行う必要があります。

ドメイングループの作成

グループ変数の定義

ここでは、varsファイルでグループ変数を定義します。
リスト型の変数で定義できればどのような方法でもよいでしょう。

vars/main.yml
ad_group:
  - example_gourp_1
  - example_gourp_2
  - example_gourp_3

タスクの実行

tasks/main.yml
- name: create group
  win_domain_group:
    name: "{{ item }}"
    scope: domainlocal
    domain_username: "{{ ad_domain }}\{{ ad_admin_user }}"
    domain_password: "{{ ad_admin_pass }}"
  with_items:
    "{{ ad_group }}"
  • ad_domain
  • ad_admin_user
  • ad_admin_pass

上の3つの変数はどこかで定義しておきます。
それぞれ、AWS Microsoft AD作成時に指定したパラメータを使用します。
最も、ポリシーとして別のユーザを作成し
そのユーザを使ってもよいでしょう。

簡単にパラメータを解説します。
恒例ではありますが、
正確な内容は公式リファレンスを参照してください、
https://docs.ansible.com/ansible/latest/modules/win_domain_group_module.html

パラメータ名 説明
name グループ名です
scope ADのスコープです。私はdomainlocalで運用しています
domain_username ドメインを登録するのに使うユーザ名です
domain_password ドメインを登録するのに使うユーザパスワードです

ドメインユーザの作成

ユーザ変数の定義

varsファイルでユーザの変数を定義します。

vars/main.yml
ad_user:
  - name: ad_example_user1
    last_name: user1_last_name
    first_name: user1_first_name
    list_group:
        - example_gourp_1
        - example_gourp_2
    email: [email protected]
  - name: ad_example_user2
    last_name: user2_last_name
    first_name: user2_first_name
    list_group:
        - example_gourp_1
    email: [email protected]

タスクの実行

tasks/main.yml
- name: create user
  win_domain_user:
    name: "{{ item.last_name }}"
    surname: "{{ item.last_name }}"
    firstname: "{{ item.first_name }}"
    company: company_name
    password: "{{ password[item.name] }}"
    state: present
    update_password: on_create
    groups:
      "{{ item.list_group + ['Domain Users'] }}"
    upn: "{{ item.name }}@{{ ad_domain_name }}"
    email: "{{ item.email }}"
    attributes:
      displayname: "{{ item.name }}"
    domain_username: "{{ ad_domain }}\{{ ad_admin_user }}"
    domain_password: "{{ ad_admin_pass }}"
  with_items: "{{ ad_user }}"

AD操作用ユーザのパラメータはgroup作成時と同じです。

こちらでも簡単にパラメータを解説します。
詳細は同じく公式リファレンスを参照してください。
https://docs.ansible.com/ansible/latest/modules/win_domain_user_module.html

パラメータ名 説明
name ユーザ名です。
password ユーザのパスワードです。
update_password どのタイミングでパスワードをアップデートするかしています。
surname ADのsurnameパラメータの値です。last_nameに相当します。
firstname ADのfirstnameパラメータの値です。
company ADのcompanパラメータの値です。
email ADのemailパラメータの値です。
groups ユーザの所属グループです。ここではDomain Usersグループには必ず所属するようにしています。
upn ユーザー・プリンシパル名です。
attributes Ansibleで予約されているパラメータ以外の属性を指定するときに利用します。辞書型でパラメータのキー:パラメータの値を指定します。
domain_username ドメインを登録するのに使うユーザ名です
domain_password ドメインを登録するのに使うユーザパスワードです

ADの確認

Windows ServerにRDPでリモート接続し、「Active Directory Users and Computers」サービスで
ADの構造を確認することができます。

おわりに

最初は手で構築する必要がありますが、その後はAnsibleで運用をいい感じにできそうです。
SSOなどと組み合わせることによって効率よくユーザ管理できるといいですね。