Mengamankan ekosistem Chef: validasi client key di Infra Server, sertifikat SSL untuk komunikasi workstation-server-node, encrypted data bag, chef-vault untuk secret multi-node, dan best practice penyimpanan rahasia.

Di episode 12 kalian sudah menghubungkan node ke Chef Automate dan melihat report compliance dalam satu dashboard. Semua data itu melewati jaringan — dan jaringan tidak pernah aman begitu saja. Di episode 13 ini kita memfokuskan diri pada lapisan yang menjaga seluruh ekosistem: authentication & security. Mulai dari validasi kunci client, sertifikat SSL, hingga penyimpanan secret dengan encrypted data bag dan chef-vault.
Tujuan episode ini:
Setiap node yang terdaftar di Infra Server memiliki objek client yang unik. Saat bootstrap, chef-client membuat key baru: key privat disimpan di node, sedangkan key publik terdaftar di server. Pada setiap koneksi berikutnya, chef-client menandatangani request dengan key privatnya dan server memverifikasinya terhadap key publik objek client. Karena itu, memindahkan key privat dari satu node ke node lain adalah pelanggaran serius.
chef_server_url "https://chef.example.com/organizations/devops"
client_key "/etc/chef/client.pem"
node_name "app-01"
validation_client_name "devops-validator"Warning
Jangan pernah memakai key privat milik node lain, termasuk devops-validator yang hanya dipakai saat bootstrap. Setelah bootstrap selesai, hapus validator key dari node agar tidak bisa dipakai menyusup ke server.
Pada instalasi pertama, Infra Server menghasilkan sertifikat self-signed. Workstation dan node harus memercayai sertifikat ini agar koneksi HTTPS berjalan tanpa peringatan.
knife ssl check -c ~/.chef/knife.rb
knife ssl fetch -c ~/.chef/knife.rbUntuk memastikan trust sudah benar, knife ssl check memberikan verdict secara langsung. knife ssl fetch menyimpan sertifikat server ke ~/.chef/trusted_certs/. Node menjalankan hal serupa saat bootstrap — sertifikat disimpan ke /etc/chef/trusted_certs/. Di luar lingkungan belajar, gunakan CA publik atau internal agar semua pihak memercayai rantai sertifikat yang sama.
| Lapisan komunikasi | Kredensial | Arah |
|---|---|---|
| Workstation ke server | Client key admin + cert server | knife, berks |
| Node ke server | Client key node + cert server | chef-client run |
| Server ke node | Cert server + authorized key | chef-push, scan |
Data bag item biasa bisa dibaca oleh siapa pun yang punya akses ke server. Untuk data sensitif, gunakan encrypted data bag: item dienkripsi dengan secret key yang hanya kalian simpan.
mkdir -p data_bags/secrets
knife data bag create secrets db_password --secret-file ~/.chef/secret_keyContoh item:
{
"id": "db_password",
"password": "P@ssw0rdRahasia"
}Baca kembali dalam recipe dengan menyuplai secret:
secret = Chef::EncryptedDataBagItem.load_secret("/etc/chef/secret_key")
db = data_bag_item("secrets", "db_password", secret)
template "/etc/app/db.conf" do
variables password: db["password"]
endImportant
Secret key yang mengenkripsi data bag adalah garis pertahanan terakhir. Simpan di password manager atau Vault, jangan commit ke git, dan rotasi bersama data bag saat ada anggota tim yang keluar.
Encrypted data bag sudah baik, tetapi secret-nya sama untuk semua node yang bisa membaca. chef-vault menyelesaikan masalah ini: item dienkripsi dengan key publik dari client tertentu, sehingga hanya node yang diizinkan yang bisa membuka rahasianya.
knife vault create secrets db_password '{"password":"Rahasia123"}' \
-M client -S "role:app-server"
knife vault refresh secrets db_passwordMembaca di recipe:
require "chef-vault"
vault_item = chef_vault_item("secrets", "db_password")
template "/etc/app/db.conf" do
variables password: vault_item["password"]
endPastikan cookbook mendeklarasikan dependency chef-vault di metadata.rb agar library tersedia saat runtime.
Perbandingan pendekatan penyimpanan secret:
| Metode | Keamanan | Kapan dipakai |
|---|---|---|
| Attribute cookbook | Rendah | Hampir tidak pernah |
| Data bag biasa | Rendah | Data non-sensitif |
| Encrypted data bag | Sedang | Secret bersama tim |
| chef-vault | Tinggi | Secret per role atau node |
Di episode 13 ini kalian memahami keamanan ekosistem Chef: client key unik per node yang divalidasi Infra Server, sertifikat SSL yang diamankan lewat knife ssl fetch, encrypted data bag untuk secret bersama, serta chef-vault untuk rahasia multi-node.
Inti yang harus dibawa pulang:
Di episode 14 berikutnya kita membawa semua yang sudah dibangun ke cloud: Integrasi Cloud & IaC — mengelola instance AWS, GCP, dan Azure, integrasi Terraform dan cloud-init, hingga pola bootstrap otomatis dan golden images. Sampai jumpa di episode 14!