SIGSTORE SOFTWARE-SUPPLY-CHAIN SECURITY DEVSECOPS CONTAINER-SECURITY SUPPLY-CHAIN-SECURITY ARTIFACT-SIGNING VERIFICATION COSIGN FULCIO REKOR KUBERNETES DOCKER CI-CD BEST-PRACTICES CRYPTOGRAPHY TRANSPARENCY INTEGRITY

Mengamankan Software Supply Chain Anda dengan Sigstore: Verifikasi Artefak dari Kode hingga Produksi

⏱️ 10 menit baca
👨‍💻

Mengamankan Software Supply Chain Anda dengan Sigstore: Verifikasi Artefak dari Kode hingga Produksi

1. Pendahuluan

Di dunia pengembangan software yang serba cepat, kita sering kali bergantung pada ratusan, bahkan ribuan, komponen pihak ketiga. Mulai dari library open source, image Docker, hingga paket NPM, semuanya membentuk “rantai pasok software” kita. Namun, pernahkah Anda berpikir, seberapa yakin Anda bahwa komponen yang Anda gunakan itu asli, tidak dimodifikasi, dan berasal dari sumber yang terpercaya?

Insiden seperti serangan SolarWinds atau kerentanan Log4Shell menunjukkan betapa rentannya rantai pasok software terhadap serangan. Penyerang bisa menyusupkan kode jahat ke dalam komponen yang Anda gunakan, dan tanpa disadari, aplikasi Anda menjadi pintu gerbang bagi mereka. Inilah masalah besar yang perlu dipecahkan oleh setiap developer dan tim DevOps.

Di sinilah Sigstore hadir sebagai game-changer. Sigstore adalah inisiatif open source yang menyediakan standar dan alat untuk menandatangani (sign) dan memverifikasi (verify) artefak software secara kriptografis. Tujuannya sederhana: memberi Anda kepercayaan penuh pada setiap komponen yang masuk ke dalam sistem Anda, dari kode yang Anda tulis hingga artefak yang di-deploy ke produksi. Artikel ini akan membawa Anda menyelami Sigstore, mengapa ini penting, dan bagaimana Anda bisa mulai mengimplementasikannya.

2. Masalah Krusial di Software Supply Chain: Kurangnya Kepercayaan

Bayangkan Anda sedang membangun sebuah rumah. Anda tidak akan menggunakan bahan bangunan yang Anda tidak tahu dari mana asalnya, atau yang mungkin sudah dirusak di tengah jalan, bukan? Hal yang sama berlaku untuk software.

Risiko Tanpa Verifikasi Artefak:

Secara tradisional, developer menggunakan kunci GPG untuk menandatangani artefak. Namun, GPG memiliki tantangan tersendiri: manajemen kunci yang rumit, distribusi kunci publik, dan kurangnya transparansi publik. Sigstore hadir untuk menyederhanakan proses ini dan membuatnya lebih mudah diakses.

3. Memperkenalkan Sigstore: Solusi Kepercayaan Software

Sigstore adalah sebuah koleksi proyek dan layanan yang memungkinkan developer untuk menandatangani artefak digital dengan mudah dan aman, kemudian mencatat tanda tangan tersebut dalam sebuah log publik yang transparan. Ini seperti notaris digital untuk software Anda, yang mencatat semua transaksi secara permanen.

🎯 Tiga Pilar Utama Sigstore:

  1. Fulcio (Root of Trust): Ini adalah Certificate Authority (CA) yang mengeluarkan sertifikat penandatanganan berumur pendek. Alih-alih mengelola kunci GPG jangka panjang, Fulcio memungkinkan Anda menggunakan identitas yang sudah ada (misalnya akun GitHub, Google, atau email perusahaan Anda) untuk mendapatkan sertifikat yang hanya berlaku beberapa menit. Ini menghilangkan kerumitan manajemen kunci GPG tradisional.
  2. Rekor (Transparency Log): Rekor adalah log publik yang tidak bisa diubah (immutable) yang mencatat semua tanda tangan dan sertifikat yang dikeluarkan oleh Fulcio. Setiap kali artefak ditandatangani, catatan tentang tanda tangan tersebut akan ditambahkan ke Rekor. Ini memberikan transparansi penuh dan memungkinkan siapa pun untuk memverifikasi bahwa artefak tertentu telah ditandatangani dan dicatat.
  3. Cosign (CLI Tool): Cosign adalah alat Command Line Interface (CLI) yang paling sering digunakan untuk berinteraksi dengan Sigstore. Dengan Cosign, Anda bisa menandatangani image container, binary, atau artefak lainnya, serta memverifikasi tanda tangan yang sudah ada.

