ฉันจะลงชื่อใบรับรองหุ่นเชิดล่วงหน้าได้อย่างไร


26

Puppetต้องการใบรับรองระหว่างไคลเอนต์ (puppet) ที่ถูกจัดการและเซิร์ฟเวอร์ (puppetmaster) คุณสามารถรันด้วยตัวเองบนไคลเอนต์จากนั้นไปที่เซิร์ฟเวอร์เพื่อลงนามใบรับรอง แต่คุณจะทำกระบวนการนี้โดยอัตโนมัติสำหรับกลุ่ม / เครื่องคลาวด์ได้อย่างไร


1
ปัญหากรณีมุมหนึ่งคือเมื่อคุณใช้ชื่อโฮสต์อีกครั้ง การลงทะเบียนอัตโนมัติจะไม่ช่วยแก้ปัญหานั้น ฉันมีปัญหาเดียวกันนี้
Joel 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 หากใช้ daemon

[puppetd]
certname=<NAME>

มันมีประโยชน์จริงๆขอบคุณ ฉันงงงวยกับตัวเอง
Jon Topper

1
คำสั่งใหม่puppet cert --generate <NAME>ดูที่serverfault.com/a/457364/71452
c33s

6

หากคุณมีฐานข้อมูลโฮสต์คุณสามารถใช้คุณสมบัติลงชื่อเข้าใช้อัตโนมัติ ในpuppet.confไฟล์ของคุณใน[puppetmasterd], เพิ่ม:

autosign = /path/to/autosign.conf

จากนั้นใช้ crontab เพื่อสร้างไฟล์นี้ ไฟล์ autosign เป็นเพียงรายการของโฮสต์ที่จะทำการ autosign เมื่อพวกเขาเชื่อมต่อกับ 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 ของฉันอยู่ในกลุ่มที่อนุญาตการเชื่อมต่อจากกลุ่มที่เชื่อถือได้เท่านั้น ฉันจะไม่แนะนำให้ทำเช่นนี้หาก puppetmaster ของคุณเปิดอินเทอร์เน็ต


6

คำตอบง่ายๆ: ลงชื่อคำขอใหม่โดยอัตโนมัติ แน่นอนว่านี่เป็นอันตรายเพราะคุณเชื่อใจในระบบใด ๆ ที่เชื่อมต่อกับ puppetmaster ของคุณซึ่งเป็นจุดประสงค์สำหรับการลงชื่อด้วยตนเอง

[puppetmasterd]
autosign = true

คุณสามารถระบุ false และไฟล์ที่จะใช้เพื่อกำหนดว่าคีย์ใดที่จะต้องลงชื่อด้วย

ดูการอ้างอิงการกำหนดค่าบน Puppet wiki

อีกตัวเลือกหนึ่งคือการใช้เครื่องมือเช่นCapistranoที่คุณระบุโหนด puppetmaster และสร้างโหนดอินสแตนซ์ของไคลเอ็นต์และในงาน:

  • สร้างโหนดอินสแตนซ์พูดกับ API ของ EC2 ด้วย Ruby
  • รัน puppetd บนอินสแตนซ์เชื่อมต่อกับเซิร์ฟเวอร์
  • เรียกใช้ puppetca - ลงชื่อสำหรับคำขอของอินสแตนซ์ (เนื่องจากเราทราบชื่ออินสแตนซ์ตามที่ได้รับในบิตการสร้างด้านบน)
  • รัน puppetd อีกครั้งบนอินสแตนซ์คราวนี้เชื่อมต่อเรียบร้อยแล้วเนื่องจากมีการลงชื่อใบรับรอง

หมายเหตุ: หากคุณกำลังใช้หุ่น 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 หากใช้ daemon

[puppetd]
certname=<NAME>

นี่ดูเหมือนจะซับซ้อนกว่าสำหรับฉัน คุณติดตั้งหุ่นเชิดบนไคลเอนต์มันสร้างใบรับรองและส่งไปยังต้นแบบสำหรับการลงนาม เมื่อคุณลงนามในต้นแบบลูกค้าจะเริ่มทำงานในครั้งต่อไปที่มันทำงาน ขั้นตอนนี้เกี่ยวข้องน้อยกว่า หากคุณต้องการบันทึกขั้นตอนนี้จริงๆคุณสามารถเรียกใช้งาน cron ที่ทำสิ่งที่ต้องการเช่น: สำหรับโฮสต์ใน $ (puppetca --list); ทำ puppetca - เซ็นโฮสต์ $; เสร็จแล้ว
David Pashley

1
นี่เป็นสิ่งที่ดีถ้าคุณมีหนึ่งหรือสองเครื่อง แต่เมื่อคุณเริ่มและหยุดเครื่องจักรในระบบคลาวด์คุณไม่ต้องการทำสิ่งนี้ด้วยตนเองฉันสามารถเริ่มต้นเครื่องพื้นฐานเรียกใช้สคริปต์ที่เข้ามาและตั้งค่าทุกอย่าง ขึ้นผ่านหุ่นกระบอกโดยไม่ต้องลงชื่อเข้าใช้งานต้นแบบหุ่นเชิด
Ranguard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.