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.
Asıl mesele: kalıcı bir anahtarı bir yerde saklamak yerine, her çalışmada anlık üretilen geçici bir kimlik kullanmak.
- GitHub Actions’ı AWS IAM’de OIDC identity provider olarak tanımlayın. Bu, AWS’in GitHub’ın imzaladığı token’lara güvenmesini sağlar. Artık AWS, “bu workflow gerçekten sizin reponuzdan mı geliyor?” sorusunu kriptografik olarak doğrulayabilir.
- 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 bir fork ya da rastgele bir PR bu role’ü üstlenemez; sadece sizin tanımladığınız kaynak alabilir. - 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ü.
- 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.