第24章 LDAP 認証
管理者は、Automation Controller ユーザーのアカウント認証情報のソースとして、Lightweight Directory Access Protocol (LDAP) を使用します。ユーザー認証は提供されますが、ユーザーのパーミッションと認証情報は同期されません。組織のメンバーシップとチームのメンバーシップは、組織管理者が同期できます。
24.1. LDAP 認証のセットアップ リンクのコピーリンクがクリップボードにコピーされました!
設定すると、LDAP のユーザー名とパスワードを使用してログインするユーザーに対して、Automation Controller のアカウントが自動的に作成されます。このユーザーを、通常のユーザーまたは組織管理者として自動的に組織に配置できます。
ユーザーインターフェイス (ローカル) で作成されたユーザーは、別の認証ソリューションを使用して初めて Automation Controller にログインするユーザーよりも優先されます。LDAP などの別の認証方法で再利用する場合は、ローカルユーザーを削除する必要があります。
LDAP ログインで作成されたユーザーは、自分のユーザー名や姓名を変更できず、ローカルのパスワードも設定できません。他のフィールド名の編集を制限するように設定することも可能です。
接続先の LDAP サーバーに自己署名証明書、または企業内部の認証局 (CA) で署名された証明書がある場合は、その CA 証明書をシステムの信頼された CA に追加する必要があります。そうしないと、LDAP サーバーに接続する際に、証明書の発行者が認識されないというエラーが発生します。詳細は、LDAPS 統合向けに Automation Controller に認証局をインポートする手順 を参照してください。プロンプトが表示されたら、Red Hat の顧客認証情報を使用してログインしてください。
手順
- LDAP 構造全体の読み取り権限があるユーザーを LDAP に作成します。
ldapsearchコマンドを使用して、LDAP サーバーへのクエリーが正常に実行できるかどうかをテストします。このツールは、Automation Controller のシステムコマンドラインからインストールでき、他の Linux および OSX システムを使用してもインストール可能です。例
ldapsearch -x -H ldap://win -D "CN=josie,CN=Users,DC=website,DC=com" -b "dc=website,dc=com" -w Josie4Cloud
ldapsearch -x -H ldap://win -D "CN=josie,CN=Users,DC=website,DC=com" -b "dc=website,dc=com" -w Josie4CloudCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
CN=josie,CN=users,DC=website,DC=comが接続ユーザーの識別名です。注記ldapsearchユーティリティーは、Automation Controller とともに自動的にプリインストールされるわけではありません。ただし、openldap-clientsパッケージからインストールできます。- ナビゲーションパネルから、Automation Controller UI の を選択します。
Authentication オプションのリストで LDAP settings を選択します。
LDAP サーバーごとに複数の LDAP 設定を行う必要はありませんが、このページから複数の LDAP サーバーを設定できます。そのように設定しない場合は、サーバーを Default のままにします。
同等の API エンドポイントは、
AUTH_LDAP_1_*、AUTH_LDAP_2_*、AUTH_LDAP_5_*のようにAUTH_LDAP_*を繰り返し表示し、サーバーの割り当てを示します。LDAP サーバーアドレスを入力または変更するには、 をクリックし、テキストフィールドに事前に入力されているものと同じ形式を使用して LDAP Server URI フィールドに入力します。
注記複数の LDAP サーバーを指定するには、各サーバーをスペースまたはコンマで区切ります。
アイコンをクリックして、正しい構文とルールに準拠してください。
- バインディングユーザーに使用するパスワードを LDAP Bind Password テキストフィールドに入力します。LDAP 変数の詳細は、Ansible Automation Hub 変数 を参照してください。
LDAP Group Type リストで、グループタイプをクリックして選択します。
Automation Controller がサポートする LDAP グループタイプは、基盤となる django-auth-ldap ライブラリー を使用します。選択したグループタイプのパラメーターを指定するには、ステップ 15 を参照してください。
- LDAP Start TLS は、デフォルトで無効になっています。LDAP 接続が SSL/TLS を使用していない場合に TLS を有効にするには、トグルを On に設定します。
LDAP Bind DN テキストフィールドに識別名を入力して、Automation Controller が LDAP サーバーへの接続 (バインド) に使用するユーザーを指定します。
-
名前がキー
sAMAccountNameに保存されている場合、LDAP User DN Template は(sAMAccountName=%(user)s)から入力されます。Active Directory はユーザー名をsAMAccountNameに保存します。OpenLDAP の場合、キーはuidで、行は(uid=%(user)s)になります。
-
名前がキー
-
LDAP Require Group フィールドに識別グループ名を入力して、当該グループ内のユーザーが Automation Controller にアクセスできるようにします。このとき、テキストフィールドに表示されているもの (
CN=controller Users,OU=Users,DC=website,DC=com) と同じ形式を使用します。 - LDAP Deny Group フィールドに識別グループ名を入力して、当該グループ内のユーザーが Automation Controller にアクセスできないようにします。このとき、テキストフィールドに表示されているものと同じ形式を使用します。
LDAP User Search フィールドに、認証時にユーザーを検索する場所を入力します。このとき、テキストフィールドに表示されているものと同じ形式を使用します。この例では、以下を使用します。
[ "OU=Users,DC=website,DC=com", "SCOPE_SUBTREE", "(cn=%(user)s)" ]
[ "OU=Users,DC=website,DC=com", "SCOPE_SUBTREE", "(cn=%(user)s)" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初の行では、LDAP ツリーの中でユーザーを検索する場所を指定します。上記の例では、
DC=website,DC=comから開始して再帰的にユーザーの検索が実行されます。2 行目は、ユーザーを検索する範囲を指定します。
- SCOPE_BASE: この値は、基本 DN でエントリーのみを検索して、このエントリーだけが返されるように指定する時に使用します。
- SCOPE_ONELEVEL: この値は、基本 DN の 1 つ下のレベルにあるエントリーをすべて検索するように指定する時に使用します。ここでは、基本 DN や、基本 DN の 1 つ下のレベルよりも下のレベルにあるエントリーは検索には含めません。
SCOPE_SUBTREE: この値は、指定した基本 DN も含めて、全レベルの全エントリーを検索するように指定する際に使用します。
3 行目は、ユーザー名を保存するキー名を指定します。
複数の検索クエリーの場合、正しい構文は以下のとおりです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
LDAP Group Search テキストフィールドで、検索するグループと検索方法を指定します。この例では、以下を使用します。
[ "dc=example,dc=com", "SCOPE_SUBTREE", "(objectClass=group)" ]
[ "dc=example,dc=com", "SCOPE_SUBTREE", "(objectClass=group)" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 最初の行は、グループを検索すべき基本 DN を指定します。
- 2 行目は、ユーザーディレクティブと同じで、範囲を指定します。
-
3 行目は、使用する LDAP において、グループオブジェクトの
objectClassが何かを指定します。
LDAP User Attribute Map テキストフィールドに、ユーザー属性を入力します。この例では、以下を使用します。
{ "first_name": "givenName", "last_name": "sn", "email": "mail" }{ "first_name": "givenName", "last_name": "sn", "email": "mail" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、キー
snで姓によってユーザーを取得します。ユーザーに対して同じ LDAP クエリーを使用して、ユーザーがどのキーに保存されているかを判断できます。選択した LDAP Group Type に応じて、異なるパラメーターが LDAP Group Type Parameters フィールドで使用できます。
LDAP_GROUP_TYPE_PARAMSは、Automation Controller によってkwargsに変換されて、選択した LDAP Group Type クラスに渡されるディクショナリーです。どの LDAP Group Type でも使用される共通パラメーターが 2 つあります。name_attrとmember_attrです。name_attrのデフォルトは cn で、member_attrのデフォルトは member です。{"name_attr": "cn", "member_attr": "member"}{"name_attr": "cn", "member_attr": "member"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定の LDAP Group Type が必要とするパラメーターを確認するには、django_auth_ldap ドキュメントのクラス
initパラメーターに関する箇所を参照してください。LDAP User Flags by Group テキストフィールドにユーザープロファイルフラグを入力します。次の例では、LDAP ユーザーを「スーパーユーザー」および「監査人」として設定する構文を使用しています。
{ "is_superuser": "cn=superusers,ou=groups,dc=website,dc=com", "is_system_auditor": "cn=auditors,ou=groups,dc=website,dc=com" }{ "is_superuser": "cn=superusers,ou=groups,dc=website,dc=com", "is_system_auditor": "cn=auditors,ou=groups,dc=website,dc=com" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - LDAP Organization Map および LDAP Team Map のマッピングフィールドへの入力に関する詳細は、LDAP 組織およびチームのマッピング セクションを参照してください。
- をクリックします。
Automation Controller はユーザーを積極的に同期しませんが、初回のログイン時にユーザーが作成されます。LDAP 認証に関連するパフォーマンスを向上させるには、ログインごとの LDAP 属性更新の防止 を参照してください。
24.1.1. LDAP 組織およびチームのマッピング リンクのコピーリンクがクリップボードにコピーされました!
LDAP 属性に基づいて、どのユーザーをどの Automation Controller 組織に配置するかを制御できます (組織の管理者、ユーザー、LDAP グループの間のマッピング)。
キーは組織名です。組織が存在しない場合は作成されます。値は、各組織のメンバーシップのオプションを定義するディクショナリーとなります。どのグループが自動的に組織のユーザーになり、どのグループが組織を管理できるかを、組織ごとに指定できます。
admins: none、true、false、string、または文字列の list/tuple:
-
noneの場合、組織管理者は LDAP 値に基づいて更新されません。 -
trueの場合、LDAP 内のすべてのユーザーが組織の管理者として自動的に追加されます。 -
falseの場合、いずれの LDAP ユーザーも組織の管理者として自動的に追加されません。 - 文字列または文字列のリストの場合は、グループ DN を指定します。指定したグループに一致する場合、組織に追加されます。
remove_admins: True/False。デフォルトは False です。
-
trueの場合、指定されたグループのメンバーではないユーザーは、組織の管理者リストから削除されます。
users: none、true、false、string、または文字列の list/tuple。管理者と同じルールが適用されます。
remove_users: true または false。デフォルトは false です。管理者と同じルールが適用されます。
例
ユーザーと LDAP グループをマッピングする場合、キーはチーム名であり、存在しない場合は作成されます。値は、各チームのメンバーシップに関するオプションのディクショナリーとなります。各値には、次のパラメーターを含めることができます。
organization: string.チームが所属する組織の名前です。組織とチームの組み合わせが存在しない場合は、チームが作成されます。組織が存在しない場合には、先に組織が作成されます。
users: none、true、false、string、または文字列の list/tuple:
-
noneの場合、チームメンバーは更新されません。 -
trueまたはfalseの場合、すべての LDAP ユーザーがチームメンバーとして追加または削除されます。 - 文字列または文字列のリストでグループ DN を指定する場合、ユーザーがこれらのグループの いずれか のメンバーであれば、そのユーザーはチームメンバーとして追加されます。
remove: true または false。デフォルトは false です。true の場合、指定されたグループのメンバーではないユーザーは、チームから削除されます。
例
24.1.2. LDAP のロギングの有効化 リンクのコピーリンクがクリップボードにコピーされました!
LDAP のロギングを有効にするには、Settings 設定ウィンドウでレベルを DEBUG に設定する必要があります。
手順
- ナビゲーションパネルから を選択します。
- System オプションのリストから Logging settings を選択します。
- をクリックします。
- Logging Aggregator Level Threshold フィールドを DEBUG に設定します。
- をクリックします。
24.1.3. ログインごとの LDAP 属性更新の防止 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、LDAP ユーザーが認証されると、すべてのユーザー関連の属性がログインのたびにデータベースで更新されます。一部の環境では、パフォーマンスの問題のためにこの操作をスキップできます。これを回避するには、オプション AUTH_LDAP_ALWAYS_UPDATE_USER を無効にします。
LDAP ユーザーの属性を更新しない場合は、このオプションを false に設定してください。属性は、ユーザーが初めて作成されたときにのみ更新されます。
手順
/etc/tower/conf.d/custom-ldap.pyに次の内容のカスタムファイルを作成します。複数のノードがある場合は、すべてのノードで実行します。AUTH_LDAP_ALWAYS_UPDATE_USER = False
AUTH_LDAP_ALWAYS_UPDATE_USER = FalseCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのノードで Automation Controller を再起動します。
automation-controller-service restart
automation-controller-service restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow このオプションを
Falseに設定すると、LDAP ユーザーの属性に対する変更は Automation Controller にプッシュされません。新しいユーザーが作成され、当該ユーザーの初回ログイン時にその属性がデータベースにプッシュされることに注意してください。
デフォルトでは、LDAP ユーザーはログインするたびにデータベースで属性が更新されます。LDAP 認証情報を使用して複数回実行される Playbook の場合、これらのクエリーを回避できます。
検証
LDAP 認証に関連するクエリーで時間のかかっているものがないか、PostgreSQL を確認してください。
関連情報
詳細は、Django ドキュメントの AUTH_LDAP_ALWAYS_UPDATE_USER を参照してください。
24.1.4. LDAPS 統合向けに Automation Controller に認証局をインポートする手順 リンクのコピーリンクがクリップボードにコピーされました!
LDAP を使用して Automation Controller サーバーへの認証を行うことができますが、認証に LDAPS (SSL/TLS 経由の LDAP) を使用するように変更すると、次のいずれかのエラーで失敗します。
2020-04-28 17:25:36,184 WARNING django_auth_ldap Caught LDAPError while authenticating e079127: SERVER_DOWN({'info': 'error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (unable to get issuer certificate)', 'desc': "Can't contact LDAP server"},)
2020-04-28 17:25:36,184 WARNING django_auth_ldap Caught LDAPError while authenticating e079127: SERVER_DOWN({'info': 'error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (unable to get issuer certificate)', 'desc': "Can't contact LDAP server"},)
2020-06-02 11:48:24,840 WARNING django_auth_ldap Caught LDAPError while authenticating reinernippes: SERVER_DOWN({'desc': "Can't contact LDAP server", 'info': 'error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (certificate has expired)'},)
2020-06-02 11:48:24,840 WARNING django_auth_ldap Caught LDAPError while authenticating reinernippes: SERVER_DOWN({'desc': "Can't contact LDAP server", 'info': 'error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (certificate has expired)'},)
デフォルトでは、django_auth_ldap は、LDAPS トランザクションを開始する前に SSL 接続を検証します。certificate verify failed エラーが発生した場合、django_auth_ldap が証明書を検証できなかったことを意味します。SSL/TLS 接続を検証できない場合、接続の試行は中止されます。
手順
LDAP CA をインポートするには、次のコマンドを実行します。
cp ldap_server-CA.crt /etc/pki/ca-trust/source/anchors/
cp ldap_server-CA.crt /etc/pki/ca-trust/source/anchors/Copy to Clipboard Copied! Toggle word wrap Toggle overflow update-ca-trust
update-ca-trustCopy to Clipboard Copied! Toggle word wrap Toggle overflow
クラスター化されたセットアップ内のすべての Automation Controller ノードで、これら 2 つのコマンドを実行します。
24.1.5. リファラル リンクのコピーリンクがクリップボードにコピーされました!
Active Directory は、クエリーされたオブジェクトがデータベースで利用できない場合に備えて「リフェラル」を使用します。リフェラルは、django LDAP クライアントでは正しく機能しないため、無効にした方が有益です。
/etc/tower/conf.d/custom.py ファイルに次の行を追加して、LDAP リフェラルを無効にします。
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_REFERRALS: False,
}
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_REFERRALS: False,
}
24.1.6. 認証用にデフォルトタイムアウトを変更する手順 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller UI の Settings 画面で、指定したトークンが有効であるデフォルトの時間 (秒単位) を変更できます。
手順
- ナビゲーションパネルから を選択します。
- System オプションのリストから Miscellaneous Authentication settings を選択します。
- をクリックします。
- Idle Time Force Log Out テキストフィールドに、タイムアウトの期間を秒単位で入力します。
- をクリックします。
Automation Controller にアクセスしてログインで問題が生じた場合は、Web ブラウザーのキャッシュをクリアしてください。一般的にそのような状況では、ブラウザーセッション中に認証トークンがキャッシュされています。続行するにはこれをクリアする必要があります。