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ı
| Ekosistem | Manifest |
|---|---|
| npm | package.json, package-lock.json, yarn.lock |
| Python | requirements.txt, Pipfile.lock, pyproject.toml |
| Java | pom.xml, build.gradle |
| Ruby | Gemfile, Gemfile.lock |
| Rust | Cargo.toml, Cargo.lock |
| Go | go.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.