CI/CD'de OIDC ve IAM Role ile şifresiz (secretless) AWS erişimini nasıl kurarım?
Soru
GitHub Actions workflow'larımızda AWS erişim anahtarları ve üretim DB şifreleri gerekiyor. Bunları repoya koymak büyük açık; GitHub Secrets bir yere kadar çözüyor ama anahtar rotasyonu ve merkezi takip zor. Pipeline'ımızın AWS IAM Role'leri ve OIDC kullanarak şifresiz (secretless) şekilde AWS kaynaklarına erişmesini nasıl sağlarım?
Cevap
Kısa cevap: GitHub Secrets’taki uzun ömürlü AWS anahtarları tam olarak yok etmeniz gereken şey — sızar, rotasyonu zordur, sürekli açık duran kalıcı kimliklerdir. OIDC bunları ortadan kaldırır.
Kısa cevap
Asıl mesele: kalıcı bir anahtarı bir yerde saklamak yerine, her çalışmada anlık üretilen geçici bir kimlik kullanmak. Workflow’un kendisini kurmayı GitHub Actions yazısında anlatmıştım; buradaki tek değişiklik, o pipeline’a artık hiçbir anahtar gömmemek.
Neden
-
Uzun ömürlü anahtar, sürekli açık duran kalıcı bir kimliktir. Sızar, rotasyonu zordur, merkezî takibi güçtür; GitHub Secrets bunu bir yere kadar çözer ama anahtarın kendisi hâlâ bir yerde durmaya devam eder.
-
OIDC, “bu workflow gerçekten sizin reponuzdan mı geliyor?” sorusunu kriptografik olarak cevaplatır. AWS, GitHub’ın imzaladığı token’lara güvenir; trust policy’deki koşullar tutmadığı sürece bir fork ya da rastgele bir PR bu role’ü üstlenemez.
-
Workflow runtime’da geçici STS credential alır. Çalışma anında, kısa ömürlü GitHub OIDC token’ını AWS STS ile takas eder; varsayılan olarak bir saat içinde geçersiz olan geçici credential’lar üretir. Hiçbir yerde saklanan kalıcı secret yok — sızsa bile çok kısa ömürlü.
Ne yapmalı
-
GitHub Actions’ı AWS IAM’de OIDC identity provider olarak tanımlayın. Bu, AWS’in GitHub’ın imzaladığı token’lara güvenmesini sağlayan tek seferlik kurulumdur.
-
Trust policy’si dar scope’lu bir IAM role oluşturun. Role’ün trust policy’sinde
subkoşulunu belirli repo + branch + environment’a sabitleyin. Böylece role’ü yalnızca sizin tanımladığınız kaynak alabilir. -
Least privilege + prod için environment koruması uygulayın. Role’ü minimum yetkiyle sınırlayın. Prod erişimi için GitHub Environments + zorunlu reviewer kullanın. Aynı yaklaşım her bulutta var: GCP ve Azure’da da Workload Identity Federation aynı işi görür.
Sonuç: Ben olsam AWS için OIDC + dar scope’lu IAM role kurardım — sıfır saklanan anahtar, sıkı trust koşulları, prod’da environment koruması. Bulut dışı secret’lar (DB şifresi gibi) için bunları GitHub Secrets’a koymak yerine runtime’da bir secrets manager’dan çekin. Kural net: standing credential’ı imkânsız kılmak için kimliği anlık ve kısa ömürlü üretin.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.