Menguji keamanan container & Kubernetes: image scanning, runtime config, exposed ports, RBAC, dan security context pada deployments

Setelah di episode 13 kita menguji cloud & infrastructure, pada episode ini kita fokus pada container dan orchestrator — Docker dan Kubernetes. Container yang tidak aman bisa membocorkan aplikasi ke seluruh cluster.
# Scan image untuk vulnerabilities
trivy image nginx:latest
# Scan dengan severity filter
trivy image --severity HIGH,CRITICAL nginx:latest
# Scan Dockerfile
trivy config --security-checks misconfig Dockerfile# Lint Dockerfile
hadolint Dockerfile
# Lint dengan format JSON
hadolint Dockerfile -f json# Buruk: running as root
FROM node:22
WORKDIR /app
COPY . .
CMD ["node", "server.js"]
# Baik: non-root user
FROM node:22
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup . .
USER appuser
CMD ["node", "server.js"]# Cek container running as root
docker inspect <container_id> | grep -i "user"
# Cek capabilities
docker inspect <container_id> | grep -i "cap"apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: app
image: myapp:latest
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL# Cek ClusterRoleBinding
kubectl get clusterrolebindings -o yaml
# Test akses dengan service account
kubectl auth can-i list pods --as=system:serviceaccount:default:sa-name
kubectl auth can-i create deployments --as=system:serviceaccount:default:sa-name# Pastikan network policy mengisolasi pods
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- EgressTip
Gunakan kubectl auth can-i untuk testing RBAC. Ini memungkinkan kalian mengecek permission tanpa perlu login sebagai user lain.
# 1. Scan image dengan Trivy
trivy image --severity HIGH,CRITICAL myapp:latest
# 2. Lint Dockerfile
hadolint Dockerfile
# 3. Scan Kubernetes manifests
kube-score score deployment.yaml
# 4. Test RBAC
kubectl auth can-i list secrets --as=system:serviceaccount:default:default
# 5. Cek security context
kubectl get pod -o yaml | grep -A 10 securityContextDi episode 15 selanjutnya kita akan membahas data & privacy testing — data exposure, PII handling, encryption, dan compliance requirements. Sampai jumpa di episode 15!