İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • Güvenlik & Kimlik
  • GitHub Actions 2026 Güvenlik Yol Haritası: Sırada Bizi Neler Bekliyor?
DevOps Güvenlik & Kimlik CI/CD güvenliği, DevOps güvenliği, GitHub Actions, otomasyon güvenliği, pipeline saldırıları, siber saldırılar, token güvenliği, yazılım tedarik zinciri Aşkın KILIÇ 29/03/2026 0 Yorumlar

GitHub Actions 2026 Güvenlik Yol Haritası: Sırada Bizi Neler Bekliyor?

GitHub Actions 2026 Güvenlik Yol Haritası: Sırada Bizi Neler Bekliyor?
📑 İçindekiler
  1. Otomasyon Güvenliği: Neden Şimdi Herkes Panikte?
  2. Ekosistemi Kilitlemek: Bağımlılıklar Niye Bu Kadar Tehlikeli?
  3. Müthiş Ama Tehlikeli Kolaylıklar
  4. Bağımlılık Kaosu Tablosu
  5. Kod Bloğu ile Pratik Örnek:
  6. Ayrıca Dikkat Edilecekler Listesi:
  7. Anlık Gözlemleme & Altyapıda Yeni Sınırlar Çiziliyor mu?
  8. Anlık Gözlemleme Nasıl Sağlanacak?
  9. Peki Ya Gerçek Hayatta? Küçük Startup ile Kurumsal Dev Arasındaki Uçurum…
  10. Küçük Bir Startup İçin Durum:
  11. Büyük Kurumsal Şirkette Ne Değişir?
  12. Kritik Notlar ve Pratik İpuçları
  13. Sıkça Sorulan Sorular
  14. GitHub Actions’da lock file nedir ve ne işe yarar?
  15. "Scoped credentials" özelliği neden önemli?
  16. Anlık gözlemlenebilirlik pratikte nasıl fayda sağlıyor?
  17. Kilit dosyasına geçmek mevcut projelerde adaptasyon sıkıntısı yaratır mı?
  18. Kaynaklar ve İleri Okuma
⏱️ 6 dk okuma📅 29 Mart 2026🔄 Güncelleme: 15 Temmuz 2026

Otomasyon Güvenliği: Neden Şimdi Herkes Panikte?

Birkaç aydır sektörde sessiz sedasız bir stres havası var; çoğu kişinin farkında bile olmadığı bir konu. Geçen ekim, bir finans şirketinde CI/CD pipeline’larına göz gezdiriyordum. Takım lideri yanımdaki koltukta, “Bu action dosyalarını gece güncelliyoruz ama gerçekten çalışıyorlar mı hiç bilmiyoruz,” dedi ve içimden “eyvah” dedim. Bazen en riskli şey, görünmez olan.

İşin garibi, Peki sebep ne? Açıklayayım: Eskiden hackerlar doğrudan koda saldırmaya odaklanıyordu; artık işin rengi değişti — otomasyonu ele geçirmeye çalışıyorlar. GitHub Actions tarafında birkaç örneği bizzat gördüm: tj-actions/changed-files vakası, Nx (yanlış duymadınız). Trivy-action’a yapılan ataklar hâlâ hafızamda taze.

Yazılım tedarik zinciri saldırıları eskisi gibi sadece koda değil, doğrudan otomasyonun kendisine yöneldi — hem de bazen anlaması samanlıkta iğne aramak kadar zahmetli!

İşin garip tarafı şu; kötü niyetli biri bir Action’da açık buldu mu yetkisiz kodu pat diye sisteme sokabiliyor (kendi tecrübem). Tüm bağımlılık zinciri domino taşı gibi düşüyor. Bir de fazla izinli token’lar ortada uçuşuyorsa, hassas veri için resmen kapılar ardına kadar açık demektir.

