Ansible Tower / AWX / Automation controller Security
Reading time: 13 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
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の宣言型自動化言語を使用して、実行する必要がある構成、タスク、およびステップを記述します。
ジョブ実行フロー
- ユーザーインタラクション: ユーザーは、WebインターフェースまたはREST APIを介してAWX/Towerと対話できます。これにより、AWX/Towerが提供するすべての機能にフロントエンドアクセスが提供されます。
- ジョブの開始:
- ユーザーは、WebインターフェースまたはAPIを介して、ジョブテンプレートに基づいてジョブを開始します。
- ジョブテンプレートには、インベントリ、プロジェクト(プレイブックを含む)、および資格情報への参照が含まれています。
- ジョブの開始時に、実行のためにジョブをキューに入れるリクエストがAWX/Towerのバックエンドに送信されます。
- ジョブのキューイング:
- RabbitMQは、Webコンポーネントとタスクランナー間のメッセージングを処理します。ジョブが開始されると、RabbitMQを使用してタスクエンジンにメッセージが送信されます。
- Redisは、実行待ちのキューに入れられたジョブを管理するタスクキューのバックエンドとして機能します。
- ジョブの実行:
- タスクエンジンがキューに入れられたジョブを取得します。タスクエンジンは、ジョブに関連付けられたプレイブック、インベントリ、および資格情報に関する必要な情報をデータベースから取得します。
- 関連するプロジェクトから取得したAnsibleプレイブックを使用して、タスクエンジンは指定されたインベントリノードに対して提供された資格情報を使用してプレイブックを実行します。
- プレイブックが実行されると、その実行出力(ログ、ファクトなど)がキャプチャされ、データベースに保存されます。
- ジョブ結果:
- プレイブックの実行が終了すると、結果(成功、失敗、ログ)がデータベースに保存されます。
- ユーザーは、Webインターフェースを介して結果を表示したり、REST APIを介してクエリを実行したりできます。
- ジョブの結果に基づいて、通知が送信され、ユーザーや外部システムにジョブの状態を通知できます。通知は、メール、Slackメッセージ、Webhookなどです。
- 外部システムとの統合:
- インベントリは外部システムから動的に取得でき、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
サポートされている役割
最も特権のある役割はシステム管理者と呼ばれます。この役割を持つ者は何でも変更することができます。
ホワイトボックスセキュリティレビューでは、システム監査役が必要で、これによりすべてのシステムデータを表示できますが、変更はできません。もう一つの選択肢は組織監査役を取得することですが、前者を取得する方が良いでしょう。
利用可能な役割の詳細な説明を表示するにはここを展開してください
- システム管理者:
- これは、システム内の任意のリソースにアクセスし、変更する権限を持つスーパーユーザーの役割です。
- 彼らはすべての組織、チーム、プロジェクト、インベントリ、ジョブテンプレートなどを管理できます。
- システム監査役:
- この役割を持つユーザーはすべてのシステムデータを表示できますが、変更はできません。
- この役割はコンプライアンスと監視のために設計されています。
- 組織の役割:
- 管理者: 組織のリソースに対する完全な制御。
- 監査役: 組織のリソースへの表示専用アクセス。
- メンバー: 特定の権限なしで組織の基本メンバーシップ。
- 実行: 組織内でジョブテンプレートを実行できます。
- 読み取り: 組織のリソースを表示できます。
- プロジェクトの役割:
- 管理者: プロジェクトを管理および変更できます。
- 使用: ジョブテンプレートでプロジェクトを使用できます。
- 更新: SCM(ソース管理)を使用してプロジェクトを更新できます。
- インベントリの役割:
- 管理者: インベントリを管理および変更できます。
- アドホック: インベントリに対してアドホックコマンドを実行できます。
- 更新: インベントリソースを更新できます。
- 使用: ジョブテンプレートでインベントリを使用できます。
- 読み取り: 表示専用アクセス。
- ジョブテンプレートの役割:
- 管理者: ジョブテンプレートを管理および変更できます。
- 実行: ジョブを実行できます。
- 読み取り: 表示専用アクセス。
- 資格情報の役割:
- 管理者: 資格情報を管理および変更できます。
- 使用: ジョブテンプレートやその他の関連リソースで資格情報を使用できます。
- 読み取り: 表示専用アクセス。
- チームの役割:
- メンバー: チームの一部ですが、特定の権限はありません。
- 管理者: チームのメンバーと関連リソースを管理できます。
- ワークフローの役割:
- 管理者: ワークフローを管理および変更できます。
- 実行: ワークフローを実行できます。
- 読み取り: 表示専用アクセス。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。