Modern yazılım geliştirme yaşam döngüsü giderek daha karmaşık hale geliyor; geniş bir üçüncü taraf bağımlılık, konteyner görüntüsü ve otomatik iş akışı ağına dayanıyor. Log4j zafiyeti ve son zamanlarda ele geçirilen derleme araçları gibi gelişmiş tedarik zinciri saldırılarının artmasıyla, ürünlerin bütünlüğünü sağlamak artık isteğe bağlı değil, kritik öneme sahip. GitHub Actions, "Güvenilir CI/CD" boruhattı oluşturmanıza yardımcı olacak güçlü temel yapı taşları sağlar. Bu kılavuzda, köken ve bütünlüğü doğrulamak için GitHub Actions iş akışlarınızda Yazılım Malzemeleri Listesi (SBOM) oluşturma ve ürün imzalama uygulamalarının nasıl gerçekleştirileceğini keşfedeceğiz.
DevOps'ta SBOM'ların Önemi
Bir Yazılım Malzemeleri Listesi (SBOM), temelde yazılımınızda yer alan tüm bileşenlerin, kütüphanelerin ve bağımlılıkların bir envanteridir. Bunu uygulamanız için bir besin etiketi olarak düşünebilirsiniz. Yaygın bir kütüphanede yeni bir zafiyet ortaya çıktığında, SBOM size etkilenip etkilenmediğinizi ve hangi spesifik sürümlerin kullanıldığını anında belirlemenizi sağlar. Bu görünürlük olmadan, zafiyetlerin giderilmesi tahmin oyununa dönüşebilir ve altyapınızı savunmasız bırakabilir.
SBOM oluşturma işlemini derleme sürecinizin bir parçası olarak otomatik hale getirmek, bağımlılıklarınızın her zaman güncel ve doğru bir kaydına sahip olmanızı sağlar. Bu sadece güvenlik ekipleri için değil; NIST SSDF (Güvenli Yazılım Geliştirme Çerçevesi) gibi uyumluluk çerçevelerini ve yazılım şeffaflığı gerektiren yönetici direktifleri için de esastır.
GitHub Actions ile SBOM Oluşturma
GitHub, SBOM oluşturmak için yerel bir araç sunar: anchore/sbom-action. Bu eylem, güçlü bir zafiyet tarayıcısı olan Grype'i kullanarak CycloneDX veya SPDX formatında bir SBOM oluşturur. Bunu iş akışınıza entegre etmek basittir. Sadece kaynak kodunuzu içeren dizinin yolunu belirtmeniz ve istediğiniz çıktı formatını seçmeniz yeterlidir.
Aşağıda, SBOM oluşturma işleminin standart bir derleme iş akışına nasıl entegre edileceğine dair pratik bir örnek bulunmaktadır:
name: Build and Generate SBOM
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Application
run: echo "Building application..."
- name: Generate SBOM
uses: anchore/sbom-action@v0
with:
path: ./my-app-directory
format: cyclonedx-json
artifact-name: my-app-sbom.cdx.json
output-file: sbom-output.json
Bu kod parçacığında, artifact-name parametresi SBOM'un bir derleme ürünü olarak yüklenmesini sağlar; bu da onu GitHub Actions arayüzünden indirmenize veya sonraki adımlarda referans vermenize olanak tanır.
Bütünlük Doğrulaması İçin Ürün İmzalama
SBOM, ürünün içinde ne olduğunu söylerken, onu imzalamak derleme tamamlandıktan sonra müdahale edilmediğini gösterir. Ürünlerinizi imzalayarak bütünlük için kriptografik bir garanti oluşturursunuz. Saldırgan, derleme boruhattınızı engeller ve bir ikili dosyayı kötü amaçlı biriyle değiştirirse, imza doğrulaması başarısız olur ve dağıtım sisteminizi tehlikeye girmiş kodu reddetmeye uyarır.
Konteyner görüntüleri ve genel dosyalar için sigstore, imzalama konusunda endüstri standardı haline gelmektedir. Sigstore, yazılım tedarik zincirlerini imzalamak için şeffaf, kamusal ve açık bir altyapı sağlar. GitHub Actions, Sigstore kullanarak ürünleri imzalama konusunda yerel destek sunar; bu da karmaşık anahtar depolama altyapısını yönetme ihtiyacını ortadan kaldırır.
Önceki bir adımda oluşturulan bir ürünü imzalamanın yolu şöyledir:
- name: Sign Artifact
uses: sigstore/gh-action-sigstore-python@v2.1.1
with:
inputs: |
./my-app-binary
Bu adım, imza ve sertifika şeffaflığı (CT) günlük girdileri üretir; bu da belirli bir commit hash değerini ikili çıktıya bağlayan değiştirilemez bir kayıt oluşturur. Bu durum, SLSA (Yazılım Ürünleri İçin Tedarik Zinciri Seviyeleri) çerçevesinin daha yüksek seviyelerine ulaşmak için temel bir gereksinimdir.
Sonuç
GitHub Actions'da SBOM oluşturma ve ürün imzalama uygulamak, CI/CD boruhattınızı basit bir otomasyon aracından sağlam bir güvenlik sınırına dönüştürür. Bu uygulamalar, mevcut iş akışlarınızın tamamen yeniden yapılandırılmasını gerektirmez; bunun yerine, güvenlik durumunuzu zaman içinde iyileştirmek için kademeli olarak benimsenebilirler. Şeffaflığı ve bütünlüğü geliştirme sürecinizde birinci sınıf vatandaşlar haline getirerek, yalnızca kendi altyapınızı değil, yazılımınıza güvenen daha geniş ekosistemin bütünlüğünü de korursunuz. Yükselen tehditlere bir adım önde kalmak için bu kontrolleri bugün entegre etmeye başlayın.