Menjadikan GitOps mesin kepatuhan: audit trail dari Git dan log ArgoCD, pertimbangan SOC 2, HIPAA, dan PCI-DSS, pelaporan metrik delivery, serta policy as code dengan OPA dan Kyverno.

Di episode 23 sebelumnya kita membangun keamanan berlapis — autentikasi, RBAC, jaringan, dan supply chain. Ada satu hasil samping yang mungkin tidak kalian sadari: setiap lapisan itu menghasilkan bukti. Di episode ini kita memanfaatkannya: compliance & audit. Karena dalam GitOps, jawaban atas pertanyaan auditor "siapa yang mengubah apa, kapan, dan siapa yang menyetujui" bukanlah laporan yang dibuat susah payah, melainkan artefak alami dari Git dan log ArgoCD.
Mengapa ini penting? Standar seperti SOC 2, HIPAA, dan PCI-DSS menghukum organisasi yang tidak bisa membuktikan kontrolnya. Secara tradisional, membuktikan kontrol deployment berarti pipeline raksasa yang dicatat dalam spreadsheet — mahal dan tidak pernah akurat. GitOps membaliknya: karena setiap perubahan deployment adalah commit yang ditandatangani oleh penulisnya, audit trail ada secara default. Tugas kita hanyalah merangkainya menjadi bukti yang bisa disajikan.
Audit trail GitOps punya tiga lapisan yang saling melengkapi:
Aktifkan audit log API server dengan menambah argumen --audit-log-path pada deployment argocd-server:
spec:
template:
spec:
containers:
- name: argocd-server
args:
- /usr/local/bin/argocd-server
- --audit-log-path=/var/log/audit.log
- --audit-log-format=jsonDengan format JSON, setiap aksi API terekam dengan user, resource, aksi, dan IP — bahan baku untuk jawaban "siapa yang menjalankan sync pukul 03.00?". Di lapisan Git, seluruh riwayat commit bisa diakses siapa pun tanpa tooling tambahan:
git log --oneline --all -- manifests/overlays/prod/api
git show --stat <commit>Perhatikan bahwa keduanya harus dihubungkan: commit di Git adalah keputusan, log ArgoCD adalah eksekusi. Aplikasi mengubah manifest (commit abc123), lalu sync terekam di audit log ArgoCD. Untuk jejak yang lengkap, kalian butuh keduanya.
Setiap standar punya penekanan berbeda; GitOps mengubahnya dari "pekerjaan berat" menjadi "verifikasi rutin":
| Standar | Fokus kontrol | Bagaimana GitOps memenuhinya |
|---|---|---|
| SOC 2 | Pengendalian perubahan, akses, dan pengoperasian | Branch protection + review; RBAC project; audit log |
| HIPAA | Kerahasiaan dan integritas data kesehatan | Encryption at rest (secret terenkripsi), akses terbatas, audit trail |
| PCI-DSS | Isolasi lingkungan pembayaran, perubahan terdokumentasi | Environment terpisah per cluster/project; change approval workflow |
Auditor ingin melihat ada proses sebelum perubahan masuk produksi. Dalam GitOps, proses itu adalah pull request dengan review:
feature/x.helm template, policy check dari episode 23).main memicu ArgoCD untuk menyinkronkan — eksekusi yang tercatat.Setiap langkah menghasilkan jejak yang bisa diaudit. Ini adalah contoh sempurna "audit trail yang terbentuk karena alur kerja, bukan karena laporan".
Pertanyaan inti audit: siapa mengubah apa, kapan. Git menyediakan siapa dan kapan; argocd app history menyediakan apa yang berubah di sisi eksekusi:
argocd app get api --history
argocd app rollback api 3
argocd app get api --refreshSetiap baris history mencatat revision manifest, waktu sync, dan user pemicunya. Rollback juga tercatat — ini penting untuk menjawab "apa yang terjadi saat insiden?". Audit trail yang lengkap memiliki empat bagian: keputusan (commit), persetujuan (review), eksekusi (sync), dan pemulihan (rollback). GitOps menyimpan semuanya.
Tip
Immutability Git adalah sekutu kalian. Commit yang sudah di-push seharusnya tidak diubah (git rebase pada branch bersama adalah pelanggaran). Dengan commit immutable, riwayat tidak bisa dipalsukan oleh pemakai yang menyesal — persis yang diinginkan auditor. Aktifkan branch protection dan signed commits (GPG/SSH) untuk memperkuat klaim ini.
Kontrol yang tidak diukur tidak bisa diperbaiki. DORA metrics — yang kini menjadi bahasa umum engineering — bisa dihitung langsung dari Git dan log ArgoCD:
main berubah per periode; dihitung dari jumlah commit/merge per hari.git log sampai status Synced di ArgoCD.Contoh query untuk menghitung durasi app tidak sehat:
time() - max(argocd_app_sync_status{sync_status="OutOfSync"} == 1) by (name)Laporan compliance kemudian menjadi dashboards (episode 22) dan ekspor berkala: daftar perubahan mingguan, daftar akses yang aktif, dan ringkasan insiden dengan timeline pemulihan. Jika audit menuntut, semua laporan ini punya tautan langsung ke bukti mentahnya — commit atau log.
Langkah terakhir: pastikan kebijakan itu sendiri dikelola seperti kode — di Git, direview, dan ditegakkan otomatis.
Kedua alat menjalankan kebijakan sebagai admission webhook: setiap resource yang akan diterapkan (termasuk oleh ArgoCD) diperiksa sebelum masuk cluster.
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-owner-label
spec:
validationFailureAction: Enforce
rules:
- name: require-team-label
match:
resources:
kinds:
- Namespace
validate:
message: "Namespace harus punya label team"
pattern:
metadata:
labels:
team: "?*"Kekuatan kombinasi GitOps + policy as code: kebijakan disimpan di repo yang sama, diterapkan ArgoCD ke cluster, dan dijalankan webhook saat resource diterapkan. Hasilnya loop tertutup — kebijakan bisa diaudit seperti kode, dan pelanggarannya tertolak dengan pesan yang jelas.
Untuk menangkap pelanggaran lebih awal, jalankan validasi kebijakan di pipeline CI: kubectl kustomize menghasilkan manifest, lalu conftest test (OPA) atau kyverno apply memeriksanya sebelum merge. Pull request yang melanggar kebijakan ditolak sebelum pernah menyentuh cluster — lebih murah daripada memperbaiki di produksi.
Episode ini mengubah GitOps menjadi mesin kepatuhan: audit log ArgoCD dan riwayat Git sebagai tiga lapis bukti, pertimbangan SOC 2/HIPAA/PCI-DSS, change approval workflow lewat pull request, audit trail yang menjawab siapa-mengubah-apa-kapan, pelaporan dengan DORA metrics dan MTTR, serta policy as code dengan OPA dan Kyverno.
Poin yang harus kalian bawa:
--audit-log-path pada API server untuk jejak aksi pengguna.Bukti yang lengkap membuat audit terasa ringan. Namun sistem yang sehat harus juga cepat — dan semakin banyak resource yang dikelola ArgoCD, semakin terasa beban performanya. Di episode 25 selanjutnya kita membahas performance tuning & optimization — optimasi repo, tuning controller, skala besar, dan performa cluster. Sampai jumpa di episode 25!