Belajar DevOps Engineer - DevSecOps & Shift-Left Security
Episode 18 of 28

Belajar DevOps Engineer - DevSecOps & Shift-Left Security

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

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

Pendahuluan

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.

Empat Lapisan Security Scanning

1. SAST: Keamanan di Level Source Code

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.

SAST dengan Semgrep
semgrep scan --config=auto .

2. DAST: Keamanan di Level Runtime

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.

3. Dependency Scanning: Menjaga Rantai Pasok

Kebanyakan kode modern adalah 90% dependency. Dependency scanning memeriksa pustaka yang kalian pakai terhadap database CVE. Contoh: Trivy, Dependabot, Snyk, OSV-Scanner.

Scan dependency dan image
trivy fs .
trivy image ghcr.io/username/myapp:1.2.0

4. Secret Scanning: Menangkap Kebocoran Sebelum Commit

Gitleaks memindai repository dan pipeline untuk mencegah secret masuk Git — salah satu lapisan paling murah dan paling berdampak:

Cek secret bocor
gitleaks detect --source . --verbose

Note

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.

Supply-Chain Security: SLSA dan SBOM

Serangan supply-chain modern tidak menyasar kode kalian, tetapi proses build dan dependency kalian. Dua konsep yang wajib dikenal:

  • SBOM (Software Bill of Materials) — daftar lengkap semua komponen software: dependency, versi, lisensi. Jika sebuah CVE muncul di library X, SBOM menjawab seketika "aplikasi mana yang terpengaruh?".
  • SLSA (Supply-chain Levels for Software Artifacts) — kerangka keamanan proses build: build yang dapat diverifikasi (provenance), dari source hingga artifact, sehingga artifact yang dipromosikan di episode 17 dapat dibuktikan asal-usulnya.
SBOM ringkas
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.2

SBOM 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.

Policy-as-Code dengan OPA

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":

policy.rego
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.

Praktik: Security Checks di CI

Gabungkan semua lapisan dalam satu job pipeline:

.github/workflows/security.yml
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.

Pitfall Umum

  • Scanning tanpa gate — tool dipasang tetapi hasilnya tidak pernah menghentikan deployment; itu hiasan, bukan keamanan.
  • Blokir total pada semua CVE — beberapa CVE tanpa exploit nyata; tetapkan severity threshold dan kelola sisa risiko sebagai debt yang terukur.
  • Ignoring dependency update — dependabot yang selalu dismissed adalah tanda alarm yang di-snooze.
  • SBOM tanpa provenance — daftar komponen tanpa bukti asal proses tidak bisa diverifikasi (SLSA).
  • Keamanan hanya untuk kode sendiri — jangan lupa scan image base, infra-as-code (Terraform), dan cluster config.

Penutup

Inti yang harus dibawa pulang:

  • DevSecOps = keamanan digeser ke kiri, otomatis, dan embedded di pipeline — bukan tahap akhir.
  • Empat lapisan: SAST (kode), DAST (runtime), dependency + secret scanning, dan policy-as-code.
  • SBOM menjawab "apa yang terpengaruh?", SLSA membuktikan "dari mana artifact ini?".
  • Gerbang security di CI hanya berguna jika ia benar-benar menghentikan rilis yang gagal.

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.

Belajar DevOps Engineer - DevSecOps & Shift-Left Security | Belajar DevOps Engineer