💡 Analogi Sederhana: Bayangkan Anda mengirim surat penting.

4. Bagaimana Sigstore Bekerja (Secara Sederhana)

Mari kita lihat alur kerja dasar bagaimana Sigstore mengamankan artefak Anda:

  1. Developer/CI/CD Meminta Sertifikat: Saat Anda ingin menandatangani sebuah artefak (misalnya image Docker), Anda menggunakan Cosign. Cosign akan berkomunikasi dengan Fulcio.
  2. Fulcio Memverifikasi Identitas: Fulcio akan meminta Anda untuk mengautentikasi menggunakan identitas Anda (misalnya melalui OIDC dengan GitHub, Google, atau IDP perusahaan). Setelah identitas terverifikasi, Fulcio mengeluarkan sertifikat penandatanganan berumur pendek (ephemeral certificate) yang terikat dengan identitas Anda.
  3. Artefak Ditandatangani: Cosign menggunakan sertifikat dari Fulcio ini untuk menandatangani artefak secara kriptografis. Tanda tangan ini menyatakan bahwa artefak tersebut dibuat oleh identitas yang diverifikasi oleh Fulcio.
  4. Tanda Tangan Dicatat di Rekor: Tanda tangan dan sertifikat yang digunakan kemudian dicatat dalam Rekor Transparency Log. Ini memastikan bahwa ada bukti publik yang tidak bisa disangkal (non-repudiable) tentang penandatanganan artefak tersebut.
  5. Verifikasi: Ketika orang lain (atau sistem deployment Anda) ingin menggunakan artefak tersebut, mereka juga menggunakan Cosign. Cosign akan memeriksa tanda tangan pada artefak, memverifikasi sertifikatnya melalui Fulcio, dan mengonfirmasi bahwa catatan penandatanganan ada di Rekor. Jika semua cocok, artefak itu asli dan belum dirusak.

📌 Poin Penting: Dengan Sigstore, Anda tidak perlu lagi mengelola kunci pribadi jangka panjang. Identitas Anda (misalnya dari GitHub Actions atau akun Google Anda) menjadi kunci Anda, dan sertifikat yang berumur pendek yang dihasilkan Fulcio menjaga keamanan.

5. Praktik: Menandatangani dan Memverifikasi Image Docker dengan Cosign

Mari kita coba langsung dengan Cosign. Anggap Anda memiliki sebuah image Docker yang ingin Anda tandatangani dan verifikasi.

a. Instalasi Cosign

Anda bisa menginstal Cosign dengan mudah. Untuk macOS/Linux:

brew install cosign
# Atau dari rilis GitHub
# Wget https://github.com/sigstore/cosign/releases/download/v2.2.0/cosign-linux-amd64
# Mv cosign-linux-amd64 /usr/local/bin/cosign
# Chmod +x /usr/local/bin/cosign

Untuk Windows (menggunakan Chocolatey):

choco install cosign

b. Menandatangani Image Docker

Pertama, pastikan Anda sudah login ke registry Docker Anda (docker login). Kemudian, push image ke registry (jika belum). Contoh:

docker tag my-app:latest your-registry.io/your-namespace/my-app:latest
docker push your-registry.io/your-namespace/my-app:latest

Sekarang, mari tandatangani image tersebut menggunakan Cosign. Cosign akan memandu Anda untuk autentikasi ke Fulcio.

cosign sign your-registry.io/your-namespace/my-app:latest

Anda akan diminta untuk memilih identitas OIDC (misalnya Google atau GitHub). Ikuti instruksi di browser Anda. Setelah autentikasi berhasil, Cosign akan menandatangani image dan mencatatnya di Rekor. Anda akan melihat output yang mengonfirmasi penandatanganan.

