Documentation

16. Kerberos でのユーザー認証

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

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

yum install krb5-workstation
yum install krb5-devel
yum install krb5-libs
pip install kerberos

インストールが済むと、以下のように /etc/krb.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 認証を使用します。

16.1. AD および Kerberos 認証情報

Active Directory のみ:

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

Kerberos の場合:

  • Kerberos がインストールされている場合は、パスワードが不要でパスワードのフィールドは空のままで結構です。代わりに、awx ユーザーとして、コマンドラインで kinit を実行してチケットを発行し、その他すべてのインベントリー変数をグループレベルで指定する必要があります。

Kerberos で認証するには、kinit で作成したチケットが必要です。root ユーザーとして実行しないでください。awx ユーザーに切り替えてから、kinit を実行するようにしてください。

16.2. Keroberos チケットの使用

Kerberos チケットは、デフォルトのチケットの有効期限が 24 時間であるため、24 時間毎に生成されます。これを変更するには、/etc/krb.conf ファイルを編集してください。

他のアプローチとして、cron を使用して 24 時間毎に kinit が実行されるようにプロセスを設定します。これを自動化するには、ユーザーパスワードを保存する keytab ファイルを生成し、kinit によりユーザーパスワードが求められるようにします。以下の手順を使用して、この keytab ファイルを生成し、kerberos チケットを取得します。

> ktutil
  ktutil:  addent -password -p username@WEBSITE.COM -k 1 -e aes256-cts-hmac-sha1-96
  provide password
  ktutil:  wkt username.keytab
  ktutil:  quit

次に以下のコマンドを cron に追加します。

kinit username@WEBSITE.COM -k -t username.keytab

注釈

システムの時間が AD、Tower、クライアントの間で同期されていることを確認します。

注釈

クライアントのホスト名は、DNS 経由で正引きおよび逆引きの両方で検索することができます。