VPC Hizmet Kontrolleri Temel Eğiticisi II - Çıkış İhlalini Giderme

1. Giriş

VPC Hizmet Kontrolleri (VPC-SC), Google Cloud'da kuruluş düzeyinde bir güvenlik kontrolüdür ve kurumsal müşterilerin veri hırsızlığı risklerini azaltmasına olanak tanır. VPC Hizmet Kontrolleri, istemcilerin internetten ve diğer hizmetlerden çok kiracılı hizmetlere bağlanırken yetkilendirilmiş IP'lere, istemci bağlamına ve cihaz parametrelerine erişimi sınırlandırmasına olanak tanıyarak hem kasıtlı hem de kasıtsız veri kayıplarını azaltmak için çok kiracılı hizmetlere sıfır güven ilkeli erişim sunar. VPC Hizmet Kontrolleri Temel Eğitimi I'de gördüğümüz gibi, açıkça belirttiğiniz hizmetlerin kaynaklarını ve verilerini koruyan çevreler oluşturmak için VPC Hizmet Kontrolleri'ni kullanabilirsiniz.

Bu eğitimin hedefleri şunlardır:

  • VPC Hizmet Kontrolleri'nin temel özelliklerini anlama
  • Hizmet çevresini güncelleme ve Dry-run modunu kullanarak test etme
  • VPC Hizmet Kontrolleri ile iki hizmeti koruma
  • Cloud Storage'dan bir nesne listelerken VPC Hizmet Kontrolleri çıkış ihlaliyle ilgili sorunları giderme

2. Kurulum ve şartlar

Bu eğitim için aşağıdaki ön koşullar gereklidir:

  • GCP kuruluşu.
  • Kuruluşun altındaki bir klasör.
  • Aynı kuruluşta bulunan ve klasörün altına yerleştirilmiş 2 GCP projesi.
  • Kuruluş düzeyinde gerekli izinler.
  • Her iki proje için de faturalandırma hesabı.
  • VPC Hizmet Kontrolleri Temel Eğitimi I: VPC Hizmet Kontrolleri ve Bağlam Erişim Yöneticisi kurulumu.

dbec101f41102ca2.png

Kaynak kurulumu

  1. Kaynakları, VPC Hizmet Kontrolleri Temel Eğitimi I'in "Kaynakları ayarlama" bölümünde açıklandığı şekilde ayarlayın.
  2. Cloud Storage'ı yönetmek için gerekli izinlere sahip olduğunuzu doğrulayın.
  3. Bu eğitimde, Cloud Console yerine KSA'yı kullanmaya başlayacağız. Geliştirme ortamlarından birinde gcloud CLI'yi kurun:
  • Cloud Shell: gcloud KSA'nın önceden ayarlandığı bir online terminal kullanmak için Cloud Shell'i etkinleştirin.

Cloud Console'unuzun sağ üst köşesindeki simgeyi tıklayarak Cloud Shell'i etkinleştirin. Oturumun başlatılması birkaç saniye sürebilir. Daha fazla bilgi için Cloud Shell kılavuzuna bakın.

a0ceb29950db4eac.png

  • Yerel kabuk: Yerel geliştirme ortamı kullanmak için gcloud CLI'yı yükleyin ve başlatın.

Maliyet

Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programından yararlanabilir.

Maliyet oluşturacak tek kaynaklar sanal makine örneği ve Cloud Storage nesnesidir. Sanal makine örneğinin tahmini maliyeti fiyat hesaplayıcıda bulunabilir. Cloud Storage'ın tahmini maliyetini bu fiyatlandırma listesinde bulabilirsiniz.

3. Depolama paketi ve nesne oluşturma

Daha önce de belirttiğimiz gibi, önceki eğitimde oluşturulan kaynakları yeniden kullanacağız. Bu nedenle, Cloud Storage paketi oluşturma işlemine devam edeceğiz. Bu eğiticide konsol yerine gcloud CLI'yı kullanmaya başlayacağız.

  1. Google Console'da ProjectX'i seçin. Bu projede depolama paketi ve nesne oluşturacağız.
  2. Aşağıdaki komutu çalıştırarak Cloud Shell'in ProjectX'i kullanacak şekilde ayarlandığından emin olun:
gcloud config set project PROJECT_ID
  1. Geliştirme ortamınızda aşağıdaki komutu çalıştırın:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. ProjectZ'de bulunan sanal makine örneğinden okuyabilmemiz için bir depolama nesnesi oluşturun. .txt dosyası oluştururuz.
nano hello.txt 

Metin dosyasına istediğiniz her şeyi ekleyin.

  1. Nesneyi pakete yükleyin.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. Nesneyi listeleyerek pakete yüklendiğini doğrulayın.
gcloud storage ls gs://BUCKET_NAME

hello.txt dosyasının konsolda listelendiğini görmeniz gerekir.

