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

1. Giriş

VPC Hizmet Kontrolleri (VPC-SC), Google Cloud'da kurumsal müşterilerin veri hırsızlığı risklerini azaltmasını sağlayan kuruluş düzeyinde bir güvenlik kontrolüdür. VPC Hizmet Kontrolleri, istemcilerin kasıtlı ve kasıtsız kayıpları azaltmak için internetten ve diğer hizmetlerden çok kiracılı hizmetlere bağlanırken yetkili IP'lere, istemci bağlamına ve cihaz parametrelerine erişimi kısıtlamasına olanak tanıyarak çok kiracılı hizmetlere sıfır güven ilkeli erişim seçeneği sunar. VPC Hizmet Kontrolleri Temel Eğiticisi I bölümünde 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ğiticinin hedefleri şunlardır:

  • VPC Hizmet Kontrolleri ile ilgili temel bilgileri anlama
  • Hizmet çevresini güncelleme ve Test modunu kullanarak test etme
  • VPC Hizmet Kontrolleri ile iki hizmeti koruyun
  • Cloud Storage'da bir nesne listelerken VPC Hizmet Kontrolleri çıkış ihlalini giderme

2. Kurulum ve şartlar

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

  • GCP Kuruluşu.
  • Kuruluş altında bir klasör.
  • Aynı Kuruluşta yer alan 2 GCP projesinin klasöre yerleştirildi.
  • Kuruluş düzeyindeki gerekli izinler.
  • Her iki projenin faturalandırma hesabı.
  • VPC Hizmet Kontrolleri Temel Eğiticisi I VPC Hizmet Kontrolleri ve Bağlam Erişim Yöneticisi kurulumu.

dbec101f41102ca2.png

Kaynak kurulumu

  1. Kaynakları "Kaynak kurulumu" bölümünde açıklandığı şekilde ayarlayın VPC Hizmet Kontrolleri Temel Eğiticisi I'nin bölümü
  2. Cloud Storage'ı yönetmek için gerekli izinlere sahip olduğunuzu doğrulayın.
  3. Bu eğitim için Cloud Console yerine KSA'yı kullanmaya başlayacağız. Geliştirme ortamlarından birinde gcloud CLI'ı ayarlayın:
  • Cloud Shell: gcloud CLI'nin halihazırda kurulu olduğu bir online terminal kullanmak için Cloud Shell'i etkinleştirin.

Cloud Console'un 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 rehberine bakın.

a0ceb29950db4eac.png

  • Local shell (Yerel kabuk): Yerel bir geliştirme ortamı kullanmak için gcloud CLI'ı 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 çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki Ücretsiz Deneme Programı'ndan yararlanabilir.

Maliyet oluşturulacak tek kaynak, Sanal Makine Örneği ve Cloud Storage Nesnesi'dir. Sanal makine örneğinin tahmini maliyetini fiyat hesaplayıcıda bulabilirsiniz. Cloud Storage'ın tahmini maliyetini bu fiyatlandırma listesinde bulabilirsiniz.

3. Storage Paketi ve Nesnesi Oluşturma

Daha önce de belirtildiği gibi, önceki eğitimde oluşturulan kaynakları yeniden kullanacağız. Cloud Storage paketi oluşturma işlemine devam edelim. Bu eğitim için konsol yerine gcloud KSA'yı kullanmaya başlayacağız.

  1. Google Console'da ProjectX'i seçin. Bu projede Storage Paketini ve nesneyi oluşturacağız.
  2. Aşağıdaki komutu çalıştırarak Cloud Shell'i ProjectX'i kullanacak şekilde ayarladığınızdan 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. Bir .txt dosyası oluşturacağız.
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

Konsolda hello.txt dosyasının listelendiğini göreceksiniz.

4. Cloud Storage API'sini koruma

Önceki codelab'de bir çevre oluşturduk ve Compute Engine API'yi koruduk. Bu codelab'de prova modu çevremizi düzenleyecek ve Cloud Storage'ı ekleyeceğiz. Bu, denetleme günlüklerinde VPC Hizmet Kontrolleri ihlallerini göstererek çevre korumasının etkisini belirlememize yardımcı olacaktır. Ancak çevreyi zorunlu kılana kadar kaynaklar erişilebilir durumda kalacaktır.

  1. Google Console'da Kuruluşunuzu seçin; VPC Hizmet Kontrolleri'ne erişme. Kuruluş kapsamında olduğunuzdan emin olun.
  2. Cloud Shell'i açın ve Prova çevresi "SuperProtection" değerini güncelleyin şu adımları izleyin:
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ış hizmetlerin altında listelendiğini göreceksiniz

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

2025ddc01a2e9a81.png

5. Cloud Storage API'nin korunduğunu doğrulama

