web-dev-qa-db-ja.com

Puppetを使用したサービスパスワードの管理

PuppetでBaculaの設定を行っています。私がやりたいことの1つは、各パスワードフィールドが異なることを確認することです。私の現在の考えは、各ファイルデーモンに一意のパスワードがあり、そのパスワードをダイレクタ構成とファイルサーバーの両方に書き込むことができるようにするシークレット値でホスト名をハッシュすることです。 1台のマシンを危険にさらす可能性のある人がBaculaを介して任意のマシンにアクセスできるようになるため、1つのユニバーサルパスワードを使用したくありません。

ハッシュ関数を使用してパスワードを生成する以外に、これを行う別の方法はありますか?

明確化:

これは[〜#〜] not [〜#〜]サービスのユーザーアカウントについてです。これは、クライアント/サーバーファイル内の(別の用語を使用するための)認証トークンに関するものです。スニペットの例:

Director {                            # define myself
  Name = <%= hostname $>-dir
  QueryFile = "/etc/bacula/scripts/query.sql"
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/var/run/bacula"
  Maximum Concurrent Jobs = 3
  Password = "<%= somePasswordFunction =>"         # Console password
  Messages = Daemon
}
6
Jeff Ferland
    $secret = "super special complicated long secure random string"
    $password = sha1("${fqdn}${secret}")
    notify {$password:}

別のファイル(おそらく、バージョン管理に保持していない1つのpuppetクラス)から$secretをインポートすると、そこにあります。魔法のパスワードの生成。

パスワードは、$secretを変更することでグローバルに変更できます。または、$fqdn以外のものを使用して各宣言で個別に変更できます。

3
Jeff Ferland

別の方法は、extlookup()を介して何かを設定することです。これにより、共通の値に依存しないマシンごとの一意性を得ることができます。

私たちの場合、共通の秘密を持つハッシュ値が私たちに与えたものよりも多くの一意性を必要とする同様のツールを使用して、このようなことを行いました。

Site.ppで

$extlookup_datadir = "/etc/puppet/manifests/extdata"
$extlookup_precedence = ["hostname/%{hostname}", "common"]

次に、extデータは次のようになります。

/etc/puppet/manifests/extdata
                             /common.csv
                             /hostname
                                      /foo.csv

Foo.csv内に、次のようなものを配置します。

bacula_password,"J()*JF)jj0j20f9j02rj9<whatever>"

次に、Baculaモジュールで、

$bacula_password = extlookup('bacula_password')

これをテンプレートで参照できます。

カタログが評価されると、ホスト名 "foo"がextの優先順位で最初に検出され、bacula_passwordの値がそこから取得されます。

0
Travis Campbell