フィードを購読する

Windows ホストを Red Hat Ansible Automation Platform で管理しているなら、このブログ記事をぜひお読みください。ここでは Active Directory インベントリープラグインに焦点を当てます。このプラグインを使用すると、Active Directory を Ansible Automation Platform の信頼できる情報源として活用できます。まず、インベントリー管理がなぜ重要なのかを俯瞰して見てみましょう。

Ansible Automation Platform は、シンプルで強力なエージェントレスの自動化ツールとして設計されています。

introducing microsoft active directory inventory plug ansible

エージェントレス・アーキテクチャにより、管理対象のデバイスがエージェントをインストールできるデバイスのみに限定されないため、自動化できる対象の範囲が大きく広がります。このエージェントレスな環境では、インベントリー管理が成功の基盤となります。一般的には、次の情報が必要です。

  • どのデバイスを管理する必要があるか。インフラストラクチャの最新で正確なリストはどこで取得できるのか。
  • ノードの自動化の方法を把握するためにノードをどのように分類するか。たとえば、データベースサーバーに対して実行する自動化は、Web サーバーとは異なります。

インベントリープラグインは、これらの問題に対して優れた解決策を提供します。このプラグインは最もシンプルな形式、つまりスクリプトで、信頼できる情報源を特定してサーバーとその特性のリストを収集します。そうした情報は、それらを自動化する方法を理解するのに役立ちます。

Microsoft Windows 環境の管理を考える場合、基本的にサーバーはドメインに登録されるため、Active Directory が極めて魅力的な情報源になります。 Microsoft AD 向けの Red Hat Ansible Certified Content Collection には、Microsoft Active Directory と対話できる優れたモジュール一式と、重要なことに、Active Directory を信頼できる情報源として活用できるインベントリープラグインがあります。このインベントリープラグインを使用すると、Active Directory の属性とグループメンバーシップに基づいてホストをフィルタリングし、グループ化することができます。

では、プラグインの動作を見てみましょう。

コマンドラインから始める

automation content navigator と automation execution environment を使用して、コマンドラインから始めましょう。automation content navigator のインストールと設定の手順については、 コンテンツ作成のドキュメントを参照してください。Ansible Automation Platform 2.4 以降で提供されるサポート付きの実行環境には、Microsoft Active Directory との統合を開始するために必要なものがすべて、すでに含まれています。これには、 microsoft.ad コレクションや必要な Python の依存関係が含まれています。それ以前のリリースの場合、これらの前提条件を含むように実行環境をカスタマイズする必要があります。

幸い、 debug_ldap_client モジュールを使用して、必要な Python の依存関係や、DNS および Kerberos の設定を確認することができます。automation execution environment を使用しているので、これをイメージ内部で実行し、インベントリープラグインに必要な依存関係があることを確認します。このユースケースで使用する Python の依存関係が存在することを確認したいだけなので、トレースバックエラーは無視してかまいません。

$ ansible-navigator exec -- ansible localhost -m microsoft.ad.debug_ldap_client
  < Output Truncated >
