GCP Identity-Aware Proxy (IAP) ile Güvenli Uygulama Erişimi Yapılandırması

Kurumsal ortamlarda web uygulamalarına, SSH bağlantılarına veya dahili servislere güvenli erişim sağlamak her zaman baş ağrısı olmuştur. VPN kurmak, IP kısıtlamaları yazmak, firewall kurallarıyla boğuşmak… Google Cloud Platform’un sunduğu Identity-Aware Proxy (IAP) bu karmaşayı ciddi ölçüde azaltıyor. IAP, kimlik doğrulamayı ağ katmanından önce uygulama katmanında gerçekleştirerek sıfır güven mimarisinin temel taşlarından biri haline geliyor. Bu yazıda IAP’yi sıfırdan kurarak gerçek dünya senaryolarında nasıl kullanacağınızı adım adım göstereceğim.

IAP Nedir ve Neden Kullanmalısınız?

Identity-Aware Proxy temelde şunu yapar: kullanıcının kim olduğunu ve hangi politikalara uygun erişim hakkına sahip olduğunu doğruladıktan sonra uygulamanıza ulaştırır. Geleneksel yaklaşımda bir uygulamayı korumanın yolu VPN veya IP bazlı kısıtlamalardı. IAP ile artık her kullanıcı için bireysel kimlik doğrulama ve yetkilendirme yapabiliyorsunuz.

Özellikle şu senaryolarda IAP vazgeçilmez oluyor:

  • Dahili dashboard’lara uzaktan çalışan ekiplerin erişmesi gerektiğinde
  • SSH/RDP bağlantılarını public IP açmadan sağlamak istediğinizde
  • Farklı kullanıcı gruplarına farklı uygulamalara erişim vermek gerektiğinde
  • Ekibinizdeki bir kişi şirketten ayrıldığında erişimi tek noktadan kesmek istediğinizde
  • Compliance gereksinimlerini karşılamak için erişim loglarına ihtiyaç duyduğunuzda

IAP’nin en güzel yanı, uygulamanızın kodunu değiştirmenize gerek olmaması. Google’ın global load balancer altyapısıyla entegre çalışıyor ve authentication/authorization katmanını sizin yerinize hallediyor.

Ön Hazırlık ve Gereksinimler

Başlamadan önce birkaç şeyin hazır olması gerekiyor. GCP projenizde billing aktif olmalı, gcloud CLI kurulu ve authenticate edilmiş olmalı.

# gcloud versiyon kontrolü ve güncelleme
gcloud version
gcloud components update

# Aktif proje ve hesap kontrolü
gcloud config list

# Gerekli API'leri aktif et
gcloud services enable iap.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

Projenizin ID’sini bir değişkene atayalım, sonraki adımlarda işimize yarayacak:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
echo "Project ID: $PROJECT_ID"
echo "Project Number: $PROJECT_NUMBER"

HTTP(S) Load Balancer ile IAP Kurulumu

IAP’nin HTTPS uygulamalarıyla çalışması için Google Cloud Load Balancing’e ihtiyaç var. Adım adım bir senaryo üzerinden gidelim. Diyelim ki dahili bir monitoring dashboard’unuz var ve bunu belirli ekip üyelerine açmak istiyorsunuz.

Backend Servisi Oluşturma

Önce örnek bir uygulama instance grubu oluşturalım:

# Instance template oluştur
gcloud compute instance-templates create web-template 
    --machine-type=e2-micro 
    --image-family=debian-11 
    --image-project=debian-cloud 
    --tags=http-server 
    --metadata=startup-script='#!/bin/bash
apt-get update
apt-get install -y apache2
echo "<h1>IAP ile Korunan Uygulama</h1><p>Hosgeldiniz: $(hostname)</p>" > /var/www/html/index.html
systemctl start apache2'

# Managed instance group oluştur
gcloud compute instance-groups managed create web-mig 
    --template=web-template 
    --size=2 
    --zone=europe-west1-b

# Named port tanımla
gcloud compute instance-groups managed set-named-ports web-mig 
    --named-ports=http:80 
    --zone=europe-west1-b

Load Balancer Bileşenlerini Yapılandırma

# Health check oluştur
gcloud compute health-checks create http iap-health-check 
    --port=80 
    --request-path=/

# Backend servisi oluştur
gcloud compute backend-services create iap-backend 
    --protocol=HTTP 
    --health-checks=iap-health-check 
    --global

# Instance group'u backend'e ekle
gcloud compute backend-services add-backend iap-backend 
    --instance-group=web-mig 
    --instance-group-zone=europe-west1-b 
    --global

