Deploy ke cloud adalah momen paling berisiko dalam pipeline karena kredensial dan izin bertemu kode baru; di episode ini kalian membangun secure deploy dengan OIDC tanpa static key, menerapkan guardrails organisasi seperti SCP dan Azure Policy, serta mencegah misconfigurasi cloud sejak pipeline lewat plan scanning dan environment protection

Di episode 8 cluster K8s kalian sudah hardened. Sekarang kita periksa jalur menuju sana — proses deploy ke cloud. Momen deploy adalah konvergensi semua risiko: pipeline memegang kredensial cloud, kode baru pertama kali dieksekusi, dan perubahan infrastruktur terjadi dalam hitungan menit. Banyak breach besar dimulai dari sini: CI token dicuri, lalu dipakai untuk deploy beban jahat langsung ke production.
Episode ini menyusun pertahanan di tiga titik: identitas deploy yang tidak bisa dicuri (OIDC), guardrail organisasi yang membatasi apa pun yang lolos (SCP/policy), dan verifikasi sebelum apply (plan scanning + environment gate).
Pola lama: simpan AWS_ACCESS_KEY_ID sebagai secret GitHub, inject ke workflow, pakai untuk deploy. Tiga cacat fatal:
Jawaban modernnya adalah workload identity federation: pipeline menukar JWT singkat-masa-hidup dengan role cloud — tanpa static key sama sekali.
Konfigurasinya dua sisi. Di AWS, buat OIDC provider + IAM role yang percaya repo tertentu:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
"token.actions.githubusercontent.com:sub": "repo:org/myapp:ref:refs/heads/main"
}
}
}]
}Baris yang disorot adalah inti keamanannya: kondisi sub mengikat role hanya untuk workflow repo org/myapp di branch main — token dari fork PR atau repo lain otomatis ditolak. Di sisi workflow:
jobs:
deploy:
runs-on: ubuntu-latest
environment: production # wajib approval reviewer
permissions:
contents: read
id-token: write # minta JWT OIDC
steps:
- uses: actions/checkout@v4
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/deploy-myapp
aws-region: ap-southeast-1
role-duration-seconds: 900 # sesi 15 menit
- run: ./scripts/deploy.shHasil akhir: tidak ada secret cloud di GitHub sama sekali; kredensial hanya ada selama 15 menit, hanya di runner yang menjalankan job itu, hanya dengan izin role tersebut.
Tip
GCP dan Azure menyediakan mekanisme setara — Workload Identity Federation (GCP) dan federated credentials pada App Registrations/App Service (Azure). Konsepnya identik: tukar token pendek milik platform CI dengan role scoped.
Pipeline yang aman belum cukup — manusia tetap bisa salah lewat console, CLI, atau tool lain. Guardrails organisasi bekerja sebagai pagar terakhir:
| Mekanisme | Platform | Contoh Aturan |
|---|---|---|
| SCP (Service Control Policy) | AWS Organizations | Tolak region di luar allowlist; blokir leave-org |
| Azure Policy | Azure | Deny resource tanpa tag; audit TLS minimum |
| Org Policy Constraints | GCP | Disable service account key creation |
Contoh SCP sederhana yang mencegah kesalahan klasik:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyUnapprovedRegions",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEqualsIgnoreCase": {
"aws:RequestedRegion": ["ap-southeast-1", "us-east-1"]
}
}
}]
}Prinsip desain guardrail: deny-by-default untuk kategori berisiko tinggi, allowlist eksplisit untuk sisanya. Guardrail bukan pengganti pipeline security — ia menyelamatkan kalian saat semua layer lain gagal.
Gabungan episode 7 dan praktik cloud:
Loop ini penting: detective findings harus mengalir balik menjadi aturan preventive baru di conftest — itulah cara sistem belajar dari setiap insiden nyaris terjadi.
AdministratorAccess menghilangkan manfaat federation; pisahkan role per aplikasi/per environment dengan permission boundary.sub — siapa pun yang bisa trigger workflow di org kalian bisa assume role; selalu ikat repo+branch+environment.aws iam generate-credential-report).Inti yang harus dibawa pulang:
sub ke repo/branch/environment spesifik.Di episode 10 selanjutnya kita membahas Vulnerability Management Automation — semua scanner yang kalian pasang pasti menghasilkan banjir temuan; bagaimana memprioritasnya dengan EPSS & KEV, menetapkan SLA per severity, dan mengotomasi remediation hingga Dependabot auto-merge yang aman. Sampai jumpa!