4. Protect Cloud Storage API

Önceki codelab'de bir çevre oluşturup Compute Engine API'yi korumuştuk. Bu codelab'de, deneme modu çevremizi düzenleyip Cloud Storage'ı ekleyeceğiz. Bu, denetim günlüklerindeki VPC Hizmet Kontrolleri ihlallerini göstererek çevre korumasının etkisini belirlememize yardımcı olur ancak biz çevreyi zorunlu kılana kadar kaynaklara erişilebilir.

  1. Google Console'da kuruluşunuzu seçin; VPC Hizmet Kontrolleri'ne erişin. Kuruluş kapsamında olduğunuzdan emin olun.
  2. Cloud Shell'i açın ve önceki laboratuvarda oluşturulan "SuperProtection" adlı prova çevresi için güncelleme yapın:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. Çevreyi açıklayarak Cloud Storage API'nin güncellendiğini doğrulayın.
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

Çıkışta, Cloud Storage API'nin kısıtlanmış hizmetler altında listelendiğini görürsünüz.

ve Compute Engine API ile birlikte ancak "-vpcAccessibleServices: {}"" etiketiyle:

2025ddc01a2e9a81.png

5. Cloud Storage API'nin korunduğunu doğrulayın.

Deneme modunda, "SuperProtection" çevresinin, depolama paketi barındıran ProjectX'te oluşturulan sanal makine örneğindeki nesneyi ProjectZ'ye listeleyerek erişimi reddettiğini gösterdiğini doğrulayın.

  1. Cloud Console'da proje seçiciye gidip ProjectZ'yi seçin, ardından Compute Engine > VM Instances'a (Sanal Makine Örnekleri) gidin.
  2. Sanal makine örneğine bağlanmak ve komut satırına erişmek için SSH düğmesini tıklayın.

5ca02149b78c11f9.png

  1. Daha önce yüklediğimiz hello.txt dosyasını listeleyin.
gcloud storage ls gs://BUCKET_NAME

Cloud Storage API, deneme çalıştırması modunda korunduğundan kaynakları listeleyebilmeniz gerekir ancak ProjectZ denetleme günlüklerinde bir hata mesajı olmalıdır.

  1. ProjectZ'de Logs Explorer API'ye gidin ve VPC Hizmet Kontrolleri'nin son hata mesajını bulun. Aradığımız günlüğü almak için bu filtreyi kullanabilirsiniz:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
"(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"

Bu filtre, prova modunda Cloud Storage'a ait son ihlali gösterir. Günlüğün nasıl göründüğüne dair bir örnek aşağıda verilmiştir. ProjectX'te bulunan paketteki içeriği listelemeye çalışırken ihlalin çıkış ihlali olduğunu doğrulayabiliriz.

egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
  1. Cloud Storage'a yapılan API çağrısının VPC Hizmet Kontrolleri ihlaline neden olduğunu doğruladığımız için yeni yapılandırmayla çevreyi zorunlu kılacağız. Cloud Shell'i açın ve deneme sınırı uygulayın:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. SSH kullanarak sanal makine örneğine bağlanın ve Dry-run sınırının doğru şekilde uygulandığını doğrulamak için depolama paketini tekrar listeleyin.
gcloud storage ls gs://BUCKET_NAME

Depolama nesnelerinin listesi yerine sanal makine CLI'sinde bir VPC Hizmet Kontrolü ihlali alırız:

ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"

VPC Hizmet Kontrolleri'ni kullanarak verilerin çevrenin dışındaki bir kaynaktan okunmasını veya bu kaynağa kopyalanmasını önleyerek veri hırsızlığını başarıyla engelledik.

6. Liste reddiyle ilgili sorunları giderme

Sanal makine örneği CLI'sinden aldığımız ret ile ilgili sorun giderme işlemi yapacağız. Denetleme günlüklerini kontrol edip VPC Hizmet Kontrolleri benzersiz kimliğini bulalım.

  1. Proje seçiciye gidin ve ProjectZ'yi seçin.
  2. Günlük Gezgini'nde aşağıdaki sorguyu kullanarak denetleme günlüklerinde VPC Hizmet Kontrolleri benzersiz kimliğini bulun:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

Bu işlem, tüm VPC Hizmet Kontrolleri denetleme günlüklerini gösterir. Son hata günlüğünü arayacağız. API çağrısı sanal makine örneğinden yapıldığından asıl, Compute Engine hizmet hesabı "PROJECT_NUMBER-compute@developer.gserviceaccount.com" olmalıdır.

VPC Hizmet Kontrolleri benzersiz kimliğine zaten sahip olduğumuz için bu filtreyi kullanarak istediğimiz günlüğü doğrudan alabiliriz:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. VPC Hizmet Kontrolleri başlığını tıklayın ve "Erişim reddi sorunlarını giderme"yi seçin. Bu işlem, VPC Hizmet Kontrolleri Sorun Gidericisi'ni açar.