# URL map oluştur
gcloud compute url-maps create iap-url-map 
    --default-service=iap-backend

# SSL sertifikası oluştur (Google managed)
gcloud compute ssl-certificates create iap-ssl-cert 
    --domains=yourdomain.example.com 
    --global

# HTTPS proxy oluştur
gcloud compute target-https-proxies create iap-https-proxy 
    --url-map=iap-url-map 
    --ssl-certificates=iap-ssl-cert

# Forwarding rule oluştur
gcloud compute forwarding-rules create iap-forwarding-rule 
    --target-https-proxy=iap-https-proxy 
    --ports=443 
    --global

Bu adımdan sonra load balancer IP adresinizi alıp DNS kaydınızı güncelleyin:

gcloud compute forwarding-rules describe iap-forwarding-rule 
    --global 
    --format="value(IPAddress)"

IAP’yi Aktif Etme ve Kullanıcı Yetkilendirme

Load balancer hazır olduktan sonra IAP’yi backend servisimiz için etkinleştirelim. Bu adım için GCP Console üzerinden veya gcloud ile yapabilirsiniz. Ben her iki yolu da göstereceğim çünkü bazı ayarlar sadece Console’dan yapılabiliyor.

Console üzerinden: IAP sayfasına gidin (Security > Identity-Aware Proxy), backend servisinizi bulun ve toggle ile IAP’yi açın.

gcloud ile yetkilendirme:

# Belirli bir kullanıcıya IAP erişimi ver
gcloud iap web add-iam-policy-binding 
    --resource-type=backend-services 
    --service=iap-backend 
    --member="user:[email protected]" 
    --role="roles/iap.httpsResourceAccessor"

# Tüm bir Google Group'a erişim ver (daha yönetilebilir)
gcloud iap web add-iam-policy-binding 
    --resource-type=backend-services 
    --service=iap-backend 
    --member="group:[email protected]" 
    --role="roles/iap.httpsResourceAccessor"

# Domain bazlı erişim (tüm şirket çalışanları)
gcloud iap web add-iam-policy-binding 
    --resource-type=backend-services 
    --service=iap-backend 
    --member="domain:sirketiniz.com" 
    --role="roles/iap.httpsResourceAccessor"

Mevcut IAP politikasını kontrol etmek için:

gcloud iap web get-iam-policy 
    --resource-type=backend-services 
    --service=iap-backend

IAP ile SSH Tünel Kurulumu

IAP’nin en kullanışlı özelliklerinden biri SSH tünelleme. Artık VM’lerinize public IP vermeden, VPN kurmadan güvenli SSH bağlantısı yapabiliyorsunuz. Bu özellik özellikle production ortamlarında altın değerinde.

Önce gerekli firewall kuralını ekleyin. IAP’nin SSH tüneli için Google’ın IP aralığını kullanması gerekiyor:

# IAP SSH tüneli için firewall kuralı
gcloud compute firewall-rules create allow-ssh-from-iap 
    --network=default 
    --allow=tcp:22 
    --source-ranges=35.235.240.0/20 
    --target-tags=iap-ssh-allowed 
    --description="IAP SSH tunnel icin Google IP araligi"

# VM instance'ınıza tag ekleyin
gcloud compute instances add-tags web-vm-1 
    --tags=iap-ssh-allowed 
    --zone=europe-west1-b

Şimdi IAP üzerinden SSH bağlantısı:

# IAP tüneli ile SSH
gcloud compute ssh web-vm-1 
    --zone=europe-west1-b 
    --tunnel-through-iap

# Port forwarding ile (örneğin local 8080'i VM'nin 80'ine yönlendir)
gcloud compute start-iap-tunnel web-vm-1 80 
    --local-host-port=localhost:8080 
    --zone=europe-west1-b

Bu komut çalıştığında localhost:8080 adresine giderek VM’deki uygulamaya erişebilirsiniz. Harika olan şu: ne VM’in public IP’si var ne de 22. port açık. Tamamen IAP kimlik doğrulaması üzerinden gidiyor.

IAP için OAuth Consent Screen Yapılandırması

IAP kurulumu sırasında muhtemelen OAuth consent screen ile ilgili bir uyarı aldınız. Bu ekranı düzgün yapılandırmak önemli, özellikle external kullanıcılar söz konusuysa.

# OAuth brand oluşturma (internal kullanım için)
gcloud iap oauth-brands create 
    --application_title="Sirket Dahili Uygulamalari" 
    [email protected]