"packages": {
    "dnspython": "2.3.0",
    "krb5": "0.5.0",
    "pyspnego": "0.9.0",
    "sansldap": "0.1.0"

Active Directory サーバーにクエリを実行するインベントリー定義を作成するには、インベントリーファイルは microsoft.ad.ldap.yml または microsoft.ad.ldap.yaml とする必要があります。そこで、ここでは microsoft.ad.ldap.yml と名付けることにします。 テストするために、次の設定を使用します。お気づきのように、ユーザー名とパスワードはプレーンテキストになっています。 これは、単に初期接続テストを行い、使用したい属性をいくつか使ってみることができるようにするためです。認証情報は後で修正します。

plugin: microsoft.ad.ldap
server: ms-ad.demolab.local
username: svc-aap-ldap
password: Redhat123
tls_mode: ldaps

これで、Ansible Automation Platform ナビゲーターの "inventory" サブコマンドを使用して、コマンドラインからプラグインをテストできます。ldaps を使用しているため、 /etc/pki/ca-trust パスを使用して、RHEL ホストから実行環境に CA トラストストアをマッピングしています。

出力を調べると、ドメインコントローラーである MS-AD というホストが検出されていることがわかります。 

$ ansible-navigator inventory -i microsoft.ad.ldap.yml --list -m stdout --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
{
"_meta": {
    "hostvars": {
        "MS-AD": {
            "ansible_host": "ms-ad.demolab.local",
            "microsoft_ad_distinguished_name": "CN=MS-AD,OU=Domain Controllers,DC=demolab,DC=local"
        }
    }
},
"all": {
    "children": [
        "ungrouped"
    ]
},
"ungrouped": {
    "hosts": [
        "MS-AD"
    ]
}
}

接続性は良好のようですが、返された情報は少なく、ホストをどのグループにも追加できませんでした。たくさんのパラメーターが文書化されているので、必要に応じてこれらをインベントリープラグインに対して指定し、カスタマイズできます。

実際、Active Directory のすべてのコンピュータ属性は、フィルタリング、変数の設定、またはホストのグループ化に使用できます。 MS-AD ホストで使用可能なすべての属性を表示するには、Active Directory PowerShell モジュールがインストールされている Windows ホストで次の PowerShell コマンドを使用します。

Get-ADComputer -Identity "MS-AD" -Properties *

パラメーターをいくつか追加して、ホストのグループ化を開始しましょう。インベントリー設定ファイル microsoft.ad.ldap.yml を更新して、Active Directory から取得する追加の属性を含めます。更新した例では、"OperatingSystem" と "location" の属性のほか、コンピュータがメンバーとなっているすべてのグループのリストを取得しています。regex_search 行が複雑そうに見えますが心配はいりません。これはドキュメントからコピーして貼り付けたものです。

設定の最後のセクションで Ansible Automation Platform のグループを定義し、ノードを分類できるようにします。すべてのマシンは、自動的に「windows」というグループに追加されます。また、「Production」ドメイングループのメンバーであるホストを、「production」という名前の対応するグループに追加します。最後に、オペレーティングシステムとロケーションの属性に基づき、グループにホストを追加します。これが、最終的な設定ファイルです。

plugin: microsoft.ad.ldap
server: ms-ad.demolab.local
username: svc-aap-ldap
password: Redhat123
tls_mode: ldaps
attributes:
  OperatingSystem:
operating_system:
  location:
  memberOf:
computer_membership: this | map("regex_search", '^CN=(?P<name>.+?)((?<!\\),)', '\g<name>') | flatten
groups:
  windows: true
  production: '"Production" in computer_membership'
keyed_groups:
- key: operating_system | lower
  prefix: os
  default_value: unknown
- key: location | lower
  default_value: unknown
  prefix: location

コマンドラインから最終テストを行います。Active Directory から返された属性を確認しましょう。“__ansible_unsafe” が付けられた値は、単にそれらが jinja2 テンプレートからブロックされていることを意味します。

$ ansible-navigator inventory -i microsoft.ad.ldap.yml -m stdout --host MS-AD --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
{
    "ansible_host": "ms-ad.demolab.local",
    "computer_membership": [
    {
        "__ansible_unsafe": "Production"
    }
    ],
    "location": {
    "__ansible_unsafe": "london-dc1"
    },
    "microsoft_ad_distinguished_name": "CN=MS-AD,OU=Domain Controllers,DC=demolab,DC=local",
    "operating_system": {
    "__ansible_unsafe": "Windows Server 2019 Standard Evaluation"
    }
}

次に、グループメンバーシップを表示しましょう。このサーバーは 4 つの Ansible Automation Platform グループのメンバーとなり、必要に応じてターゲットにできるようになりました。

$ ansible-navigator inventory -i microsoft.ad.ldap.yml -m stdout --graph --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
@all:
  |--@_london_dc1:
  |  |--MS-AD
  |--@os_windows_server_2019_standard_evaluation:
  |  |--MS-AD
  |--@production:
  |  |--MS-AD
  |--@windows:
  |  |--MS-AD

これでテストは完了です。エンタープライズ環境でこれを automation controller で使用する方法を見てみましょう。

automation controller の設定

automation controller を使用すると、自動化のデプロイ、起動、権限委任、監査の方法を標準化することができます。ここで、プレーンテキストの認証情報を修正し、インベントリー設定にいくつかの制御を適用しましょう。

  1. 認証情報タイプを作成する:automation controller を使用すると カスタム認証情報タイプを定義できるため、セキュリティポスチャを維持しながらさまざまなシステムとやり取りすることができます。これを利用することで、プレーンテキストで保持するのではなく、実行時に環境変数を挿入できるようになります。 インベントリープラグインのドキュメントを確認すると、認証用のさまざまな環境変数を受け入れることがわかります。これらの変数を automation controller で使用します。

    automation controller の UI で、[Credential Types] に移動し、[Add] を押します。 認証情報タイプに名前を付けます。ここでは「Microsoft AD Inventory」とします。[Input configuration] では、これらのフィールドを使用して、ユーザー名、パスワード、AD サーバーに必要なフィールドを定義できます。

    fields:
      - id: MICROSOFT_AD_LDAP_USERNAME
    type: string
    label: Username
      - id: MICROSOFT_AD_LDAP_PASSWORD
    type: string
    label: Password
    secret: true
      - id: MICROSOFT_AD_LDAP_SERVER
    type: string
    label: AD Server
    required:
      - MICROSOFT_AD_LDAP_USERNAME
      - MICROSOFT_AD_LDAP_PASSWORD
      - MICROSOFT_AD_LDAP_SERVER

    [Injector configuration] では、インベントリー同期に挿入する変数を定義します。以下を使用します。

    env:
      MICROSOFT_AD_LDAP_SERVER: '{{ MICROSOFT_AD_LDAP_SERVER }}'
      MICROSOFT_AD_LDAP_PASSWORD: '{{ MICROSOFT_AD_LDAP_PASSWORD }}'
      MICROSOFT_AD_LDAP_USERNAME: '{{ MICROSOFT_AD_LDAP_USERNAME }}'

 

  1. 認証情報を作成する :新しい認証情報タイプが作成されたので、対応する認証情報を作成できます。[Credentials] に移動して [Add] をクリックします。新しい認証情報タイプの [Microsoft AD Inventory] を選択し、コマンドラインで行ったのと同様に、ユーザー名、パスワード、Active Directory サーバーを入力します。

  1. プロジェクトを作成する:変更を行ったら関連するピアレビューと承認を通るよう、ソース管理で Active Directory のインベントリー設定を管理したいと思います。automation controller のプロジェクトを使うと、ソース管理リポジトリにマッピングできます。コマンドライン用に作成した設定を、GitHub リポジトリにプッシュしました。 https://github.com/harriso/ansible_microsoft_ad_inventory

    重要: ユーザー名、パスワード、および Active Directory サーバーはソース管理にプッシュされていません。これらは automation controller で認証情報を使って処理されます。インベントリー設定からパラメーターを削除してください。

    automation controller の UI で [Projects] に移動し、[Add] をクリックします。プロジェクトの詳細が表示され、該当するソース管理 URL が入力されています。その他の プロジェクトフィールドの詳細については、ドキュメントを参照してください。

  1. インベントリーを作成する :インベントリーを作成する準備が整いました。[Inventories] に移動し、[Add]、[Add Inventory] の順にクリックします。インベントリーに適切な名前を付けます。

    [Save] をクリックすると、インベントリーで追加のオプションを使用できるようになります。[Sources] を選択し、[Add] をクリックします。ここでインベントリー設定ファイルと認証情報を選択して、設定を 1 つにまとめます。これが完成したインベントリーソースです。

    :ここで唯一注意が必要なのは、インベントリーファイル名フィールドに入力するには手動でファイル名を入力して Enter キーを押す必要があることです。

[Save] をクリックすると、画面の下部に [Sync] ボタンが表示されます。これを押すと、インベントリープラグインが実行されます。進捗状況を確認するには、[Last job status] を確認するか、[Jobs] メニュー項目に移動します。問題なく処理されれば、[Success] と表示されます。

[Inventories]、[Demolab AD Inventory] の順に移動し、[Hosts] タブを選択すると、プラグイン設定を確認できます。ホストがインポートされていることがわかります。

ホストをクリックすると、Active Directory から収集された変数 (属性) も表示できます。最後に [Groups] タブをクリックして、ホストが正しくグループに割り当てられていることを確認します。

 

次のステップ

インベントリー管理は、Ansible Automation Platform を使用した自動化の最適化とスケーリングにとっての鍵になります。Microsoft AD インベントリープラグインは、Ansible Automation Platform が私たちユーザーの仕事を単純化できることを示す多くの例の 1 つです。Active Directory を信頼できる情報源として活用することで、Ansible Automation Platform で Windows 自動化の導入を加速できることを期待しています。


執筆者紹介

Pat Harrison works for Red Hat in the UK as an Associate Principal Specialist Solution Architect focused on Ansible automation. Prior to this, Pat worked as a Red Hat Consultant helping to deliver solutions across various Red Hat products.
Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

チャンネル別に見る

automation icon

自動化

テクノロジー、チームおよび環境に関する IT 自動化の最新情報

AI icon

AI (人工知能)

お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート

open hybrid cloud icon

オープン・ハイブリッドクラウド

ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。

security icon

セキュリティ

環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報

edge icon

エッジコンピューティング

エッジでの運用を単純化するプラットフォームのアップデート

Infrastructure icon

インフラストラクチャ

世界有数のエンタープライズ向け Linux プラットフォームの最新情報

application development icon

アプリケーション

アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細

Original series icon

オリジナル番組

エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー