Ansible入門:Ansible TowerでのLDAP認証
Ansible 入門シリーズの続く記事では、ユーザーが LDAP 資格情報でログインできるように Red Hat Ansible Tower を設定するための基本的な操作方法について説明します。この記事では、問題の特定と解決に役立つトラブルシューティングのヒントをいくつかご紹介します。LDAP ツリーまたはフォレストのマップがある場合、LDAP 資格情報を使用したユーザーのログインにこの記事が役立つはずです。
構成設定
LDAP 認証に対応するように Ansible Tower を設定するには、[Settings (設定)] (歯車アイコン) を選択し、[Configure Tower (Tower の構成)] セクションに移動します。ここで、構成設定内の [Authentication (認証)] 領域に注目します。サブカテゴリは [LDAP] に設定します。
注目すべき主要なフィールドは次のとおりです。
- LDAP サーバーの URI
- バインド DN とパスワード
- ユーザーとグループの検索
その他のフィールドを使って LDAP 検索を絞り込み、本番環境で使用されているリソースを減らしたり、組織をマッピングしたりすることができます。
[LDAP URI] は単に、プロトコル (ldap://) が先頭に追加された LDAP サーバーの IP またはホスト名です。

[bind DN (バインド DN)] は、LDAP 構造を読み取るためのアクセス権を持つユーザーの資格情報とパスワード (その後にグループとドメインが続く) になります。

ユーザー検索の絞り込み
Ansible Tower では LDAP サーバーに接続でき、ユーザー検索を絞り込むと、構成が完了します。ユーザー検索項目は、場所とスコープで指定されたパターンを見つけます。ユーザー ID は Active Directory ツリーで検索されるため、ここでは sAMAccountName の値です (uid ではありません)。


ユーザーとグループの検索
ユーザーとグループの検索は、ディレクトリ構造の複雑さに応じて、トラブルシューティングが必要となることが最も多い場所です。openldap パッケージの ldapsearch ツールを使用して、LDAP サーバーに対する検索を構成します。基本的な検索から開始し、詳細条件を段階的に追加していくことで、検索を絞り込みます。
ldapsearch -x -H ldap://10.10.10.254 -D "CN=jarvis,CN=Users,DC=shield,DC=team" -w 01Password! -b "cn=Users,dc=shield,dc=team"
この検索は一般的なものであり、検索結果は指定した場所
(-b "cn=Users,dc=shield,dc=team") に表示されます。この場所は、サーバーに対する LDAP 検索スコープで使用されるものと一致する場所です。
[LDAP Require Group (LDAP 許可グループ)] フィールドと [LDAP Deny Group (LDAP 拒否グループ)] フィールドでは、1 つの項目を追加することで、検索スコープを 1 つのグループに絞り込むことができます。[LDAP User DN Template (LDAP ユーザー拒否テンプレート)] フィールドでは、フィールドに入力した形式にスコープを限定します。構成ページ内の [LDAP User Search (LDAP ユーザー検索)] フィールドでは、以下を使用します。
- SCOPE_SUBTREE:ディレクトリツリーを再帰的に検索する
- SCOPE_ONELEVEL:ツリーの 1 レベル下を検索するように指定する
- SCOPE_BASE:ベース DN で指定されたレベルのみを検索する
LDAP 検索ツールから返された結果を使用して、検索する値 (例:uid または sAMAccountName、group または groupOfNames) を選択します。[LDAP User DN Template (LDAP ユーザー拒否テンプレート)] は [LDAP User Search (LDAP ユーザー検索)] より優先されるため、設定時には必ずどちらか一方のみを使用してください。

Windows/AD 管理者の場合
これらのステップでは、LDAP ユーザーにログインするためのシングルサインオンを Ansible Tower に設定します。LDAP に接続されたホストに対して認証するための Ansible Tower の設定は、[Credentials (認証情報)] セクションで行います。Ansible に適用される Windows ホストに対する認証にも同様の考慮事項が適用されます。この考慮事項には、ホスト上で WinRM が接続を受け入れるようにするための準備も含まれます。Active Directory 内の Windows ホストに対してジョブを準備して実行する前に、資格情報が適切に設定されていることを確認してください。
ユーザー属性マップ
最後に、LDAP 認証をテストする際に、ある程度の時間をかけて、ユーザー属性と組織のマッピングを確認することは重要です。LDAP ユーザー属性マップでは、LDAP 属性が Ansible Tower 属性にマッピングされます。属性の例としては、名、姓、E メールなどがあります。この場合、E メール属性は、使用されている Active Directory Server の userPrincipalName にマッピングされます。ほとんどの LDAP レイアウトでは、デフォルトは「mail」ですが、適切にマップするためには構造を把握しておく必要があります。

[LDAP User Flags By Group (グループ別 LDAP ユーザーフラグ)] フィールドを使用すると、マッピングをすばやく絞り込むことができます。たとえば、「secret」という名前の OU に属するユーザーは、次の例では、Ansible Tower でスーパーユーザー・グループに割り当てられます。

マッピングが複雑化すると、Ansible Tower でのチームや組織へのマッピングも同様に複雑化します。この例では、1 つの組織で、組織の管理者が「secret」という名前の OU として定義されています。「secret」は [User Flags By Group (グループ別ユーザーフラグ)] で一致したものです。
{
"Shield": {
"admins": [
"ou=secret,dc=shield,dc=team"
],
"remove_admins": false,
"remove_users": false,
"users": true
}
}
ユーザーは、[LDAP Team Map (LDAP チームのマップ)] フィールドを使用してチームに割り当てられます。次の例の単純な LDAP データベースでは、2 つのグループをそれぞれ同じ組織内の 2 つのチームにマッピングしています。
{
"secret": {
"organization": "Shield",
"users": "OU=secret,DC=shield,DC=team",
"remove": false
},
"avengers": {
"organization": "Shield",
"users": "OU=avengers,DC=shield,DC=team",
"remove": false
}
}
ユーザーとグループの Ansible Tower へのマッピングの難しさは、LDAP データベースのレイアウトに応じて異なります。LDAP 検索コマンドを使用して、グループクエリを絞り込み、それに応じて Ansible Tower でマッチングします。
要約
- Ansible Tower にログインする LDAP ユーザーを認証する際には、
LDAP サーバーの URI、バインド DN とパスワード、ユーザーとグループの検索
を使用する - [LDAP User DN Template (LDAP ユーザー拒否テンプレート)] を使用すると、[LDAP User Search (LDAP ユーザー検索)] がオーバーライドされる
- [LDAP Require Group (LDAP 許可グループ)] または [LDAP Deny Group (LDAP 拒否グループ)] を使用して、Ansible Tower によって検索されるグループの数を削減する
- Ansible Tower の LDAP ユーザー属性は、LDAP ユーザー属性マップで定義される
- [LDAP User Flags By Group (グループ別 LDAP ユーザーフラグ)] を使用して、Ansible Tower の LDAP ユーザーフラグを設定する
- LDAP 内のグループは、LDAP 組織マップ内の組織や LDAP チームマップ内のチームにマップされる
詳細については、こちらの Ansible Tower のページをご覧ください。