# Mevcut brand'leri listele
gcloud iap oauth-brands list

# OAuth client oluştur
gcloud iap oauth-clients create 
    projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER 
    --display_name="IAP Client"

Programatik Erişim için IAP Token Kullanımı

Bazen uygulamalar arası iletişimde de IAP koruması isteyebilirsiniz. Bir servis hesabı ile IAP korumalı endpoint’e erişmek gerektiğinde şu yaklaşımı kullanın:

# Servis hesabı oluştur
gcloud iam service-accounts create iap-service-account 
    --display-name="IAP Service Account" 
    --project=$PROJECT_ID

# Servis hesabına IAP erişimi ver
gcloud iap web add-iam-policy-binding 
    --resource-type=backend-services 
    --service=iap-backend 
    --member="serviceAccount:iap-service-account@$PROJECT_ID.iam.gserviceaccount.com" 
    --role="roles/iap.httpsResourceAccessor"

# Key dosyası oluştur
gcloud iam service-accounts keys create iap-sa-key.json 
    --iam-account=iap-service-account@$PROJECT_ID.iam.gserviceaccount.com

Python ile programatik IAP token alma örneği:

# google-auth kütüphanesini yükle
pip install google-auth requests

# Test script'ini çalıştır
python3 << 'EOF'
import google.auth
import google.auth.transport.requests
from google.oauth2 import service_account

# IAP client ID'nizi buraya girin (Console'dan alabilirsiniz)
IAP_CLIENT_ID = "YOUR_IAP_CLIENT_ID.apps.googleusercontent.com"
TARGET_URL = "https://yourdomain.example.com"

credentials = service_account.IDTokenCredentials.from_service_account_file(
    "iap-sa-key.json",
    target_audience=IAP_CLIENT_ID
)

request = google.auth.transport.requests.Request()
credentials.refresh(request)

import requests as req
headers = {"Authorization": f"Bearer {credentials.token}"}
response = req.get(TARGET_URL, headers=headers)
print(f"Status: {response.status_code}")
print(f"Response: {response.text[:200]}")
EOF

IAP Politikalarını İzleme ve Denetim

Erişim loglarını takip etmek compliance açısından kritik. Cloud Logging entegrasyonu sayesinde kim, ne zaman, hangi kaynağa erişti detaylıca görebiliyorsunuz.

# IAP erişim loglarını filtrele
gcloud logging read 
    'protoPayload.serviceName="iap.googleapis.com"' 
    --limit=50 
    --format="table(timestamp, protoPayload.authenticationInfo.principalEmail, protoPayload.requestMetadata.callerIp, protoPayload.status.message)"

# Başarısız erişim denemelerini bul
gcloud logging read 
    'protoPayload.serviceName="iap.googleapis.com" AND protoPayload.status.code!=0' 
    --limit=20 
    --format="json" | python3 -m json.tool

Alerting için log tabanlı metrik oluşturun:

# Başarısız IAP erişimleri için metrik
gcloud logging metrics create iap-failed-access 
    --description="IAP uzerinden basarisiz erisim denemeleri" 
    --log-filter='protoPayload.serviceName="iap.googleapis.com" AND protoPayload.status.code=403'

Bağlam Duyarlı Erişim Politikaları

IAP’nin gerçek gücü bağlam duyarlı (context-aware) erişim politikalarında ortaya çıkıyor. Kullanıcının kim olduğunun ötesinde, nereden bağlandığını, cihazının güvenlik durumunu da değerlendirebiliyorsunuz. Bu özellik Access Context Manager ile entegre çalışıyor.

# Access policy oluştur (organization seviyesinde)
gcloud access-context-manager policies create 
    --organization=$ORG_ID 
    --title="Sirket Erisim Politikasi"

# IP bazlı erişim seviyesi oluştur
gcloud access-context-manager levels create CORPORATE_NETWORK 
    --title="Kurumsal Ag" 
    --basic-level-spec=ip_subnetworks.yaml 
    --policy=$POLICY_ID

ip_subnetworks.yaml dosyası şu formatta olmalı:

cat > ip_subnetworks.yaml << 'EOF'
- ipSubnetworks:
  - 203.0.113.0/24
  - 198.51.100.0/24
EOF

Yaygın Sorunlar ve Çözümleri

Pratikte en sık karşılaşılan durumları paylaşayım:

“403: You don’t have access” hatası: Kullanıcıya roles/iap.httpsResourceAccessor rolü verilmediğinde alınır. IAM politikasını kontrol edin.

