Tool permissions ve least-privilege üçlüsü
Tool permissions and the least-privilege triad
Bu derste neler öğreneceksin
- Tool izin atamasında üç katmanın (token, scope, allow list) birlikte çalıştığını görmek
- GITHUB_TOKEN permissions bloğunu ve scope'larını ezbere bilmek
- Fine-grained PAT vs classic PAT farkını ve sınavın tercihini kavramak
- Yaygın least-privilege hatalarını ayırt etmek (default-allow, çok geniş scope)
Sınavın least-privilege sorularının cevabı genelde üç katmanın birlikte kullanıldığı seçenektir. Bu dersin amacı bu üçlüyü pratikte ezberletmek.
Least-privilege üçlüsü (ezbere)
| Katman | GitHub mekanizması | Domain |
|---|---|---|
| 1. Token scope | Fine-grained PAT veya workflow permissions: | 2.1 + 6.2 |
| 2. Repo/branch scope | Branch protection + agent ayarı + token repo seçimi | 2.3 |
| 3. Tool scope | MCP allow list | 2.2 |
Tek başına biri yetmez:
- Token scope geniş + repo scope dar → token başka repo’larda kullanılabilir
- Repo scope dar + tool scope geniş → repo içi kötüye kullanım
- Tool scope dar + token scope geniş → token MCP dışında kullanılabilir
Üçü birden = defense in depth.
GITHUB_TOKEN — Actions native
Her Actions workflow run için otomatik üretilen token. Default izinler repo ayarına bağlı; workflow’da override edilir.
permissions: bloğu (workflow seviyesi)
permissions:
contents: read # repo dosyalarını oku
pull-requests: write # PR yaz, yorum yaz, label ekle
issues: write # issue yaz/yorum
# listelenmeyen scope'lar: default ya repo ayarına ya `none`
permissions: bloğu (job seviyesi — daha sıkı)
jobs:
validate:
permissions:
contents: read # sadece bu job için
runs-on: ubuntu-latest
steps: [...]
comment:
permissions:
pull-requests: write # sadece bu job için
runs-on: ubuntu-latest
steps: [...]
Job-seviyesi izin daha sıkı ve önerilen pattern. Lateral movement’i azaltır.
Tam scope listesi (ezberlenmesi yararlı)
| Scope | Ne yapar |
|---|---|
actions | Workflow run’ları okuma/iptal |
attestations | Attestation yazma |
checks | Check run yazma |
contents | Repo dosyaları okuma/yazma |
deployments | Deployment yaratma |
discussions | Discussion yazma |
id-token | OIDC token (cloud auth için) |
issues | Issue yazma |
models | GitHub Models erişim |
packages | GitHub Packages okuma/yazma |
pages | GitHub Pages publish |
pull-requests | PR yazma |
repository-projects | Project yazma |
security-events | Code scanning alert yazma |
statuses | Commit status yazma |
Sınavda “şu aksiyon için hangi scope?” sorusu çıkabilir — ezbere bilmek zamandan kazandırır.
Boş permissions: {} — en sıkı
permissions: {}
Tüm scope’lar none. Workflow GitHub’a hiçbir aksiyon yapamaz. Sadece
external API çağırır (örn. başka servis). En sıkı least-privilege.
Fine-grained PAT — kullanıcı/bot kimliği
Geliştirici veya bot hesabı için manuel oluşturulan token. Classic PAT’in modern halefi.
| Classic PAT | Fine-grained PAT | |
|---|---|---|
| Scope | Geniş scope grupları (repo, admin) | Tek tek izin (24+ scope) |
| Repo seçimi | Tüm repo’lar (veya yok) | Spesifik repo’lar |
| Expire | Opsiyonel | Zorunlu (max 1 yıl) |
| Organization onayı | Yok | Organization-level approval |
| Sınavın tercihi | ❌ Anti-pattern | ✅ Önerilen |
Sınav “agent için kimlik token’ı” sorusunda fine-grained PAT veya GITHUB_TOKEN doğru cevap; classic PAT genelde yanlış.
Tool permissions — MCP allow list (Domain 2.2)
Daha önce işledik — özet:
- Agent başına allow list
- Deny-by-default
- Server + tool name spesifik
allow_list:
- "github-remote:list_pull_requests" # ✅ izinli
- "github-remote:create_pull_request" # ✅ izinli
# github-remote:delete_repository → izinsiz (default-deny)
Yaygın least-privilege hataları
| Hata | Düzeltme |
|---|---|
Workflow’da permissions: yazmamak (repo default geniş) | permissions: ile spesifik scope |
| Classic PAT’le geniş repo erişimi | Fine-grained PAT + spesifik repo |
| Allow list yazmamak (MCP’de) | Allow list’le deny-by-default |
| Job-level değil sadece workflow-level izin | Job-level daha sıkı |
| Token’ı secret’e koyup hiç rotate etmemek | Periyodik rotation + expire date |
| Admin role agent’a | Sadece görev için gereken role |
Mini quiz — Tool permissions (3 soru)
Sırada ne var?
Bir sonraki derste Actions trigger’ları ve scope — agent’ı doğru event’te, doğru branch’te, doğru runner’da çalıştırmayı detaylandıracağız.