Modül 3 · Supply Chain Security · ⏱ 10 dakika

Dependency graph ve SBOM export

Dependency graph and SBOM export

Bu derste neler öğreneceksin

  • Dependency graph'ın nasıl oluşturulduğunu ve neleri kapsadığını anlamak
  • SBOM'un ne olduğunu ve neden önemli olduğunu kavramak
  • GitHub'dan SBOM export etmeyi öğrenmek
  • Supply chain görünürlüğünü kurum genelinde nasıl sağlayacağını bilmek

Dependency graph nedir?

Dependency graph, bir reponun bağımlılıklarını ve bu bağımlılıkların bağımlılıklarını (transitif / indirect bağımlılıklar) görselleştiren bir haritadır.

Repo (myapp)
├── express@4.18.2
│   ├── body-parser@1.20.2
│   └── qs@6.11.0
├── lodash@4.17.21
└── axios@1.6.0
    └── follow-redirects@1.15.4  ← transitif bağımlılık

GitHub, manifest dosyalarını (package.json, requirements.txt, pom.xml vb.) analiz ederek bu grafiği otomatik oluşturur.

Dependency graph nasıl etkinleştirilir?

Repo → Settings → Security → Dependency graph → Enable

Public repolar için varsayılan açıktır. Private repolar için açıkça etkinleştirilmesi gerekir.

Desteklenen manifest dosyaları

EkosistemManifest
npmpackage.json, package-lock.json, yarn.lock
Pythonrequirements.txt, Pipfile.lock, pyproject.toml
Javapom.xml, build.gradle
RubyGemfile, Gemfile.lock
RustCargo.toml, Cargo.lock
Gogo.mod, go.sum
.NET*.csproj, packages.config

SBOM — Software Bill of Materials

SBOM, bir yazılım ürününün tüm bileşenlerini listeleyen resmi bir belgedir. Log4Shell gibi olaylardan sonra regülasyon gereksinimleri (ABD Başkanlık Kararnamesi, EU Cyber Resilience Act) SBOM’u zorunlu kılmaya başladı.

GitHub, dependency graph’tan SBOM’u standart formatlarda export eder:

  • SPDX (Software Package Data Exchange)
  • CycloneDX

SBOM nasıl export edilir?

UI üzerinden:

Repo → Insights → Dependency graph → Export SBOM

API üzerinden:

gh api /repos/{owner}/{repo}/dependency-graph/sbom \
  --header "Accept: application/vnd.github+json" \
  > sbom.json

GitHub Actions’ta otomatik:

- name: Export SBOM
  uses: anchore/sbom-action@v0
  with:
    format: spdx-json
    output-file: sbom.spdx.json

Dependency submission API

CI/CD pipeline’larında üretilen bağımlılıkları (örn. Docker image içindeki) dependency graph’a eklemek için Dependency Submission API kullanılır:

# Build sonrası bağımlılıkları GitHub'a bildir
POST /repos/{owner}/{repo}/dependency-graph/snapshots

Bu, runtime’da keşfedilen bağımlılıkların (lock file’da olmayan) de takip edilmesini sağlar.

Sınavda SBOM soruları

  • “Yazılım tedarik zincirini düzenleyiciye raporlamak istiyoruz” → SBOM export
  • “Runtime bağımlılıkları dependency graph’ta görünmüyor” → Dependency Submission API
  • “Dependency graph özel repoda çalışmıyor” → Etkinleştirilmemiş veya GHAS yok

Sırada ne var?

Modül 4’te CodeQL ve code scanning — default setup, advanced setup ve custom queries konularına geçiyoruz.