Yazılara geri dön
Yazı

Trivy ile GitLab CI'de SBOM Oluşturun ve Lisans Uyumluluğunu Kontrol Edin

CI'de SBOM'lar oluşturarak ve GitLab pipeline'larında Trivy ile bağımlılıkları tarayarak açık kaynak lisans risklerini erken tespit edin.

DevopsGitLab CITrivySBOMlicense compliance

Trivy'yi GitLab CI'de bir süre kullanıyorum; önceki bir yazımda da belirttiğim gibi, konteynır görüntülerini CVE'ler açısından taramak için kullanıyorum. Ancak son zamanlarda sadece güvenlik açığı verisine ihtiyacım kalmadı — bağımlılıkların hangi lisansları taşıdığını ve bu lisansların iç politikalımıza uyup uymadığını da öğrenmek istiyorum. İşte tam da bu noktada SBOM üretimi ve lisans uyumluluk kontrolleri devreye giriyor; Trivy, aynı CI işi içinde bu iki işlevi de düzenli bir şekilde gerçekleştiriyor.

SBOM ve Lisans Kontrollerinin CI'de Olması Gerektiği Neden

Üretim ortamında bir mülkiyetli üründe GPL lisanslı bir kütüphanenin varlığını keşfetmek geç kalmıştır. Hukuk ekipleri devreye girer, düzeltme maliyetleri artırılır ve yayınlar gecikilir. SBOM (Yazılım Malzeme Listesi) oluşturup lisans uyumluluğunu derleme aşamasında kontrol ettiğinizde, bu sorunları erken tespit edersiniz — yani onlar ucuz düzeltilebilirken.

Trivy, SBOM'ları SPDX veya CycloneDX formatında oluşturabilir ve lisansları izin verilen/yasaklı listelerine göre değerlendirebilir. Bu işlemi test aşamasının bir parçası olarak çalıştırırım: birim testlerinden hemen sonra, ancak final imajı oluşturulmadan önce. Yasaklı bir lisans tespit edilirse, pipeline başarısız olur ve birleştirme isteği engellenir.

Trivy'yi SBOM ve Lisans Tarama İçin Ayarlama

İlk olarak, Trivy'nin GitLab Runner'ınızda kurulu olduğundan emin olun. Hafif ve sık sık güncellenen resmi Aquasecurity imajını kullanıyorum.

.gitlab-ci.yml dosyamdan bir parçası şu şekildedir:

sbom_and_license_check:
  stage: test
  image: aquasec/trivy:latest
  script:
    - trivy fs --format spdx-json --output sbom.spdx.json .
    - trivy fs --exit-code 1 --ignore-unfixed --severity HIGH,CRITICAL .
    - trivy fs --format table --output license-report.txt --scanners license .
  artifacts:
    reports:
      sbom: sbom.spdx.json
    paths:
      - license-report.txt
    expire_in: 1 week
  rules:
    - if: $CI_MERGE_REQUEST_ID

İlk komut, tüm dosya sisteminin SPDX formatında bir SBOM'u oluşturur (isteğe bağlı olarak src/ veya package.json gibi belirli dizinlerle sınırlayabilirsiniz). İkinci komut standart bir güvenlik açığı taraması yapar — bu, daha önceki konteyner tarama işimle tutarlılığı korumak için tutuyorum. Üçüncü komut ise anahtar işlevi görür: lisansları tarar ve insan tarafından okunabilir bir tablo formatında çıktı verir.

Lisans Raporu Yorumlama

trivy fs --scanners license komutu, her bağımlılığın beyan edilen lisansını kontrol eder ve bunu Trivy’nin dahili izin listesine karşılaştırır. Varsayılan olarak, GPL-3.0, AGPL-3.0 ve SSLP gibi lisanslar inceleme gerektiren olarak işaretlenir.

Bu davranışı bir yapılandırma dosyasıyla özelleştirebilirsiniz. Ben, belirli fontları ve dokümantasyonu muaf tutmak için .trivyignore dosyasını oluşturdum ve kısıtlı bir reddetme listesi ayarlamak için .trivy.yaml dosyasını kullandım:

# .trivy.yaml
license:
  denyList:
    - GPL-3.0
    - AGPL-3.0
    - SSLP-1.0
  ignoreFile: .trivyignore

Herhangi bir reddedilen lisans bulunduğunda, Trivy sıfır dışı bir çıkış kodu döndürür ve işi başarısız olarak işaretler. license-report.txt artefaktu, hangi paketin başarısızlığı tetiklediğini gösterir; bu da geliştiricilerin sorunu kolayca düzeltmesini sağlar.

SBOM'u Tedarik Zincirine Entegre Etme

Uyumluluk dışında, SBOM kendi başına değerlidir. SPDX JSON'ını bir pipeline artefaktı olarak yayınlarım ve iç güvenlik portalımıza entegre ederim, burada CVE beslemeleri ve lisans veritabanlarıyla ilişkilendirilir. Bu, her bir yapıda nelerin bulunduğunun tam bir resmini elde etmemizi sağlar.

Önceki gönderimimde konteyner taraması hakkında bahsettiğim gibi, SBOM hazır olduğunda, Log4j gibi güvenlik açıklarına karşı tepki verme süreci çok daha hızlı olur — anında etkilenip etkilenmediğinizi ve nerede olduğunu görebilirsiniz.

İpuçları ve Dikkat Edilmesi Gerekenler

  • Doğru kapsamı tara: Tüm depoyu taramak, final artefakta yer almayan CI betikleri veya Dockerfiles gibi dosyalardan lisanslar algılayabilir. Gerekirse yolları ayarla.
  • Geçici bağımlılıklara dikkat et: Derleme zamanı araçları (Node.js'teki devDependencies gibi) görünür olabilir — kullanım durumunuz için önemli olup olmadığını belirle.
  • SBOM formatı önemli: SPDX uyumluluk için yaygın olarak kabul edilir; CycloneDX bazı araç zincirlerinde tercih edilir. Trivy, --format seçeneği ile her ikisini de destekler.

Sonuç

GitLab CI’ye Trivy ile SBOM oluşturma ve lisans kontrolü eklemek, sadece bir uyumluluk kutusunu işaretlemekle kalmaz — aynı zamanda hukuki riskleri sola kaydırmaktır. Birkaç satır YAML ile, yazılımınızın içeriğini görünür kılarsınız ve bu yazılımın teslim edilip edilmeyeceğine dair karar verirsiniz. Ben, bunun güvenlik açığı taramasıyla iyi bir uyum sağladığını gördüm ve şimdi ikisini de ardışık işlem hattımın temel bileşenleri olarak görüyorum.

Zaten Trivy’yi CVE taramaları için kullanıyorsanız, SBOM ve lisans kontrolüne genişletmek düşük çaba, yüksek getiri sağlayan bir adımdır. Varsayılan kurallarla başlayın, bunları politikanıza göre ayarlayın ve raporların hem geliştirme hem de hukuk ekipleri tarafından görülebilmesini sağlayın.


Kapak görseli: GNOME Project · PDM (Wikimedia Commons / kamu malı) · https://commons.wikimedia.org/wiki/File:GNOME_System_Monitor_Debian_Lenny.png