# Contoh Output
# Successfully verified SCT.
# Transparency log entry created.
# Pushed signature to: your-registry.io/your-namespace/my-app:latest.sig

Perhatikan bahwa Cosign secara otomatis menyimpan tanda tangan sebagai sebuah image terpisah di registry Anda, dengan tag .sig.

c. Memverifikasi Image Docker

Sekarang, siapa pun yang ingin menggunakan image ini bisa memverifikasinya.

cosign verify your-registry.io/your-namespace/my-app:latest

Jika verifikasi berhasil, Cosign akan menampilkan informasi tentang tanda tangan, termasuk identitas penandatangan (dari sertifikat Fulcio) dan entri di Rekor.

# Contoh Output Verifikasi Berhasil
# Verification for your-registry.io/your-namespace/my-app:latest --
# The following checks were performed:
#   - The container image was checked for signatures.
#   - The signatures were verified against the specified public key.
#   - The code signing certificate was verified using Fulcio.
#   - The transparency log entry was checked for inclusion in the Rekor transparency log.

# [V] Verified signature by identity: "your-email@example.com"
# [V] Verified via Rekor public log

Jika image dimodifikasi setelah ditandatangani, atau jika tanda tangannya tidak valid, verifikasi akan gagal.

Contoh Verifikasi Gagal (jika image diubah):

# Error: no matching signatures:
# Error: unable to verify image:
#   error verifying signature:
#   error verifying manifest:
#     error verifying layer digest: digest mismatch for layer ...

d. Integrasi dengan CI/CD (misalnya GitHub Actions)

Untuk lingkungan produksi, Anda akan mengintegrasikan Cosign ke dalam pipeline CI/CD Anda. GitHub Actions memiliki dukungan OIDC yang sangat baik untuk Fulcio.

# .github/workflows/ci.yaml
name: Build and Sign Docker Image

on:
  push:
    branches:
      - main

permissions:
  contents: read
  id-token: write # Penting untuk OIDC dengan Sigstore

jobs:
  build-and-sign:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}

      - name: Build and push Docker image
        id: push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: your-registry.io/your-namespace/my-app:${{ github.sha }}

      - name: Install Cosign
        uses: sigstore/cosign-installer@v3.5.0
        with:
          cosign-release: 'v2.2.0'

      - name: Sign the published Docker image with Cosign
        env:
          COSIGN_EXPERIMENTAL: "true" # Diperlukan untuk beberapa fitur Sigstore
        run: |
          cosign sign --yes your-registry.io/your-namespace/my-app:${{ github.sha }}

Dengan konfigurasi ini, setiap image Docker yang dibangun dan di-push dari pipeline CI/CD Anda akan secara otomatis ditandatangani dengan identitas GitHub Actions Anda dan dicatat di Rekor.

Tips Praktis untuk Deployment: Di lingkungan Kubernetes, Anda bisa menggunakan Admission Controller (misalnya Kyverno atau Gatekeeper) untuk memastikan bahwa hanya image yang sudah ditandatangani dan diverifikasi oleh Sigstore yang boleh di-deploy ke klaster Anda. Ini adalah pertahanan terakhir yang sangat kuat untuk mencegah artefak yang tidak terpercaya masuk ke produksi.

6. Manfaat dan Best Practices

Sigstore membawa manfaat signifikan untuk keamanan software supply chain Anda:

⚠️ Best Practices:

Kesimpulan

Keamanan rantai pasok software bukan lagi pilihan, melainkan keharusan. Dengan Sigstore, kita memiliki alat yang ampuh untuk membangun kepercayaan, meningkatkan transparansi, dan melindungi aplikasi kita dari ancaman yang terus berkembang. Melalui pendekatan yang menyederhanakan manajemen kunci dan memanfaatkan log publik, Sigstore memberdayakan developer untuk mengambil kendali penuh atas integritas software mereka.

Mulai sekarang, jangan hanya docker pull dan deploy. Tambahkan lapisan kepercayaan dengan Sigstore, dan pastikan setiap byte yang masuk ke sistem Anda sudah diverifikasi. Software Anda, dan pengguna Anda, akan lebih aman.

🔗 Baca Juga