Belajar Puppet - Authentication & Security
Episode 13 of 23

Belajar Puppet - Authentication & Security

Amankan komunikasi agent dan server Puppet melalui sertifikat SSL, penandatanganan certificate, dan autosign. Pelajari RBAC dan node classifier pada Puppet Enterprise, serta penyimpanan secrets dengan Hiera eyaml.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 12 kalian sudah belajar bagaimana Code Manager dan r10k mengelola environment dari git sehingga kode Puppet terkontrol dengan baik. Namun kode yang rapi belum berarti infrastruktur aman. Sertifikat yang tidak dikelola, node yang diizinkan masuk tanpa verifikasi, dan secrets yang menempel di manifest adalah resipi bencana.

Puppet menggunakan PKI berbasis X.509 untuk memastikan komunikasi antara agent dan server selalu terenkripsi dan terautentikasi. Di sisi lain, kontrol akses pengguna yang memakai console diatur oleh RBAC (Role-Based Access Control) pada Puppet Enterprise. Dan untuk data sensitif seperti password, kita memakai Hiera dengan enkripsi eyaml.

Pada episode ini kita akan membahas alur sertifikat SSL, perintah puppetserver ca, konsep autosign, komunikasi aman agent dan server, RBAC dan node classifier di PE, hingga menyimpan secrets dengan Hiera eyaml.

Bagaimana Komunikasi Agent dan Server Diamankan

Saat Puppet agent pertama kali dijalankan, ia membuat certificate signing request (CSR) dan mengirimkannya ke server. Server tidak langsung mempercayai agent tersebut; certificate authority (CA) internal di server harus menandatangani CSR tersebut terlebih dahulu.

Alur pertukaran sertifikat
1. Agent  : buat key + CSR, kirim ke server
2. Server : CA internal menandatangani CSR
3. Server : kirim sertifikat yang ditandatangani ke agent
4. Agent  : komunikasi SSL dimulai dengan aman

Di server, kita bisa melihat daftar CSR yang menunggu penandatanganan:

List CSR yang belum ditandatangani
puppetserver ca list

Setelah memastikan nama node benar, kita tandatangani:

Sign CSR agent
puppetserver ca sign --certname web01.example.com

Di sisi agent, status sertifikat bisa diverifikasi dengan puppet ssl show, dan ketika sertifikat bermasalah kita bisa meminta ulang dengan puppet ssl bootstrap.

Note

Sintaks puppet ssl diperkenalkan pada Puppet 6.4 dan menggantikan perintah lama puppet certificate serta puppet cert. Pada server, semua operasi CA kini dikelompokkan di bawah perintah puppetserver ca.

Autosign: Otomatisasi yang Harus Dibatasi

Signing manual untuk satu-dua node masih wajar, tetapi saat kita membuat banyak instance ephemeral, misalnya untuk autoscaling, signing manual menjadi penghambat. Puppet menyediakan autosign agar CSR ditandatangani otomatis berdasarkan aturan tertentu.

Cara paling sederhana adalah file autosign.conf dengan pola hostname:

/etc/puppetlabs/puppet/autosign.conf
*.infra.example.com
loadtest*.example.com

Warning

Jangan pernah membuat autosign terlalu longgar. Autosign yang menerima semua nama node membuat siapa pun yang bisa menebak hostname dapat mengirim catalog palsu dan mengambil alih node. Batasi ke pola hostname internal yang benar-benar kalian kendalikan.

Untuk puppetserver berbasis JVM, kita bisa menunjuk ke script eksternal yang memvalidasi token atau metadata cloud sebelum menandatangani:

Autosign eksternal di puppetserver
autosign:
  mode: external
  script: /usr/local/bin/policy-autosign.sh

Sertifikat Bermasalah: Cara Debug

Error sertifikat adalah penyebab paling umum agent gagal berbicara dengan server. Dua kasus yang paling sering ditemui:

  1. Certificate mismatch ketika hostname node berubah, biasanya muncul error SSL_connect returned=1 errno=0 peer did not return a certificate.
  2. Certname tidak sesuai dengan setting server_list atau server pada puppet.conf di agent.

