DEV Community

Cover image for Building a Zero-Trust Golang Backend (Part 2): CI/CD, Dependency Drift & GCP IAM ⚙️🔒
Mohammad Anang
Mohammad Anang

Posted on

Building a Zero-Trust Golang Backend (Part 2): CI/CD, Dependency Drift & GCP IAM ⚙️🔒

Selamat datang kembali di seri pembangunan Secure Doc API! Jika Anda melewatkan Bagian 1 tentang Distroless Container, Anda bisa membacanya di sini.

Seluruh kode referensi tersedia di: 👉 mohammadanang/secure-doc-api

Sekarang kita memiliki aplikasi yang aman. Tantangan berikutnya adalah: bagaimana memindahkan kode tersebut dari GitHub ke server secara otomatis, tanpa meloloskan kode yang rentan? Jawabannya adalah Shift-Left Security menggunakan Google Cloud Build dan Artifact Registry.

  1. Shift-Left Security dengan Gosec

Kita akan menyisipkan gosec (Golang Security Checker) di tahap paling awal pipeline. Jika gosec menemukan celah, pipeline akan gagal dan image tidak akan pernah dibuat.

Namun, di tahap ini saya menemukan pelajaran berharga tentang Dependency Drift. Awalnya saya menggunakan tag @latest untuk instalasi gosec. Tiba-tiba pipeline hancur karena versi terbaru gosec meminta Golang 1.25, sedangkan saya menggunakan 1.24!

Solusinya? Version Pinning.


# cloudbuild.yaml (Step 1)
steps:
  - name: 'golang:1.24'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        echo "Menginstal Gosec (Version Pinned)..."
        go install github.com/securego/gosec/v2/cmd/gosec@v2.22.0

        /go/bin/gosec -no-fail -fmt=text -out=results.txt ./...
        cat results.txt

Enter fullscreen mode Exit fullscreen mode
  1. IAM Roles: Jebakan Batman di Google Cloud

Google Cloud menerapkan prinsip Least Privilege secara default. Artinya, pipeline kita awalnya sama sekali tidak bisa menulis log, mengunggah image ke Artifact Registry, atau men-deploy ke Kubernetes.
Kita harus mengatur Service Account di Cloud Shell secara eksplisit:


# Memberikan izin untuk menulis Log
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_EMAIL" \
    --role="roles/logging.logWriter"

# Memberikan izin untuk push image ke Artifact Registry
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_EMAIL" \
    --role="roles/artifactregistry.writer"

Enter fullscreen mode Exit fullscreen mode

Setelah izin beres, pipeline berjalan mulus, image Docker dibungkus, dan Artifact Registry secara otomatis memindai kerentanan OS layer-nya!

Di Bagian 3 (Terakhir), kita akan membahas deployment akhir ke GKE Autopilot dengan Security Context tingkat lanjut. Jangan lewatkan!

Top comments (0)