Mengamankan kredensial dan image: menyimpan rahasia dengan podman secret alih-alih environment variable, mengelola trust image lewat policy.json, menandatangani dengan sigstore dan cosign, memindai kerentanan memakai Trivy, serta menambal CVE secara rutin.

Di episode 13 kalian membangun lapisan keamanan: user namespaces, SELinux dan AppArmor, capabilities, serta seccomp. Tapi semua itu mengamankan proses — belum data dan asal image. Episode 14 menutup dua lubang berikutnya: bagaimana menyimpan credential dengan benar lewat podman secret create, dan bagaimana memastikan image yang kalian jalankan benar-benar image yang kalian maksud, bukan versi yang telah diotak-atik.
Environment variable adalah cara paling sederhana untuk melewatkan konfigurasi — dan cara paling mudah untuk membocorkan rahasia. Sekali token masuk ke environment:
podman inspect pada host..env yang ter-commit ke git.Secret menambahkan lapisan kendali: nilainya tidak ditampilkan saat inspeksi, dan hanya tersedia untuk proses yang kalian tunjuk.
| Aspek | Environment Variable | podman secret |
|---|---|---|
Terlihat di podman inspect | Ya | Tidak (masked) |
| Akses proses lain di container | Bisa dibaca semua | Hanya yang di-mount |
| Tersimpan di image layer | Bisa (saat build) | Tidak |
| Rotasi | Perlu restart dengan env baru | podman secret rm lalu buat ulang |
| Audit | Sulit | podman secret ls |
printf "s3cr3t-value" | podman secret create db_password -
podman secret lsSecret dibuat dari file atau stdin. Untuk memakainya di container:
podman run --secret db_password,type=mount,target=/run/secrets/db_password myapp:1.2
podman run --secret db_password,type=env,target=DB_PASSWORD myapp:1.2type=mount meletakkan secret sebagai file; type=env mengeksposnya sebagai environment variable. File lebih disukai karena aplikasi bisa membacanya on-demand tanpa menyimpannya di environment.
Tip
podman secret create dengan argumen - membaca dari stdin, sehingga kalian tidak perlu menulis rahasia ke disk lebih dulu. Kombinasikan dengan file yang hanya ada di mesin deployment — dan jangan pernah commit secret ke git.
Beberapa kebiasaan yang menjaga credential tetap sehat:
podman secret rm dan buat ulang dengan nilai baru.Image tidak hanya sekadar byte — ia juga rantai pasok. Dari registry publik sampai host kalian, setiap langkah bisa disusupi. Dua pertahanan utamanya: memverifikasi signature dan memindai kerentanan.
Podman (melalui containers/image) menghormati kebijakan trust yang didefinisikan di policy.json. File ini menentukan registry mana yang boleh ditarik tanpa verifikasi, dan registry mana yang wajib punya signature:
{
"default": [
{ "type": "insecureAcceptAnything" }
],
"transports": {
"docker": {
"quay.io/example": [
{
"type": "signedBy",
"keyType": "GPGKeys",
"keyPath": "/etc/containers/keys/example.gpg"
}
]
}
}
}Dengan konfigurasi di atas, image dari quay.io/example hanya diterima jika memiliki signature yang valid. Untuk mengelola kebijakan dari CLI, gunakan podman image trust set dan podman image trust show.
Cosign dari proyek sigstore menandatangani image dengan format OCI yang modern, termasuk dukungan keyless signing memakai identitas OpenID Connect — tidak perlu menyimpan kunci rahasia sendiri:
cosign sign quay.io/example/myapp:1.2
cosign verify --key cosign.pub quay.io/example/myapp:1.2Signature tersimpan di registry dan bisa diverifikasi oleh siapa pun yang memegang kunci publik. Untuk deployment, integrasikan verifikasi cosign ke pipeline CI sehingga image yang belum ditandatangani tidak akan pernah sampai ke produksi.
Warning
Signature tidak berarti image bebas CVE — ia hanya membuktikan siapa yang menerbitkan image. Verifikasi identitas dan pemindaian kerentanan adalah dua hal yang berbeda dan dua-duanya wajib.
Trivy adalah pemindai kerentanan populer yang bekerja langsung pada image:
trivy image quay.io/example/myapp:1.2
trivy image --severity HIGH,CRITICAL --exit-code 1 quay.io/example/myapp:1.2--exit-code 1 membuat Trivy mengembalikan status gagal ketika ditemukan kerentanan parah — sempurna untuk dipasang sebagai gate di CI. Integrasikan pemindaian ini ke setiap build, bukan hanya sesekali.
Pemindaian hanya menemukan masalah; penambalan yang menyelesaikannya:
Pada episode 14 ini kalian mengamankan data dan rantai pasok: menyimpan credential dengan podman secret create alih-alih environment variable, mengelola trust image lewat policy.json, menandatangani dan memverifikasi dengan sigstore/cosign, memindai kerentanan dengan Trivy, serta menambal CVE lewat rebuild dan base image yang ramping.
Inti yang harus dibawa pulang:
--exit-code 1 di CI adalah kebiasaan yang menyelamatkan malam.Di episode 15 berikutnya kita mengendalikan Podman dari jauh: API service & remote client — membuka REST API dengan podman system service, memakai klien Docker seperti docker-py, dan mengorkestrasi container dari host lain lewat podman-remote.