Belajar Chef - Chef InSpec (Compliance)
Series/Belajar Chef/Episode 11
Episode 11 of 23

Belajar Chef - Chef InSpec (Compliance)

Pelajari cara menulis profil compliance dengan Chef InSpec menggunakan kontrol dan describe blocks, resource package, service, file, dan command, lalu jalankan inspec exec untuk memindai node, termasuk workflow menulis profil ala CIS dan STIG serta integrasi dengan Chef Automate.

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

Pendahuluan

Di episode 10 kalian sudah mengenal Policyfile dan bagaimana Policyfile.lock.json menjamin reproduksibilitas penuh untuk setiap rilis. Kalian tahu cara mendefinisikan run list dan cookbook secara deklaratif, lalu merilisnya ke policy group seperti staging dan production tanpa memutasi cookbook di server. Infrastruktur kini bisa dibangun ulang dengan identik, tetapi belum ada yang menjawab satu pertanyaan penting: apakah konfigurasi yang sudah dirilis benar-benar aman dan patuh pada standar?

Menjalankan chef-client bisa memastikan state yang diinginkan tercapai, tetapi tidak menjamin tidak ada penyimpangan setelahnya. Sebuah file konfigurasi bisa diubah, service bisa dihentikan, atau port bisa terbuka. Untuk mendeteksi penyimpangan ini, kalian butuh Chef InSpec, mesin pengujian compliance berbasis kode.

Episode 11 ini akan membahas cara menulis profil dan kontrol InSpec dengan describe blocks, resource package, service, file, dan command, menjalankan inspec exec untuk memindai node, serta workflow compliance dengan profil ala CIS dan STIG dan integrasi hasilnya dengan Chef Automate.

Profil dan Kontrol

Profil InSpec adalah kumpulan kontrol yang mendeskripsikan kondisi keamanan yang harus dipenuhi oleh sebuah sistem. Kontrol adalah satu pengujian dengan identitas unik dan deskripsi. Struktur profil dihasilkan dengan perintah:

Inisialisasi profil baru
inspec init profile baseline

Perintah ini membuat struktur berikut:

Struktur profil baseline
baseline/
├── README.md
├── attributes/          # atribut profil (opsional)
├── controls/
│   └── example.rb       # file kontrol utama
└── inspec.yml           # metadata profil

File inspec.yml adalah metadata profil: nama, versi, maintainer, dan platform yang didukung.

Kontrol dan Describe Blocks

Kontrol ditulis dalam Ruby di dalam controls/. Setiap kontrol memiliki deskripsi singkat, tag untuk pelacakan, dan satu atau lebih blok describe do. InSpec mengeksekusi describe do lalu melaporkan hasilnya sebagai kontrol yang lulus atau gagal.

controls/example.rb
control 'cis-1-1' do
  impact 0.7
  title 'Set sudoers file permissions'
  desc 'sudoers file harus dimiliki oleh root dan mode 0440'
  tag cci: 'CCI-000225'
  tag cis: '1.1'
 
  describe file('/etc/sudoers') do
    it { should exist }
    it { should be_owned_by 'root' }
    it { should be_grouped_into 'root' }
    it { should be_mode 0440 }
  end
end

Kontrol di atas menguji keberadaan file /etc/sudoers, kepemilikan root, dan permission 0440. impact menunjukkan tingkat keparahan antara 0 dan 1, sementara tag menghubungkan kontrol dengan referensi eksternal seperti CIS Control Version.

Note

Setiap blok describe boleh memuat banyak pernyataan it. InSpec mengevaluasi semuanya dan melaporkan per pernyataan. Jika satu pernyataan gagal, kontrol tetap berjalan sampai selesai sehingga kalian mendapat gambaran lengkap, bukan berhenti di kegagalan pertama.

Resource Inti InSpec

InSpec menyediakan resource bawaan untuk menguji berbagai aspek sistem. Empat yang paling sering dipakai:

describe file('/etc/ssh/sshd_config') do
  it { should be_file }
  it { should be_owned_by 'root' }
  it { should be_mode 0644 }
  its('content') { should match 'PermitRootLogin no' }
end

Resource command menjalankan perintah di sistem target dan menguji output, exit status, serta stderr-nya. Ini paling berguna saat tidak ada resource spesifik untuk hal yang ingin diuji.

Tip

Resource InSpec mengikuti aturan penamaan yang konsisten. Jika kalian butuh yang lain, inspec resource list menampilkan seluruh resource yang tersedia, dan inspec help resource <nama> menjelaskan sintaksnya. Misalnya resource port, user, dan group sangat berguna untuk audit keamanan jaringan.

Menjalankan Scan dengan inspec exec

Untuk memindai sistem, gunakan inspec exec dengan profil dan target:

Scan lokal dan remote
inspec exec baseline
inspec exec baseline -t ssh://deploy@203.0.113.30 -i ~/.ssh/id_ed25519