💡 Bilgi: Kontrolsüz bir CI/CD pipeline’ın güvenlik açığı yüzünden onlarca projeyi ve yüzlerce geliştiricinin emeğini anında yok edebilirsiniz.

Ekosistemi Kilitlemek: Bağımlılıklar Niye Bu Kadar Tehlikeli?

Hani, Bazen cevap burnunun ucunda durur ama kimse dönüp bakmaz ya… GitHub Actions’daki durum tam böyle! Geçen yıl mayıs ayında Logosoft’ta bir müşterinin on-prem Jenkins pipeline’ını Azure DevOps’a aktarırken workflow’lardaki Action referanslarının %80’ının tag veya branch ile işaretlendiğini fark ettik — hangi sürüm ne zaman değişiyor belli değil.

Müthiş Ama Tehlikeli Kolaylıklar

Dürüst olmak gerekirse, GitHub Actions’ın “tag ile referans ver” mantığı ilk etapta oldukça pratik görünüyor (her zaman son sürümü çekiyorsun). Ancak öbür tarafta tehlike var; bu tag’ın arkasındaki kod sabaha karşı gizlice değişirse başınız ağrıyabilir…

Bağımlılık Kaosu Tablosu

Referans Tipi Güvenlik Açığı Riski Yönetim Kolaylığı
tag (örn. v1) Çok Yüksek Baya kolay
branch (örn. main) Tavan! Süper rahat
commit SHA Düşük Zahmetli ama güvenli
lock file (kilit dosyası) En düşük! Zorlaştı ama risk azalıyor

Kod Bloğu ile Pratik Örnek:

# Eski yöntem — tehlikeli

uses: actions/checkout@v2

# Yeni kilitli yöntem

dependencies:

— uses: actions/checkout@c47ee857bfa94eaaa11157bcbb9ce99960eb87ef

Kendi blogumda

Ayrıca Dikkat Edilecekler Listesi:

  1. Kredi yönetimini mutlaka otomatize edin; manuel rotasyon facia çıkarabiliyor!
  2. Ağ politikalarını merkezileştirin; IAM karmaşasına saplanmayın.
  3. Kullanıcıya değil işe özel izin açın (“action bazlı access policy”).

Bakın, Daha ayrıntılı senaryolar için GitHub Credential Revocation API ile Sızıntılara Anında Fren: Yeni Destekler ve Gerçek Hayat Senaryoları‘e göz atabilirsiniz – gerçek hayattan böl böl örnek paylaştım orada…

Anlık Gözlemleme & Altyapıda Yeni Sınırlar Çiziliyor mu?

Burası teknik olduğu kadar tartışmalı… Enterprise müşterilerin çoğu gerçek zamanlı izlenebilirlik istiyor (“Kim neyi tetiklemiş? Network trafiği nereye gitmiş?”). Pratikte genelde log sunuluyor – gerisi sis perdesi gibi kalıyor maalesef.

Anlık Gözlemleme Nasıl Sağlanacak?

  • Tüm runner aktiviteleri merkezî dashboard’dan anlık takip edilecek (bankalardaki transaction monitöring sistemlerine benziyor).
  • Ağ erişimi kural bazlı zorunlu olacak – default açık sistem yavaş yavaş tarih oluyor…
  • Anomali yakalama mekanizmaları gelişiyor (“Neden bu job Çin’den tetiklendi?” sorusunu sormak nihayet mümkün olacak).

Kendimden örnek vereyim — Logosoft’un büyük telekom müşterisinde runner ağ izolasyonu olmadan işler kabusa dönmüştü; sonunda üçüncü parti firewall eklemek zorunda kaldık (bu da performansı %15 yavaşlatmıştı!). O yüzden yerleşik network policy kesinlikle şart diyorum!

“CI/CD güvenliği statik değil, canlı bir organizma gibi; her gün yeni zafiyet çıkabilir, eski ‘best practice’ iki haftada çöp olabilir.”