Prova modunda, "SuperProtection" çevre, ProjectZ'de oluşturulan sanal makine örneğindeki nesneyi Depolama Paketini barındıran ProjectX'te listeleyerek reddi bize gösteriyor

  1. Cloud Console'da proje seçiciye gidip ProjectZ'yi seçin, ardından Compute Engine'e gidin > Sanal Makine Örnekleri.
  2. Sanal Makine Örneği'ne bağlanmak ve bunun 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 prova modunda korunduğu için kaynakları listeleyebilirsiniz ancak ProjectZ denetleme günlüklerinde bir hata mesajı görmeniz gerekir.

  1. ProjectZ'de Logs Explorer API'ye gidin ve VPC Hizmet Kontrolleri'nin son hata mesajını arayın. Aradığımız günlüğü edinmek 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 bize Cloud Storage'a ait prova modunda yapılan en son ihlali gösterir. Günlüğün nasıl göründüğüne dair bir örneği burada bulabilirsiniz. ProjectX'te bulunan paketteki içerikleri listelemeye çalışırken ihlalin bir çıkış çıkış 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 ihlali oluşturduğunu doğruladığımız için çevreyi yeni yapılandırmayla zorunlu kılacağız. Cloud Shell'i açın ve prova çevresini zorunlu kılın:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. SSH kullanarak sanal makine örneğine bağlanın ve prova çevresinin doğru şekilde zorunlu kılındığını doğrulamak için depolama paketini tekrar listeleyin.
gcloud storage ls gs://BUCKET_NAME

Sanal Makine KSA'sında Depolama nesneleri listesi yerine VPC Hizmet Kontrolü ihlali gösterilir:

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"

Veri okumayı veya çevre dışındaki bir kaynağa veri kopyalamayı önlemek için VPC Hizmet Kontrolleri'ni kullanarak veri hırsızlığını başarıyla önledik.

6. Liste reddiyle ilgili sorunları giderme.

Sanal makine örneği KSA'sından aldığımız ret sorununu gidereceğiz. Denetleme günlüklerini kontrol edip VPC Hizmet Kontrolleri benzersiz kimliğini arayalı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ği'ni bulun:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

Bu, 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ığı için ana hesap, "PROJECT_NUMBER-compute@developer.gserviceaccount.com" Compute Engine hizmet hesabı olmalıdır

VPC Hizmet Kontrolleri benzersiz kimliğine zaten sahip olduğumuzdan, şu filtreyi kullanarak istenen günlüğü doğrudan almak için bu kimliği kullanabiliriz:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. VPC Hizmet Kontrolleri başlığını tıklayıp "Reddetme sorunlarını giderme"yi seçin. VPC Hizmet Kontrolleri Sorun Gidericisi'ni açar.

Bu API, ihlal nedenini ve diğer faydalı hususların yanı sıra giriş veya çıkış ihlali olup olmadığını bize yardımcı bir kullanıcı arayüzünde gösterecektir.

Bu alıştırmada şunları göreceğiz:

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 bilgi, Compute Engine hizmet hesabının ProjectZ'den ProjectX'e giden depolama paketine erişmesine izin vermek için bir çıkış kuralı oluşturmamız gerektiğini bilmemiz 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şımına izin vermemiz gerekiyor.

  1. Cloud Shell'i etkinleştirin ve metin düzenleyici kullanarak çıkış kuralıyla 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 

Şimdi pakete sanal makine örneğinden erişmeyi tekrar deneyebiliriz.

  1. Cloud Console'da proje seçiciye gidip ProjectZ'yi seçin, ardından Compute Engine'e gidin > Sanal Makine Örnekleri.
  2. Sanal Makine Örneği'ne bağlanmak ve bunun komut satırına erişmek için SSH düğmesini tıklayın.
  3. Sanal makine KSA'sına girdikten sonra, depolama paketindeki nesneleri listelemeyi deneyin.
gcloud storage ls gs://BUCKET_NAME/

Şu 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. Depolama 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 sanal makine örneğinin KSA'sındaki hello.txt dosyasını listelemeyi deneyelim .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

Artık nesneyi VPC Hizmet Kontrolleri izin ihlali olmadan listeleyebiliyoruz. Peki ya dosyayı indirelim? Bir deneme yapalım.

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

Aşağıdaki çıkışı elde ederiz

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

7. Temizleme

Hizmet kullanımda değilken VPC Hizmet Kontrolleri'nin kullanımı için ayrı bir ücret alınmaz ancak en iyi uygulama, bu laboratuvarda kullanılan kurulumu temizlemektir. Ücret ödemek istemiyorsanız sanal makine örneğinizi ve/veya Cloud projelerinizi de silebilirsiniz. Cloud projenizi sildiğinizde, söz konusu projede kullanılan tüm kaynakların faturalandırması durdurulur.

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

da0abf0894fe03cd.png

  1. Çevreyi silmek için aşağıdaki adımları tamamlayın:
  • Google Cloud konsolunda Güvenlik'i, ardından Kuruluş kapsamında VPC Hizmet Kontrolleri'ni tıklayın.
  • VPC Hizmet Kontrolleri sayfasında, silmek istediğiniz çevreye karşılık gelen tablo satırında "Sil Simgesi"ni tıklayın.
  1. Erişim Düzeyi'ni silmek için aşağıdaki adımları uygulayın:
  • Google Cloud konsolunda Klasör kapsamındaki Bağlam Erişim Yöneticisi sayfasını açın.
  • Izgaradaki, silmek istediğiniz erişim düzeyinin satırında "Simgeyi Sil"i 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ı uygulayın:
  • Google Cloud konsolunda IAM ve Yönetici Ayarları sayfasına giderek silebilirsiniz.
  • 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 VPC Hizmet Kontrolleri prova çevresini güncellediniz, çevreyi zorunlu kıldınız ve sorunu 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.