説明
パスワード、トークン、鍵を扱う Ansible タスクでは、機密性の高い入力や結果がコンソール出力や収集ログに残らないようにする必要があります。no_log: true はタスクの詳細の出力を抑制します。実際の露出は、モジュール自体のマスキングや別の出力経路にも左右されます。
アカウント作成、パスワード変更、シークレット配布の際に値が出力されると、ログを閲覧できるユーザーが、本来許可されていない情報を見られる可能性があります。
想定される影響
- CI や運用ログを通じて、パスワードやトークンが露出する可能性があります。
- 保存されたログから、インシデント後も機密情報が露出し続けるおそれがあります。
対処方法
- 機密情報を扱うタスクに
no_log: trueを適用し、実際の実行出力に秘密情報が残らないか確認してください。 no_logはデバッグ出力を保護しません。デバッグタスクや別のアプリケーションログにも秘密情報を書き込まないでください。- 既存のログ保存先での露出とアクセス権限を確認し、漏えいした資格情報を交換してください。
例
app_password には、対象 OS の user モジュールが要求するパスワード形式の値を安全に渡してください。タスク出力の制御を比較する例であり、パスワードの保存や受け渡しまで保護するものではありません。
変更前
yaml
---
- name: 사용자 생성
hosts: localhost
tasks:
- name: 애플리케이션 계정 생성
ansible.builtin.user:
name: app_user
password: "{{ app_password }}"
no_log: false
タスク全体の出力抑制を使っていません。モジュールが一部の秘密フィールドをマスキングしていても、他の出力に機密情報が残らないか確認する必要があります。
変更後
yaml
---
- name: 사용자 생성
hosts: localhost
tasks:
- name: 애플리케이션 계정 생성
ansible.builtin.user:
name: app_user
password: "{{ app_password }}"
no_log: true
タスクの詳細の出力を抑制します。別のデバッグ出力や既存のログから秘密情報を削除するわけではありません。