DevSecOps: Integrasikan Keamanan ke dalam CI/CD

Foto oleh Unsplash

Foto oleh Unsplash
DevSecOps mengintegrasikan pengujian keamanan langsung ke dalam siklus delivery perangkat lunak, bukan menjadikannya fase terpisah setelah pengembangan selesai. Pendekatan 'shift-left' berarti setiap pull request secara otomatis dipindai untuk mencari kerentanan, secret yang terekspos, dan dependensi yang tidak aman — menangkap masalah ketika biaya perbaikannya paling rendah: sebelum mencapai production. Artikel ini memandu pembangunan pipeline DevSecOps praktis menggunakan GitHub Actions, Semgrep, Trivy, Gitleaks, dan OWASP ZAP.
Pipeline CI/CD DevSecOps yang matang menjalankan beberapa security gate secara paralel: Static Application Security Testing (SAST) menganalisis source code untuk mencari kerentanan, Software Composition Analysis (SCA) memindai dependensi untuk CVE yang diketahui, deteksi secret memindai kredensial yang tidak sengaja di-commit, dan container image scanning memastikan image Docker Anda tidak membawa kerentanan yang diketahui. Setiap gate memiliki kriteria lulus/gagal yang jelas dan memblokir deployment saat menemukan temuan kritis.
Semgrep adalah tool SAST open-source dengan ratusan aturan yang selaras dengan OWASP. Tool ini memindai source code untuk SQL injection, XSS, secret yang di-hardcode, dan penggunaan API yang tidak aman. Trivy adalah scanner serbaguna yang menangani pemindaian dependensi filesystem (npm, pip, go.mod) dan container image scanning. Menjalankan keduanya di setiap pull request memberikan umpan balik langsung tentang regresi keamanan yang diperkenalkan oleh suatu perubahan.
# .github/workflows/devsecops.yml — Security gates in CI/CD
name: DevSecOps Pipeline
on: [push, pull_request]
jobs:
sast:
name: Static Analysis (SAST)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Semgrep SAST
uses: semgrep/semgrep-action@v1
with:
config: p/owasp-top-ten
dependency-scan:
name: Dependency Vulnerability Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy on dependencies
uses: aquasecurity/trivy-action@master
with:
scan-type: fs
scan-ref: .
severity: CRITICAL,HIGH
exit-code: 1 # Fail build on critical/high vulns
secrets-detection:
name: Secrets Detection
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Container image adalah permukaan serangan yang umum — base image seperti ubuntu:latest atau node:18 sering memiliki CVE yang diketahui dalam paket yang terinstall. Trivy image scanning memeriksa manifes image terhadap database CVE (NVD, GitHub Advisory Database) dan melaporkan kerentanan berdasarkan tingkat keparahan. Mengintegrasikan output SARIF dengan tab Security GitHub memberi Anda catatan permanen dari semua temuan di seluruh repositori Anda.
Security gate berjalan setelah langkah Docker build tetapi sebelum push ke registry. Jika Trivy menemukan kerentanan critical atau high severity, langkah GitHub Actions keluar dengan kode 1, memblokir push. Langkah upload SARIF menggunakan if: always() untuk memastikan temuan dicatat bahkan saat build gagal — memberi tim keamanan visibilitas tentang apa yang diblokir dan alasannya.
# Container image scanning with Trivy
container-scan:
name: Container Image Scan
runs-on: ubuntu-latest
needs: [sast]
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Scan image with Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: myapp:${{ github.sha }}
format: sarif
output: trivy-results.sarif
severity: CRITICAL,HIGH
exit-code: 1
- name: Upload SARIF to GitHub Security
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: trivy-results.sarifGunakan policy-as-code untuk pengecualian kerentanan. Daripada hardcode threshold severity, pertahankan file .security/policy.yml yang menentukan CVE ID mana yang diterima dengan tanggal kedaluwarsa dan justifikasi. Ini menciptakan audit trail yang dapat diaudit dari keputusan risiko yang diterima dan secara otomatis mengakhiri pengecualian agar ditinjau secara berkala.
DAST menguji aplikasi yang sedang berjalan dengan mengirimkan request HTTP yang dikustomisasi untuk menemukan kerentanan keamanan yang hanya muncul saat runtime — hal-hal seperti autentikasi yang rusak, insecure direct object reference, dan header CORS yang salah konfigurasi yang tidak bisa dideteksi SAST hanya dengan melihat kode. OWASP ZAP adalah tool DAST open-source yang paling banyak digunakan, dan GitHub Action-nya membuat integrasi menjadi mudah.
ZAP baseline scan adalah passive scan yang tidak secara aktif menyerang aplikasi — ia merayapi situs, mengamati respons, dan menandai masalah keamanan tanpa mengirimkan payload berbahaya. Aman untuk dijalankan terhadap environment staging di setiap CI/CD run. Untuk pengujian yang lebih menyeluruh, ZAP full scan mencakup aturan active attack tetapi sebaiknya dijalankan lebih jarang dan di environment yang terisolasi.
# DAST with OWASP ZAP against a staging environment
dast:
name: Dynamic Analysis (DAST)
runs-on: ubuntu-latest
needs: [container-scan]
steps:
- name: ZAP Baseline Scan
uses: zaproxy/action-baseline@v0.12.0
with:
target: https://staging.myapp.com
rules_file_name: .zap/rules.tsv
cmd_options: >
-I # ignore warnings (only fail on alerts)
-j # output JSON report
-a # include alpha active scan rulesPipeline DevSecOps yang memblokir setiap build dengan false positive akan segera dilewati atau dinonaktifkan oleh developer yang frustrasi. Mulailah hanya dengan aturan yang memiliki kepercayaan tinggi, setel threshold secara konservatif (hanya CRITICAL dan HIGH, bukan MEDIUM), dan tetapkan proses yang jelas untuk menerima false positive dengan justifikasi. Tooling keamanan harus membantu developer, bukan menggangu mereka.
Gitleaks memindai seluruh riwayat Git untuk mencari kredensial yang tidak sengaja di-commit — AWS key, GitHub token, password database, JWT secret. Menjalankannya dengan fetch-depth: 0 memindai setiap commit di repositori, bukan hanya yang terbaru. Untuk keamanan supply chain, generate dan publikasikan Software Bill of Materials (SBOM) menggunakan Syft atau mode pembuatan SBOM Trivy — ini mendokumentasikan setiap dependensi dalam container image Anda untuk keperluan compliance dan respons insiden.
Terminologi DevSecOps penting yang akan Anda temui di lapangan: SAST, DAST, SCA, CVE, shift-left security, and SBOM.
DevSecOps adalah pergeseran budaya sekaligus pergeseran teknis. Mulailah dengan langkah kecil: tambahkan Gitleaks untuk mencegah secret masuk ke repositori, kemudian tambahkan Trivy dependency scanning, lalu container scanning. Rayakan keberhasilan ketika pipeline menangkap kerentanan nyata. Investasikan dalam pelatihan keamanan bagi developer agar tim memahami mengapa gate tersebut ada — tim yang memahami konteks keamanan secara proaktif menulis kode yang lebih aman.