GCP Cloud CLI ile Proje ve Kimlik Yönetimi
Google Cloud projelerini CLI üzerinden yönetmek, birçok sysadmin için başlangıçta biraz kafa karıştırıcı gelebilir. Özellikle birden fazla proje ve servis hesabıyla çalışırken hangi kimlikle hangi projeye bağlı olduğunuzu takip etmek zorlaşıyor. Bu yazıda gcloud CLI aracının proje ve kimlik yönetimi özelliklerini, gerçek dünya senaryolarıyla birlikte ele alacağız.
Neden CLI ile Proje Yönetimi?
Web konsoldan her şeyi yapabilirsiniz, bunu biliyoruz. Ama günde onlarca farklı projeye geçiş yapıyorsanız, servis hesaplarını script üzerinden yönetmeniz gerekiyorsa ya da CI/CD pipeline’larınızda GCP kaynaklarına erişim sağlamanız gerekiyorsa CLI kaçınılmaz oluyor. gcloud sadece bir araç değil, GCP yönetiminin bel kemiği haline geliyor.
Tipik bir senaryoyu düşünelim: Birden fazla müşterinin GCP altyapısını yönetiyorsunuz. Sabah birinin production ortamında bir şeye bakıyorsunuz, öğleden sonra diğerinin staging projesinde deployment yapıyorsunuz. Bu geçişleri hızlı ve hatasız yapabilmek kritik önem taşıyor.
gcloud CLI Kurulumu ve İlk Yapılandırma
Başlamadan önce sisteminizde gcloud CLI’nin kurulu olduğundan emin olun. Google Cloud SDK’yı indirip kurduktan sonra ilk yapılandırmayı başlatmak için:
gcloud init
Bu komut sizi interaktif bir kurulum sürecine götürür. Hesabınızı seçer, varsayılan projenizi belirlersiniz. Ancak bu sadece başlangıç noktası. Gerçek güç, yapılandırma profillerini (configuration) anladığınızda ortaya çıkıyor.
Mevcut kurulumunuzu kontrol etmek için:
gcloud info
Bu çıktı size hangi hesapla giriş yaptığınızı, aktif projenizi, SDK sürümünüzü ve konfigürasyon dosyalarının nerede olduğunu gösterir. Sorun gidermede ilk bakılacak yer burasıdır.
Konfigürasyon Profilleri: Çoklu Ortam Yönetiminin Kalbi
gcloud konfigürasyonları, birden fazla GCP hesabı ve projesiyle çalışırken hayat kurtarıcı oluyor. Her konfigürasyon farklı bir profil gibi düşünebilirsiniz.
Mevcut konfigürasyonları listelemek için:
gcloud config configurations list
Yeni bir konfigürasyon oluşturmak için:
gcloud config configurations create musteri-a-prod
Bir konfigürasyonu aktif etmek için:
gcloud config configurations activate musteri-a-prod
Aktif konfigürasyona hesap ve proje bilgisi eklemek:
gcloud config set account [email protected]
gcloud config set project musteri-a-production-2024
gcloud config set compute/region europe-west1
gcloud config set compute/zone europe-west1-b
Artık musteri-a-prod konfigürasyonunu aktif ettiğinizde, tüm komutlar otomatik olarak bu hesap ve projeyi kullanacak. Müşteri B’ye geçmek için sadece:
gcloud config configurations activate musteri-b-staging
Konfigürasyonları silmek gerektiğinde:
gcloud config configurations delete eski-konfigurasyon
Proje Yönetimi
Projeleri Listeleme ve Filtreleme
Erişiminiz olan tüm projeleri görmek için:
gcloud projects list
Onlarca proje varsa filtreleme şart oluyor:
# İsme göre filtrele
gcloud projects list --filter="name:production"
# Belirli bir label'a göre filtrele
gcloud projects list --filter="labels.env=prod"
# Sadece belirli alanları göster
gcloud projects list --format="table(projectId, name, projectNumber)"
Proje Oluşturma ve Yapılandırma
Yeni proje oluşturmak basit görünür ama bazı incelikler var. Proje ID’si global olarak benzersiz olmalı ve bir kez belirlendikten sonra değiştirilemiyor:
gcloud projects create my-app-backend-2024
--name="My App Backend"
--labels=env=prod,team=backend,owner=sysadmin
Projeyi oluşturduktan sonra billing hesabına bağlamayı unutmayın. Billing olmadan birçok servis kullanamıyorsunuz:
# Billing hesaplarını listele
gcloud billing accounts list
# Projeyi billing'e bağla
gcloud billing projects link my-app-backend-2024
--billing-account=0X0X0X-0X0X0X-0X0X0X
Aktif projeyi değiştirmek için:
gcloud config set project my-app-backend-2024
Ya da tek bir komut için farklı proje kullanmak istiyorsanız (konfigürasyonu değiştirmeden):
gcloud compute instances list --project=baska-proje-id
IAM ve Kimlik Yönetimi
IAM (Identity and Access Management) GCP’nin en kritik konularından biri. Kimin neye erişebileceğini doğru yapılandırmak, hem güvenlik hem de operasyonel açıdan hayati önem taşıyor.
Mevcut IAM Politikalarını İnceleme
Bir projenin IAM politikasını görmek için:
gcloud projects get-iam-policy my-app-backend-2024
Çıktı YAML formatında geliyor. JSON formatında almak isterseniz:
gcloud projects get-iam-policy my-app-backend-2024
--format=json > iam-policy-backup.json
Bu çıktıyı düzenli olarak almanızı ve versiyon kontrolüne almanızı öneririm. IAM politikasında beklenmedik bir değişiklik olduğunda geri dönmek için kritik.
Rol Atama ve Yönetimi
Bir kullanıcıya rol atamak için:
gcloud projects add-iam-policy-binding my-app-backend-2024
--member="user:[email protected]"
--role="roles/compute.viewer"
Rol kaldırmak için:
gcloud projects remove-iam-policy-binding my-app-backend-2024
--member="user:[email protected]"
--role="roles/compute.viewer"
Bir kullanıcının hangi rollere sahip olduğunu sorgulamak:
gcloud projects get-iam-policy my-app-backend-2024
--flatten="bindings[].members"
--filter="bindings.members:[email protected]"
--format="table(bindings.role)"
Servis Hesapları: CI/CD ve Otomasyon için
Servis hesapları, uygulamaların ve otomasyonların GCP API’larına erişmesi için kullanılan özel kimlikler. Gerçek kullanıcı hesapları yerine servis hesabı kullanmak, güvenlik açısından en iyi pratik.
Servis Hesabı Oluşturma
gcloud iam service-accounts create github-actions-deploy
--display-name="GitHub Actions Deployment"
--description="CI/CD pipeline için kullanılan servis hesabı"
Oluşturulan servis hesabını listelemek için:
gcloud iam service-accounts list
Servis Hesabına Rol Atama
Servis hesabının e-posta adresi formatı: HESAP_ADI@PROJE_ID.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding my-app-backend-2024
--member="serviceAccount:github-actions-deploy@my-app-backend-2024.iam.gserviceaccount.com"
--role="roles/container.developer"
gcloud projects add-iam-policy-binding my-app-backend-2024
--member="serviceAccount:github-actions-deploy@my-app-backend-2024.iam.gserviceaccount.com"
--role="roles/storage.objectAdmin"
Servis Hesabı Anahtarı Oluşturma
CI/CD sistemleri için JSON key dosyası oluşturmanız gerekebilir:
gcloud iam service-accounts keys create ~/keys/github-actions-key.json
--iam-account=github-actions-deploy@my-app-backend-2024.iam.gserviceaccount.com
Önemli uyarı: Bu JSON dosyasını kesinlikle versiyon kontrolüne eklemeyin. .gitignore dosyanıza ekleyin ve güvenli bir şekilde saklayın. Mümkün olduğunda Workload Identity Federation kullanın, bu yöntem anahtar dosyası gerektirmiyor.
Mevcut anahtarları listelemek ve eski anahtarları temizlemek için:
# Anahtarları listele
gcloud iam service-accounts keys list
--iam-account=github-actions-deploy@my-app-backend-2024.iam.gserviceaccount.com
# Eski anahtarı sil
gcloud iam service-accounts keys delete ANAHTAR_ID
--iam-account=github-actions-deploy@my-app-backend-2024.iam.gserviceaccount.com
Application Default Credentials Yönetimi
Yerel geliştirme ortamında çalışırken Application Default Credentials (ADC) kullanmak en pratik yaklaşım. Kod içinde kimlik bilgisi hardcode etmek yerine, SDK’nın kimliği otomatik yönetmesine izin veriyorsunuz.
ADC’yi ayarlamak için:
gcloud auth application-default login
Bu komut tarayıcı açar ve Google hesabınızla giriş yapmanızı ister. Kimlik bilgileri ~/.config/gcloud/application_default_credentials.json dosyasına kaydedilir.
Belirli bir servis hesabıyla ADC kullanmak için:
gcloud auth application-default login
--impersonate-service-account=github-actions-deploy@my-app-backend-2024.iam.gserviceaccount.com
Mevcut kimlik doğrulama durumunu kontrol etmek:
gcloud auth list
Belirli bir hesabı aktif yapmak:
gcloud config set account [email protected]
Hesap çıkışı yapmak:
gcloud auth revoke [email protected]
Gerçek Dünya Senaryosu: Çoklu Müşteri Yönetimi
Diyelim ki üç farklı müşterinin GCP altyapısını yönetiyorsunuz. Her birinin birden fazla projesi var (prod, staging, dev). İşte benim kullandığım yaklaşım:
# Her müşteri için konfigürasyon oluştur
gcloud config configurations create musteri-alfa-prod
gcloud config configurations activate musteri-alfa-prod
gcloud config set account [email protected]
gcloud config set project alfa-production-proj
gcloud config set compute/region us-central1
gcloud config configurations create musteri-beta-staging
gcloud config configurations activate musteri-beta-staging
gcloud config set account [email protected]
gcloud config set project beta-staging-proj
gcloud config set compute/region europe-west1
# Hangi konfigürasyonda olduğunuzu kontrol edin
gcloud config configurations list
Bu yaklaşımla işe başlarken hangi müşterinin projesine geçeceğinizi bir komutla hallediyorsunuz ve yanlış projeye komut çalıştırma riskini minimize ediyorsunuz.
Shell prompt’unuza aktif GCP projesini eklemek de faydalı. .bashrc veya .zshrc dosyanıza şunu ekleyin:
# .bashrc veya .zshrc
export PS1='[u@h W $(gcloud config get-value project 2>/dev/null)]$ '
Bu sayede terminal pencerenizde her zaman hangi GCP projesinde olduğunuzu görürsünüz. Yanlış projeye komut göndermenin önüne geçen basit ama etkili bir çözüm.
Proje Düzeyinde Politika ve Kota Yönetimi
Proje kotalarını görüntülemek özellikle kaynak limitleriyle karşılaştığınızda işe yarıyor:
gcloud compute project-info describe --project=my-app-backend-2024
Etkin API’ları listeleme ve yönetme:
# Etkin servisleri listele
gcloud services list --enabled
# Servis etkinleştir
gcloud services enable container.googleapis.com
# Servis devre dışı bırak (dikkatli kullanın!)
gcloud services disable container.googleapis.com
Proje etiketlerini yönetmek, büyük organizasyonlarda maliyet takibi ve kaynak organizasyonu için kritik:
# Etiket ekle
gcloud projects update my-app-backend-2024
--update-labels=env=prod,cost-center=backend-team,owner=sysadmin-team
# Etiket kaldır
gcloud projects update my-app-backend-2024
--remove-labels=eski-etiket
Güvenlik İpuçları ve En İyi Pratikler
Kimlik ve proje yönetiminde sıkça yapılan hataları ve bunlardan kaçınma yollarını özetleyelim:
En az ayrıcalık prensibi: Servis hesaplarına ve kullanıcılara sadece ihtiyaçları olan rolleri verin. roles/owner veya roles/editor vermek kolaydır ama güvenlik açısından tehlikelidir. Granüler roller kullanın.
Servis hesabı anahtarlarından kaçının: Mümkün olduğunda Workload Identity Federation veya instance service account kullanın. Anahtar dosyaları çalındığında veya sızdığında büyük risk oluşturur.
IAM politikalarını düzenli denetleyin: Kim hangi projeye erişebiliyor? Çıkan çalışanların erişimi kaldırıldı mı? Bu soruları düzenli sormak gerekiyor.
Organizasyon politikaları kullanın: Varsa GCP Organization’ınızda organizasyon düzeyinde politikalar belirleyin. Örneğin belirli bölgeler dışında kaynak oluşturulmasını engelleyebilirsiniz.
Audit log’ları aktif edin: Kim ne zaman neye erişti? Bu soruların cevabı Cloud Audit Logs’ta. Özellikle production projeleri için Data Access audit log’larını da açın.
# Audit log politikasını görüntüle
gcloud projects get-iam-policy my-app-backend-2024
--format=json | python3 -m json.tool | grep -A 5 "auditLogConfigs"
Sık Kullanılan Yönetim Komutları Özeti
Günlük işlerde en çok kullandığım komutları bir araya getireyim:
gcloud config get-value project: Aktif projeyi öğrenmek için hızlı yol, script’lerde sık kullanılır.
gcloud config configurations activate: Konfigürasyon geçişi için temel komut.
gcloud auth list: Hangi hesapların login olduğunu görmek için.
gcloud projects list –filter: Büyük organizasyonlarda proje bulmak için.
gcloud iam service-accounts list: Projedeki tüm servis hesaplarını görmek için.
gcloud projects get-iam-policy: IAM politikasını dışa aktarmak için, backup olarak saklayın.
gcloud services list –enabled: Projedeki aktif API’ları kontrol etmek için, özellikle sorun gidermede.
Sonuç
GCP CLI ile proje ve kimlik yönetimi, başta karmaşık görünse de bir sisteme oturttuğunuzda günlük operasyonlarınızı ciddi ölçüde hızlandırıyor. Konfigürasyon profilleri sayesinde birden fazla proje ve hesap arasında güvenli geçişler yapabilir, servis hesapları ve IAM rolleriyle otomasyon altyapınızı güvenli şekilde kurabilirsiniz.
En önemli tavsiyem şu: Her şeyi script’leyin ve versiyon kontrolüne alın. IAM politikalarınızı, servis hesabı yapılandırmalarınızı, hatta konfigürasyon kurulum script’lerinizi Git’te tutun. Bir gün yeni bir ekip üyesi geldiğinde ya da bir ortamı sıfırdan kurmanız gerektiğinde bu alışkanlık sizi kurtaracak. GCP’de “infrastructure as code” yaklaşımının temeli CLI komutlarının iyi anlaşılmasından geçiyor ve bu yazıdaki komutlar o temelin önemli bir parçası.
