민감한 정보가 로그에 노출되는 설정

민감한 입력과 결과가 로그에 남지 않도록 작업 출력을 보호하고 기존 로그도 점검하세요.

설명

비밀번호, 토큰, 키 같은 민감한 값을 다루는 Ansible 작업은 입력이나 결과가 콘솔과 수집된 로그에 남지 않도록 보호해야 합니다. no_log: true는 작업 세부 정보의 출력을 억제합니다. 실제 노출 여부는 모듈 자체의 마스킹과 별도 출력 경로에도 달려 있습니다.

계정 생성, 비밀번호 변경, 시크릿 배포 작업에서 값이 출력되면 로그에 접근할 수 있는 사용자에게 원래 허용되지 않은 정보가 보일 수 있습니다.

잠재적 영향

  • 비밀번호나 토큰이 CI와 운영 로그를 통해 노출될 수 있습니다.
  • 로그 보관본이 남아 사고 후에도 민감한 정보가 계속 노출될 수 있습니다.

해결 방법

  • 민감한 값을 다루는 작업에 no_log: true를 적용하고 실제 실행 출력에 비밀 값이 남지 않는지 확인하세요.
  • no_log는 디버그 출력을 보호하지 않으므로 디버그 작업이나 별도 애플리케이션 로그에도 비밀 값을 기록하지 마세요.
  • 기존 로그 저장소의 노출 여부와 접근 권한을 점검하고 유출된 자격 증명은 교체하세요.

예시

app_password에는 대상 운영체제의 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

작업 세부 정보의 출력을 억제합니다. 별도 디버그 출력이나 기존 로그의 비밀 값까지 제거하지는 않습니다.

참조