注釈
LDAP 認証はエンタープライズレベルのライセンス情報をお持ちのお客様向けの機能です。この設定プロセスを開始する前に有効なエンタープライズライセンスが必要です。さらに接続する LDAP サーバーに、自己署名または企業内の証明局 (CA) で署名された証明書がある場合には、CA 証明書をシステムの信頼される CA に追加する必要があります。追加しない場合には、LDAP サーバーに接続すると、証明書の発行者が認識されていないというエラーが発生します。
管理者は、Tower ユーザーのアカウント認証情報のソースとして LDAP を使用します。ユーザー認証は提供されますが、ユーザーのパーミッションや認証情報は同期されません。組織のメンバーシップ (および組織の管理者) やチームのメンバーシップは同期可能です。
上記のように設定された場合に、LDAP のユーザー名およびパスワードでログインすると自動的に Tower のアカウントが作成され、各ユーザーは通常のユーザーまたは組織の管理者として組織に所属します。
LDAP ログインで作成されたユーザーは、ユーザー名、姓名を変更できず、ローカルのパスワードも設定できません。これは、さらにカスタマイズして他のフィールド名の編集を制限することができます。
Tower の LDAP 統合を設定する方法:
ldapsearch
コマンドを実行します。このコマンドツールは、Tower システムのコマンドライン、他の Linux、OSX システムでインストール可能です。以下のコマンドを使用して、ldap サーバーにクエリーを実行してください。josie および Josie4Cloud は、お使いの設定で機能する属性に置き換えてください。ldapsearch -x -H ldap://win -D "CN=josie,CN=Users,DC=website,DC=com" -b "dc=website,dc=com" -w Josie4Cloud
ここでは CN=josie,CN=users,DC=website,DC=com
は接続ユーザーの識別名です。
注釈
ldapsearch
ユーティリティーは、Ansible Tower に自動的にインストールされませんが、openldap-clients
パッケージからインストールできます。
デフォルトでは、認証タブが最初に表示されます。
CN=josie,CN=users,DC=website,DC=com
を使用します。[
"OU=Users,DC=website,DC=com",
"SCOPE_SUBTREE",
"(cn=%(user)s)"
]
最初の行では LDAP ツリーの中でユーザーを検索する場所を指定します。上記の例では、DC=website,DC=com
から開始して再帰的にユーザーの検索が実行されます。
2 行目は、ユーザーを検索する範囲を指定します。
- SCOPE_BASE: この値は、基本 DN のエントリーのみが返されるように、このエントリーのみを検索するように指定する際に使用します。
- SCOPE_ONELEVEL: この値は、基本 DN の 1 つ下のレベルにあるエントリーをすべて検索するように指定する際に使用します。ここでは、基本 DN や、基本 DN 配下のこのレベルよりも下のレベルにあるエントリーは検索には含めません。
- SCOPE_SUBTREE: この値は、指定した基本 DN も含めて、全レベルの全エントリーを検索するように指定する際に使用します。
3 行目は、ユーザー名を保存するキー名を指定します。
注釈
複数の検索クエリーの場合の正しい構文は以下のとおりです。
[
[
"OU=Users,DC=northamerica,DC=acme,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
],
[
"OU=Users,DC=apac,DC=corp,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
],
[
"OU=Users,DC=emea,DC=corp,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
]
]
sAMAccountName
に格納されている場合に、LDAP ユーザー DN テンプレート には (sAMAccountName=%(user)s)
のデータが投入されます。同様に、OpenLDAP の場合は、キーは uid``であるのでこの行は ``(uid=%(user)s)
となります。 [
"dc=example,dc=com",
"SCOPE_SUBTREE",
"(objectClass=group)"
]
objectclass
は何であるかを指定します。CN=Tower Users,OU=Users,DC=website,DC=com
を使用します。{
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
上記の例は、sn
のキーから名 (last name) でユーザーを取得しています。同じ LDAP クエリーをそのユーザーに使用して、どのキーに保存されているのかを確認することができます。
{
"is_superuser": "cn=superusers,ou=groups,dc=website,dc=com"
}
上記の例では、プロファイルの superuser としてフラグがつけられたユーザーを取得します。
このフォームで入力したこれらの値を使用して、LDAP で正常に認証を行うことができます。
注釈
Tower はユーザーの同期を行いませんが、ユーザーの作成は初期ログイン時に行われます。
Active Directory は、クエリーしたオブジェクトがデータベースで利用できない場合のために、「参照」を使用します。これは、django LDAP クライアントで多くの場合に正しく機能しないので、参照を無効にすると回避できます。/etc/tower/conf.d/ldap.py
ファイルに以下の行を追加して、LDAP の参照を無効にしてください。
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_REFERRALS: False,
}
注釈
Ansible Tower バージョン 2.4.3 以降では、「参照」はデフォルトで無効になっています。以前のバージョンの Tower を実行している場合は、設定ファイルにこのパラメーターを追加することを検討してください。
マッピングフィールドの入力に関する情報は、「LDAP マッピング」を参照してください。
LDAP のロギングを有効にするには、LDAP 設定ファイル /etc/tower/conf.d/ldap.py
で、レベルを DEBUG
に設定する必要があります。
LOGGING['handlers']['tower_warnings']['level'] = 'DEBUG'
次に、ユーザー名、メールアドレスなどの属性をもとに、どのユーザーがどの Tower 組織に配置されるかを制御する必要があります (組織の管理者またはユーザーと、LDAP グループとの間のマッピング)。
キーは組織名です。組織が存在しない場合には、作成されます。値は、各組織のメンバーシップのオプションを定義するディクショナリーです。各組織に対して、組織のユーザーとなるグループ、そして組織を管理するグループを自動的に指定することができます。
admins: None、True/False、文字列または文字列のリスト/タプル
- None の場合は、組織の管理者は LDAP の値をもとに更新されません。
- True の場合は、LDAP の全ユーザーが自動的に組織の管理者として追加されます。
- False の場合は、組織の管理者として追加される LDAP ユーザーはありません。
- 文字列または文字列のリストの場合は、指定したグループに一致する場合に、組織に追加されるグループ DN を指定します。
remove_admins: True/False。デフォルト値は False です。
- True の場合は、指定のグループのメンバーでないユーザーは、組織の管理者リストから削除されます。
users: None、True/False、文字列または文字列のリスト/タプル。admins と同じルールが適用されます。
remove_users: True/False。デフォルト値は False で、remove_admins と同じルールが適用されます。
{
"LDAP Organization": {
"admins": "cn=engineering_admins,ou=groups,dc=example,dc=com",
"remove_admins": false,
"users": [
"cn=engineering,ou=groups,dc=example,dc=com",
"cn=sales,ou=groups,dc=example,dc=com",
"cn=it,ou=groups,dc=example,dc=com"
],
"remove_users": false
},
"LDAP Organization 2": {
"admins": [
"cn=Administrators,cn=Builtin,dc=example,dc=com"
],
"remove_admins": false,
"users": true,
"remove_users": false
}
}
チームメンバー (ユーザー) と LDAP グループ間のマッピングです。キーはチーム名です (存在しない場合に作成されます)。値は、各チームのメンバーシップに関するオプションのディクショナリーとなります。各値には以下のパラメーターを含めることができます。
組織: 文字列。チームが所属する組織の名前。組織とチームの組み合わせが存在しない場合は、チームが作成されます。組織が存在しない場合は、組織が作成されてからチームが作成されます。
users: None、True/False、文字列または文字列のリスト/タプル
- None の場合には、チームメンバーは更新されません。
- True/False の場合には、全 LDAP ユーザーがチームメンバーとして追加/削除されます。
- 文字列または文字列リストの場合は、グループ DN を指定します。ユーザーがこれらのグループのメンバーの場合には、チームメンバーとして追加されます。
remove: True/False。デフォルト値は False です。True の場合は、対象のグループのメンバーでないユーザーは、そのチームから削除されます。
{
"LDAP Engineering": {
"organization": "LDAP Organization",
"users": "cn=engineering,ou=groups,dc=example,dc=com",
"remove": true
},
"LDAP IT": {
"organization": "LDAP Organization",
"users": "cn=it,ou=groups,dc=example,dc=com",
"remove": true
},
"LDAP Sales": {
"organization": "LDAP Organization",
"users": "cn=sales,ou=groups,dc=example,dc=com",
"remove": true
}
}