Peki Ya Gerçek Hayatta? Küçük Startup ile Kurumsal Dev Arasındaki Uçurum…

Küçük Bir Startup İçin Durum:

  • Kilit dosyası kullanmak başlangıçta ekstra iş yükü demek ama maliyet ciddi şekilde düşüyor (geçen ay arkadaşım lock file sayesinde npm’den gelen tuhaf script’i erkenden yakaladı).
  • Ayrıntılı ağ politikası uygulamak ilk başlarda sıkıntı yaratabilir ama ileride büyük krizleri önlüyor.

Büyük Kurumsal Şirkette Ne Değişir?

  • Anlık izlenebilirlik şart çünkü denetimler sertleşti – SIEM entegrasyonu olmadan kimse huzurlu uyuyamıyor.
  • \

  • Sertifikalı politika setleri departmanlar arasında gerginlik çıkarabiliyor (“Biz neden production’a deploy yapamıyoruz?” tartışmaları klasik…)

Denge önemli! Fazla güvenlik üretkenliği baltalayabilir. Gevşek güvenlikle de sabah şirkete gelip server bulamayabilirsiniz – ikisi de tatsız (bizzat test ettim). O yüzden iyi ayarlamak lazım!

💡 Bilgi: Github Actions roadmap’teki yeniliklerin hepsi sihir değiller; bazıları alışkanlıkları değiştirmeyi gerektiriyor ve adaptasyon sancısı kaçınılmaz.

Kritik Notlar ve Pratik İpuçları

  • Mümkün olduğunca immutable commit SHA ile action çağırmaya başlayın – lock file public preview’u beklemeden refleks hâline getirin.
  • \

  • Ağ erişimini sadece gereken destination’a açın; “her yerden her yere” yaklaşımı geçmişte kaldı!
  • \

  • Kullandığınız harici Action’ın audit raporunu ara sıra gözden geçirin (audit logs can kurtarır).
  • \

  • Sertifikalandırılmış RBAC politikalarını takımlarla paylaşın – gizlice bypass etmeye çalışanlara dikkat edin!
  • \

  • Dönem dönem dummy credential leak testi yapın (“ben test ettim sorun yok” cümlesine asla inanmayın!).
  • \

  • Tüm workflow’lara fail-fast logic ekleyin – hata anında durdurmuyorsa felaket büyüyebilir!
  • Sadece teknik lead’lerin değil junior developer’ların da güvenlik eğitimine katıldığından emin olun (“benim alanım değil” bahanesini kabul etmiyorum!).

Sıkça Sorulan Sorular

GitHub Actions’da lock file nedir ve ne işe yarar?

Lock file workflow’un kullandığı tüm action’ları ve onların versiyonlarını belirlenen commit SHA’larla sabitler. Böylece dışarıdan gelecek anı değişiklikler veya zararlı kod riski ciddi şekilde azalır.

“Scoped credentials” özelliği neden önemli?

Sadece gerekli yetkinin verilmesini sağlar, böylece hata veya saldırı durumunda zarar minimumda tutulur. Bilhassa kurumlarda bu yaklaşım kritik hâle geldi diyebilirim.

Anlık gözlemlenebilirlik pratikte nasıl fayda sağlıyor?

Tüm CI/CD aktivitelerini gerçek zamanlı izleyerek beklenmedik hareketlere hızlıca müdahale edebiliyorsunuz. Regülasyon yükümlülüğü olan şirketlerde olmazsa olmaz hâle geldi son dönemde.

Kilit dosyasına geçmek mevcut projelerde adaptasyon sıkıntısı yaratır mı?

Evet, ilk başta fazladan iş yükü hissedebilirsiniz fakat orta vadede hem hatalar azalıyor hem güvenlik seviyesi artıyor – özellikle hızlı büyüyen startuplar için ciddi avantaj sağlayacaktır.

Kaynaklar ve İleri Okuma

  • What’s coming to our GitHub Actions 2026 security roadmap?
  • \

  • Azure Pipelines Security Documentation
  • \

  • GitHub Dependency Locking Specification (Beta)
  • \
    \
    \
    Daha fazlası için blogumdaki şu yazılara bakabilirsiniz:
    • GitHub Actions’da Agentic Workflow Ayarlarını Anında Görmek: Gerçekten Oyun Değiştirici mi?

    • GitHub Credential Revocation API ile Sızıntılara Anında Fren: Yeni Destekler ve Gerçek Hayat Senaryoları

    • Sıfır Güven (Zero Trust) Gerçekten Ne Kadar İşe Yarıyor? Donan, Hayal Kırıklığı Yaratan ve Şaşırtıcı Taraflar

🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

GitHub Copilot for Eclipse Açık Kaynak Oldu: Bu Ne Değiştiriyor?
GitHub Copilot for Eclipse Açık Kaynak Oldu: Bu Ne Değiştiriyor?22 May 2026
Copilot Usage Metrics API ile Kullanıcı Bazlı AI Kredisi
Copilot Usage Metrics API ile Kullanıcı Bazlı AI Kredisi19 Haz 2026
ASP.NET Core "ApiVersion Could Not Be Resolved" Hatası
ASP.NET Core "ApiVersion Could Not Be Resolved" Hatası28 Nis 2026
Azure DevOps Server Mart Yaması: Grup Üyeliği
Azure DevOps Server Mart Yaması: Grup Üyeliği14 Mar 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket CI/CD güvenliği DevOps güvenliği GitHub Actions otomasyon güvenliği pipeline saldırıları siber saldırılar token güvenliği yazılım tedarik zinciri
Önceki yazı

GitHub Issues ve Projelerde Ajan Aktivitesi: Gerçekten Ne Değişti?

Sonraki yazı

Açık Kaynak Güvenlik Açıkları: 2025’te Neler Değişti, Ne Anlama Geliyor?

İlginizi Çekebilir

MSSQL v1.45: SQL Formatter, Azure SQL Provisioning ve
Aşkın KILIÇ 0

MSSQL v1.45: SQL Formatter, Azure SQL Provisioning ve

20/08/2026
Azure Pipelines'a Apple Silicon ve Xcode 27 Geldi
Aşkın KILIÇ 0

Azure Pipelines’a Apple Silicon ve Xcode 27 Geldi

18/08/2026
BlockOnPossibleDataLoss=True: Neden Dostunuz?
Aşkın KILIÇ 0

BlockOnPossibleDataLoss=True: Neden Dostunuz?

18/08/2026

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • MSSQL v1.45: SQL Formatter, Azure SQL Provisioning ve
    20/08/2026 MSSQL v1.45: SQL Formatter, Azure SQL Provisioning ve
  • SQL Server Express'ten Azure SQL Free Tier'a Geçiş
    20/08/2026 SQL Server Express’ten Azure SQL Free Tier’a Geçiş
  • GitHub Copilot App: My Work ile İşlerini Yönetmek
    19/08/2026 GitHub Copilot App: My Work ile İşlerini Yönetmek
  • VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
    19/08/2026 VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
  • Microsoft, 2026 Gartner Cloud-Native Platform Raporunda
    19/08/2026 Microsoft, 2026 Gartner Cloud-Native Platform Raporunda
  • Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
    11/04/2026 Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
  • GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
    07/04/2026 GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
    03/04/2026 GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
  • ASP.NET Core 2.3 İçin Saat İşliyor: Ne Yapmalı?
    07/04/2026 ASP.NET Core 2.3 İçin Saat İşliyor: Ne Yapmalı?
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

SİZİN İÇİN DERLEDİK

MSSQL v1.45: SQL Formatter, Azure SQL Provisioning ve
DevOps Geliştirici Araçları Microsoft Azure

MSSQL v1.45: SQL Formatter, Azure SQL Provisioning ve

