Ansible Tower / AWX / Automation controller Security

htARTE(HackTricks AWS Red Team Expert) でゼロからヒーローまでAWSハッキングを学ぶ

HackTricks をサポートする他の方法:

基本情報

Ansible Tower またはそのオープンソース版 AWXAnsibleのユーザーインターフェース、ダッシュボード、およびREST API としても知られています。 役割ベースのアクセス制御、ジョブスケジューリング、およびグラフィカルインベントリ管理により、AnsibleインフラストラクチャをモダンなUIから管理できます。 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. ユーザーインタラクション: ユーザーは AWX/Tower と Webインターフェース または REST API を介してやり取りできます。これらは AWX/Tower が提供するすべての機能にフロントエンドアクセスを提供します。

  2. ジョブの開始:

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

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

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

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

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

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

  1. ジョブの実行:

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

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

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

  1. ジョブの結果:

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

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

  • ジョブの結果に基づいて、ジョブの状態についてユーザーや外部システムに通知するために 通知 が送信されることがあります。通知は、メール、Slackメッセージ、Webhookなどで行われる可能性があります。

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

  • インベントリ は外部システムから動的に取得され、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. プロジェクトロール:

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

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

  • 更新: ソースコントロールを使用してプロジェクトを更新できます。

  1. インベントリロール:

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

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

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

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

  • 読み取り: 閲覧専用アクセスです。

  1. ジョブテンプレートロール:

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

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

  • 読み取り: 閲覧専用アクセスです。

  1. 資格情報ロール:

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

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

  • 読み取り: 閲覧専用アクセスです。

  1. チームロール:

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

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

  1. ワークフローロール:

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

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

  • 読み取り: 閲覧専用アクセスです。

最終更新