
Red Hat Ansible Tower 3.4.0 では新しい認証方式としてトークン認証が追加されました。そこでこの記事では、さまざまなエンタープライズ認証方式をまとめ、それぞれの最適なユースケースを概説します。Ansible Tower は、組織内の自動化機能を容易に一元管理するためのビジュアル・ダッシュボードを備えているほか、REST API を利用することで、他のツールとより緊密に統合することが可能です。Red Hat では、複数の認証方式をサポートすることで、既存のツールやプロセスに Ansible Tower を組み込む作業を容易にし、適切なユーザーが Ansible Tower のリソースを利用できるよう支援しています。この記事では、Ansible Tower がサポートする 4 種類の認証方式 (セッション、Basic、OAuth2 トークン、シングルサインオン (SSO)) について説明します。各方式について簡単なサンプルと関連資料へのリンクを紹介していますので、Ansible Tower をお使いの環境に統合する際にお役立てください。
1. セッション認証
セッション認証は、Ansible Tower の API または UI に直接ログインするときに使用します。Chrome や Firefox などのブラウザーで UI や API を参照するときなど、その HTTP 要求の間だけではなく、さらに長い時間ログイン状態を維持したい場合に使用されます。ユーザーがログインすると、セッション Cookie が作成され、Ansible Tower 内のページを移動する間ログイン状態を維持できます。

動作の仕組み

