Modül 3 · Domain 2 — Tool & MCP (%20-25, EN AĞIR) · ⏱ 14 dakika

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)

KatmanGitHub mekanizmasıDomain
1. Token scopeFine-grained PAT veya workflow permissions:2.1 + 6.2
2. Repo/branch scopeBranch protection + agent ayarı + token repo seçimi2.3
3. Tool scopeMCP allow list2.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ı)

ScopeNe yapar
actionsWorkflow run’ları okuma/iptal
attestationsAttestation yazma
checksCheck run yazma
contentsRepo dosyaları okuma/yazma
deploymentsDeployment yaratma
discussionsDiscussion yazma
id-tokenOIDC token (cloud auth için)
issuesIssue yazma
modelsGitHub Models erişim
packagesGitHub Packages okuma/yazma
pagesGitHub Pages publish
pull-requestsPR yazma
repository-projectsProject yazma
security-eventsCode scanning alert yazma
statusesCommit 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 PATFine-grained PAT
ScopeGeniş scope grupları (repo, admin)Tek tek izin (24+ scope)
Repo seçimiTüm repo’lar (veya yok)Spesifik repo’lar
ExpireOpsiyonelZorunlu (max 1 yıl)
Organization onayıYokOrganization-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ı

HataDüzeltme
Workflow’da permissions: yazmamak (repo default geniş)permissions: ile spesifik scope
Classic PAT’le geniş repo erişimiFine-grained PAT + spesifik repo
Allow list yazmamak (MCP’de)Allow list’le deny-by-default
Job-level değil sadece workflow-level izinJob-level daha sıkı
Token’ı secret’e koyup hiç rotate etmemekPeriyodik rotation + expire date
Admin role agent’aSadece görev için gereken role

Mini quiz — Tool permissions (3 soru)

Workflow'da `permissions: contents: write` yazarsan ne olur?

Sınavın fine-grained PAT vs classic PAT tercihi nedir?

Least-privilege üçlüsü hangisidir?

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.