Exploring Infinite Possibilities on FrontEnd 🚀
Burak Sağlık
Search...

Fri Oct 16 2026

GitHub Actions ile güvenli erişim nasıl yapılır?

GitHub Actions ile güvenli erişim nasıl yapılır?

🎯 Paylaşılan Bir Kurumda Güvenli Erişimi ve Depo Hijyenini Otomatikleştirmeye Başlarken

  • Hazırsan başlayalım; birkaç adımda güvenli erişimi nasıl hayata geçirebileceğimizi konuşacağız.

  • Neden otomasyon?

    • İnsan hatası azalır → güvenlik açık kalma riski düşer.
    • Repoyu devralan yeni kişiler bile aynı kurala uyar.
    • Depolama alanında "saklanmış" yanlış izinler önler.
  • 🛠 Kullanacağımız araçlar

    • GitHub Actions (CI/CD akışı oluşturmak için)
    • Trivy (Docker imajı/sabit paket derlemelerini taramak için)
    • pre-commit (yerel değişiklikleri önceden kontrol etmek için)
    • Git Hooks (local değişiklikleri filtrelemek için)
  • Şimdi, basit bir GitHub Actions pipeline'ı üzerinde pratik yapalım. Aşağıda .github/workflows/security-scan.yml dosyasını görüyoruz:

name: Depolama Güvenlik Taraması
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  schedule:
    - cron: '0 2 * * 1'  # Haftada bir, pazartesi günü gece 02:00

jobs:
  trivy-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Docker imajını oluştur
        run: |
          docker build -t myapp:${{ github.sha }} .

      - name: Trivy ile güvenlik açığını tara
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'myapp:${{ github.sha }}'
          format: 'sarif'
          output: 'trivy-results.sarif'

      - name: OpenJDK ile sonuçları yükler
        if: always()
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
  • Bu sayede ne oluyor?

    • Kod eklendiğinde, bir Docker imajı otomatik olarak oluşturulup Trivy ile taranır.
    • Herhangi bir sorun tespit edilirse, bir JSON raporu oluşturulur ve GitHub'ın açılabilir arayüzü aracılığıyla bildirilir.
    • Ekipler, güvenlik açıklarını manuel olarak kontrol etmek zorunda kalmaz; otomasyon geleneksel pratiği devralır.
  • 🔁 Depolama alanındaki ek adımlar

    • pre-commit kuralını kullanarak *.env gibi gizli bilgileri commit etmeyi engelle.
    • Git Hooks (pre-commit, post-checkout) ile node_modules/ gibi dökümanları depoda tutmayı engelle.
    • Depoya ilk kez erişenler için README dosyasında, tüm developmet iş akışını kapsayan kısa bir kontrol listesi içerirsek harika olur.
  • ✅ Basit adımla güvenlik onayını nasıl takip edebiliriz?

    1. Yukarıdaki security-scan.yml dosyasını repoya ekle.
    2. .pre-commit-config.yaml dosyası ile pre-commit ve trivy araçlarını kur.
    3. Git'ü kullanarak bir post-checkout kancasını kur, örneğin bir depolama alanı temizleme komutu ile.
    4. README.md dosyasını güncelleyerek yeni katılımcıya işlem akışını açıkla ve kısa bir hızlı başlangıç kılavuzu ekle.
  • 🎯 Sizin için temel sonuç

    • Teknolojiyi çok karmaşık hale getirmeye gerek yok. Basit bir pipeline, birkaç otomatik kontrol ve biraz dokümantasyon ile "herkesin bir ayağı üzerinde" tarama süreci başlatılmış olur.
    • Yeni ekip üyeleriyle ilgili endişeleri bir kenara bırakın; sistem, güvenli erişimi kendisi sağlayacak.
  • ❗️ Unutmayın

    • Otomasyon, sıfır bakım demek değildir. Güvenlik taramalarını her hafta gözden geçirmeyi alışkanlık haline getirin.
    • Herhangi bir yapılandırma değişikliği de aynı pipeline üzerinden test edilmeli; aksi halde farklı izinler ortaya çıkabilir.
  • 📦 Tamam, hemen başlayalım.

    • .github/workflows/security-scan.yml dosyasını oluşturun, komutları kopyalayın ve depoda bir commit oluşturun. İşte bu kadar.

Hadi hemen başlayalım, sen de bir kanalla güvenli bir repo kullanmaya başlayabilirsin! 🚀


❗️ Güvenlik Otomasyonu Nedir ve Neden Önemlidir?

