설명
ansible-core 2.18.0에서는 lookup 플러그인의 반환값을 기본적으로 unsafe로 표시해, 값에 포함된 Jinja 표현식이 이후 템플릿으로 평가되는 것을 막습니다. unsafe는 위험한 코드를 실행하라는 지시가 아니라, 데이터를 템플릿으로 신뢰하지 않는다는 보호 표시입니다. [defaults]의 allow_unsafe_lookups=True는 이 보호를 생략하므로, 신뢰할 수 없는 반환값을 이후 템플릿으로 다시 평가하면 문제가 될 수 있습니다.
ansible-core 2.19.0부터는 템플릿 신뢰 모델이 바뀌어 이 옵션을 사용하지 않습니다. 공식 문서에는 2.23에서 제거할 예정이라고 명시되어 있습니다. 사용 중인 버전에 맞는 템플릿 신뢰 지침을 적용해야 합니다.
잠재적 영향
- 이 옵션을 사용하는 이전 버전에서 외부의 신뢰할 수 없는 문자열이 템플릿으로 재평가되면, 의도하지 않은 변수 참조나 실행 동작으로 이어질 수 있습니다. 반환값의 출처와 이후 사용 방식이 영향을 결정합니다.
- 템플릿에서 실행되는 동작은 제어 노드에서 Ansible을 실행하는 계정의 권한으로 수행될 수 있습니다.
- 전역 옵션을 끄면 반환값의 추가 템플릿 처리에 의존하던 이전 플레이북의 동작이 달라질 수 있습니다. 버전 업그레이드에서도 신뢰 처리 변경을 점검해야 합니다.
해결 방법
ansible --version으로 버전과 사용 중인 설정 파일을 확인하고, 해당 버전의ansible-config출력과 설정 우선순위를 점검하세요.- 이 옵션을 사용하는 이전 버전에서는
allow_unsafe_lookups=False를 유지하거나 옵션을 제거해 기본값을 사용하세요. 개별 lookup 호출의allow_unsafe=True도 따로 검토하세요. 신뢰할 수 없는 내용을 템플릿으로 실행하기 위한 예외를 추가하지 마세요. - 2.19 계열처럼 이 옵션이 사용되지 않는 버전에서는 불필요한 레거시 설정을 정리하고, 해당 버전의 템플릿 신뢰 지침에 따라 플러그인과 플레이북을 검토하세요. 이 옵션의 값을 바꾸는 것만으로 현재 템플릿 보호가 강화된다고 가정하지 마세요.
- lookup 반환값의 출처, 플러그인 자체의 동작과 값을 사용하는 템플릿을 점검하세요. 필요한 플레이북을 시험해 데이터가 의도대로 처리되는지 확인하세요. 기본 보호는 플러그인 자체의 모든 동작을 차단하는 보안 격리 기능이 아닙니다.
예시
변경 전
ini
[defaults]
allow_unsafe_lookups=True
변경 후
ini
[defaults]
allow_unsafe_lookups=False
설명:
- 변경 전: 2.18.0에서는 lookup 결과의 기본 보호를 생략합니다. 옵션을 사용하지 않는 2.19.0에는 이 효과가 적용되지 않습니다.
- 변경 후: 이 옵션을 사용하는 버전에서는 기본 보호를 유지합니다. 개별 호출의 예외와 플러그인 동작은 따로 점검해야 합니다. 두 예시는 lookup 입력이나 사용처를 포함하지 않는 최소 설정 조각입니다.