Bu API, ihlal nedenini ve bunun bir giriş veya çıkış ihlali olup olmadığını kullanıcı dostu bir kullanıcı arayüzünde gösterir.

Bu alıştırmada aşağıdakileri arayacağız:

authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Bu bilgiler, Compute Engine hizmet hesabının ProjectZ'den ProjectX'e depolama paketine erişmesine izin vermek için bir çıkış kuralı oluşturmamız gerektiğini anlamamız için yeterlidir. Ayrıca ağın aynı çevrede olmadığını görüyoruz. Bu nedenle, hizmetlerle VPC iletişimine izin vermemiz ve hizmet çevreleri arasında veri paylaşmamız gerekiyor.

  1. Cloud Shell'i etkinleştirin ve bir metin düzenleyici kullanarak çıkış kuralını içeren bir .yaml dosyası oluşturun.
nano egresstorage.yaml 
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/PROJECTX_ID
 egressFrom:
    identities:
    - serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
  1. ProjectZ'yi koruyan giriş politikasını güncelleyin.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

Artık sanal makine örneğinden kovaya erişmeyi tekrar deneyebiliriz.

  1. Cloud Console'da proje seçiciye gidip ProjectZ'yi seçin, ardından Compute Engine > VM Instances'a (Sanal Makine Örnekleri) gidin.
  2. Sanal makine örneğine bağlanmak ve komut satırına erişmek için SSH düğmesini tıklayın.
  3. Sanal makine CLI'sinde Storage Bucket'taki nesneleri listelemeyi deneyin.
gcloud storage ls gs://BUCKET_NAME/

Aşağıdaki hata mesajını alırsınız:

ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
  1. Storage paketindeki nesneleri listeleyebilmek için Compute Engine hizmet hesabına nesne okuyucu izni vermemiz gerekir.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. Bir kez daha, VM örneğinin CLI'sinden hello.txt dosyasını listelemeyi deneyelim .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

Artık nesneyi VPC Hizmet Kontrolleri izni ihlali olmadan listeleyebiliyoruz. Ancak dosyayı indirme konusunda ne yapmalıyız? Deneyelim bakalım.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

Aşağıdaki çıkışı alırız.

Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
 Completed files 1/1 | 54.0B/54.0B  

7. Temizleme

Hizmet kullanılmadığında VPC Hizmet Kontrolleri'nin kullanımı için ayrı bir ücret alınmaz ancak bu laboratuvarda kullanılan kurulumu temizlemek en iyi uygulamadır. Ücretlendirilmemek için sanal makine örneğinizi ve/veya Cloud projelerinizi de silebilirsiniz. Cloud projenizi sildiğinizde, bu projede kullanılan tüm kaynaklar için faturalandırma durdurulur.

  1. Sanal makine örneğinizi silmek için sanal makine örneği adınızın sol tarafındaki onay kutusunu seçin ve Sil'i tıklayın.

da0abf0894fe03cd.png

  1. Sınırı silmek için aşağıdaki adımları tamamlayın:
  • Google Cloud Console'da Güvenlik'i, ardından kuruluş kapsamındaki VPC Hizmet Kontrolleri'ni tıklayın.
  • VPC Hizmet Kontrolleri sayfasında, silmek istediğiniz sınıra karşılık gelen tablo satırında "Sil simgesi"ni tıklayın.
  1. Erişim düzeyini silmek için aşağıdaki adımları tamamlayın:
  • Google Cloud Console'da, klasör kapsamındaki Bağlam Erişim Yöneticisi sayfasını açın.
  • Izgarada, silmek istediğiniz erişim düzeyinin satırında "Sil simgesi"ni ve ardından Sil'i tıklayın.
  1. Storage nesnesini ve paketi silmek için aşağıdaki adımları tamamlayın:
  • Google Cloud Console'da Cloud Storage paketleri sayfasını açın .
  • Oluşturduğunuz paketin yanındaki onay kutusunu işaretleyin.
  • Sil'i tıklayın.
  • Açılan pencerede paketi silmek istediğinizi onaylayın.
  • Sil'i tıklayın.
  1. Projenizi kapatmak için aşağıdaki adımları tamamlayın:
  • Google Cloud Console'da, silmek istediğiniz projenin IAM ve Yönetici Ayarları sayfasına gidin.
  • IAM ve Yönetici Ayarları sayfasında Kapat'ı tıklayın.
  • Proje kimliğini girin ve Yine de kapat'ı tıklayın.

8. Tebrikler!

Bu codelab'de, bir VPC Hizmet Kontrolleri provası çevresini güncellediniz, zorunlu kıldınız ve sorunlarını giderdiniz.

Daha fazla bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.