Perbaikan cepat untuk node yang salah: hapus sertifikat di agent lalu minta ulang.

Bersihkan cert dan minta ulang
puppet ssl clean
puppet ssl bootstrap

RBAC dan Node Classifier di Puppet Enterprise

Pada Puppet Enterprise, akses ke console diatur lewat RBAC. Setiap user masuk ke group dengan permission tertentu, misalnya role Operators hanya boleh melihat node, sedangkan Code Deployers boleh menjalankan deploy code.

RoleKemampuan
AdministratorsSemua akses console dan API
Code DeployersDeploy code environment
OperatorsMelihat node, status run, dan reports
ViewersHanya membaca, tanpa aksi

Di balik layar, console memakai node classifier untuk menentukan kelas mana yang diterapkan ke node mana. Rule berbasis fakta dapat mengelompokkan node, misalnya semua node dengan kernel Linux dan fakta khusus tertentu masuk ke group tertentu.

Ringkasan rule classification node
{
  "name": "Web Servers",
  "rule": ["and", ["=", ["fact", "kernel"], "Linux"], ["=", ["fact", "is_web"], true]],
  "classes": {
    "profile::webserver": {}
  }
}

Node yang masuk ke beberapa group akan menerima kelas dari seluruh group tersebut. Halaman Classification di console menyimpan rule ini sebagai data terstruktur, bukan sebagai manifest yang di-hardcode.

Hiera untuk Secrets dengan eyaml

Hiera menyimpan data hierarkis, tetapi menyimpan password dalam plain text di repository adalah pelanggaran serius. Solusinya adalah hiera-eyaml, yang memungkinkan enkripsi nilai secara selektif di dalam file data.

Pertama, pastikan plugin eyaml terpasang di server dan agent:

Install hiera-eyaml
gem install hiera-eyaml

Untuk membuat pasangan key:

Buat public dan private key eyaml
eyaml createkeys

Untuk mengenkripsi sebuah nilai:

Enkripsi nilai dengan eyaml
eyaml encrypt -s 's3cr3t-password'

Hasil enkripsi ditempatkan di dalam file hieradata:

hieradata/common.yaml
profile::db::password: >-
    ENC[PKCS7,MIIBmQYJKoZIhvcNAQcDoIIBijCC...]

Important

Private key eyaml harus dirahasiakan dan di-deploy secara aman ke server Puppet, jangan pernah di-commit ke control repository. Public key boleh dibagikan supaya developer bisa mengenkripsi nilai baru tanpa bisa mendekripsinya. Di Puppet Enterprise, private key berada di /etc/puppetlabs/puppet/eyaml/private_key.pkcs7.pem.

Kehadiran marker ENC[...] membuat review kode tetap bisa berjalan: developer melihat bahwa di sana ada secrets, tetapi isinya tidak terbaca di git.

Penutup

Pada episode 13 ini kalian sudah memahami bahwa keamanan Puppet berlapis: sertifikat SSL mengamankan komunikasi agent dan server, autosign mempercepat provisioning node baru secara terkendali, RBAC membatasi siapa yang bisa menyentuh console PE, dan Hiera eyaml menjaga secrets tetap terenkripsi di repository.

Inti yang harus dibawa pulang:

  • Sertifikat berbasis X.509 harus ditandatangani oleh CA server sebelum agent dipercaya, lewat puppetserver ca sign.
  • Autosign mempercepat on-boarding node, tetapi polanya harus dibatasi agar tidak terbuka.
  • RBAC di Puppet Enterprise memetakan user ke role dengan permission spesifik.
  • Node classifier menentukan kelas berdasarkan rule fakta, bukan manifest hardcoded.
  • Hiera eyaml mengenkripsi nilai secrets dengan PKCS7 sehingga aman disimpan di git.

Sampai di sini kita banyak memakai modul yang kita tulis sendiri. Namun di dunia nyata, sebagian besar pekerjaan dilakukan di atas modul publik. Di episode 14 kita akan membahas Belajar Puppet - Modules & Forge: mencari modul berkualitas di Puppet Forge, mengevaluasi maintainernya, hingga mengembangkan module sendiri dengan PDK.

Belajar Puppet - Authentication & Security | Belajar Puppet