Keamanan bukan tahap akhir, melainkan lapisan yang melekat sejak kode pertama; di episode ini kalian memahami SAST/DAST, dependency scanning, supply-chain security dengan SLSA dan SBOM, serta policy-as-code dengan OPA, lalu memasang security checks di pipeline CI

Secara historis, keamanan datang di akhir: tim keamanan mengaudit sistem yang sudah jalan, menemukan masalah, lalu meminta perbaikan — mahal, lambat, dan sering dianggap musuh. DevSecOps membalik model itu: keamanan di-shift ke kiri (shift-left), ke awal pipeline, menjadi lapisan otomatis yang menyertai setiap commit.
Pada 2026, DevSecOps bukan lagi pilihan — ia embedded dalam pipeline standar. Alasan utamanya adalah rantai pasok software (supply chain): serangan tidak lagi menyasar aplikasi kalian, melainkan dependency dan build tool yang kalian pakai tanpa sadar. Episode ini membekali kalian dengan empat lapisan keamanan otomatis — SAST/DAST, dependency scanning, supply-chain (SLSA/SBOM), dan policy-as-code — lalu memasangnya di CI.
Static Application Security Testing (SAST) memindai source code untuk mencari pola rentan — SQL injection, path traversal, secret yang ter-commit — tanpa menjalankan aplikasi. Contoh tool: Semgrep, SonarQube, CodeQL.
semgrep scan --config=auto .Dynamic Application Security Testing (DAST) menyerang aplikasi yang berjalan — mengirim request berbahaya dan mengamati respons. Ia melengkapi SAST: SAST melihat kode, DAST melihat perilaku. Contoh: OWASP ZAP, Burp Suite. Tempat terbaiknya adalah environment staging, bukan produksi.
Kebanyakan kode modern adalah 90% dependency. Dependency scanning memeriksa pustaka yang kalian pakai terhadap database CVE. Contoh: Trivy, Dependabot, Snyk, OSV-Scanner.
trivy fs .
trivy image ghcr.io/username/myapp:1.2.0Gitleaks memindai repository dan pipeline untuk mencegah secret masuk Git — salah satu lapisan paling murah dan paling berdampak:
gitleaks detect --source . --verboseNote
SAST, dependency, dan secret scanning berjalan otomatis di setiap PR. DAST berjalan di staging setelah deploy. Ini pembagian shift-left yang tepat: error ditemukan sedekat mungkin dengan tempat ia dibuat, dengan biaya perbaikan terkecil.
Serangan supply-chain modern tidak menyasar kode kalian, tetapi proses build dan dependency kalian. Dua konsep yang wajib dikenal:
name: myapp
version: 1.2.0
components:
- name: lodash
version: 4.17.21
purl: pkg:npm/lodash@4.17.21
- name: express
version: 4.19.2
purl: pkg:npm/express@4.19.2SBOM dibuat saat build (lihat episode 17), ditandatangani dengan cosign, dan diverifikasi sebelum deployment. Ini mengubah pertanyaan "bolehkah kita rilis?" menjadi sesuatu yang bisa dijawab oleh mesin.
Gerbang keamanan juga harus bisa diprogram. Open Policy Agent (OPA) menulis kebijakan sebagai kode dalam bahasa Rego — misalnya "image dari registry yang tidak dikenal tidak boleh ke produksi":
package main
import rego.v1
deny contains msg if {
some image in input.images
not startswith(image, "ghcr.io/")
msg := sprintf("image %q tidak berasal dari registry resmi", [image])
}
deny contains msg if {
input.critical_vulns > 0
msg := sprintf("terdapat %d CVE kritis", [input.critical_vulns])
}Policy ini dijalankan otomatis di pipeline: setelah scan, hasilnya dievaluasi OPA, dan jika deny menghasilkan pesan, deployment dihentikan. Policy-as-code membuat aturan keamanan bisa direview seperti kode — dan ini adalah dasar dari pertemuan keamanan dan GitOps.
Gabungkan semua lapisan dalam satu job pipeline:
name: Security
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Secret scanning
uses: gitleaks/gitleaks-action@v2
- name: Dependency scan
uses: aquasecurity/trivy-action@master
with:
scan-type: fs
ignore-unfixed: true
format: table
exit-code: 1
- name: SAST
run: |
pip install semgrep
semgrep scan --config=auto --error .
- name: Policy check dengan OPA
run: |
opa eval --data policy.rego --input scan-result.json \
"data.main.deny" --fail-defined
- name: Image scan + generate SBOM
if: startsWith(github.ref, 'refs/tags/')
run: |
trivy image ghcr.io/username/myapp:${{ github.ref_name }}
syft scan ghcr.io/username/myapp:${{ github.ref_name }} -o spdx-json > sbom.json
cosign sign --yes ghcr.io/username/myapp:${{ github.ref_name }}Tip
Mulai dari dua gerbang: secret scanning di setiap PR dan dependency scan dengan exit-code: 1 saat ada CVE kritis. Keduanya murah, cepat, dan langsung menutup sebagian besar jalur insiden modern. Lapisan sisanya — DAST, SLSA, OPA — ditambahkan setelah pipeline inti stabil.
Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita masuk ke Networking & Service Mesh — DNS, TLS dan certificate dengan cert-manager, mTLS, serta service mesh Istio/Linkerd untuk mengamankan komunikasi antar-service. Jika episode ini mengamankan pipeline, episode 19 mengamankan jaringan tempat aplikasi kalian berkomunikasi.