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 認証を使用します。
Active Directory のみ:
Kerberos の場合:
awx
ユーザーとして、コマンドラインで kinit
を実行してチケットを発行し、その他すべてのインベントリー変数をグループレベルで指定する必要があります。Kerberos で認証するには、kinit
で作成したチケットが必要です。root ユーザーとして実行しないでください。awx
ユーザーに切り替えてから、kinit
を実行するようにしてください。
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 経由で正引きおよび逆引きの両方で検索することができます。