İçeriğe geç
Yeni yazı çıkınca e-posta · 4.812 abone 87 rehber · 52 ipucu · 8 komut RSS GitHub LinkedIn İletişim
Ara Bültene katıl
Bültene katıl 4.812 abone · yeni yazı çıkınca e-posta
Google Cloud

Servis hesabı anahtarlarını Workload Identity ile kaldırmak

İndirilen JSON anahtarlar süresizdir ve nerede olduklarını kimse bilmez. GKE ve CI/CD için anahtarsız kimliğe geçiş.

Mustafa Çelik 10 Mart 2026 · 12 dk okuma

Servis hesabı anahtarı bir dosyadır; kopyalanır, laptopta kalır, kod deposuna düşer ve süresi hiç dolmaz. GCP’de bunların çoğu tamamen ortadan kaldırılabilir.

Önce envanter

for p in $(gcloud projects list --format="value(projectId)"); do
  for sa in $(gcloud iam service-accounts list --project="$p" --format="value(email)"); do
    n=$(gcloud iam service-accounts keys list --iam-account="$sa" --project="$p" \
        --managed-by=user --format="value(name)" | wc -l)
    [ "$n" -gt 0 ] && echo "$p | $sa | $n anahtar"
  done
done

--managed-by=user önemlidir: Google’ın yönettiği anahtarlar sorun değil, indirilen anahtarlar sorundur.

GKE için Workload Identity

Pod, Kubernetes servis hesabı üzerinden Google servis hesabına dönüşür; dosya taşımaz.

gcloud container clusters update kume01 --region=europe-west3 \
  --workload-pool=sirket-uretim-web.svc.id.goog

gcloud iam service-accounts add-iam-policy-binding \
  uygulama-sa@sirket-uretim-web.iam.gserviceaccount.com \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:sirket-uretim-web.svc.id.goog[uretim/uygulama-ksa]"
apiVersion: v1
kind: ServiceAccount
metadata:
  name: uygulama-ksa
  namespace: uretim
  annotations:
    iam.gke.io/gcp-service-account: uygulama-sa@sirket-uretim-web.iam.gserviceaccount.com

CI/CD için Workload Identity Federation

GitHub Actions’a JSON anahtar koymak yerine, GitHub’ın OIDC belirtecine güvenirsiniz. Havuz koşulunu depoya göre daraltmayı unutmayın; aksi hâlde başka bir depo da kimliğinizi alabilir.

Anahtar oluşturmayı yasaklayın

gcloud resource-manager org-policies enable-enforce \
  constraints/iam.disableServiceAccountKeyCreation --organization=123456789012

Bu kısıtlamayı açmadan yaptığınız temizlik, ertesi hafta yenisi oluşturulduğu için boşa gider.

Doğrulama adımı

Geçişten sonra pod içinde kimliği sorgulayın:

kubectl exec -it <pod> -n uretim -- \
  curl -s -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email"

Dönen adres beklediğiniz servis hesabı olmalı. Varsayılan Compute servis hesabı dönüyorsa bağlama tutmamıştır ve pod hâlâ fazla yetkiyle çalışıyordur.

Etiketler iamguvenlikgkecicd
Mustafa Çelik

Kıdemli Sistem Yöneticisi, Ankara. 12 yıldır Windows Server, Active Directory ve ağ altyapısıyla uğraşıyor; öğrendiklerini bu blogda üretim ortamında denenmiş rehberlere çeviriyor.

Hakkımda

Bu rehber işinize yaradıysa, sonrakini kaçırmayın.

Yeni yazı yayınlandığında tek e-posta. Takvim yok, dilediğiniz an çıkabilirsiniz.

Bülten sağlayıcısı henüz bağlanmadı. Bağlanana kadar e-posta ile yazabilirsiniz ya da RSS akışını takip edebilirsiniz.