apt モジュールでの Ansible OpenSSL エラー

apt モジュールでの Ansible OpenSSL エラー

これはかなり奇妙です。昨日、ターゲット マシンの 1 つでこの現象に気づきましたが、今日は残りのマシンでも発生しています。別のマシンからプレイブックを実行してみましたが、同じ現象が発生しました。この問題は、Ubuntu 20.04 で apt アップグレードを実行した後に発生するようです。apt アップグレードが最初に完了したときはすべて正常ですが、その後、モジュールが失敗し始めます。

エラー出力は次のようになります。

TASK [common : Update package manager] *************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: module 'lib
' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
fatal: [mr-bones]: FAILED! => changed=false
  module_stderr: |-
    Traceback (most recent call last):
      File "<stdin>", line 107, in <module>
      File "<stdin>", line 99, in _ansiballz_main
      File "<stdin>", line 47, in invoke_module
      File "/usr/lib/python3.8/runpy.py", line 207, in run_module
        return _run_module_code(code, init_globals, run_name, mod_spec)
      File "/usr/lib/python3.8/runpy.py", line 97, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/tmp/ansible_apt_payload_vpe7xcy0/ansible_apt_payload.zip/ansible/modules/apt.py", line 346, in <module>
      File "<frozen importlib._bootstrap>", line 991, in _find_and_load
      File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
      File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
      File "<frozen zipimport>", line 259, in load_module
      File "/tmp/ansible_apt_payload_vpe7xcy0/ansible_apt_payload.zip/ansible/module_utils/urls.py", line 115, in <module>
      File "/usr/local/lib/python3.8/dist-packages/urllib3/contrib/pyopenssl.py", line 50, in <module>
        import OpenSSL.SSL
      File "/usr/lib/python3/dist-packages/OpenSSL/__init__.py", line 8, in <module>
        from OpenSSL import crypto, SSL
      File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1553, in <module>
        class X509StoreFlags(object):
      File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1573, in X509StoreFlags
        CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
    AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
  module_stdout: ''
  msg: |-
    MODULE FAILURE
    See stdout/stderr for the exact error
  rc: 1

sudo apt-get upgradeのようなコマンドは、Ansible がなくてもターゲット マシン上で問題なく動作することに注意してください。

他にもこれに遭遇した人はいますか? これを github の Ansible 担当者にバグとして報告すべきでしょうか?

編集: さらに調べてみたところ、どうやらこれはget_urlのような他のAnsibleモジュールにも影響しているようで、これはaptと関係があるのではなく、Python/OpenSSLのエラーであるという考えに至りました。

答え1

今日も同様の問題があり、調査の結果同じ方向が示されました。

私たちは使用していますpyOpenSSL古いバージョンにロックされています。最新のものを使用しています暗号化要件のあるライブラリ バージョンcryptography>=2.8

つまり、予期せず変更されたバージョンは暗号化でした36.0.2->37.0.0これは 4 月 26 日 (昨日) に発生しました。 私のケースでは、そのバージョンへのロックは問題ではなかったため、古いバージョンを使用すること36.0.2で問題は解決しました。

エラー メッセージに基づくと、Ansible は pyOpenSSL を使用しており、OpenSSL をインポートすると私の場合と同様にエラーが発生するため、同様の問題が発生している可能性があります。

アップデート:
コメントで述べたように、最新の pyOpenSSL バージョンではこの問題は発生しない可能性があります。したがって、問題の原因となった変更をすぐに元に戻したい場合は、何らかの方法で暗号化ライブラリの更新を元に戻してください。適切なテストを行う時間がある場合は、pyOpenSSL を最新バージョンにアップグレードするのがより良い解決策です。

答え2

パッケージメンテナーはv37.0.1を導入しました。これには(https://github.com/pyca/cryptography/commit/3fb93cfde75d073a91bc4a73a51f62962092501e):

  • 古いユーザー向けに、いくつかのレガシー シンボルを復元しましたpyOpenSSL。これらは将来的に再度削除される予定なので、pyOpenSSLユーザーはアップグレード時にそのパッケージの最新バージョンにアップグレードする必要がありますcryptography

したがって、暗号化 v37.0.1 へのアップグレードは、pyOpenSSL のバージョンに関係なく機能するはずですが、前述のように、これらの変更は後日再導入されるため、@Miika が提案したように、可能であればアップグレードすることをお勧めします。

答え3

Python 3.8 を使用している私の環境では、pyopensslにアップグレードする22.0.0と問題が解決しましたcryptography37.0.0

答え4

別のモジュールを使用してデフォルトの AWX-EE (最新) で構成された AWX でこのエラーが発生しました。

本日(2022年4月27日)リリースされた新しいAWX-EEでは、一部のモジュール(少なくとも私の側では1つ)で同じ問題が発生します。

AWX-EE をバージョン 0.6.0 に変更すると問題は解決しました。

関連情報