Bagaimana saya bisa menandatangani sertifikat boneka?

26

Wayang memerlukan sertifikat antara klien (wayang) yang dikelola dan server (puppetmaster). Anda dapat berjalan secara manual pada klien dan kemudian pergi ke server untuk menandatangani sertifikat, tetapi bagaimana Anda mengotomatiskan proses ini untuk cluster / mesin cloud?

Ranguard
sumber
1
Masalah satu sudut kasus adalah ketika Anda menggunakan kembali nama host. Penandatanganan otomatis tidak akan menyelesaikannya. Saya mengalami masalah yang sama.
Joel K

Jawaban:

28

Di server (puppetmaster) jalankan:

puppetca --generate <NAME>

Kemudian salin yang berikut dari server ke klien:

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

Jika Anda ingin masuk <NAME>sebagai sesuatu selain dari penggunaan hostname:

puppetd --fqdn=<NAME>

Dan tambahkan ke /etc/puppet/puppet.conf jika menjalankan daemon

[puppetd]
certname=<NAME>
Ranguard
sumber
Itu sangat berguna, terima kasih. Saya sendiri bingung akan hal itu.
Jon Topper
1
perintah baru adalah puppet cert --generate <NAME>lihat serverfault.com/a/457364/71452
c33s
6

Jika Anda memiliki database host, Anda dapat menggunakan fitur tanda otomatis. Di puppet.conffile Anda , di [puppetmasterd], tambahkan:

autosign = /path/to/autosign.conf

Kemudian gunakan crontab untuk menghasilkan file ini. File autosign hanyalah daftar host untuk diautosign ketika mereka pertama kali terhubung ke puppetmaster. Saya menggunakan LDAP untuk mengkonfigurasi host boneka saya, jadi cron saya terlihat seperti:

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

Saya yakin orang yang menggunakan iClassify akan dapat menulis kueri untuk melakukan hal yang sama.

Tentu saja, Anda perlu memiliki kepercayaan pada jaringan. Saya menggunakan ini pada EC2. Server puppetmaster saya ada di grup yang hanya memungkinkan koneksi dari grup tepercaya lainnya. Saya tidak akan merekomendasikan melakukan ini jika kepala boneka Anda terbuka ke internet.

Gary Richardson
sumber
6

Jawaban sederhana: secara otomatis menandatangani permintaan baru. Ini tentu saja berbahaya karena Anda secara membabi buta mempercayai sistem apa pun yang terhubung dengan puppetmaster Anda, yang merupakan tujuan untuk memerlukan penandatanganan manual.

[puppetmasterd]
autosign = true

Anda dapat menentukan false dan file yang akan digunakan untuk menentukan kunci mana yang akan ditandatangani juga.

Lihat referensi konfigurasi pada wiki Wayang.

Pilihan lain adalah menggunakan alat seperti Capistrano , tempat Anda menentukan simpul puppetmaster dan membuat simpul instance klien, dan dalam tugas:

  • Buat simpul instance, katakan dengan API EC2 dengan Ruby.
  • Jalankan puppetd pada instance, terhubung ke server.
  • Jalankan puppetca --sign untuk permintaan instance (karena kita tahu nama instance seperti yang diberikan pada bit penciptaan di atas).
  • Jalankan puppetd lagi pada instance, kali ini berhasil terhubung saat sertifikat ditandatangani.
jtimberman
sumber
Catatan: Jika Anda menggunakan Wayang 2.6 atau lebih tinggi, [puppetmasterd]judul bagian sekarang seharusnya [master]. Lihat docs.puppetlabs.com/guides/tools.html untuk informasi lebih lanjut.
MrLore
4

Di server (puppetmaster) jalankan:

puppetca --generate <NAME>

Kemudian salin yang berikut dari server ke klien:

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

Jika Anda ingin memiliki sesuatu selain dari penggunaan hostname:

puppetd --fqdn=<NAME>

Dan tambahkan ke /etc/puppet/puppet.conf jika menjalankan daemon

[puppetd]
certname=<NAME>
Ranguard
sumber
Ini sepertinya lebih rumit bagi saya. Anda memasang boneka pada klien, itu menghasilkan sertifikat dan mengirimkannya ke master untuk ditandatangani. Saat Anda menandatanganinya di master, klien akan mulai bekerja saat dijalankan berikutnya. Ini melibatkan lebih sedikit langkah. Jika Anda benar-benar ingin menyimpan bahkan langkah ini, Anda dapat menjalankan pekerjaan cron yang melakukan sesuatu seperti: untuk host di $ (puppetca --list); do puppetca --sign $ host; selesai
David Pashley
1
Ini bagus jika Anda memiliki satu atau dua mesin, tetapi ketika Anda memulai dan menghentikan mesin di cloud Anda tidak ingin harus melakukan ini secara manual, saya dapat memulai mesin dasar, menjalankan skrip yang masuk dan mengatur semuanya melalui boneka tanpa harus login ke master boneka.
Ranguard