固定されていないパッケージバージョン

本番用パッケージの更新を検証し、必要なバージョンと依存関係の範囲を明示してください。

説明

パッケージのインストールに state: latest を使うと、実行時にリポジトリで提供されている新しいバージョンが導入される場合があります。同じプレイブックでも実行時期によって結果が変わり、互換性や依存関係の変更がサービス障害につながる可能性があります。

自動更新は、計画的なセキュリティパッチ適用方針の一部として利用できます。バージョンを固定する場合も、セキュリティ修正を継続して適用できるよう、検証と更新の手順が必要です。

想定される影響

  • 未検証のパッケージや依存パッケージの更新によって、障害や性能低下が起きる可能性があります。
  • 実行時期によって導入結果が変わり、配布の再現性が低下する場合があります。

対処方法

  • バージョン管理が必要な本番配布では、明示的なパッケージバージョンと state: present を使ってください。present だけではバージョンは固定されません。
  • 必要な依存関係とリポジトリも管理し、まず検証環境で更新を試してください。update_only: true は新規パッケージの導入を制限するもので、バージョンを固定するものではありません。
  • 固定したバージョンのセキュリティ更新を確認し、定期的に更新してください。

例

既存の yum モジュールの抜粋であり、インストール済みの Ansible とパッケージバックエンドで対応している必要があります。リポジトリに対象バージョンが必要です。1.24.0 は比較用の値で、本番環境の現在の推奨バージョンではありません。

変更前

yaml
---
- name: 패키지 설치
  hosts: localhost
  tasks:
    - name: nginx 최신 버전 설치
      ansible.builtin.yum:
        name: nginx
        state: latest

実行時にリポジトリで利用できる最新バージョンをインストールまたは更新します。

変更後

yaml
---
- name: 패키지 설치
  hosts: localhost
  tasks:
    - name: nginx 고정 버전 설치
      ansible.builtin.yum:
        name: nginx-1.24.0
        state: present

インストールする nginx のバージョンを指定します。すべての依存パッケージやディストリビューションのパッケージリリースまで固定する例ではないため、必要な範囲を別途管理してください。

参考資料