DEV Community

Cover image for Building a Zero-Trust Golang Backend (Part 3): Deploying to GKE with Strict Security Context ☸️🚀
Mohammad Anang
Mohammad Anang

Posted on

Building a Zero-Trust Golang Backend (Part 3): Deploying to GKE with Strict Security Context ☸️🚀

Inilah tahap puncak dari seri DevSecOps kita. Di Part 1 kita telah membuat aplikasi Golang yang aman, dan di Part 2 kita menyusun pipeline CI/CD. Sekarang, saatnya aplikasi ini hidup di lingkungan production!

Repositori penuh: 👉 mohammadanang/secure-doc-api

Untuk orkestrasi, kita menggunakan Google Kubernetes Engine (GKE) Autopilot. Mode ini luar biasa karena Google yang mengelola infrastruktur node-nya, memungkinkan kita fokus murni pada Pod dan keamanannya.

  1. Manifest Deployment: Mengunci Pod dari Dalam

Container yang ramping saja tidak cukup. Kita harus memberi tahu Kubernetes untuk membatasi ruang gerak container tersebut. Inilah fungsi blok securityContext.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: secure-api-deployment
spec:
  replicas: 3 # High Availability
  selector:
    matchLabels:
      app: secure-doc-api
  template:
    # ...
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 65532 # User spesifik dari Distroless
      containers:
      - name: secure-api
        image: us-central1-docker.pkg.dev/PROJECT_ID/REPO/IMAGE:latest
        ports:
        - containerPort: 8080
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true # Kunci Zero-Trust!
          capabilities:
            drop: ["ALL"]

Enter fullscreen mode Exit fullscreen mode

Kenapa readOnlyRootFilesystem itu penting?

Bahkan jika penyerang menemukan kelemahan RCE (Remote Code Execution) pada aplikasi, mereka tidak akan bisa mengunduh skrip berbahaya, membuat file konfigurasi palsu, atau menulis malware. Seluruh filesystem dikunci secara read-only.

  1. Eksekusi Pipeline (Otomatisasi Penuh)

Pada cloudbuild.yaml, kita memerintahkan Cloud Build untuk men-deploy image yang baru saja dibuat:


  - name: 'gcr.io/cloud-builders/kubectl'
    args: 
      - 'set'
      - 'image'
      - 'deployment/secure-api-deployment'
      - 'secure-api=$_REGION-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/$_IMAGE_NAME:$COMMIT_SHA'

Enter fullscreen mode Exit fullscreen mode

Dengan menggunakan tag $COMMIT_SHA (dari GitHub), kita mengimplementasikan konsep Immutable Infrastructure. Kita selalu tahu persis kode mana yang sedang berjalan di production, membuat rollback menjadi sangat mudah.

Kesimpulan

Membangun infrastruktur Zero-Trust di Cloud memang membutuhkan setup yang lebih panjang di awal. Namun, hasil akhirnya adalah sistem yang mampu memvalidasi dirinya sendiri, aman secara default, dan scalable.

Terima kasih telah mengikuti seri tutorial ini! Jika Anda memiliki pertanyaan atau pengalaman seputar Kubernetes Security, mari berdiskusi di kolom komentar.

Top comments (0)