ユーザーにパスワードを与えずにプレイブックを実行できるようにする

ユーザーにパスワードを与えずにプレイブックを実行できるようにする

通常のユーザーが Centos サーバーにアプリケーションをインストールするために実行できるようにしたい Ansible プレイブックがありますが、ログイン認証情報を必ずしも提供したいわけではありません。Ansible Vault を使用して暗号化されたデータを保存できることは知っていますが、私の知る限り、このデータは非常に簡単に復号化することもできます。これが可能かどうか、またそれを実現する方法について何かアイデアはありますか?

答え1

ソフトウェアをインストールするほとんどの方法では、特権ユーザーが必要です。

最小権限と説明責任の原則では、ログインは権限の少ない個人ユーザーで行い、必要に応じて権限を付与する必要があります。Ansible は、doas や sudo などを使用して、別のユーザーとして操作を実行するプラグインになるのに役立ちます。

パスワードは一般的にはゴミのような認証方法です。エントロピーが低く、歴史的に悪い習慣があり、自動化に不便です。別のユーザーとして実行する方法の中には、個人のパスワードを要求するものもあり、共有資格情報の必要性を減らします。Ansibleは、ユーザーにそのようなパスワードを要求することができます。--ask-become-pass

ansible-vault (およびセキュリティ システム ルックアップ プラグイン) は、使用中のデータではなく、保存中のデータのみを保護します。Ansible を実行しているユーザーは、プレーンテキストのシークレットにアクセスできます。十分な詳細デバッグを有効にすると、シークレットが表示される場合があります。

以上のことを考慮すると、パスワードなしでbecomeを設定するのが適切な解決策かもしれません。sshでキーや証明書を使用してbecomeを使用しますが、rootとしてパッケージタスクを実行するにはbecomeを使用します。ただし、rootとして行うことは制限できません。Ansibleはモジュールを実行するために一時的なスクリプトを生成し、次のようなコマンドを制限するための適切なsudoルールはありません。/bin/sh -c '/usr/bin/python3 ~/.ansible/tmp/ansible-tmp-1628781435.871488-116497-130276452381107/AnsiballZ_setup.py'

ユーザーに対して特権プレイブックを実行します。何をすべきかについての入力を促しますが、実行するための資格情報は与えません。このようなプレイブックをバージョン管理し、変更要求を受け入れます。プレイは好きなように実行します。

  • アンシブルランナー cron でスケジュールされます。
  • バージョン管理の運用ブランチへのマージによってトリガーされたパイプラインから。
  • ジョブは AWX ユーザー インターフェイスから実行されます。

関連情報