20/08/2026 Aşkın KILIÇ
SQL Server Express'ten Azure SQL Free Tier'a Geçiş
Bulut Altyapı Geliştirici Araçları Microsoft Azure

SQL Server Express’ten Azure SQL Free Tier’a Geçiş

20/08/2026 Aşkın KILIÇ
GitHub Copilot App: My Work ile İşlerini Yönetmek
Geliştirici Araçları Yapay Zeka

GitHub Copilot App: My Work ile İşlerini Yönetmek

19/08/2026 Aşkın KILIÇ
VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
Bulut Altyapı Geliştirici Araçları

VS Code Python Environments Eklentisi Genel Kullanıma Açıldı

19/08/2026 Aşkın KILIÇ
Microsoft, 2026 Gartner Cloud-Native Platform Raporunda
Bulut Altyapı Microsoft Azure Yapay Zeka

Microsoft, 2026 Gartner Cloud-Native Platform Raporunda

19/08/2026 Aşkın KILIÇ
Azure Cosmos DB VS Code Eklentisi: Ajanlar İçin Yeni Araçlar
Bulut Altyapı Geliştirici Araçları Yapay Zeka

Azure Cosmos DB VS Code Eklentisi: Ajanlar İçin Yeni Araçlar

19/08/2026 Aşkın KILIÇ
Canvases: Ajanlı Copilot Akışlarını Görünür Kılan Katman
Geliştirici Araçları Yapay Zeka

Canvases: Ajanlı Copilot Akışlarını Görünür Kılan Katman

18/08/2026 Aşkın KILIÇ
Windows Terminal Preview 1.25: Yeni Ayarlar ve Kitty Desteği
Bulut Altyapı Geliştirici Araçları

Windows Terminal Preview 1.25: Yeni Ayarlar ve Kitty Desteği

18/08/2026 Aşkın KILIÇ
Azure Pipelines'a Apple Silicon ve Xcode 27 Geldi
Bulut Altyapı DevOps

Azure Pipelines’a Apple Silicon ve Xcode 27 Geldi

18/08/2026 Aşkın KILIÇ
BlockOnPossibleDataLoss=True: Neden Dostunuz?
DevOps Geliştirici Araçları Güvenlik & Kimlik Microsoft Azure

BlockOnPossibleDataLoss=True: Neden Dostunuz?

18/08/2026 Aşkın KILIÇ
TypeScript 6.0 RC Duyuruldu: 7.0'a Hazırlık Sürümü
Geliştirici Araçları Kurumsal Teknoloji

TypeScript 6.0 RC Duyuruldu: 7.0’a Hazırlık Sürümü

17/08/2026 Aşkın KILIÇ
GitHub Kişisel Depolarda Yorumdan Kullanıcı Engelleme
Geliştirici Araçları Kurumsal Teknoloji

GitHub Kişisel Depolarda Yorumdan Kullanıcı Engelleme

17/08/2026 Aşkın KILIÇ

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps Azure Functions Azure OpenAI azure sdk Azure SQL bulut bilişim C++ CI/CD copilot Copilot CLI DevOps DevSecOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu Microsoft Agent Framework Microsoft Azure Microsoft Foundry MSVC otomasyon performans Pull Request Python RAG SEO uyumlu verimlilik veri yönetimi Visual Studio VS Code yapay zeka yapay zeka ajanları Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 339 yazı 🏗️ Bulut Altyapı 280 yazı 🤖 Yapay Zeka 240 yazı 🔧 DevOps 198 yazı ☁️ Microsoft Azure 186 yazı 🔒 Güvenlik & Kimlik 161 yazı 🏢 Kurumsal Teknoloji 65 yazı 📊 Veri & Analitik 57 yazı 🐳 Konteyner & Kubernetes 47 yazı 📧 Microsoft 365 21 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← GitHub Issues ve Projelerde Aj...
    Açık Kaynak Güvenlik Açıkları:... →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS