Ansible Tower / AWX / Automation controller Security

Support HackTricks

基本情報

Ansible Tower またはそのオープンソース版 AWX は、Ansibleのユーザーインターフェース、ダッシュボード、REST API として知られています。ロールベースのアクセス制御、ジョブスケジューリング、グラフィカルなインベントリ管理を使用して、最新のUIからAnsibleインフラストラクチャを管理できます。TowerのREST APIとコマンドラインインターフェースにより、現在のツールやワークフローに簡単に統合できます。

Automation Controllerは、 Ansible Towerの新しいバージョンで、より多くの機能を備えています。

違い

こちらによると、Ansible TowerとAWXの主な違いは受けるサポートであり、Ansible Towerにはロールベースのアクセス制御、カスタムAPIのサポート、ユーザー定義のワークフローなどの追加機能があります。

テクノロジースタック

  • Webインターフェース: これは、ユーザーがインベントリ、資格情報、テンプレート、ジョブを管理できるグラフィカルインターフェースです。直感的に設計されており、オートメーションジョブの状態や結果を理解するのに役立つ視覚化を提供します。

  • REST API: Webインターフェースでできるすべてのことは、REST APIを介しても行えます。これにより、AWX/Towerを他のシステムと統合したり、インターフェースで通常実行するアクションをスクリプト化したりできます。

  • データベース: AWX/Towerは、設定、ジョブ結果、その他の必要な運用データを保存するためにデータベース(通常はPostgreSQL)を使用します。

  • RabbitMQ: これは、AWX/Towerが異なるコンポーネント間、特にWebサービスとタスクランナー間で通信するために使用するメッセージングシステムです。

  • Redis: Redisは、キャッシュおよびタスクキューのバックエンドとして機能します。

論理コンポーネント

  • インベントリ: インベントリは、ジョブ(Ansibleプレイブック)を実行できるホスト(またはノード)のコレクションです。AWX/Towerでは、インベントリを定義してグループ化でき、AWS、Azureなどの他のシステムからホストリストを取得する動的インベントリもサポートしています。

  • プロジェクト: プロジェクトは、バージョン管理システム(Gitなど)から取得したAnsibleプレイブックのコレクションです。必要に応じて最新のプレイブックを取得します。

  • テンプレート: ジョブテンプレートは、特定のプレイブックがどのように実行されるかを定義し、ジョブのためのインベントリ資格情報、およびその他のパラメータを指定します。

  • 資格情報: AWX/Towerは、SSHキー、パスワード、APIトークンなどの秘密を管理および保存する安全な方法を提供します。これらの資格情報は、プレイブックが実行されるときに必要なアクセスを持つように、ジョブテンプレートに関連付けることができます。

  • タスクエンジン: ここで魔法が起こります。タスクエンジンはAnsibleに基づいて構築されており、プレイブックを実行する責任があります。ジョブはタスクエンジンに送信され、指定されたインベントリに対して指定された資格情報を使用してAnsibleプレイブックが実行されます。

  • スケジューラとコールバック: これらはAWX/Towerの高度な機能で、ジョブを特定の時間にスケジュールしたり、外部イベントによってトリガーしたりできます。

  • 通知: AWX/Towerは、ジョブの成功または失敗に基づいて通知を送信できます。メール、Slackメッセージ、Webhookなど、さまざまな通知手段をサポートしています。

  • Ansibleプレイブック: Ansibleプレイブックは、構成、デプロイメント、およびオーケストレーションツールです。自動化された再現可能な方法でシステムの望ましい状態を記述します。YAMLで記述され、プレイブックはAnsibleの宣言型自動化言語を使用して、実行する必要がある構成、タスク、およびステップを記述します。

ジョブ実行フロー

  1. ユーザーインタラクション: ユーザーは、WebインターフェースまたはREST APIを介してAWX/Towerと対話できます。これにより、AWX/Towerが提供するすべての機能にフロントエンドアクセスが提供されます。

  2. ジョブの開始:

  • ユーザーは、WebインターフェースまたはAPIを介して、ジョブテンプレートに基づいてジョブを開始します。

  • ジョブテンプレートには、インベントリプロジェクト(プレイブックを含む)、および資格情報への参照が含まれています。

  • ジョブの開始時に、ジョブを実行するためにAWX/Towerバックエンドにリクエストが送信されます。

  1. ジョブのキューイング:

  • RabbitMQは、Webコンポーネントとタスクランナー間のメッセージングを処理します。ジョブが開始されると、RabbitMQを使用してタスクエンジンにメッセージが送信されます。

  • Redisは、実行待ちのキューイングされたジョブを管理するタスクキューのバックエンドとして機能します。

  1. ジョブの実行:

  • タスクエンジンがキューに入ったジョブを取得します。タスクエンジンは、ジョブに関連付けられたプレイブック、インベントリ、および資格情報に関する必要な情報をデータベースから取得します。

  • 関連するプロジェクトから取得したAnsibleプレイブックを使用して、タスクエンジンは指定されたインベントリノードに対して提供された資格情報を使用してプレイブックを実行します。

  • プレイブックが実行されると、その実行出力(ログ、ファクトなど)がキャプチャされ、データベースに保存されます。

  1. ジョブ結果:

  • プレイブックの実行が終了すると、結果(成功、失敗、ログ)がデータベースに保存されます。

  • ユーザーは、Webインターフェースを介して結果を表示したり、REST APIを介してクエリを実行したりできます。

  • ジョブの結果に基づいて、通知が送信され、ユーザーや外部システムにジョブの状態を通知できます。通知は、メール、Slackメッセージ、Webhookなどです。

  1. 外部システムとの統合:

  • インベントリは外部システムから動的に取得でき、AWX/TowerはAWS、Azure、VMwareなどのソースからホストを取得できます。

  • プロジェクト(プレイブック)はバージョン管理システムから取得でき、ジョブ実行中に最新のプレイブックを使用することが保証されます。

  • スケジューラとコールバックは、他のシステムやツールと統合するために使用でき、AWX/Towerが外部トリガーに反応したり、事前に決められた時間にジョブを実行したりします。

AWXラボの作成とテスト

ドキュメントに従って、docker-composeを使用してAWXを実行することができます:

git clone -b x.y.z https://github.com/ansible/awx.git # Get in x.y.z the latest release version

cd awx

# Build
make docker-compose-build

# Run
make docker-compose

# Or to create a more complex env
MAIN_NODE_TYPE=control EXECUTION_NODE_COUNT=2 COMPOSE_TAG=devel make docker-compose

# Clean and build the UI
docker exec tools_awx_1 make clean-ui ui-devel

# Once migrations are completed and the UI is built, you can begin using AWX. The UI can be reached in your browser at https://localhost:8043/#/home, and the API can be found at https://localhost:8043/api/v2.

# Create an admin user
docker exec -ti tools_awx_1 awx-manage createsuperuser

# Load demo data
docker exec tools_awx_1 awx-manage create_preload_data

RBAC

サポートされている役割

最も特権のある役割はシステム管理者と呼ばれます。この役割を持つ者は何でも変更できます。

ホワイトボックスセキュリティレビューには、システム監査役が必要で、これによりすべてのシステムデータを表示できますが、変更はできません。別の選択肢として組織監査役を取得することもできますが、前者を取得する方が良いでしょう。

利用可能な役割の詳細な説明を表示するにはここを展開してください
  1. システム管理者:

  • これは、システム内の任意のリソースにアクセスし、変更する権限を持つスーパーユーザーの役割です。

  • 彼らはすべての組織、チーム、プロジェクト、インベントリ、ジョブテンプレートなどを管理できます。

  1. システム監査役:

  • この役割を持つユーザーは、すべてのシステムデータを表示できますが、変更はできません。

  • この役割は、コンプライアンスと監視のために設計されています。

  1. 組織の役割:

  • 管理者: 組織のリソースに対する完全な制御。

  • 監査役: 組織のリソースへの表示専用アクセス。

  • メンバー: 特定の権限なしでの組織の基本的なメンバーシップ。

  • 実行: 組織内でジョブテンプレートを実行できます。

  • 読み取り: 組織のリソースを表示できます。

  1. プロジェクトの役割:

  • 管理者: プロジェクトを管理および変更できます。

  • 使用: ジョブテンプレートでプロジェクトを使用できます。

  • 更新: SCM(ソース管理)を使用してプロジェクトを更新できます。

  1. インベントリの役割:

  • 管理者: インベントリを管理および変更できます。

  • アドホック: インベントリに対してアドホックコマンドを実行できます。

  • 更新: インベントリソースを更新できます。

  • 使用: ジョブテンプレートでインベントリを使用できます。

  • 読み取り: 表示専用アクセス。

  1. ジョブテンプレートの役割:

  • 管理者: ジョブテンプレートを管理および変更できます。

  • 実行: ジョブを実行できます。

  • 読み取り: 表示専用アクセス。

  1. 資格情報の役割:

  • 管理者: 資格情報を管理および変更できます。

  • 使用: ジョブテンプレートやその他の関連リソースで資格情報を使用できます。

  • 読み取り: 表示専用アクセス。

  1. チームの役割:

  • メンバー: チームの一部ですが、特定の権限はありません。

  • 管理者: チームのメンバーと関連リソースを管理できます。

  1. ワークフローの役割:

  • 管理者: ワークフローを管理および変更できます。

  • 実行: ワークフローを実行できます。

  • 読み取り: 表示専用アクセス。

HackTricksをサポートする

Last updated