# Mevcut binding'leri kontrol et
gcloud projects get-iam-policy $PROJECT_ID 
    --flatten="bindings[].members" 
    --filter="bindings.role:iap" 
    --format="table(bindings.role, bindings.members)"

SSL sertifika doğrulaması beklemede: Google Managed SSL sertifikaları bazen 30-60 dakika alabilir. DNS kaydının doğru yayıldığından emin olun.

# SSL sertifika durumunu kontrol et
gcloud compute ssl-certificates describe iap-ssl-cert 
    --global 
    --format="value(managed.status, managed.domainStatus)"

IAP bypass sorunu: Backend servisine direkt erişimi engellemek için firewall kurallarının doğru olduğundan emin olun:

# Sadece Google Frontend IP'lerinden gelen trafiğe izin ver
gcloud compute firewall-rules create deny-direct-to-backend 
    --network=default 
    --action=DENY 
    --rules=tcp:80,tcp:443 
    --source-ranges=0.0.0.0/0 
    --target-tags=iap-protected 
    --priority=1000

gcloud compute firewall-rules create allow-from-google-lb 
    --network=default 
    --action=ALLOW 
    --rules=tcp:80 
    --source-ranges=130.211.0.0/22,35.191.0.0/16 
    --target-tags=iap-protected 
    --priority=900

Terraform ile IAP Altyapısını Kod Olarak Yönetme

Manuel kurulum öğrenmek için iyi ama production ortamında Terraform kullanmak şart. Temel IAP yapılandırması için örnek:

cat > iap_main.tf << 'EOF'
resource "google_iap_web_backend_service_iam_binding" "binding" {
  project = var.project_id
  web_backend_service = google_compute_backend_service.iap_backend.name
  role = "roles/iap.httpsResourceAccessor"
  members = [
    "group:[email protected]",
    "serviceAccount:${google_service_account.app_sa.email}",
  ]
}

resource "google_iap_tunnel_instance_iam_binding" "ssh_binding" {
  project = var.project_id
  zone    = "europe-west1-b"
  instance = google_compute_instance.web_vm.name
  role = "roles/iap.tunnelResourceAccessor"
  members = [
    "group:[email protected]",
  ]
}
EOF

# Terraform plan ile kontrol et
terraform init
terraform plan -var="project_id=$PROJECT_ID"
terraform apply -auto-approve

Maliyet ve Performans Değerlendirmesi

IAP kullanımının maliyeti doğrudan HTTPS Load Balancer maliyetiyle ilişkili. Türkiye’deki küçük ve orta ölçekli ekipler için yaklaşık hesap:

  • Load balancer kuralı: Saatte ~0.025 USD
  • Data processing: GB başına ~0.008 USD
  • Backend servisleri: Ücretsiz (Instance’ların kendi maliyeti ayrı)

Aylık toplam 10-30 USD civarında tutmanız mümkün. VPN lisansları veya özel güvenlik yazılımlarıyla kıyaslandığında oldukça makul.

Performans açısından IAP, Google’ın global PoP altyapısı üzerinde çalıştığı için latency çok düşük. Türkiye’den erişimde Frankfurt veya Amsterdam PoP’larına düşüyorsunuz, bu da ~20-30ms ek gecikme anlamına geliyor. Pratikte fark etmez.

Sonuç

IAP, özellikle remote ekiplerle çalışan ve bulut altyapısı üzerinde dahili uygulamalar barındıran organizasyonlar için gerçekten işe yarayan bir çözüm. VPN’in karmaşıklığından kurtuluyorsunuz, sıfır güven mimarisine adım atıyorsunuz ve tek noktadan erişim yönetimi yapabiliyorsunuz.

Bu yazıda anlattıklarımı bir checklist olarak özetleyeyim:

  • API’leri ve billing’i aktif edin
  • Load balancer + SSL sertifikası kurulumu yapın
  • IAP’yi backend servis üzerinde etkinleştirin
  • IAM binding ile kullanıcı/grup yetkilendirin
  • SSH tünelleme için firewall kurallarını ekleyin
  • Audit logging’i aktif tutun
  • Context-aware politikaları ihtiyaca göre ekleyin
  • Altyapıyı Terraform ile code olarak yönetin

Başlangıçta kurulum biraz karmaşık gelebilir, özellikle load balancer bileşenleri ilk kez yapılandırıyorsanız. Ama bir kez çalışır hale getirdiğinizde bakımı son derece kolay. Ekibinize yeni biri katıldığında IAM’dan bir satır ekliyorsunuz, ayrıldığında kaldırıyorsunuz. O kadar basit.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir