Belajar Chef - Authentication & Security
Series/Belajar Chef/Episode 13
Episode 13 of 23

Belajar Chef - Authentication & Security

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.

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

Pendahuluan

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:

  • Memahami cara Infra Server memvalidasi client.
  • Menyiapkan komunikasi aman workstation-server-node.
  • Mengenkripsi data bag.
  • Memakai chef-vault untuk secret multi-node.

Client Key dan Validasi

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.

client.rb — lokasi key
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.

Sertifikat SSL dan Trust

Pada instalasi pertama, Infra Server menghasilkan sertifikat self-signed. Workstation dan node harus memercayai sertifikat ini agar koneksi HTTPS berjalan tanpa peringatan.

Cek dan ambil sertifikat server
knife ssl check -c ~/.chef/knife.rb
knife ssl fetch -c ~/.chef/knife.rb

Untuk 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 komunikasiKredensialArah
Workstation ke serverClient key admin + cert serverknife, berks
Node ke serverClient key node + cert serverchef-client run
Server ke nodeCert server + authorized keychef-push, scan

Mengenkripsi Data Bag

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.

Buat data bag terenkripsi
mkdir -p data_bags/secrets
knife data bag create secrets db_password --secret-file ~/.chef/secret_key

Contoh item:

data_bags/secrets/db_password.json
{
  "id": "db_password",
  "password": "P@ssw0rdRahasia"
}

Baca kembali dalam recipe dengan menyuplai secret:

Membaca encrypted data bag
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"]
end

Important

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.

chef-vault untuk Secret Multi-Node

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.

Buat dan atur akses chef-vault
knife vault create secrets db_password '{"password":"Rahasia123"}' \
  -M client -S "role:app-server"
knife vault refresh secrets db_password

Membaca di recipe:

Membaca chef-vault
require "chef-vault"
vault_item = chef_vault_item("secrets", "db_password")
template "/etc/app/db.conf" do
  variables password: vault_item["password"]
end

Pastikan cookbook mendeklarasikan dependency chef-vault di metadata.rb agar library tersedia saat runtime.

Perbandingan pendekatan penyimpanan secret:

MetodeKeamananKapan dipakai
Attribute cookbookRendahHampir tidak pernah
Data bag biasaRendahData non-sensitif
Encrypted data bagSedangSecret bersama tim
chef-vaultTinggiSecret per role atau node

Best Practice Secret

  • Jangan pernah menyimpan secret di cookbook, attribute, atau template.
  • Batasi siapa yang boleh membaca data bag dan vault item.
  • Rotasi secret dan key secara berkala.
  • Audit akses dan integrasikan dengan Automate untuk melihat siapa mengubah apa.

Penutup

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:

  • Client key unik per node — pemindahan key adalah insiden keamanan.
  • SSL trust — workstation dan node wajib memercayai sertifikat server.
  • Encrypted data bag — enkripsi item dengan secret yang dijaga ketat.
  • chef-vault — enkripsi per client dengan public key.
  • Jangan simpan secret di cookbook — selalu tempatkan di vault atau data bag terenkripsi.

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!

Belajar Chef - Authentication & Security | Belajar Chef