web-dev-qa-db-ja.com

パペット証明書に事前署名するにはどうすればよいですか?

Puppet 管理対象のクライアント(puppet)とサーバー(puppetmaster)の間に証明書が必要です。クライアントで手動で実行し、サーバーに移動して証明書に署名できますが、クラスター/クラウドマシンでこのプロセスをどのように自動化しますか?

26
Ranguard

サーバー(puppetmaster)で次を実行:

puppetca --generate <NAME>

次に、以下をサーバーからクライアントにコピーします。

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem

署名したい場合<NAME>ホスト名以外のものとして使用:

puppetd --fqdn=<NAME>

デーモンを実行している場合は、/ etc/puppet/puppet.confに追加します

[puppetd]
certname=<NAME>
28
Ranguard

簡単な答え:新しいリクエストに自動的に署名します。もちろん、これは危険です。手動の署名を要求する目的である、操り人形マスターに接続するすべてのシステムを盲目的に信頼しているからです。

[puppetmasterd]
autosign = true

Falseとファイルを指定して、署名する鍵を決定することもできます。

Puppet wikiの 構成リファレンス を参照してください。

別のオプションは、puppetmasterノードを指定してクライアントインスタンスノードを作成する Capistrano のようなツールを使用することです。

  • インスタンスノードを作成します。たとえば、RubyでEC2のAPIを使用します。
  • インスタンスにpuppetdを実行し、サーバーに接続します。
  • インスタンスのリクエストに対してpuppetca --signを実行します(上記の作成ビットで指定されたインスタンス名がわかっているため)。
  • インスタンスで再度puppetdを実行します。今回は、証明書が署名されているため、正常に接続します。
6
jtimberman

ホストデータベースがある場合は、自動署名機能を使用できます。あなたのpuppet.confファイル、[puppetmasterd]、 追加:

autosign = /path/to/autosign.conf

次に、crontabを使用してこのファイルを生成します。自動署名ファイルは、最初にpuppetmasterに接続するときに自動署名するホストのリストにすぎません。 LDAPを使用してパペットホストを構成しているので、cronは次のようになります。

* * * * * root /usr/bin/ldapsearch -x '(objectClass=puppetClient)' cn | /bin/grep ^cn | /bin/sed 's!^cn: !!' > /etc/puppet/autosign.conf

IClassifyを使用する人なら、同じことをするクエリを書くことができると思います。

もちろん、ネットワークをある程度信頼する必要があります。 EC2で使用します。私のpuppetmasterサーバーは、他の信頼されたグループからの接続のみを許可するグループに属しています。あなたの操り人形マスターがインターネットに開いているなら、私はこれをすることを勧めません。

6
Gary Richardson

サーバー(puppetmaster)で次を実行:

puppetca --generate <NAME>

次に、以下をサーバーからクライアントにコピーします。

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem

ホスト名以外のものにしたい場合:

puppetd --fqdn=<NAME>

デーモンを実行している場合は、/ etc/puppet/puppet.confに追加します

[puppetd]
certname=<NAME>
4
Ranguard