Genel bakış#
EJO, build ettiğiniz image'ların içinde ne olduğunu ve nereye deploy edildiğini takip eder:
- Otomatik SBOM ve vulnerability scan: Her image build'inden sonra bir CycloneDX SBOM üretilir ve Trivy ile taranır; pipeline'da bu step'ler olmasa bile.
- İmzalama:
COSIGN_SIGNstep'i image'ları cosign ile imzalar. - Environment policy'si: İmzasız, SBOM'u olmayan ya da critical vulnerability içeren image'lar bir environment'a deploy edilemez.
- Paket arama: Bir paketin ya da CVE'nin hangi image'larda ve environment'larda olduğunu bulursunuz.
Otomatik scan#
Ayarlar > Supply chain sayfasındaki Otomatik SBOM ve vulnerability scan ayarı varsayılan olarak açıktır. Scan arka planda çalışır ve environment policy'si gerektirmedikçe deployment sonucunu değiştirmez. Ayarları yalnızca admin'ler değiştirebilir.
| Ayar | Açıklama |
|---|---|
| Mode | SBOM + vulnerability'ler ya da Sadece SBOM. |
| SBOM retention (gün) | 0 SBOM'ları sonsuza kadar tutar; aksi halde 7 ile 3650 gün. Süre dolunca SBOM belgesi silinir, özet sayılar kalır. |
| Repo başına tutulan image sayısı | Her repo'nun en yeni bu kadar image'ı SBOM'unu korur (1 ile 1000 arası). |
| Log retention (gün) | 0 log'ları sonsuza kadar tutar; aksi halde 7 ile 3650 gün. Süre dolunca biten deployment ve step'lerin log metni silinir, deployment'lar kalır. |
Bir environment ayarı organizasyon ayarını devralabilir (Organization'dan devral) ya da scan'i o environment için açıp kapatabilir. Bir repo .ejo dosyasında supply_chain: {auto_scan: false} ile dışarıda kalabilir.
Otomatik scan şu durumlarda atlanır:
- Fork'tan açılan PR'lar.
- Ayar organizasyon, environment veya repo düzeyinde kapalıysa.
- Pipeline'da image build eden bir step yoksa ya da image bir registry'ye push edilmiyorsa (
registry_idyok). - Pipeline zaten açık
SBOM_GENERATEveyaTRIVY_SCANstep'leri içeriyorsa. - Agent bu özelliği desteklemiyorsa (agent'ı güncelleyin).
Not: Environment SBOM istiyor ya da critical vulnerability'leri engelliyorsa ve build'den sonra bir deploy geliyorsa, otomatik scan deploy'dan önce çalışır ve sonucu deploy'u engelleyebilir.
Environment policy'si#
Environment sayfasındaki Supply-chain policy'si bölümünde:
| Ayar | Açıklama |
|---|---|
| İmzalı image iste | Image'ın COSIGN_PUBLIC_KEY ile doğrulanabilen bir cosign imzası olmalıdır. |
| SBOM iste | Image'ın kayıtlı bir SBOM'u olmalıdır. |
| Critical vulnerability'leri engelle | Critical vulnerability içeren image'lar reddedilir. |
Herhangi biri açıkken promote, rollback ve deploy step'leri policy'ye uymayan image'ları reddeder. Hata mesajı supply chain policy: <sebepler> biçimindedir.
Image imzalama#
Ön koşullar#
- Kubernetes tipinde bir environment.
COSIGN_SIGN,SBOM_GENERATEveTRIVY_SCANcluster'da Kubernetes Job olarak çalışır. TRIVY_SCANiçin environment sayfasında Trivy kur.
Kurulum#
- Ayarlar > Supply chain sayfasındaki Key üretimi bölümünde gösterilen komutla kendi bilgisayarınızda bir cosign key pair üretin.
- Altyapı > Değişkenler sayfasında şu üç variable'ı oluşturun:
| Variable | Tip | Değer |
|---|---|---|
COSIGN_PRIVATE_KEY |
Secret | cosign.key dosyasının içeriği |
COSIGN_PASSWORD |
Secret | Key'in parolası |
COSIGN_PUBLIC_KEY |
Düz | cosign.pub dosyasının içeriği |
- Pipeline'ınıza imzalama ve SBOM step'lerini ekleyin. İmzalama ve SBOM bir digest referansı ister; build step'inin
{{.ImageDigest}}output'unu kullanın.
Uyarı: Key dosyalarını asla git'e commit etmeyin.
Hazır pipeline#
Ayarlar > Supply chain sayfasındaki Pipeline pack'i bölümünde K8s supply chain pipeline'ı oluştur tek tıkla şu pipeline'ı oluşturur: clone → Kaniko build → COSIGN_SIGN → SBOM_GENERATE → TRIVY_SCAN → K8S_DEPLOY. Butona tekrar basmak aynı adlı pipeline'ı günceller. Oluşan pipeline'ı repo binding'inize atayın. Developer'lar da bu pipeline'ı oluşturabilir.
Örnek#
- name: Sign
kind: COSIGN_SIGN
config:
image_ref: "{{.ImageDigest}}"
- name: SBOM
kind: SBOM_GENERATE
config:
image_ref: "{{.ImageDigest}}"
- name: Scan
kind: TRIVY_SCAN
config:
image_ref: "{{.ImageDigest}}"
severity: HIGH,CRITICAL
COSIGN_SIGN imzayı varsayılan olarak public transparency log'a yüklemez (tlog_upload: false).
Paket ve CVE arama#
Altyapı > Image'lar > Paketler sayfası, kayıtlı her image'ın SBOM'unda arama yapar. Bir paket adı (ya da pkg: purl öneki) veya bir CVE id'si girin; <2.17.1 gibi bir version kısıtı ekleyebilirsiniz. Sonuç, paketi içeren image'ları ve bu image'ların çalıştığı environment'ları gösterir.
Step image'ları#
Environment'ın Step image policy'si ayarı aynı imza ve vulnerability kurallarını pack step'lerinin ve image'lı SHELL step'lerinin image'larına da uygular. Bkz. Step pack'ler.