第12章 シークレットの処理と接続セキュリティー
Automation Controller はシークレットと接続をセキュアに処理します。
12.1. シークレットの処理
Automation Controller は 3 つのシークレットのセットを管理します。
- ローカル Automation Controller ユーザーのユーザーパスワード。
- データベースのパスワードやメッセージバスのパスワードなど、Automation Controller の運用に使用するシークレット。
- SSH キー、クラウド認証情報、外部パスワード vault 認証情報など、自動化で使用するシークレット。
次のユーザーに対しては「ローカル」のユーザーアクセス権が必要です。
- postgres
- awx
- redis
- receptor
- nginx
12.1.1. ローカルユーザー用のユーザーパスワード
Automation Controller は、SHA256 ハッシュを使用して、PBKDF2 アルゴリズムでローカル Automation Controller ユーザーのパスワードをハッシュします。LDAP、SAML、OAuth などの外部アカウントメカニズムで認証を行うユーザーの場合は、パスワードやシークレットが保存されません。
12.1.2. 運用に使用するシークレットの処理
Automation Controller には、運用に使用する以下のシークレットが存在します。
-
/etc/tower/SECRET_KEY
: データベース内の自動化シークレットを暗号化するために使用するシークレットキー。SECRET_KEY
が変更された場合や不明な場合は、データベース内の暗号化されたフィールドにアクセスできません。 -
/etc/tower/tower.{cert,key}
: Automation Controller Web サービスの SSL 証明書とキー。自己署名証明書またはキーはデフォルトでインストールされますが、ローカルで適切な証明書とキーを指定できます。 -
/etc/tower/conf.d/postgres.py
にあるデータベースのパスワード、および/etc/tower/conf.d/channels.py
にあるメッセージバスのパスワード
これらのシークレットは、暗号化されずに Automation Controller サーバーに保存されます。これは、Automation Controller サービスが起動時にこれらのシークレットをすべて自動的に読み取る必要があるためです。すべてのシークレットは UNIX パーミッションによって保護され、root および Automation Controller awx サービスユーザーに制限されます。
これらのシークレットを非表示にする必要がある場合、当該シークレットの読み取り元となるファイルは Python によって解釈されます。これらのファイルは、サービスが再起動するたびに、他のメカニズムでこれらのシークレットを取得するように調整できます。この変更はお客様により指定されるものであり、アップグレードのたびに再適用が必要な場合があります。Red Hat サポートと Red Hat コンサルティングは、そのような変更の例を有しています。
シークレットシステムがダウンしていると、Automation Controller が情報を取得できず、サービスが復元されれば回復できるような障害が発生する可能性があります。システムで冗長性を使用することを強く推奨します。
Automation Controller によって生成された SECRET_KEY
が侵害されており、再生成する必要があると思われる場合は、Automation Controller のバックアップおよび復元ツールとよく似た動作をするツールをインストーラーから実行できます。
新しいシークレットキーを生成する前に、Automation Controller データベースを必ずバックアップしてください。
新しいシークレットキーを生成するには、以下を実行します。
- バックアップおよび復元 セクションで説明されている手順に従います。
インストールのインベントリー (バックアップと復元の実行に使用したのと同じインベントリー) を使用して、次のコマンドを実行します。
setup.sh -k.
以前のキーのバックアップコピーは /etc/tower/
に保存されます。
12.1.3. 自動化で使用するシークレットの処理
Automation Controller は、自動化に使用するシークレットや、自動化の結果であるさまざまなシークレットをデータベースに保存します。
これらのシークレットには以下が含まれます。
- すべての認証情報タイプの全シークレットフィールド (パスワード、シークレットキー、認証トークン、シークレットクラウド認証情報)。
- Automation Controller 設定で定義された外部サービスのシークレットトークンとパスワード。
- “password” タイプのサーベイフィールドのエントリー。
シークレットフィールドを暗号化するために、Automation Controller は、暗号化用の 256 ビットキーを使用した CBC モードの AES、PKCS7 パディング、および認証用の SHA256 を使用した HMAC を使用します。
暗号化や復号化のプロセスでは、SECRET_KEY
、モデルフィールドのフィールド名、およびデータベースによって割り当てられた自動増分レコード ID から AES-256 ビット暗号化キーが導出されます。したがって、キー生成プロセスで使用される属性が変更された場合、Automation Controller はシークレットを正しく復号化できません。
Automation Controller は次のように設計されています。
-
Automation Controller が起動する Playbook では、
SECRET_KEY
を読み取ることはできません。 - Automation Controller ユーザーは、これらのシークレットを読み取ることはできません。
- Automation Controller REST API によって、シークレットフィールド値が利用可能になることはありません。
Playbook でシークレット値が使用されている場合は、誤ってログに記録されないように、タスクで no_log
を使用することを推奨します。