Perintah pertama memindai mesin lokal, sedangkan yang kedua menghubungi mesin remote lewat SSH memakai kunci privat. Hasil scan menampilkan jumlah kontrol yang lulus, gagal, dan tidak berlaku, beserta detail tiap kontrol yang gagal. Untuk menegaskan bahwa scan harus berhenti dengan exit code gagal saat ada kontrol yang tidak lulus, gunakan inspec exec baseline --fail-if 'failed > 0':

Scan dengan ambang batas kegagalan
inspec exec baseline --fail-if 'failed > 0' --reporter cli json:/tmp/scan.json

Opsi --reporter cli json:/tmp/scan.json menulis hasil scan dalam dua format sekaligus: ringkasan di terminal dan detail lengkap dalam JSON. File JSON inilah yang nanti dikirim ke Chef Automate.

Important

Output dalam format JSON adalah jembatan antara InSpec dan sistem lain. Pipeline CI, dashboard compliance, dan Chef Automate semuanya membaca format ini. Biasakan selalu menyertakan reporter JSON dalam setiap scan yang akan diintegrasikan ke alur kerja.

Workflow Compliance dengan CIS dan STIG

Profil compliance produksi biasanya mengikuti standar publik seperti CIS Benchmarks atau STIG (Security Technical Implementation Guide), dan Chef menyediakan profil resmi yang bisa dipakai sebagai titik awal:

Pakai profil CIS dari Supermarket
inspec supermarket profile cis-ubuntu-22.04
inspec exec cis-ubuntu-22.04 -t ssh://deploy@203.0.113.30

Untuk kebutuhan internal, warisi profil standar lalu perkuat dengan kontrol tambahan:

inspec.yml dengan depends
name: corporate-baseline
version: 0.1.0
depends:
  - name: cis-ubuntu-22.04
    url: https://supermarket.chef.io/profiles/cis-ubuntu-22.04

Profil warisan dipakai lewat tag include_controls di kontrol utama, memungkinkan kalian menambahkan kontrol kustom di atas standar nasional. Alur kerja yang disarankan: cek compliance di staging setelah setiap rilis policy, lalu hanya promosi ke production jika scan staging lulus semua kontrol wajib.

Warning

Profil CIS dan STIG sering memuat kontrol yang saling bertentangan dengan kebutuhan bisnis. Kelola pengecualian secara eksplisit lewat tag dan atribut profil, bukan dengan menghapus kontrol, agar jejak audit tetap lengkap dan dapat dijelaskan.

Integrasi dengan Chef Automate

Chef Automate adalah platform yang menampilkan hasil scan InSpec dalam dashboard compliance. Alur integrasinya: node memakai resource chef_automate atau agent scan-jobs menjalankan inspec exec secara berkala, lalu mengirim hasilnya sebagai JSON ke Automate via endpoint data collection. Automate kemudian menampilkan skor compliance per node, per profil, dan per kontrol dalam bentuk grafik, sehingga kesehatan node, status run chef-client, dan hasil compliance tampil di satu layar.

Untuk mengirim hasil scan secara langsung dari profil InSpec ke Automate, jalankan scan dengan reporter automate:

Kirim hasil scan ke Automate
inspec exec baseline \
  --reporter automate \
  --inspec-opt automate-url https://automate.example.com \
  --inspec-opt token $AUTOMATE_TOKEN

Pastikan token yang dipakai adalah token API dengan izin compliance scanning. Setelah terkirim, dashboard Automate menampilkan tren skor seiring waktu, sehingga penyimpangan yang terjadi setelah rilis bisa terlihat dan ditindaklanjuti.

Penutup

Pada episode 11 ini kalian sudah belajar menulis profil dan kontrol InSpec dengan describe blocks, memakai resource package, service, file, dan command untuk menguji berbagai aspek sistem, serta menjalankan scan dengan inspec exec baik secara lokal maupun remote. Kalian juga sudah memahami workflow compliance dengan profil CIS dan STIG beserta integrasi hasil scan ke Chef Automate.

Inti yang harus dibawa pulang:

  • Profil InSpec adalah kumpulan kontrol, dan kontrol adalah pengujian tunggal dengan identitas dan impact.
  • Describe blocks menampung pernyataan it yang menilai resource seperti file, package, service, dan command.
  • Inspec exec memindai target lokal atau remote dan mendukung banyak format reporter termasuk JSON.
  • Profil CIS dan STIG bisa diwarisi dan diperkuat untuk memenuhi standar keamanan nasional.
  • Chef Automate menggabungkan hasil scan compliance dengan status run chef-client dalam satu dashboard.

Di episode 12 berikutnya kita akan membahas Chef Automate secara utuh: dashboard compliance dan visibilitas node, kesehatan node, status run cookbook, pipeline compliance untuk CI/CD, serta peran data collection service dalam platform Automate. Sampai jumpa.

Belajar Chef - Chef InSpec (Compliance) | Belajar Chef