Automation Controller API の概要
Automation Controller API の開発者向けの概要
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Ansible Automation Platform に興味をお持ちいただきありがとうございます。Ansible Automation Platform は、Ansible を利用した環境に制御、ナレッジ、および委譲の機能を追加することにより、複数層からなる複雑なデプロイメントをチームが管理するのに役立ちます。
Automation Controller API の概要では、Automation Controller API の理解を支援することに重点を置いています。
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
このドキュメントの改善に関するご意見がある場合や、エラーを発見した場合は、https://access.redhat.com から Technical Support チームに連絡してください。
第1章 API で利用できるツール リンクのコピーリンクがクリップボードにコピーされました!
Representational State Transfer (REST) は、ステートレスでクライアントサーバー型のキャッシュ可能な通信プロトコル (通常は HTTP プロトコル) に依存します。
ユーザーインターフェイスがどの API 呼び出しを順番に行うかを確認すると役立つ場合があります。これを行うには、開発者プラグインを備えた Firebug または Chrome の UI を使用できます。
もう 1 つのオプションとして、Charles Proxy を使用します。便利なビジュアライザーが含まれています。これは商用ソフトウェアですが、オペレーティングシステムの X プロキシーとして挿入され、Web ブラウザー、curl、およびその他の API コンシューマーからのリクエストをインターセプトできます。
その他のオプションには以下が含まれます。
第2章 API を使用した参照 リンクのコピーリンクがクリップボードにコピーされました!
REST API は、URI パスを通じてリソース (データエンティティー) へのアクセスを提供します。
手順
Web ブラウザーで次の Automation Controller REST API にアクセスします。
https://<server name>/api/controller/v2
- "current versions" または "available versions" の横にある "v2" リンクをクリックします。Automation Controller は、API のバージョン 2 をサポートします。
-
/api/エンドポイントのみでGETを実行し、推奨バージョンであるcurrent_versionを取得します。 -
ナビゲーションメニューの
アイコンをクリックして、その特定の API エンドポイントのアクセス方法や、これらのメソッドの使用時に返されるデータについてのドキュメントを参照してください。
-
特定の API ページでテキストフィールドを JSON 形式にフォーマットすると、
PUTおよびPOST動詞を使用することもできます。
/api/v2/settings/changed/ エンドポイントで、工場出荷時のデフォルトから変更された設定を確認することもできます。これは、静的な設定ファイルでの変更ではなく、API ブラウザーで加えられた変更を反映します。
第3章 API の使用規則 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller は、サーバー上の /api/ をルートとする標準の REST API を使用します。
互換性の理由から、API はバージョン管理されています。/api/ をクエリーすると、利用可能な API バージョンを確認できます。
POST または PUT 要求でコンテンツまたはタイプを指定する必要がある場合があります。
-
PUT: 特定のリソース (識別子によって) またはリソースのコレクションを更新します。事前にリソース識別子がわかっている場合は、PUTを使用して特定のリソースを作成することもできます。 -
POST: 新しいリソースを作成します。また、他のカテゴリーに該当しない演算用の汎用動詞としても機能します。
"/" で終わらない URI はすべて 301 リダイレクトを返します。
ジョブテンプレートレコードに割り当てられる extra_vars のフォーマットが保持されます。YAML は YAML として返され、フォーマットとコメントが保持され、JSON は JSON として返されます。
第4章 API でのソート リンクのコピーリンクがクリップボードにコピーされました!
わかりやすい例を示すために、このガイド全体で次の URL を使用します。
https://<server name>/api/v2/groups/
https://<server name>/api/v2/groups/
手順
特定の順番で {{ model_verbose_name_plural }} が返されることを指定するには、
order_byクエリー文字列のパラメーターをGETリクエストで使用します。https://<server name>/api/v2/model_verbose_name_plural?order_by={{ order_field }}https://<server name>/api/v2/model_verbose_name_plural?order_by={{ order_field }}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 逆の順序に並び替えるには、フィールド名の前にダッシュ (
-) を加えます。https://<server name>/api/v2/model_verbose_name_plural?order_by=-{{ order_field }}https://<server name>/api/v2/model_verbose_name_plural?order_by=-{{ order_field }}Copy to Clipboard Copied! Toggle word wrap Toggle overflow フィールド名をコンマ (
,) で区切って並べ替えフィールドを指定できます。https://<server name>/api/v2/model_verbose_name_plural?order_by={{ order_field }},some_other_fieldhttps://<server name>/api/v2/model_verbose_name_plural?order_by={{ order_field }},some_other_fieldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 検索クエリー文字列パラメーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
手順
- 検索クエリー文字列パラメーターを使用して、指定されたモデルのテキストフィールド全体から、大文字と小文字を区別せずにモデルを検索します。
https://<server name>/api/v2/model_verbose_name?search=findme
https://<server name>/api/v2/model_verbose_name?search=findme
- 関連するフィールドを検索するには、以下を使用します。
https://<server name>/api/v2/model_verbose_name?related__search=findme
https://<server name>/api/v2/model_verbose_name?related__search=findme
第6章 API でのフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
システムはコレクションを "queryset" として認識します。さまざまな Operator を使用してこれをフィルタリングできます。
手順
"foo" という名前を含むグループを検索するには、以下を使用します。
http://<controller server name>/api/v2/groups/?name__contains=foo
http://<controller server name>/api/v2/groups/?name__contains=fooCopy to Clipboard Copied! Toggle word wrap Toggle overflow 完全一致を検索するには、次を使用します。
http://<controller server name>/api/v2/groups/?name=foo
http://<controller server name>/api/v2/groups/?name=fooCopy to Clipboard Copied! Toggle word wrap Toggle overflow リソースが整数型の場合、次のように、文字列入力値を整数にキャストするには、末尾に
\_\_intを追加する必要があります。http://<controller server name>/api/v2/arbitrary_resource/?x__int=5
http://<controller server name>/api/v2/arbitrary_resource/?x__int=5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下を使用して、関連リソースをクエリーできます。
http://<controller server name>/api/v2/users/?first_name__icontains=kim
http://<controller server name>/api/v2/users/?first_name__icontains=kimCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、名前に文字列 "Kim" が含まれるすべてのユーザーを返します。
一度に複数のフィールドをフィルタリングすることもできます。
http://<controller server name>/api/v2/groups/?name__icontains=test&has_active_failures=false
http://<controller server name>/api/v2/groups/?name__icontains=test&has_active_failures=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow この場合は、名前に "test" が含まれており、現在障害が発生していないグループがすべて返されます。
関連情報
使用可能な Operator の種類の詳細は、QuerySet API リファレンス を参照してください。
UI を使って各基準に対してフィルタリングを実行している際に、API を確認することもできます。
6.1. API の高度なクエリー リンクのコピーリンクがクリップボードにコピーされました!
返される結果のリストを、指定された値に一致するアイテムだけに絞り込むために使用される追加のクエリー文字列パラメーターを使用できます。フィルタリングには、データベース内に存在するフィールドとリレーションのみを使用できます。指定された値の特殊文字が URL でエンコードされていることを確認します。以下に例を示します。
?field=value%20xyz
?field=value%20xyz
フィールドは関係にまで及ぶ可能性がありますが、その場合はデータベースで定義されたフィールドと関係に限定されます。
?other__field=value
?other__field=value
特定の基準に一致する結果を除外するには、フィールドパラメーターの前に not__ を追加します。
?not__field=value
?not__field=value
デフォルトでは、すべてのクエリー文字列フィルターは AND 演算されるため、すべてのフィルターに一致する結果のみが返されます。複数の条件のいずれかに一致する結果をまとめるには、各クエリー文字列パラメーターの前に or__ を付けます。
?or__field=value&or__field=othervalue ?or__not__field=value&or__field=othervalue
?or__field=value&or__field=othervalue
?or__not__field=value&or__field=othervalue
デフォルトの AND フィルタリングでは、データベースリレーションシップ全体でフィルタリングされる各関連オブジェクトにすべてのフィルターが同時に適用されます。チェーンフィルターは、代わりに関連するオブジェクトごとにフィルターを個別に適用します。これを使用するには、クエリー文字列パラメーターの前に chain__ を付けます。
?chain__related__field=value&chain__related__field2=othervalue ?chain__not__related__field=value&chain__related__field2=othervalue
?chain__related__field=value&chain__related__field2=othervalue
?chain__not__related__field=value&chain__related__field2=othervalue
最初のクエリーを ?relatedfield=value&relatedfield2=othervalue と記述すると、同じ関連オブジェクトが両方の条件を満たしたプライマリーオブジェクトのみが返されます。チェーンフィルターを使用して記述すると、各条件に一致するプライマリーオブジェクトが交差している内容が返されます。
6.2. フィールドの検索 リンクのコピーリンクがクリップボードにコピーされました!
フィールド名にルックアップを追加することで、より高度なクエリーにフィールドルックアップを使用できます。
?field__lookup=value
?field__lookup=value
以下のフィールドのルックアップがサポートされています。
- exact: 完全一致 (指定されていない場合はデフォルトで検索されます。詳細は以下の注記を参照してください)。
- iexact: exact の大文字と小文字を区別しないバージョン。
- contains: フィールドに値を含む。
- icontains: 大文字小文字の区別のない contains。
- startswith: 値で始まるフィールド。
- istartswith: startswith で大文字小文字の区別なし。
- endswith: 値で終わるフィールド。
- iendswith: 大文字小文字の区別のない endswith。
- regex: 特定の正規表現に一致するフィールド。
- iregex: 正規表現の大文字と小文字を区別しないバージョン。
- gt: Greater than の比較条件。
- gte: Greater than or equal to の比較条件。
- lt: Less than の比較条件。
- lte: Less than or equal to の比較条件。
- isnull: 特定フィールドもしくは関連オブジェクトが null かどうかをチェック。ブール値を想定。
- in: 特定フィールドの値が提供されたリストに存在するかどうかをチェック。アイテムのリストを想定。
-
ブール値は、True の場合は
Trueまたは1、False の場合はFalseまたは0として指定できます (どちらも大文字と小文字は区別されません)。
たとえば、?created__gte=2023-01-01 は、1/1/2023 以降で作成されたアイテムのリストを提供します。
null 値は None または Null (どちらも大文字と小文字は区別されません) として指定できますが、isnull ルックアップを使用して null 値を明示的にチェックすることを推奨します。
リスト (in ルックアップ用) を、コンマで区切られた値のリストとして指定できます。クエリー文字列のパラメーターによるユーザーのアクセスレベルの要求をもとにしたフィルタリング。
-
role_level: フィルタリングするロールのレベル (admin_roleなど)
Ansible Automation Platform の以前のリリースでは、デフォルトで _exact の結果を含むクエリーが返されました。回避策として、デフォルトフィルターの limit を ?limit_exact に設定します。たとえば、/api/v2/jobs/?limit_exact=example.domain.com は以下のようになります。
第7章 API でのページネーションの使用 リンクのコピーリンクがクリップボードにコピーされました!
API はコレクションの応答をページ分割します。つまり、コレクションには数万から数十万のオブジェクトが含まれる可能性がありますが、API パフォーマンス上の理由から、各 Web リクエストでは限られた数の結果のみが返されます。
コレクションの結果を受け取ると、次のような内容が表示されます。
{'count': 25, 'next': 'http://testserver/api/v2/some_resource?page=2', 'previous': None, 'results': [ ... ] }
{'count': 25, 'next': 'http://testserver/api/v2/some_resource?page=2', 'previous': None, 'results': [ ... ] }
手順
- "next" が含まれる連続した URL で指定されているページを要求して、次のページに移動します。
各リクエストで返される結果の数を変更するには、
page_size=XXクエリー文字列パラメーターを使用します。-
page_sizeにはデフォルトの上限 200 があります。これは、ユーザーが上限を超える値 (?page_size=1000など) を試行したときに適用されます。ただし、/etc/tower/conf.d/<some file>.pyの値をより高い値に設定することで、この制限を変更できます。たとえば、MAX_PAGE_SIZE=1000です。
-
特定のページの結果を取得するには、page クエリー文字列パラメーターを使用します。
http://<server name>/api/v2/model_verbose_name?page_size=100&page=2
http://<server name>/api/v2/model_verbose_name?page_size=100&page=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
結果とともに返される前後のリンクは、これらのクエリー文字列パラメーターを自動的に設定します。
200 を超えるページサイズを要求しないでください。
ユーザーインターフェイスでは、スクロールを回避するために小さい値が使用されます。
第8章 リソースへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller はプライマリーキーを使用して個々のリソースオブジェクトにアクセスします。名前付き URL 機能を通じて、リソース固有で、人間が判読できる識別子を使用して、Automation Controller リソースにアクセスできます。
次の例は、補助クエリー文字列なしでリソースオブジェクトにアクセスできる名前付き URL パスを示しています。
/api/v2/hosts/host_name++inv_name++org_name/
/api/v2/hosts/host_name++inv_name++org_name/
8.1. 設定オプション リンクのコピーリンクがクリップボードにコピーされました!
/api/v2/settings/named-url/: NAMED_URL_FORMATS および NAMED_URL_GRAPH_NODES という 2 つの名前付き URL 関連の設定があります。
NAMED_URL_FORMATS は、使用可能なすべての名前付き URL 識別子形式の読み取り専用のキーと値のペアのリストです。以下は NAMED_URL_FORMATS の例になります。
NAMED_URL_FORMATS の各項目のキーは、名前付き URL を持つリソースの API 名です。値は、人間が判読できる、そのリソースの一意識別子を形成する方法を示す文字列です。NAMED_URL_FORMATS には、名前付き URL を持つことができるリソースのみがリストされ、そこにリストされていないリソースには名前付き URL はありません。リソースに名前付き URL を設定できる場合、そのオブジェクトには、オブジェクト固有の名前付き URL を表す named_url フィールドが必要です。このフィールドはリストビューではなく詳細ビューでのみ表示されます。正確に生成された名前付き URL を使用して、指定されたリソースオブジェクトにアクセスできます。これはオブジェクトとそれに関連する URL です。たとえば、/api/v2/res_name/obj_slug/ が有効な場合、/api/v2/res_name/obj_slug/related_res_name/ も有効です。
NAMED_URL_FORMATS は、人間が判読できる一意の識別子と名前付き URL 自体を作成するのに十分な情報を提供します。使いやすさを考慮して、名前付き URL を指定できるリソースのオブジェクトにはすべて、そのオブジェクトの名前付き URL を表示する関連フィールド named_url があります。そのフィールドをコピーして貼り付け、独自のカスタム用途に使用できます。詳細は、リソースオブジェクトに名前付き URL がある場合、API ブラウザーのヘルプテキストを参照してください。
名前付き URL ラベル (ID 5 など) を手動で決定できます。NAMED_URL_FORMATS を使用してこの特定のリソースオブジェクトの名前付き URL を作成するには、まず NAMED_URL_FORMATS の labels フィールドを参照して、識別子形式 <name>++<organization.name> を取得します。
-
URL 形式の最初の部分は
<name>です。つまり、ラベルリソースの詳細が/api/v2/labels/5/にあり、返された JSON でnameフィールドを探すことができます。名前フィールドの値がFooの場合、一意の識別子の最初の部分はFooになります。 -
形式の 2 番目の部分は二重プラス記号 ++ です。これは、一意の識別子の異なる部分を分ける区切り文字です。これらを一意の識別子に追加すると、
Foo++が得られます。 形式の 3 番目の部分は
<organization.name>です。これは、フィールドが調査中の現在のラベルオブジェクト内ではなく、ラベルオブジェクトが指す組織内にあることを示します。形式が示すように、現在返されている JSON の関連フィールドで組織を検索します。そのフィールドは存在しない可能性があります。存在する場合は、そのフィールドに指定された URL (例:/api/v2/organizations/3/)に従って特定の組織の詳細を取得し、その名前フィールド (例: "Default") を抽出して、現在の一意の識別子に追加します。<organizations.name>は、形式の最後の部分なので、/api/v2/labels/Foo++Default/のように、名前付き URL が生成されます。ラベルオブジェクトの詳細の関連フィールドに組織が存在しない場合は、代わりに空の文字列を追加します。これにより現在の識別子は変更されません。したがって、
Foo++が最終的な一意の識別子になり、結果として生成される名前付き URL は/api/v2/labels/Foo++/になります。
名前付き URL の一意の識別子を生成する際の重要な側面は、予約文字に関係しています。識別子は URL の一部であるため、;/?:@=&[] などの、URL 標準による予約文字はパーセント記号でエンコードされます。たとえば、組織の名前が ;/?:@=&[] の場合、その一意の識別子は %3B%2F%3F%3A%40%3D%26%5B%5D になります。もう 1 つの特別な予約文字は + です。これは URL 標準では予約されていませんが、名前付き URL によって識別子のさまざまな部分をリンクするために使用されます。[+] でエンコードされます。たとえば、組織名が [+] の場合、その一意の識別子は %5B[+]%5D になります。ここで、元の [ と ] はパーセントにエンコードされ、+ は [+] に変換されます。
NAMED_URL_FORMATS は、手動で変更できませんが、変更は自動的に行われ、時間の経過とともに拡張され、基礎となるリソースの変更と拡張を反映します。名前付き URL 機能を使用する同じクラスターの NAMED_URL_FORMATS を参照してください。
NAMED_URL_GRAPH_NODES は、キーと値のペアのもう 1 つの読み取り専用リスト、名前付き URL を管理するために使用される内部グラフデータ構造を公開します。これは人間が読める形式ではありませんが、プログラムで名前付き URL を生成するために使用する必要があります。任意のリソースオブジェクトのプライマリーキーに NAMED_URL_GRAPH_NODES の情報を使用して、名前付きの URL を指定できる場合の、名前付き URL を生成するスクリプトのサンプルは、GitHub にあります。
8.2. 識別子フォーマットのプロトコル リンクのコピーリンクがクリップボードにコピーされました!
リソースは、リソースフィールドのタプルである一意のキーによって識別できます。すべてのリソースには、一意のキーとしてプライマリーキー番号のみがあることが保証されていますが、他にも一意のキーが多数存在する場合があります。リソースは、次のルールを満たす一意のキーが少なくとも 1 つある場合に、識別子形式を生成し、名前付き URL を指定できます。
-
キーには、
nameフィールド、または (認証タイプリソースのkindフィールドのように) 有限数の選択肢のあるテキストフィールドのいずれかのみが含まれる。 - これまでのルールに違反しているが、唯一許可されている例外フィールドは、自身以外のリソースに関連する、多対一の関連フィールドです。これにもスラグが許可されています。
リソース Foo と Bar がある場合、Foo と Bar の両方に、名前フィールドと、値が "yes" または "no".のみになる選択フィールドが含まれます。さらに、リソース Foo には、Bar に関連する多対 1 フィールド (外部キー) (例: fk) があります。Foo には一意のキータプル (name、choice、fk) があり、Bar には一意のキータプル (name、choice) があります。Bar は、前述の最初のルールを満たしているため、名前付き URL を指定できます。Foo は、最初のルールに違反しているにもかかわらず、名前付き URL を指定できます。ルール 1 に違反する追加フィールドは、Bar と多対一の関係にある fk フィールドであり、Bar は 名前付き URL を指定できます。
ルール 1 を満たすリソースの場合、人間が判読できる一意の識別子は、+ で区切られた外部キーフィールドの組み合わせになります。具体的には、前述の例のリソース Bar のスラグ形式は <name>+<choice> です。スラグ形式ではフィールドの順序が重要であり、name フィールドが存在する場合は常に最初に表示され、その後に残りのフィールドがフィールド名の辞書順に配置されることに注意してください。たとえば、Bar にルール 1 を満たす a_choice フィールドもあり、一意のキーが name、choice、a_choice になる場合、そのスラグの形式は <name><a_choice><choice> になります。
ルール 2 を満たすリソースの場合、追加の外部キーフィールドを遡って追跡すると、その結果はそのリソースのオブジェクトを識別するリソースツリーになります。識別子形式を生成するために、トレースバックツリー内の各リソースは、外部キー以外のすべてのフィールドを使用して、スタンドアロン形式の独自の部分を生成します。最後に、すべての部分が次の順序で ++ で結合されます。
- 最初の識別子部分にスタンドアロン形式を配置します。
- リソースにごとに一意の識別子を再帰的に生成します。基礎となるリソースは、外部キー (トレースバックツリーノードの子) を使用して参照します。
- 生成された一意の識別子を残りの識別子コンポーネントとして扱います。対応する外部キーを辞書順に並べ替えます。
-
++を使用してすべてのコンポーネントを結合し、最終的な識別子形式を生成します。
Foo リソースの識別子形式を生成する場合、Automation Controller がスタンドアロン形式 (Foo の場合は <name>+<choice>、Bar の場合は <fk.name>+<fk.choice>) を生成し、それらを結合して <name><choice>+<fk.name>+<fk.choice> にします。
指定された識別子形式に従って識別子を生成する場合、外部キーがどこも参照していない場合があります。この場合、Automation Controller は、外部キーが指すリソースに対応する形式の部分を空の文字列に置き換えます。たとえば、Foo オブジェクトが name ="alice"、choice ="yes"," であるが、fk field = None の場合、結果の識別子は alice+yes++ になります。
第9章 読み取り専用フィールド リンクのコピーリンクがクリップボードにコピーされました!
REST API の特定のフィールドは読み取り専用とマークされています。
これらには通常、リソースの URL、ID、場合によってはいくつかの内部フィールドが含まれます。たとえば、各オブジェクトの 'created\_by' 属性は、どのユーザーがリソースを作成したかを示しますが、編集はできません。値を記載してもこれが変更されない場合は、フィールドが読み取り専用である可能性があります。
第10章 API での認証 リンクのコピーリンクがクリップボードにコピーされました!
API では以下の認証方法を使用できます。
Automation Controller は、組織がすぐに使用できる視覚的なダッシュボードを使用して自動化を一元管理し、より深いレベルで、他のツールと統合するための REST API を提供するように設計されています。Automation Controller は、Automation Controller を既存のツールやプロセスに簡単に組み込むことができるように、いくつかの認証方法をサポートしています。これにより、適切なユーザーがリソースにアクセスできるようになります。
10.1. セッション認証の使用 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller の API または UI に直接ログインするときにセッション認証を使用して、インベントリー、プロジェクト、ジョブテンプレートなどのリソースを手動で作成し、ブラウザーでジョブを開始できます。この方法を使用すると、その HTTP リクエストの間だけでなく、長時間ログインしたままにすることができます。たとえば、Chrome や Mozilla Firefox などのブラウザーで API または UI を参照する場合などです。ユーザーがログインすると、セッションクッキーが作成されます。つまり、Automation Controller 内の別のページに移動しても、ログインしたままにすることができます。次の図は、セッション中にクライアントとサーバーの間で行われる通信を表しています。
curl ツールを使用して、Automation Controller にログインしたときに発生するアクティビティーを確認します。
手順
GET を使用して/api/login/エンドポイントに移動し、csrftokenCookie を取得します。curl -k -c - https://<controller-host>/api/login/ localhost FALSE / FALSE 0 csrftoken AswSFn5p1qQvaX4KoRZN6A5yer0Pq0VG2cXMTzZnzuhaY0L4tiidYqwf5PXZckuj
curl -k -c - https://<controller-host>/api/login/ localhost FALSE / FALSE 0 csrftoken AswSFn5p1qQvaX4KoRZN6A5yer0Pq0VG2cXMTzZnzuhaY0L4tiidYqwf5PXZckujCopy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザー名、パスワード、
X-CSRFToken=<token-value>を使用して/api/login/エンドポイントにPOSTを送信します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これらはすべて、ブラウザーで UI または API にログインするときに Automation Controller によって実行され、ブラウザーで認証するときにのみ使用する必要があります。Automation Controller とのプログラムによる統合については、OAuth2 トークン認証 を参照してください。
一般的な応答の例を以下に示します。
この方法でユーザーが正常に認証されると、サーバーはセッションクッキーの設定名を示す X-API-Session-Cookie-Name というヘッダーで応答します。デフォルト値は awx_session_id で、後で Set-Cookie ヘッダーで確認できます。
SESSION_COOKIE_AGE パラメーターで指定することで、セッションの有効期限を変更できます。詳細は、セッション制限の使用 を参照してください。
10.2. Basic 認証 リンクのコピーリンクがクリップボードにコピーされました!
Basic 認証はステートレスであるため、Authorization ヘッダーを介して各リクエストとともに、base64 でエンコードされたユーザー名とパスワードを送信する必要があります。これは、curl リクエスト、Python スクリプト、または API への個々のリクエストからの API 呼び出しに使用できます。可能な限り、API へのアクセスには OAuth 2 トークン認証を使用することを推奨します。
以下は、curl を使用した Basic 認証の例です。
the --user flag adds this Authorization header for us curl -X GET --user 'user:password' https://<controller-host>/api/v2/credentials -k -L
# the --user flag adds this Authorization header for us
curl -X GET --user 'user:password' https://<controller-host>/api/v2/credentials -k -L
関連情報
Basic 認証の詳細は、 'Basic' HTTP 認証スキーム を参照してください。
Basic 認証の無効化
セキュリティー上の理由から、Basic 認証を無効にすることができます。
手順
- ナビゲーションパネルから を選択します。
- System オプションのリストから Miscellaneous Authentication settings を選択します。
- Enable HTTP Basic Auth のオプションを無効にします。
10.3. OAuth2 トークン認証 リンクのコピーリンクがクリップボードにコピーされました!
OAuth (Open Authorization) は、トークンベースの認証と承認のオープンスタンダードです。OAuth 2 認証は、Automation Controller API とプログラムでやり取りするときによく使用されます。Basic 認証と同様に、Authorization ヘッダーを通じて各 API リクエストに OAuth 2 トークンが付与されます。Basic 認証とは異なり、OAuth 2 トークンには設定可能なタイムアウトがあり、スコープ設定可能です。トークンには有効期限が設定されており、必要に応じて管理者が 1 ユーザーまたは Automation Controller システム全体に対して、トークンを簡単に取り消すことができます。これは、revoke_oauth2_tokens 管理コマンドを使用するか、アクセストークンの取り消し で説明されている API を使用して実行できます。
Automation Controller で OAuth2 アクセストークンを取得するためのさまざまな方法は次のとおりです。
- パーソナルアクセストークン (PAT)
- アプリケーショントークン: パスワード付与タイプ
- アプリケーショントークン: 暗黙の付与タイプ
- アプリケーショントークン: 認証コード付与タイプ
ユーザーは、API または Automation Controller UI の Users > Tokens タブで OAuth 2 トークンを作成する必要があります。UI を介したトークンの作成に関する詳細は、Users - Tokens を参照してください。
この例では、API でトークンを作成するために PAT メソッドを使用します。作成後、スコープを設定できます。
システム全体でトークンの有効期限を設定できます。詳細は、パーソナルアクセストークン向けの OAuth 2 トークンシステムの使用 を参照してください。
トークン認証は、Python スクリプトや curl などのツールなど、Automation Controller API をプログラムで使用する場合に最適です。
curl の例
curl -u user:password -k -X POST https://<controller-host>/api/v2/tokens/
curl -u user:password -k -X POST https://<controller-host>/api/v2/tokens/
この呼び出しは、次の JSON データを返します。
token プロパティーの値を使用して、Hosts などの Automation Controller リソースに対して GET 要求を実行できます。
curl -k -X POST \ -H “Content-Type: application/json” -H “Authorization: Bearer <oauth2-token-value>” \ https://<controller-host>/api/v2/hosts/
curl -k -X POST \
-H “Content-Type: application/json”
-H “Authorization: Bearer <oauth2-token-value>” \
https://<controller-host>/api/v2/hosts/
開始するジョブテンプレートに POST を実行してジョブを実行することもできます。
curl -k -X POST \
-H "Authorization: Bearer <oauth2-token-value>" \
-H "Content-Type: application/json" \
--data '{"limit" : "ansible"}' \
https://<controller-host>/api/v2/job_templates/14/launch/
curl -k -X POST \
-H "Authorization: Bearer <oauth2-token-value>" \
-H "Content-Type: application/json" \
--data '{"limit" : "ansible"}' \
https://<controller-host>/api/v2/job_templates/14/launch/
Python の例
awxkit は、HTTP リクエストを使用して Automation Controller API に簡単にアクセスできるようにするオープンソースツールです。awxkit login コマンドを使用すると、awxkit に代わって PAT を取得できます。詳細は、AWX コマンドラインインターフェイス を参照してください。
カスタムリクエストを記述する必要がある場合は、次の例のように、Python ライブラリーリクエストを使用して Python スクリプトを記述できます。
関連情報
OAuth2 アクセストークンの取得と外部アプリケーションのコンテキストでの OAuth 2 の使用方法の詳細は、Automation Controller 管理ガイド の トークンベースの認証 を参照してください。
外部ユーザーが OAuth 2 トークンを作成できるようにする
デフォルトでは、シングルサインオンによって作成されたユーザーなどの外部ユーザーは、セキュリティー上の理由から OAuth トークンを生成できません。
手順
- ナビゲーションパネルから を選択します。
- System オプションのリストから Miscellaneous Authentication settings を選択します。
- Allow External Users to Create OAuth2 Tokens オプションを有効にします。
10.4. シングルサインオン認証 リンクのコピーリンクがクリップボードにコピーされました!
シングルサインオン (SSO) 認証方法は、ユーザーの認証が Google SSO、Microsoft Azure SSO、SAML、GitHub などの Automation Controller の外部で行われるため、他の方法とは異なります。たとえば、GitHub SSO では、GitHub が唯一の真実のソースとなり、Automation Controller に指定したユーザー名とパスワードに基づいてアイデンティティーを検証します。
中央アイデンティティープロバイダーを備えた大規模な組織内で Automation Controller を使用して SSO 認証を設定できます。Automation Controller で SSO メソッドを設定すると、ログイン画面でその SSO のオプションが利用できるようになります。このオプションをクリックすると、アイデンティティープロバイダー (この場合は GitHub) にリダイレクトされ、そこで認証情報を提示します。アイデンティティープロバイダーで確認が済むと、Automation Controller は GitHub ユーザーにリンクされたユーザーを作成し (この SSO 方法で初めてログインする場合)、ログインします。
関連情報
サポートされているさまざまなタイプの SSO 認証方法については、Automation Controller 管理ガイド の ソーシャル認証の設定 および エンタープライズ認証の設定 を参照してください。