Hadi başlayalım! 🛠️ Güvenlik ile hijyen süreçlerini manuel olarak yönetmek, kulağa basit gelebilir, ama aslında hızlı bir şekilde geri dönülemez hatalara yol açabilir. Konuya bir örnek üzerinden girelim ve otomasyonun neden bir kurtarıcı olduğunu görelim.

Manuel süreçler neden riskli?

  • İnsan hatası ➜ En deneyimli ekipler bile bir dizin adı karıştırılabilir.
  • Yavaş iş akışı ➜ Belgelemeye, görsel denetimlere ve güncellemelerine manuel olarak bağlılık, süreçleri geciktirir.
  • İvme kaybı ➜ Gereken her işlevsellük için bir kişinin elinde olan ve her kuruluşa özgü kopyalama işlemleri.
  • Denetim zorluğu ➜ Eğer bunu bir dosyada tutuyorsanız, düzenli denetim yapmak genellikle XLSX dosyaları derlemekten farksızdır.

Otomasyon odağına nasıl güvenliği ekliyor?

  • Tekrarlanabilir kontroller ➜ Otomatik tarayıcılar bir kez konfigüre edildiğinde, her değişiklikte daima kontrol eder.
  • Hızlı geri bildirim ➜ Webhook'lar ve CI/CD pipeline'ları, hataları kod yazma aşamasında öncelikle düzelterek değiştirme ve yürütme aşamalarını önler.
  • Entegrasyon ➜ Çeşitli araçları (SAST, DAST, secret scanner, izin denetleyicileri) düzenli bir script ile senkronize eder.
  • İzlenebilirlik ➜ Otomasyon, her kontrolün "ne", "nerede" ve "ne zaman" olduğu hakkında net bir log tutar, böylece her denetim raporu kendini hazırlar.

Konuya pratik bir örnek üzerinden girelim 🎯

Bir geliştirici bir dosya işleme aracı eklemek istediğini varsayalım. Yeni içerik için bir dizin eklemesi gerekirken yanlışlıkla kod deposuna bir yabancı dizin ekliyor.

1️⃣ Hata – gizlice eklenen bir dizin

# .env
APP_HOME=/opt/myapp
# YABANCI DİZİN (karışıklık yaratıyor!)
UNEXPECTED_DIR=/etc/cron.d/bad_script

❗️ Ne oluyor burada? Yazılım geliştiriciler yanlışlıkla hassas bir dizin için yazılmış .env dosyasına bir değer ekleyebilir. Kaydedildiğinde, sistem artık dış kaynaklara (örneğin /etc/cron.d/bad_script) erişmeye çalışır ve bu da yetkilendirme hatası ile yetkisiz komut yürütmelerine neden olur.

2️⃣ Otomasyon çözümlerini devreye sokuyor

#!/usr/bin/env bash
set -euo pipefail