curl ツールを使用して、Ansible Tower にログインしたときに何が起こるか詳しく見ていきましょう。
1.「/api/login/」エンドポイントに GET 要求を発行して、「csrftoken」Cookie を取得します。
curl -k -c - https:///api/login/
localhost FALSE / FALSE 0 csrftoken
AswSFn5p1qQvaX4KoRZN6A5yer0Pq0VG2cXMTzZnzuhaY0L4tiidYqwf5PXZckuj
2. username、password、X-CSRFToken=
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
--referer https:///api/login/ \
-H 'X-CSRFToken: K580zVVm0rWX8pmNylz5ygTPamgUJxifrdJY0UDtMMoOis5Q1UOxRmV9918BUBIN' \
--data 'username=root&password=reverse' \
--cookie 'csrftoken=K580zVVm0rWX8pmNylz5ygTPamgUJxifrdJY0UDtMMoOis5Q1UOxRmV9918BUBIN' \
https:///api/login/ -k -D - -o /dev/null
ブラウザーで UI または API にログインすると、このすべての処理が Ansible Tower で実行されます。この方法は、ブラウザーでの認証時にのみ使用してください。Ansible Tower との統合をプログラムによって行う場合は、上記のプロセスではなく、OAuth 2 トークンを使用します。
注:セッションの有効期限は、SESSION_COOKIE_AGE 設定を指定して変更できます。
2. Basic 認証
Basic 認証はステートレスなので、base64 エンコードされた「username」と「password」を Authorization ヘッダーによって各要求で設定する必要があります。
ユースケース:API 呼び出しを curl、Python スクリプト、または API への個別のリクエストから行う場合に使用します。 API にアクセスする際には、可能な限り OAuth2 認証を使うことをお勧めします。
curl を使用したサンプル:
curl -X GET -H 'Authorization: Basic dXNlcjpwYXNzd29yZA==’
https:///api/v2/credentials -k -L
# the --user flag adds this Authorization header for us
curl -X GET --user 'user:password' https:///api/v2/credentials -k -L
Basic HTTP 認証方式の詳細については、RFC 7617 を参照してください。
注:Basic 認証はセキュリティ上の理由に応じて無効にすることができます。詳細はドキュメントを参照してください。
ブラウザー対応 API を使用したサンプル:
3. OAuth 2 トークン認証
OAuth (Open Authorization) はトークンベースの認証および承認のオープンスタンダードですOAuth 2 認証は、Ansible Tower API とプログラムによって連携する場合によく使用されます。Basic 認証と同様に、OAuth 2 トークンは Authorization ヘッダーから各 API 要求に提供されます。Basic 認証との相違点として、OAuth 2 トークンのタイムアウトは設定可能で、スコープを指定できます。トークンの有効期間は設定可能で、管理者は必要に応じて、特定のユーザーまたは Ansible Tower システム全体のトークンを簡単に取り消すことができます。これは「tower-manage revoke_oauth2_tokens」管理コマンドで実行できます。実行方法についてはこちらから詳細情報をご確認ください。さらに、トークンを作成できるユーザーのタイプを、SSO から作成された外部ユーザーではなく、Ansible Tower で作成されたユーザーのみに限定できます (以下の SSO のセクションを参照してください)。この実行方法の詳細は、これらのドキュメントの注記を参照してください。
Ansible Tower では次の方式で OAuth 2 アクセストークンを取得できます。
- パーソナル・アクセス・トークン (PAT)
- アプリケーション・トークン:パスワード付与タイプ
- アプリケーション・トークン:明示的付与タイプ
- アプリケーション・トークン:認可コード付与タイプ
まずユーザーは、API または UI (ユーザーの [Token] タブ) で OAuth 2 アクセストークンを作成する必要があります。この記事では、トークンの作成にパーソナル・アクセス・トークン方式 (PAT) を使用します。トークンが作成されると、ユーザーはスコープを設定できるようになります。トークンの有効期間はシステム全体でも設定できます。
以下のサンプルでは、UI で PAT を作成しています。
トークン認証は、Ansible Tower の API を Python スクリプトや curl などのツールを使ったプログラムによって使用する場合に最適です。以下はパーソナル・アクセス・トークン (PAT) のサンプルです。
curl のサンプル
まず、関連付けられたアプリケーションのない OAuth 2 トークン (パーソナル・アクセス・トークン) を作成します。このサンプルでは、curl で API を使用します。
curl -u user:password -k -X POST https:///api/v2/tokens/
これで、このトークンを使用して Ansible Tower リソース (ホストなど) に GET 要求を実行できるようになりました。
curl -k -X POST \
-H “Content-Type: application/json”
-H “Authorization: Bearer ” \
https:///api/v2/hosts/
同様に、起動したいジョブテンプレートへ POST を実行することで、ジョブを起動できます。
curl -k -X POST \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
--data '{"limit" : "ansible"}' \
https:///api/v2/job_templates/14/launch/
Python のサンプル
Tower-CLI は、Ansible Tower の API へアクセスする HTTP 要求を使いやすくするオープンソース・ツールです。「tower-cli config」で設定すると OAuth 2 トークンを使用して Tower-CLI で Tower に認証させることができます。または、「tower-cli login」コマンドを使用してユーザーの代わりに PAT を取得することもできます。簡単に使用できるので、試してみることをお勧めします。
pip install ansible-tower-cli
tower-cli config tower
tower-cli login
外部アプリケーションの統合に関して OAuth 2 を Ansible Tower で使用する方法の詳細については、こちらのドキュメントをご確認ください。
カスタム要求を作成する必要がある場合は、Python ライブラリ要求を使用して Python スクリプトを作成できます (リンクはこちら)。以下はそのサンプルです。
import requests
oauth2_token_value = 'y1Q8ye4hPvT61aQq63Da6N1C25jiA' # your token value from Tower
url = 'https:///api/v2/users/'
payload = {}
headers = {'Authorization': 'Bearer ' + oauth2_token_value,}
# makes request to Tower user endpoint
response = requests.request('GET', url, headers=headers, data=payload,
allow_redirects=False, verify=False)
# prints json returned from Tower with formatting
print(json.dumps(response.json(), indent=4, sort_keys=True))
4. SSO 認証
シングルサインオン (SSO) 認証方式は、ユーザーの認証が Ansible Tower の外部で実行されるという点で根本的に異なります。たとえば GitHub SSO では GitHub が一元化されたソースで、Tower に指定したユーザー名とパスワードに基づいて ID を検証します。
Ansible Tower で SSO 方式を設定したら、その SSO のボタンがログイン画面に表示されます。このボタンをクリックすると、認証サービスにリダイレクトされます。この場合は GitHub で、ここで認証情報を提示します。認証サービスで正常に認証されると、Ansible Tower は GitHub ユーザーにリンクされたユーザーを作成し (この SSO 方式で最初にログインした場合)、ログインできます。
- LDAP:Ansible Tower 外部の ID のディレクトリ。認証情報の照合に使用できます。Ansible Tower で Active Directory を LDAP SSO から設定できます。
- SAML:Ansible Tower ユーザーはシングルサインオン認証サービスを介して認証でき、チームで使用される複数のサービスに対して、一貫したユーザー認証が確保されます。SAML はサービスに対してパーミッショングループを維持する場合に特に便利です。SAML の設定に役立つブログ記事がこちらにあります。
- GitHub:システム管理者が「/api/v2/settings/authentication/」で指定した GitHub Organization、Team、または User に属している Ansible Tower ユーザーは、GitHub 認証情報で認証できます。Ansible Tower は OAuth 2 を使用してユーザーの認証情報を GitHub で検証します。
- Azure Active Directory :Ansible Tower ユーザーは Azure 認証情報で認証できます。Ansible Tower は OAuth 2 を使用して Azure に対して認証し、認証情報を検証してユーザーグループデータを取得します。
- RADIUS:一般にネットワークデバイスに使用される認証プロトコルです。軽量なので、認証のネットワークトラフィックが最小限に抑えられます。
- Google OAuth:Ansible Tower ユーザーは各自の Google Cloud で認証できます。Ansible Tower は OAuth 2 プロトコルを使用して Google に対して認証し、Google 組織内での ID に対してユーザー名とパスワードの認証情報をチェックします。
適切な認証方式を選ぶ
Ansible Tower で使用できる 4 種類の認証方式について説明しました。どの方式にも長所と短所があり、有効に活用できるユースケースは異なります。
- セッション認証 (UI またはブラウザー対応 API にログインする):Ansible Tower を使用して手動でリソース (インベントリー、プロジェクト、ジョブテンプレート) を作成して、ジョブをブラウザーで起動している
- Basic 認証:Ansible Tower を curl、HTTPie、または同様のその他ツールでトラブルシューティングしているが、ユーザーに対して OAuth 2 トークンをまだ設定していない
- OAuth 2 トークン認証
- 認証コードフロー:Ansible Tower と連携するアプリケーションを使用している
- パーソナル・アクセス・トークン (PAT):Ansible Tower の使用をプログラムによって自動化している
- SSO:大規模組織で Ansible Tower を使用し、一元化された ID プロバイダーを使用したい、またはユーザーに Google SSO、Azure SSO、LDAP、SAML、GitHub などの外部認証を使用して認証させたい
以上、ニーズに応じて最も効果的な認証方式を選ぶために必要な知識をご紹介しました。このガイドが、Ansible Tower で認証方式を選ぶ際のお役に立てば幸いです。