Ansible에서 레거시 allow_unsafe_lookups 옵션 활성화

이전 Ansible 버전에서 allow_unsafe_lookups를 켜면 외부 데이터가 템플릿으로 다시 평가될 수 있습니다. 사용 중인 버전에 맞춰 lookup 결과의 신뢰 여부와 설정을 확인하세요.

설명

ansible-core 2.18.0에서는 lookup 플러그인의 반환값을 기본적으로 unsafe로 표시해, 값에 포함된 Jinja 표현식이 이후 템플릿으로 평가되는 것을 막습니다. unsafe는 위험한 코드를 실행하라는 지시가 아니라, 데이터를 템플릿으로 신뢰하지 않는다는 보호 표시입니다. [defaults]의 allow_unsafe_lookups=True는 이 보호를 생략하므로, 신뢰할 수 없는 반환값을 이후 템플릿으로 다시 평가하면 문제가 될 수 있습니다.

ansible-core 2.19.0부터는 템플릿 신뢰 모델이 바뀌어 이 옵션을 사용하지 않습니다. 공식 문서에는 2.23에서 제거할 예정이라고 명시되어 있습니다. 사용 중인 버전에 맞는 템플릿 신뢰 지침을 적용해야 합니다.

잠재적 영향

  • 이 옵션을 사용하는 이전 버전에서 외부의 신뢰할 수 없는 문자열이 템플릿으로 재평가되면, 의도하지 않은 변수 참조나 실행 동작으로 이어질 수 있습니다. 반환값의 출처와 이후 사용 방식이 영향을 결정합니다.
  • 템플릿에서 실행되는 동작은 제어 노드에서 Ansible을 실행하는 계정의 권한으로 수행될 수 있습니다.
  • 전역 옵션을 끄면 반환값의 추가 템플릿 처리에 의존하던 이전 플레이북의 동작이 달라질 수 있습니다. 버전 업그레이드에서도 신뢰 처리 변경을 점검해야 합니다.

해결 방법

  1. ansible --version으로 버전과 사용 중인 설정 파일을 확인하고, 해당 버전의 ansible-config 출력과 설정 우선순위를 점검하세요.
  2. 이 옵션을 사용하는 이전 버전에서는 allow_unsafe_lookups=False를 유지하거나 옵션을 제거해 기본값을 사용하세요. 개별 lookup 호출의 allow_unsafe=True도 따로 검토하세요. 신뢰할 수 없는 내용을 템플릿으로 실행하기 위한 예외를 추가하지 마세요.
  3. 2.19 계열처럼 이 옵션이 사용되지 않는 버전에서는 불필요한 레거시 설정을 정리하고, 해당 버전의 템플릿 신뢰 지침에 따라 플러그인과 플레이북을 검토하세요. 이 옵션의 값을 바꾸는 것만으로 현재 템플릿 보호가 강화된다고 가정하지 마세요.
  4. lookup 반환값의 출처, 플러그인 자체의 동작과 값을 사용하는 템플릿을 점검하세요. 필요한 플레이북을 시험해 데이터가 의도대로 처리되는지 확인하세요. 기본 보호는 플러그인 자체의 모든 동작을 차단하는 보안 격리 기능이 아닙니다.

예시

변경 전

ini
[defaults]
allow_unsafe_lookups=True

변경 후

ini
[defaults]
allow_unsafe_lookups=False

설명:

  • 변경 전: 2.18.0에서는 lookup 결과의 기본 보호를 생략합니다. 옵션을 사용하지 않는 2.19.0에는 이 효과가 적용되지 않습니다.
  • 변경 후: 이 옵션을 사용하는 버전에서는 기본 보호를 유지합니다. 개별 호출의 예외와 플러그인 동작은 따로 점검해야 합니다. 두 예시는 lookup 입력이나 사용처를 포함하지 않는 최소 설정 조각입니다.

참조