Documentation

22. Kerberos でのユーザー認証

Ansible Tower では、Active Directory (AD) でのユーザー認証、または Kerberos での認証がサポートされます。

まず、Kerberos チケットを正常に生成できるように、Tower システムの Kerberos パッケージを設定します。パッケージをインストールするには、以下の手順を使用します。

yum install krb5-workstation
yum install krb5-devel
yum install krb5-libs

インストールが済むと、以下のように /etc/krb5.conf ファイルを編集して、AD、ドメインなどのアドレスを指定します。

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WEBSITE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 WEBSITE.COM = {
  kdc = WIN-SA2TXZOTVMV.website.com
  admin_server = WIN-SA2TXZOTVMV.website.com
 }

[domain_realm]
 .website.com = WEBSITE.COM
 website.com = WEBSITE.COM

設定ファイルの更新後に、認証が成功して、有効なトークを取得できるはずです。以下の手順では、認証およびトークンの取得方法を説明します。

[root@ip-172-31-26-180 ~]# kinit username
Password for username@WEBSITE.COM:
[root@ip-172-31-26-180 ~]#

Check if we got a valid ticket.

[root@ip-172-31-26-180 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: username@WEBSITE.COM

Valid starting     Expires            Service principal
01/25/16 11:42:56  01/25/16 21:42:53  krbtgt/WEBSITE.COM@WEBSITE.COM
  renew until 02/01/16 11:42:56
[root@ip-172-31-26-180 ~]#

有効なチケットを取得したら、コマンドラインからすべてが想定通りに機能していることを確認します。これをテストするには、インベントリーが以下のようになっていることを確認します。

[windows]
win01.WEBSITE.COM

[windows:vars]
ansible_user = username@WEBSITE.COM
ansible_connection = winrm
ansible_port = 5986

以下を行う必要があります。

  • ホスト名が、AD のエントリーと一致しており、IP アドレスではなく、正しいクライアントのホスト名が指定されていることを確認します。
  • また、Kerberos は大文字、小文字を区別するため、ユーザー名の宣言でドメイン名 (@ の後の文字) が大文字、小文字など、正しく入力されていることを確認します。Tower の場合は、インベントリーが同じであることも確認します。

注釈

Server not found in Kerberos database のエラーメッセージが表示され、インベントリーが (IP アドレスではなく) FQDN で設定されている場合には、サービスのプリンシパル名が抜けていないこと、またプリンシパル名の設定に間違いがないことを確認します。

想定通りに Playbook が実行されるようになるはずです。awx ユーザーとして Playbook を実行してテストすることができます。

Playbook が適切に機能していることが確認できたら、Tower との統合は簡単です。awx ユーザーで Kerberos チケットを生成すると、Tower は自動的に生成したチケットを取得して認証を行います。

注釈

python kerberos パッケージは必ずインストールするようにしてください。Ansible は、kerberos パッケージがインストールされているかどうかを確認し、されている場合には Kerberos 認証を使用します。

22.1. AD および Kerberos 認証情報

Active Directory のみ:

  • AD ユーザー名およびパスワードをマシンの認証情報として使用して Windows マシンだけに Playbook を実行する予定の場合には、ユーザー名と関連付けられたパスワードに対して “user@<domain>” を使用することができます。

Kerberos の場合:

  • Kerberos がインストールされている場合には、 “user@<domain>” の形式のユーザー名とパスワードを使用してマシンの認証情報を作成することができます。

22.2. Keroberos チケットの使用

Ansible は、Kerberos を設定したホストマシンの認証情報にユーザー名とパスワード両方が指定される場合には、Kerberos チケット (Ansible 2.3 の時点) が自動的に管理されるように初期設定されています。(チケットが失効する可能性を最小限に抑えるために) 各タスクが実行される前に、ホスト毎に新しいチケットが一時的な認証キャッシュに作成されます。デフォルトの認証キャッシュを干渉しないように、一時的な認証キャッシュは、各タスクが完了すると削除されます。

チケットの自動管理を無効にするには (例: 既存の SSO チケットを使用するか、手動で kinit を呼び出し、デフォルトの認証キャッシュを生成)、インベントリー経由で ansible_winrm_kinit_mode=manual を設定します。

チケットの自動管理には、制御ホストシステムのパスに標準の kinit のバイナリーが必要です。異なる場所またはバイナリー名を指定するには、ansible_winrm_kinit_cmd インベントリー変数を、MIT krbv5 kinit 互換のあるバイナリーへの完全修飾パスに設定します。