2.3. 初期設定
システムの特定の部分へのアクセスを許可すると、セキュリティーの脆弱性が露呈します。アクセスのセキュリティーを確保するために、次のプラクティスを適用してください。
- システム管理アカウントへのアクセスは最小限に抑えます。ユーザーインターフェイス (Web インターフェイス) と、Automation Controller が実行されているオペレーティングシステムへのアクセスには違いがあります。システム管理者またはスーパーユーザーは、すべてのシステムアプリケーションにアクセス、編集、および停止できます。Automation Controller への root アクセス権を持つユーザーは、これらの認証情報を復号化できる可能性があります。そのため、システム管理アカウントへのアクセスを最小限に抑えることが、セキュアなシステムを維持するうえで重要です。
- ローカルシステムへのアクセスを最小限に抑えます。Automation Controller では、管理目的以外のローカルユーザーアクセスは必要ありません。管理者以外のユーザーに Automation Controller システムへのアクセス権を付与しないでください。
- 職務の分離を徹底します。自動化の各コンポーネントは、場合によっては、さまざまなレベルでシステムにアクセスする必要があります。コンポーネントごとに異なるキーまたは認証情報を使用して、1 つのキーまたは認証情報の脆弱性による影響を最小限に抑えてください。
- Automation Controller を、可能な限り、低レベルの Automation Controller 設定および障害復旧専用の最小限のユーザーだけに制限します。Automation Controller のコンテキストでは、Automation Controller の ‘システム管理者’ または ‘スーパーユーザー’ アカウントが、Automation Controller 内のインベントリーまたは自動化定義を編集、変更、および更新できます。
2.3.1. 設定をコードパラダイムとして使用する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Community of Practice は、Ansible Automation Platform インフラストラクチャーと設定をコードとして管理するために、コレクションを通じて利用できる自動化コンテンツセットを作成しました。これにより、Configuration as Code (CaC) を通じてプラットフォーム自体の自動化が可能になります。このアプローチの多くの利点は明白ですが、一方で考慮すべきセキュリティー上の影響もあります。
以下の Ansible コンテンツコレクションは、Infrastructure as Code 手法を使用した Ansible Automation Platform コンポーネントの管理に利用できます。これらはすべて Ansible Automation Hub にあります。
| 検証済みコレクション | コレクションの目的 |
|
| インストール、バックアップと復元、証明書管理など、Ansible Automation Platform の Day 1 および Day 2 オペレーションを自動化するための Ansible コンテンツ。 |
|
|
ユーザーとグループ (RBAC)、プロジェクト、ジョブテンプレートとワークフロー、認証情報など、Ansible Automation Platform コンポーネントの作成を管理するためのロールのコレクション。このコレクションには、古い |
|
| 実行環境イメージの作成と管理、または古い Tower virtualenvs から実行環境への移行のためのロールのコレクション。 |
多くの組織では、CI/CD プラットフォームを使用してパイプラインを設定するか、その他の方法を使用してこの種のインフラストラクチャーを管理しています。一方、Ansible Automation Platform をネイティブで使用すると、Git ベースのリポジトリーにネイティブにリンクするように Webhook を設定できます。そのため、Ansible は Git イベントに応答してジョブテンプレートを直接トリガーできます。これにより、このプロセス全体から外部の CI コンポーネントが不要になるため、攻撃対象領域が減少します。
これらのプラクティスにより、すべてのインフラストラクチャーと設定のバージョン管理が可能になります。Git のベストプラクティスを適用して、適切なコード品質検査を実現してから、Ansible Automation Platform に同期してください。関連する Git のベストプラクティスには次のようなものがあります。
- プルリクエストを作成します。
- 検査ツールが適切に整備されていることを確認します。
- プレーンテキストのシークレットがコミットされないようにします。
- コミット前のフックとその他のポリシーが遵守されていることを確認します。
CaC では、外部 vault システムの使用も推奨しています。これにより、機密データをリポジトリーに保存したり、必要に応じてファイルを個別に vault に保存する必要がなくなります。これは、Ansible Automation Platform の設定をソースコードリポジトリーに保存する場合に特に重要です。Automation Controller の認証情報と Event-Driven Ansible の認証情報は、ソースリポジトリーにコミットすべきでないコレクション変数に、プレーンテキストで指定する必要があるためです。外部の認証情報 vault システムの使用に関する詳細は、このガイドの 外部の認証情報 vault に関する考慮事項 セクションを参照してください。
2.3.2. 一元的なロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
一元的なロギングは、システムセキュリティーの監視と大規模なログ分析の実行を支援するために不可欠です。機密性、完全性、可用性 (CIA) の 3 要素は、米国軍と政府のアイデアの組み合わせから生まれたもので、適切なセキュリティーシステムの開発とベストプラクティスの基盤となるモデルです。一元的なロギングは、完全性の側面に該当し、データまたはシステムが改ざんされたかどうかを特定するのに役立ちます。一元的なシステムへのロギングを使用すると、すべてのログを 1 カ所に収集して複数のシステムにわたるトラブルシューティングを自動化できます。これにより、特に複雑な Ansible Automation Platform のデプロイメントで、問題の特定、傾向の分析、さまざまなサーバーからのイベントの相関関係の分析が容易になります。個々のマシンを手動でチェックするのは時間がかかるため、一元化なロギングは、セキュリティーのベストプラクティスを満たすだけでなく、デバッグにも役立ちます。これにより、システム全体の健全性と安定性が確保され、潜在的なセキュリティーの脅威を特定しやすくなります。ロギングの設定に加えて、ストレージ容量、ハードウェア障害、高可用性アーキテクチャーによるロギングの失敗も考慮する必要があります。
他にも次のような利点があります。
- JSON 形式のデータを HTTP 接続経由で送信できます。カスタムハンドラーやインポートしたライブラリーで設計したサービス固有の調整を使用することはほとんどありません。コントローラーにとって最も役立つデータの種類は、ジョブファクトデータ、ジョブイベント/ジョブ実行、アクティビティーストリームデータ、およびログメッセージです。
- Playbook の実行の詳細、タスクの結果、システムイベントなど、インフラストラクチャーのさまざまな部分からのログを分析することで、自動化プロセスに関するより詳細な分析情報が得られます。
- ログから実行時間とリソース使用量を分析して、パフォーマンスのボトルネックを特定し、Ansible Playbook を最適化できます。
- 一元的なロギングは、監査のために信頼できる唯一の情報源を確保し、コンプライアンス要件を満たすのに役立ちます。
- ログを収集および分析するために、Splunk、Logstash、ElasticSearch、Loggly などのログ一元管理プラットフォームとのサードパーティー統合を実行できます。
ロギングアグリゲーターサービスは、以下の監視またはデータ分析システムと連携します。
- Splunk
- Loggly
- Sumologic
- Elastic stack (以前の ELK stack)
2.3.2.1. ロギングのセットアップ リンクのコピーリンクがクリップボードにコピーされました!
一元的なロギングのために、ロギングをいずれかのアグリゲータータイプに設定するには、次の手順に従います。
手順
-
ナビゲーションパネルから、
を選択します。 - Logging settings ページで、 をクリックします。
以下のオプションを設定できます。
- Logging Aggregator: ログを送信するホスト名または IP アドレスを入力します。
Logging Aggregator Port: アグリゲーターのポートが必要な場合は、ポートを指定します。
注記接続タイプが HTTPS の場合、ホスト名をポート番号付きの URL として入力できます。その後はポートを再度入力する必要はありません。ただし、TCP 接続と UDP 接続は、URL ではなく、ホスト名とポート番号の組み合わせによって特定されます。したがって、TCP 接続または UDP 接続の場合は、指定されたフィールドでポートを指定します。代わりに URL が Logging Aggregator フィールドに入力された場合、そのホスト名部分がホスト名として抽出されます。
- Logging Aggregator Type: クリックして、リストからアグリゲータサービスを選択します。
- Logging Aggregator Username: 必要に応じて、ロギングアグリゲーターのユーザー名を入力します。
- Logging Aggregator Password/Token: 必要に応じて、ロギングアグリゲーターのパスワードを入力します。
-
Loggers to Send Data to the Log Aggregator Form: デフォルトでは、4 種類のデータすべてが事前に入力されています。各データ型の追加情報を表示するには、フィールドの横にあるツールチップアイコン
をクリックします。不要なデータ型を削除します。
- Cluster wide unique identifier: これを使用してインスタンスを一意に識別します。
- Logging Aggregator Protocol: クリックして、ログアグリゲーターと通信するための接続タイプ (プロトコル) を選択します。その後に表示されるオプションは、選択したプロトコルによって異なります。
- TCP Connection Timeout: 接続タイムアウトを秒単位で指定します。このオプションは、HTTPS および TCP ログアグリゲータープロトコルにのみ適用されます。
- Logging Aggregator Level Threshold: ログハンドラーで報告する重大度のレベルを選択します。
-
Maximum number of messages that can be stored in the log action queue: 保存されるメッセージの数に応じて
rsyslogアクションキューがどれだけ大きくなるかを定義します。これはメモリー使用量に影響を及ぼす可能性があります。キューがこの数の 75% に達すると、キューはディスクへの書き込みを開始します (rsyslogのqueue.highWatermark)。90% に達すると、NOTICE、INFO、およびDEBUGメッセージが破棄され始めます (queue.discardMarkとqueue.discardSeverity=5)。 -
Maximum disk persistence for rsyslogd action queuing (in GB):
rsyslogアクションによる受信メッセージの処理に時間がかかる場合 (デフォルトは 1) に、保存するデータ量 (ギガバイト単位) です。アクションのrsyslogd queue.maxdiskspace設定と同等です (例:omhttp)。これは、LOG_AGGREGATOR_MAX_DISK_USAGE_PATHで指定されたディレクトリーにファイルを保存します。 -
File system location for rsyslogd disk persistence: 外部ログアグリゲーターの停止後に再試行する必要のあるログを永続化する場所 (デフォルトは
/var/lib/awx)。rsyslogd queue.spoolDirectory設定に相当します。 - Log Format For API 4XX Errors: 特定のエラーメッセージを設定します。詳細は、API 4XX エラー設定 を参照してください。
以下のオプションを設定します。
Log System Tracking Facts Individually: ツールチップアイコン
をクリックすると、オンに切り替えるか、デフォルトのままオフにしておくかなど、追加情報が表示されます。
- 選択したロギングアグリゲーションのエントリーを確認します。
- Enable External Logging: ログを外部ログアグリゲーターに送信する場合は、このチェックボックスを選択します。
- Enable/disable HTTPS certificate verification: HTTPS ログプロトコルの証明書検証はデフォルトで有効になっています。接続を確立する前に、外部ログアグリゲーターから送信された HTTPS 証明書をログハンドラーで検証する場合は、このチェックボックスをオンにします。
Enable rsyslogd debugging: このチェックボックスを選択すると、
rsyslogdの詳細度の高いデバッグが有効になります。外部ログアグリゲーションの接続に関する問題のデバッグに役立ちます。- をクリックするか、変更を破棄する場合は をクリックします。
2.3.2.2. LDAP ロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の手順で LDAP ロギングを有効にします。
LDAP のロギングを有効にするには、次の手順を使用します。
手順
ゲートウェイ設定ファイルを編集します。
-
Ansible Automation Platform 2.5 コンテナー版の場合、ファイルは
~/aap/gateway/etc/settings.pyです (プラットフォームゲートウェイコンテナーを実行しているユーザーとして編集します)。 Ansible Automation Platform 2.5 RPM 版の場合、ファイルは
/etc/ansible-automation-platform/gateway/settings.pyです。(...) CACHES['fallback']['LOCATION'] = '/var/cache/ansible-automation-platform/gateway' LOGGING['loggers']['aap']['level'] = 'INFO' LOGGING['loggers']['ansible_base']['level'] = 'INFO' LOGGING['loggers']['django_auth_ldap']['level'] = 'DEBUG' ###### add this line (...)
-
Ansible Automation Platform 2.5 コンテナー版の場合、ファイルは
プラットフォームゲートウェイのサービスまたはコンテナーを再起動します。
Ansible Automation Platform 2.5 コンテナー版の場合、プラットフォームゲートウェイサービスを再起動して、プラットフォームゲートウェイコンテナーを再起動します。
注記次のように `--user` フラグを指定して
systemctlを実行してください。+
$ systemctl --user restart automation-gatewayAnsible Automation Platform 2.5 RPM 版の場合、
automation-gateway-serviceコマンドを使用します。# automation-gateway-service restart
2.3.2.3. セキュリティー制御の実装 リンクのコピーリンクがクリップボードにコピーされました!
次の例はコンプライアンス要件への対応例です。一部は米国国防総省の Security Technical Implementation Guide からのものですが、完全性とセキュリティーのベストプラクティスに立ち返ることが重要です。
Automation Controller は、改ざんや否認を防止するために、保護された独立したリポジトリーでユーザーアクティビティーログを収集できる外部ログプロバイダーを使用する必要があります。Automation Controller は、外部ロギングを使用してサーバー内の複数のコンポーネントからのログレコードを収集するように設定する必要があります。正確なフォレンジック分析を行うために、発生したイベントが時間と関連付けられている必要があります。さらに、この関連付けは特定の許容基準を満たす必要があります。
このセキュリティー制御を実装するには、次の手順を実行します。
手順
- Automation Controller に管理者としてログインします。
-
ナビゲーションパネルから、
を選択します。 - Logging settings ページで、 をクリックします。
以下のフィールドを設定します。
-
Logging Aggregator を
Not configuredに設定します。これはデフォルトです。 -
Enable External Logging を
Onに設定します。 - Logging Aggregator Level Threshold を DEBUG に設定します。
- TCP Connection Timeout を 5 (デフォルト) または組織のタイムアウトに設定します。
-
Enable/disable HTTPS certificate verification を
Onに設定します。
-
Logging Aggregator を
- をクリックします。
Automation Controller は、ログレコード用のストレージ容量を割り当て、ログ障害の発生時にデフォルトでシャットダウンする必要があります (可用性が最優先事項である場合を除く)。システムがログの処理に失敗するリスクがある場合、それを検出して障害を軽減するための措置を講じることが不可欠です。ログ処理の障害には、ソフトウェア/ハードウェアエラー、ログキャプチャーメカニズムの障害、ログストレージ容量の到達または超過などがあります。アプリケーションサーバーが高可用性システムの一部である場合を除き、障害発生時にシャットダウンするようにアプリケーションサーバーを設定する必要があります。可用性が最優先事項である場合、ログ障害への対応として承認されるその他のアクションは次のとおりです。
- 障害の原因がログレコードのストレージ容量の不足である場合、アプリケーションは可能であればログレコードの生成を続行し (必要に応じてログサービスを自動的に再起動し)、最も古いログレコードを先入れ先出し方式で上書きする必要があります。
ログレコードが一元収集サーバーに送信され、このサーバーとの通信が失われるかサーバーに障害が発生した場合、通信が回復するかログレコードが手動で取得されるまで、アプリケーションはログレコードをローカルでキューに入れる必要があります。一元収集サーバーへの接続が回復したら、ローカルログデータを収集サーバーと同期するためのアクションを実行する必要があります。
このセキュリティー制御を実装するには、次の手順を実行します。
Web ブラウザーを開き、ロギング API(
/api/v2/settings/logging/) に移動します。Automation Controller 管理者として認証されていることを確認します。
Content セクションで、次の値を変更します。
-
LOG_AGGREGATOR_ACTION_MAX_DISK_USAGE_GB= ログバッファリングに関する組織定義の要件。 -
LOG_AGGREGATOR_MAX_DISK_USAGE_PATH=/var/lib/awx.. をクリックします
-
2.3.2.4. 各ホストのセキュリティー制御の実装 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller のログファイルには、明示的に定義された権限でアクセスできる必要があります。Automation Controller のログファイルの機密性が失われると、通常は入手できないシステムに関する重要な情報を攻撃者が特定し、昇格やラテラルムーブメントに必要な情報をさらに列挙できるようになります。
セキュリティー制御を実装するには、次の手順を使用します。
手順
各 Automation Controller ホストのシステム管理者として、Automation Controller NGINX ログディレクトリーの権限と所有者を設定します。
-
chmod 770 /var/log/nginx -
chown nginx:root /var/log/nginx
-
Automation Controller ログディレクトリーの権限と所有者を設定します。
-
chmod 770 /var/log/tower -
chown awx:awx /var/log/tower
-
Automation Controller スーパーバイザーログディレクトリーの権限と所有者を設定します。
-
chmod 770 /var/log/supervisor/ -
chown root:root /var/log/supervisor/
-
Automation Controller は、ログサブシステムに障害が発生した場合に別のシステムにフェイルオーバーするように設定する必要があります。Automation Controller ホストは、アプリケーションログ処理の障害検出時に、アプリケーションおよびロギング機能を処理できる別の Automation Controller ホストにフェイルオーバーできる必要があります。これにより、ユーザーの操作の中断やログデータの損失を最小限に抑えながら、アプリケーションとロギング機能の継続的な運用が可能になります。
- Automation Controller が HA 設定でない場合、管理者は Automation Controller を再インストールする必要があります。
2.3.3. システム管理者用のセキュリティー制御の実装 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller は適切なログレコードを生成する必要があります。Automation Controller の Web サーバーが、トラブルシューティング、デバッグ、およびフォレンジック分析をサポートするために、ユーザーセッションに関連するすべての詳細をログに記録する必要があります。データのロギング機能がないと、組織はイベント調査のための重要な監査および分析ツールを失うことになります。
システム管理者として各 Automation Controller ホストのセキュリティー制御を実装するには、次の手順を使用します。
手順
-
ナビゲーションパネルから、
を選択します。System Settings ページが表示されます。 - をクリックします。
以下を設定します。
- Enable Activity Stream = On
- Enable Activity Stream for Inventory Sync = On
- Organization Admins Can Manage Users and Teams = On
- All Users Visible to Organization Admins = On
- をクリックします。
2.3.4. 外部の認証情報 vault に関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
シークレット管理は、Automation Platform のセキュリティーを維持するために不可欠なコンポーネントです。次のシークレット管理プラクティスを推奨します。
- システムへのアクセス権を持つ無許可のユーザーが存在しないことを確認し、アクセスを必要とするユーザーのみにアクセスが許可されていることを確認します。Automation Controller は、パスワードや API トークンなどの機密情報を暗号化しますが、復号化するためのキーも保存します。許可されたユーザーはあらゆるものにアクセスできる可能性があります。
- 外部システムを使用してシークレットを管理します。認証情報を更新する必要がある場合、外部システムは、内部システムよりも簡単に更新された認証情報を取得できます。シークレットを管理するための外部システムには、CyberArk、HashiCorp Vault、Microsoft Azure Key Management などがあります。詳細は、自動化実行の使用の シークレット管理システム セクションを参照してください。