Ansible で従来の allow_unsafe_lookups 設定が有効

以前の Ansible で allow_unsafe_lookups を有効にすると、外部データがテンプレートとして再評価される場合があります。使用するバージョンに応じて、lookup の戻り値の扱いと設定を確認してください。

説明

ansible-core 2.18.0 は、lookup プラグインの戻り値に既定で unsafe の印を付け、データ内の Jinja 式が後からテンプレートとして評価されるのを防ぎます。この印は、危険なコードの実行を指示するものではなく、データをテンプレートとして信頼しないことを示します。[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 の入力や使用先を含まない、最小限の設定断片です。

参考資料