# Hassas dizinleri /etc ve /var gibi dışe taşımak için tarama yap
if [[ "$APP_HOME" == /* && ! "$APP_HOME" =~ ^/opt ]]; then
  echo "⚠️  Dış dizine erişim riski tespit edildi: $APP_HOME"
  exit 1
fi

# .env dosyasındaki tüm değişkenleri tarama
if grep -Riq '^[A-Z_]+=[^ ]+$' .env 2>/dev/null; then
  :
fi

# Secret Scanner'ı çalıştırma
npm run secret-scan || true

echo "✅ Güvenlik kontrolü tamamlandı"

Nasıl çalışıyor? Script, otomatik bir tarama, config validation, ve secret scanner çalıştırarak dosya kaydedilmeden önce yanlışlıkla eklenmiş dizinleri erken bir aşamada yakalar. Geliştirici hemen geri bildirim alır ve bu da manuel denetimleri önler.

3️⃣ Sonuç – hikaye nasıl devam ediyor?

  • Geliştirici, script'in başarısız olduğunu görür ve bir dakika içinde tekrar denemeden önce kolayca kontrol edebilir.
  • CI pipeline'ı, script başarısız olduğunda otomatik olarak durabilir ve güvenlik ihlali prodüksiyona erişmeden önce yakalanır.
  • Her denetim anında, projenin tam bir izlenebilirlik logu saklanır; bu da gelecekteki denetimler için adeta takvim makinesi görevi görür.

✅ Özet

  • Manuel güvenlik insan hatası, yavaş iş akışı ve kaba denetimlere maruzdur.
  • Otomasyon, korumayı her değişiklikte uygulamak için hızlı, tekrarlanabilir denetimler, entegre araçlar ve izlenebilir log kaydı sağlar.
  • Örnek senaryomuzda, script, güvenlik politikasını çiğneyen ve büyük bir izne neden olabilecek bir yabancı dizini hemen tespit ederek güvenliği savunmadan saldırma moduna geçirir.

Bu yüzden, güvenlik otomasyonunu ayağınıza getiren birkaç script çiftinden daha iyi bir yatırım yapamazsınız; bu, aynı zamanda organizasyonunuzu istenen maliyetlerden ve stres anlarından koruyan sürekli çalışan bir güvenlik ekibidir. 🚀


🛠 GitHub Apps ile Güvenli Erişimi Kurma

Hazırsan başlayalım! 🎯 Bir kurumsal hesap için GitHub App oluşturup izinlerini nasıl ayarlayacağımıza göz atalım. Bunu, GitHub Actions'ta kullanılabilecek güvenli bir token ile yapacağız.

İzinleri ayarlamadan önce

  • Ne yapıyoruz? Kurumsal bir depoya erişim için standartlaşmış, geri çağırılabilir ve tek seferlik izinler oluşturuyoruz.
  • Neden bunu tercih ediyoruz? Her Personal Access Token (PAT) tek bir kullanıcıya bağlı, ancak GitHub App her kurulum için ayrı ayrı yönetilen izinler sunar. Bu, daha az risk demek → daha güvenli! 🛡️

Basit bir plan

  1. GitHub App'i oluşturun (manifest ile)
  2. İstenen izinleri tanımlayın (repo:read, org:write, vs.)
  3. İzinleri doğrulayın (manifest incelemesi)
  4. GitHub App'i bir depoya kurun
  5. GitHub Actions'te izinlendirin (ornek workflow ile)

1️⃣ Örnek GitHub App manifesti

name: Kurumsal Erişim Uygulaması
description: Depolara güvenli erişim sağlayan bir yardımcı uygulama.
url: https://github.com/your-org/corporate-access-app
environments:
  - node_id: "ORGID"   # Kurumsal node ID'niz
repo_sizes:
  - access: limited
    repositories:
      - repo-owner/repo-name
      - repo-owner/another-repo
permissions:
  contents: read
  issues: write
  pull_requests: write
  metadata: read
events:
  - push
  - issues
  - pull_request

Nasıl çalışıyor? name, description ve url temel bilgiler. environments → kurulu bir kurumsal kimlik. repo_sizes.access: limited ve repositories bir listesi, izin verdiğimiz spesifik depoları tanımlar. permissions blokunda contents: read vs. gibi key: value çiftleri ile hangi izinlerin verileceği belirlenir. events → uygulamanın uyarılmak istediği GitHub aktiviteleri.

2️⃣ Workflow'ta izin kullanma

Aşağıda, depolardan birine erişen ve bu erişimi github-app-token aracılığıyla sağlamaya çalışan basit bir workflow.yml örneği bulunmaktadır.

name: App Token ile CI
on:
  push:
    branches: [main]

jobs:
  get-token:
    runs-on: ubuntu-latest
    steps:
      - name: Depoya kurulum yap
        uses: actions/github-script@v7
        with:
          script: |
            const { data: installation } = await github.apps.createInstallationToken({
              installation_id: 12345   # GitHub App kurulumunuzun ID'si
            });
            console.log('Alınan token:', installation.token);
            // Örnek bir API çağrısı
            const { data: files } = await github.repos.listContents({
              owner: 'repo-owner',
              repo: 'repo-name',
              path: ''
            });
            console.log('Dosya sayısı:', files.length);

Nasıl çalışıyor?

  1. createInstallationToken isteği ile GitHub App kurulumu için geçerli bir token alıyoruz.
  2. Bu token ile depoya erişebilir ve listContents gibi API'leri çağırabiliriz.
  3. Workflow bu sayede kendi başına davranır → ayrı bir kullanıcı hesabına gerek kalmaz.

✅ Pratik ipuçları

  • Özel kurulumlar → her proje için fazlasıyla zorlayıcı olabileceğinden, environments: node_id ile kurumsal kurulumlar kullanın.
  • İzinleri en aza indir → izin vermediğiniz her bir izin devre dışı bırakılabilir (örneğin issues: write yerine issues: read).
  • Kurtarılabilirlik → contents: read token almayı unutmayın, böylece geçmişe dönük roller hakkında bilgi sahibi olabilirsiniz.
  • İzleme → her bir GitHub App kurulumu için başarılı token alımlarını kaydedin; güvenlik tarafında olmazsa olmaz bir adımdır.

Bu kadar! 🎉 Bu üç adımlı süreçle, uygulamaya kendi başına güvenli bir erişim sağlanmasını ve bu erişimle gerçekleştireceğiniz her adımda daha az zararla başa çıkabilirsiniz. Güvenli kodlamalar!


🔁 Otomatik Repo Temizliği ile Depo Hijyenini Sağlama

Sohbete başlayalım, hadi bakalım! 🎯 Birkaç hafta sonra silinmeye başlayan ve depoyu yavaşlatan onlarca feature branch'i gördün mü? Ben de gördüm ve bu sıkıntıyı GitHub Actions ile otomatikleştirdim. Bırak, nasıl yapabileceğimizi konuşalım.

Bu bölümde neler konuşacağız

  • Silinecek branch'ler için basit kurallar oluşturmak
  • Korunan branch'leri (main, develop vb.) atlamak
  • Fazla dosyaları (artifact, package files vb.) yedeklemek
  • Tüm işleyişi GitHub Actions workflow'unda tanımlamak

Örnek kurallar

  • 6 aydan eski branch'leri sil
  • feature/, bugfix/, hotfix/* prefix'ine sahip branch'leri koruma altına al (geliştirme için bırakılacak branch'ler)
  • Her temizlikten sonra GitHub Pages için bir yedek depolama oluştur
  • İşlemi her hafta Cumartesi sabahı (UTC) otomatik olarak çalıştır

Temizleme betiği (bash)

#!/usr/bin/env bash
# 📁 Depo temizleme betiği
# Kullanım: .github/workflows/cleanup.yml tetiklediğinde çalıştırılır

set -euo pipefail

# 🛡️ Korunacak branch'ler (main, develop, releases/* gibi)
PROTECTED_BRANCHES=("main" "develop" "releases/*")

# 📅 6 aydan eski branch'leri filtrele (UTC tarihini kullan)
NOW=$(date -u +"%Y-%m-%d")
CUTOFF=$(date -u -d "6 months ago" +"%Y-%m-%d")

echo "🔍 ${NOW} tarihi itibarıyla temizlenecek branch'ler kontrol ediliyor..."

# Mevcut branch'leri al, korunacakları hariç, ardından tarihe göre sırala
for branch in $(git branch -r | grep -v "-> origin/HEAD" | sed 's/origin\///'); do
  # Koruma kontrolü
  skip=0
  for pat in "${PROTECTED_BRANCHES[@]}"; do
    if [[ "$branch" == $pat ]]; then
      skip=1
      break
    fi
  done

  if [[ $skip -eq 1 ]]; then
    echo "✅ ${branch} koruma altındadır, atlanıyor..."
    continue
  fi

  # Branch'in son commit tarihi kontrol edilir
  COMMIT_DATE=$(git log -1 --format="%ad" --date=short "$branch")
  if [[ "$COMMIT_DATE" < "$CUTOFF" ]]; then
    echo "⛔️ Eski branch siliniyor: ${branch}"
    git push origin --delete "$branch"
  else
    echo "📅 ${branch} yeni, atlanıyor..."
  fi
done

# 📦 Fazla dosyaları (ör. node_modules, dist) yedekle
if [[ -d "node_modules" ]]; then
  echo "📦 node_modules yedekleniyor..."
  tar -czf "node_modules_backup_$(date +%F).tar.gz" node_modules
fi

if [[ -d "dist" ]]; then
  echo "📦 dist yedekleniyor..."
  tar -czf "dist_backup_$(date +%F).tar.gz" dist
fi

echo "✅ Depo temizleme işlemi tamamlandı!"

Nasıl çalıştığını anlayalım

  • Koruma altı branch'ler için bir dizi tanımladık (PROTECTED_BRANCHES). Bash betiği, bu listede herhangi bir eşleşme bulunan branch'leri okumasını önler.
  • Tarih filtresi date -d "6 months ago" ile uygulanır; branch son commit tarihi bu tarihten eskiyse silinir.
  • Yedekleme işlemi, sıkışan dosyaları (node_modules, dist) uygun bir isimle sıkıştırıp kaydeder, böylece eski derlemeleri tekrar kullanabilme imkanı kalır.
  • Otomasyon: GitHub Actions, yukarıdaki betiği bir workflow dosyasında (ör. .github/workflows/cleanup.yml) çalıştırır.

GitHub Actions workflow örneği (yaml)

name: 🗂️ Depo Temizleyici

on:
  schedule:
    # Haftalık Cumartesi sabahı UTC saat 02:00'da
    - cron: "0 2 * * 6"
  workflow_dispatch:   # Elle çalıştırmak için

jobs:
  clean:
    runs-on: ubuntu-latest
    permissions:
      contents: write   # Branch silmek için gerekli
    steps:
      - name: Depoyu kontrol et
        uses: actions/checkout@v4

      - name: Temizleme betiğini çalıştır
        run: |
          chmod +x .github/scripts/cleanup.sh
          ./.github/scripts/cleanup.sh

      - name: Yedekleri depola
        uses: actions/upload-artifact@v4
        with:
          name: backups-${{ github.run_number }}
          path: "*.tar.gz"

Adım adım çalışma akışı

  1. Schedule tetikleyicisi her Cumartesi sabahı workflow'ı başlatır (veya elle çalıştırmak için workflow_dispatch ile).
  2. ubuntu-latest runner'ı çalıştırılır ve depoya write izni verilir (branch silmek için gerekli).
  3. actions/checkout@v4 ile depoya erişim sağlanır.
  4. Hazırladığımız bash betiği (cleanup.sh) çalıştırılır.
  5. Oluşan yedek dosyaları (node_modules_backup_*.tar.gz, dist_backup_*.tar.gz) bir artifact olarak depolanır.

Böylece ne oluyor?

  • Silinmesi gereken eski feature branch'leri otomatik olarak temizler, depoya aitliği korur.
  • Bir sonraki Release öncesi ihtiyacınız olabilecek kritik derlemeler işine yaraması için güvenli bir şekilde yedekler.
  • Korunan branch'leri koruyarak ana kod tabanının güvenliğini sağlar.
  • Tüm işleyiş hafızada kalıcıdır, istendiğinde manuel olarak çalıştırılabilir.

🛠️ Bu, bir haftalık temizlik işlemi için ihtiyacınız olan temel yapı. Kuralları branch listesi, tarihler, koruma listesi ve yedekleme adımları gibi modüller halinde düzenleyip özelleştirebilirsiniz. İyi kodlamalar!


❗️ Çoklu Kurumsal Depolarda En İyi Uygulamalar

Merhaba! Hadi pratik bir örnek üzerinden başlayalım. GitHub Apps'ı birden fazla kurumsal hesap (örneğin birden fazla org) arasında nasıl genişletebileceğimizi, merkezi izleme, roll-based erişim ve hijyen politikaları gibi konuları konuşacağız.

1️⃣ Çoklu Kurumsal Hesaplar için Genişletme

Bir App'ı bir orgda yapılandırdık ve artık diğer kurumsal hesaplar için de aynı ayarları kullanmak istiyoruz. Çoğu şeyi merkezi hale getirerek bunu yapabiliriz:

  • GitHub Enterprise Cloud yönetici konsolundan tek bir kerelik kurulum (örneğin gh api enterprises/{enterprise}/actions/permissions).
  • Bahsi geçen app'a ait token imzalama gizliliğini her org içinde tekrarlayarak her org için bir repository_selection ayarla.
  • Ölçeklendirmeye yardımcı olan bir script ile tüm orglar arasında ayarları senkronize et.

2️⃣ Merkezi İzleme ve Gözetlenme

App'ı genişleterken göz ardı etmemeniz gereken birkaç önemli nokta:

  • Erişim izlemesi: Her org için github_repository_traffic ve github_repo_workflow_run verilerini birleştirin. Bu, botunuzun hangi organizasyonlarda aktif olduğunu anlamanıza yardımcı olur.
  • Token etkinliği: Güvenlik için GH_TOKEN süresini sona erdirme süresine sahip olup olmadığını kontrol edin. Kullanım süresi dolan tokenlar temizlenmelidir.
  • Audit logları: Her bir orgun admin panelinden [Audit log] → GitHub App bölümüne bakın. Bunu bir dashboard'ta toplamak, haberdar olmanıza yardımcı olur.

3️⃣ Rol Tabanlı Erişim (RBAC)

Birden fazla kurumsal hesap söz konusu olduğunda her org için aynı izin setini korumalı ve yine de esnek olmalıyız:

  • Org seviyesindeki roller: Admin, Member, Billing gibi rolleri kullanın.
  • Özel ekip izinleri: Her org içinde ekip oluşturarak read, maintain, admin gibi izinleri verin.
  • Özel haklar: Birden fazla org arasında sabitlenen özel izinler (örneğin workflow:write) oluşturarak her org için manuel ayarlamadan kaçının.

4️⃣ Yenilikçi Hijyen Politikaları

Temiz ve güvenli bir ortam, çabuk büyümeyi destekler:

  • Kullanılmayan App'ları otomatik olarak devre dışı bırakın (gh api DELETE /apps/{app_id}/instalations/{installation_id}) belirli bir süre (örneğin 90 gün) kullanılmayan app'lar için.
  • Token süresini sona erdirme: Kurumsal düzeyde varsayılan GITHUB_TOKEN süresini sona erdirme süresini 7 gün veya daha kısa bir süre olarak ayarlayın.
  • Secret taraması: Kurumsal Secret Scanning'i etkinleştirerek her orgun her repo'sunda otomatik olarak varsayılan gizli anahtarları tarayın.
  • Kod 검토 otomasyonu: Kullanılmayan [dependabot] veya [renovate] kurulumlarını devre dışı bırakarak gereksiz yükü azaltın.

5️⃣ Kod Örneği: Çoklu Kurumsal Hesap için Bash Scripti

Aşağıdaki basit bir bash script, tek bir giriş noktasından birden fazla kurumsal hesap için bir GitHub App'inin devre dışı bırakılmasını ve izinlerini yapılandırmanıza olanak tanır:

#!/usr/bin/env bash

# -------------------------------------------------
# Çoklu Kurumsal Hesap için GitHub App Yönetimi
# -------------------------------------------------

# Ortam değişkenleri (düzenleyin)
ENTERPRISES=("acme-corp" "globex-inc" "stark-industries")
APP_SLUG="my-automation-bot"   # GitHub App'inizin slug'ı
DISABLE_FLAG=true              # true/false → app'ı devre dışı bırak
NEW_PERMISSIONS='{"metadata":"read","contents":"write","issues":"read"}'

# `gh` CLI'yi kullanarak Giriş Yapıyoruz (oturum açık olmalıdır)
for ORG in "${ENTERPRISES[@]}"; do
  echo "🔄 $ORG — işleniyor ..."

  # Kurulu App'in Kimlik Numarasını Bulun
  INSTALL_ID=$(gh api "orgs/$ORG/installations" \
    | jq -r --arg app "$APP_SLUG" '.[] | select(.app_slug==$app) | .id')

  if [[ "$INSTALL_ID" == "null" ]]; then
    echo "⚠️  $ORG için $APP_SLUG bulunamadı"
    continue
  fi

  # 1️⃣ İzinleri Güncelleyin
  if [[ -n "$NEW_PERMISSIONS" ]]; then
    gh api --method PATCH "orgs/$ORG/installations/$INSTALL_ID" \
      --input <(echo "{\"permissions\":$NEW_PERMISSIONS}")
    echo "✅ $ORG izinleri güncellendi"
  fi

  # 2️⃣ (İsteğe bağlı) App'i Devre Dışı Bırakın
  if [[ "$DISABLE_FLAG" == "true" ]]; then
    gh api --method DELETE "orgs/$ORG/installations/$INSTALL_ID"
    echo "🛑 $ORG'daki $APP_SLUG devre dışı bırakıldı"
  fi

  echo "📌 $ORG işlemi tamamlandı\n"
done

Bu sayede ne oluyor?

  • Script, ENTERPRISES dizisindeki her org için bir döngüye girer.
  • jq kullanarak her orgun kurulumlarından bahsi geçen App'in Kimlik Numarasını bulur.
  • Belirttiğiniz yeni izin setini günceller (örneğin metadata:read, contents:write).
  • DISABLE_FLAG=true olduğunda ilgili kurulumu siler (devre dışı bırakır).
  • İsteğe bağlı olarak birden fazla org için devre dışı bırakma işlemlerini de bir arada yapar.

6️⃣ Teşvik ve Özet

  • Otomasyon sayesinde her org için manuel CLI komutları yerine tek bir script ile değişiklikleri gerçekleştirebilirsiniz.
  • Kurumsal düzeyinde tutarlı izin ve hijyen politikaları, kopya yapıştırma hatalarını önler ve güvenlik politikalarını tutarlı hale getirir.
  • Devre dışı bırakma işlemi, artık ihtiyaç duyulmayan App'ları silerek kredileri korumanıza ve repo'lara gereksiz erişimi önlemenize yardımcı olur.

Hadi, yukarıdaki scripti kopyalayın, ENTERPRISES dizisini kendi kurumsal hesaplarınıza göre özelleştirin ve tek bir komutla her kurumsal hesap için uygulamayı genişletin! 🚀


🛠 Güvenlik İhlallerini İzleme ve Bildirme

Hadi pratik bir örnek üzerinden anlayalım. GitHub üzerinde çalışan bir güvenlik tarama otomasyonunuz olduğunu varsayalım. Bunu nasıl etkinliğini takip edeceğinizi, ihlalleri nasıl tespit edeceğinizi ve bunu denetim raporları haline nasıl dökeceğinizi göstereceğim.


🎯 Neler Getireceğiz?

  • Otomasyonun başarı oranı için temel metriğe hızlı bir bakış.
  • Gerçek zamanlı uyarıları yakalayan ve analiz eden bir script.
  • Uyum raporu için hazır bir JSON çıktısı.

🛠️ Uçtan Uza İzleme Scripti (Bash)

#!/usr/bin/env bash
# -----------------------------------------------------------------
# Script: github-security-scan.sh
# Amacı:  GitHub API kullanarak repo izinlerini kontrol eder ve
#          şüpheli "admin" erişimlerini tespit eder.
# -----------------------------------------------------------------

# Token ayarlaması (Repository ve Admin izinleri için gerekli)
GH_TOKEN="${GH_TOKEN:-$GITHUB_TOKEN}"
API_URL="https://api.github.com"

# -----------------------------------------------------------------
# Yardımcı Fonksiyonlar
# -----------------------------------------------------------------

# Hata durumunda çık
die() {
  echo "❌ Hata: $1" >&2
  exit 1
}

# Kimlik doğrulama kontrolü
check_auth() {
  if curl -s -H "Authorization: token $GH_TOKEN" "$API_URL/user" | grep -q '"login"'; then
    echo "✅ Kimlik doğrulama tamam."
  else
    die "GitHub token geçersiz veya eksik."
  fi
}

# Repo izinlerini al
fetch_repo_permissions() {
  local owner=$1
  local repo=$2

  local perms
  perms=$(curl -s -H "Authorization: token $GH_TOKEN" \
           "$API_URL/repos/$owner/$repo/collaborators/$owner/permission" \
           | jq -r '.permissions | to_entries | map("\(.key)=\(.value)") | join(", ")')

  echo "$perms"
}

# Şüpheli ihlalleri kontrol et
detect_violations() {
  local perms="$1"

  # Basit kural: admin izni olmayan kullanıcılar için "admin=true" ifadesi şüpheli
  if [[ "$perms" == *"admin=true"* ]]; then
    echo "⚠️  Potansiyel ihlal: Şüpheli admin izni tespit edildi."
  else
    echo "✅ İzinler normal."
  fi
}

# -----------------------------------------------------------------
# Ana Döngü
# -----------------------------------------------------------------

check_auth

# Example: Belirli bir owner/repo için tarama yapın
OWNER="your-org"
REPO="your-repo"

echo "📂 $OWNER/$REPO için tarama başlatılıyor..."

PERMS=$(fetch_repo_permissions "$OWNER" "$REPO")
echo "📋 Tespit edilen izinler: $PERMS"

detect_violations "$PERMS"

# JSON formatında raporlama (denetim amaçlı)
REPORT_JSON=$(cat <<EOF
{
  "scan_time": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
  "repository": "$OWNER/$REPO",
  "permissions": "$PERMS",
  "violation_detected": $(echo "$PERMS" | grep -q "admin=true" && echo true || echo false)
}
EOF
)

echo "📄 Denetim raporu:"
echo "$REPORT_JSON"

Bu sayede ne oluyor?

  • Kimlik doğrulama: Script, sağlanan token ile GitHub'a bağlanır.
  • İzin akışı: Her depo için izin tablosunu çeker (admin, maintain, push vb.).
  • İhlal kontrolü: Basit bir politika uygulayarak (admin=true) şüpheli erişimleri hemen bildirir.
  • Denetim raporu: JSON formatında zaman damgalı bir rapor oluşturur, böylece otomasyonu sonraki ekipler veya SIEM araçları tarafından kolayca yakalayabilir.

📊 Sonuçları İzleme

  • Haftalık özetler: Raporu bir Google Sheet'e veya Monitoring aracına aktararak eğilimleri takip et.
  • Uyarı duvarı: Şüpheli izni olan depolar için Slack/Teams bildirimi ayarla.
  • Otomasyon testi: Scripti bir test reposunda çalıştırarak doğru ihlalleri bulduğundan emin ol.

✅ Hızlı Kontrol Listesi

  • GH_TOKEN valid ve depoya erişimi var.
  • Script erişilebilir (örneğin, .github/scripts/) ve bir CI/CD adımında çalıştırılıyor.
  • Denetim raporları merkezi bir depoda saklanıyor (örneğin, security-audits/).
  • Uyum raporunda hatalı token bilgisi olmadığından emin ol.

Hadi pratik bir örnek üzerinden anlayalım; bu script sayesinde GitHub repositoriesindeki güvenlik ihlallerini otomatik olarak tespit edebilir, bildirebilir ve denetlenebilirsiniz. Denetim raporu her zaman elinizin altında kalsın! 🎉


Bonus Tavsiye: Daha Fazla Otomasyon İçin Öneriler

Hadi birlikte birkaç pratik otomasyon adımını hızla gözden geçirelim. 🎯

  • Pull request kontrolleri – Ön prosesleri otomatikleştir:
    • Linting kontrolü yap, birim testlerini çalıştır, karanlık taramayı çalıştır.
    • Karşılaştırma denetimlerini çalıştır ve eksik kısmı kontrol et.
  • Secret scanning – Sırların kaçmasını önlüyoruz:
    • Gizli anahtarları taramak için karanlık taramayı devreye al.
    • Yeni sırların bildirimini e-posta ya da Slack yoluyla al.
  • Bağımlılık güncelleme – Güvenlik açıklarını kapatın:
    • Güvenlik güncellemelerini tetiklemek için Dependabot'u (veya benzeri bir hizmeti) kullanın.
    • Gerekli ayarları yapın ve elde edilen PR'ları inceleyin.

Aşağıda, oluşturup .github/workflows/ veya repository kökünde auto-checklist.md olarak kaydedebileceğiniz bir markdown checklist bulunuyor. Her bir kontrolü tamamladıkça işaretleyin.

- [ ] Pull request otomasyonu kontrolü
  - [ ] Linting (ESLint, Rubocop vb.) çalıştırılıyor mu?
  - [ ] Birim testleri geçiyor mu?
  - [ ] Karanlık tarama (CodeQL / Semgrep) çalışıyor mu?
  - [ ] Karşılaştırma denetimi (GitHub Actions) başarılı oluyor mu?
- [ ] Secret scanning etkin
  - [ ] Script veya CI aracılığıyla gizli anahtarları tarıyor musunuz?
  - [ ] Yeni sırların bildirimini alıyor musunuz?
- [ ] Bağımlılık güncelleme süreci
  - [ ] Dependabot (veya benzeri) güvenlik güncellemelerini tetikliyor mu?
  - [ ] Güvenlikle ilgili PR'lar için gözden geçirme kuralı var mı?
  - [ ] Elde edilen PR'ları haftalık olarak inceleyorsunuz mu?

---

## Son Söz: Güvenli ve Hijyenik Bir Kurumde Çalışmaya Başlayın 🚀

Güzel bir yolculuktu, değil mi? Şimdi hazırsan, bu önemli anı birkaç kısa noktayla özetleyelim ve önümüzdeki adımları konuşalım.

- **Teslim etmeye hazır mısın?** 🎯 Artık kendi otomasyon akışını oluşturdun. Her test, her dağıtım ve her izleme kuralı bir kez daha işe yaradı.
- **Başarılarını görebiliyor musun?** ✅ Çoğu takım, sorunsuz çalıştığı her alanda kısa bir log notu veya bir kontrol kutusu eklemene izin veriyor. Çok yakında hatırlayabileceğin küçük bir kayıt da oluyor.
- **Sürekli öğrenme alışkanlığını korumak önemlidir** 🔁 Bugün bildiğin küçük bir ipucu yarın büyük bir sorun çözücü olabilir. Eğitimlere göz atmaya devam et, forumlara göz at ve takımda bilgi paylaşımını teşvik et.

### Haydi birlikte devam edelim

- **Kayıtlarını tut** – Her bir otomasyon çabasını bir dakika notla belgele. “Neden yaptık?” ve “Ne oldu?” sorularını yanıtla. Bu en iyi uygulama özetine başvurduğunda sana hatırlatma yapan basit bir markdown dosyası olabilir.
- **Göster digini göster** – Eğer bir panel, bir grafik veya hızlı bir komut satırı özetine sahipsen, onu öncelikli bir yerde paylaş. Çünkü herkes “Ne yapmaya devam etmeliyiz?” diye meraklanır.
- **Geri bildirim döngüsünü kapat** – Arkadaşlarından ve otomasyonlarına geri bildirim al. Her bir geri bildirim, yeni yetenekler kazanmak ve süreçlerin güvenliğini korumak için bir fırsattır.

### Son bir teşvik

Dünya otomasyona dayalı üretimle ilerliyor ve sen tam da doğru yerde, doğru zamanda varsın. Önündeki dağları aşmak için gerekli becerilere sahipsin. Yukarıdaki kısa planla devam et, başarılarını belgele ve öğrenme macerasına devam et.

**Unutma:** Teknoloji hiçbir zaman statik değildir, ama tutarlılık... o bir sanat ve bir bilimdir. Odağını gelişimde tut ve geri bildirimlere kulak ver. Senin içinGurur duyuyorum ve senindir! 🌟

Güvenle devam et ve kurumu güvenli ve hijyenik tut!

---
*Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.*

Burak Sağlık

Burak Saglik

©2024 Desing and Developed by @Burak Sağlık

All rights reserved