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


26

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


1
よくある問題の1つは、ホスト名を再利用する場合です。自動署名はそれを解決しません。私はこれと同じ問題を抱えています。
ジョエルK

回答:


28

サーバー(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>

それは本当に便利です、ありがとう。私はそれについて戸惑っていました。
ジョントッパー

1
新しいコマンドがされてpuppet cert --generate <NAME>表示さserverfault.com/a/457364/71452
c33s

6

ホストデータベースがある場合は、自動署名機能を使用できます。あなたには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

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

[puppetmasterd]
autosign = true

falseと、使用するファイルを指定して、署名するキーを決定することもできます。

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

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

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

注:Puppet 2.6以降を使用している場合、[puppetmasterd]セクションの見出しはになります[master]。詳細については、docs.puppetlabs.com / guides / tools.htmlを参照してください。
MrLore

4

サーバー(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>

これは私にはもっと複雑に思えます。クライアントにpuppetをインストールすると、証明書が生成され、署名のためにマスターに送信されます。マスター上で署名すると、クライアントは次回の実行時に動作を開始します。これにより、手順が少なくなります。このステップでも保存したい場合は、次のようなcronジョブを実行できます。for host in $(puppetca --list); do puppetca --sign $ host; 完了
デビッドパシュリー

1
1台または2台のマシンがある場合はこれで問題ありませんが、クラウド内のマシンを手動で起動および停止する場合、手動でこれを行う必要はありません。操り人形マスターにログインせずに操り人形を介して起動します。
ランガード09年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.