VPC Hizmet Kontrolleri - BigQuery Koruması Codelab I

1. Giriş

Bu codelab'de, VPC Hizmet Kontrolleri'ni kullanarak BigQuery API'yi nasıl koruyacağınızı öğreneceksiniz. Bu codelab'de, hizmet sınırı tarafından korunan bir API hizmeti yoktur. Bu nedenle, herkese açık veri kümelerinde sorgular çalıştırılabilir ve sonuçlar bir proje tablosuna kaydedilebilir. Sorgu bir projede çalıştırılır ve sonuçların kaydedildiği tablo başka bir projede oluşturulur. Bu, verilerin bir projede depolanabileceği ancak farklı bir proje kullanılarak erişilmesi gereken bir kurulumu taklit eder.

Ardından, veri projesini korumak için bir hizmet çevresi oluşturacağız. Giriş ve çıkış kurallarını kullanarak gözlemlenen ihlalleri nasıl düzelteceğinizi ve daha sonra dahili IP adreslerini kullanarak erişimi kısıtlamak için nasıl erişim düzeyi ekleyeceğinizi öğreneceksiniz. Bu codelab'in hedefleri şunlardır:

  • Ingress ve egress kurallarını kullanarak sırasıyla ingress ve egress ihlallerini nasıl düzelteceğinizi öğrenin.
  • Belirli bir ihlalin neden gerçekleştiğini anlama
  • Uygulanan ihlal düzeltmesinin kapsamını analiz edin.
  • Erişim düzeylerini kullanarak VPC ağındaki dahili IP adreslerinden gelen trafiğe izin verme seçeneğinden yararlanarak düzeltmeyi (giriş / çıkış kuralı) değiştirip kapsamını değiştirin.

2. Kaynak kurulumu ve şartları

Başlamadan önce

Bu codelab'de, aşağıdaki konuları bildiğiniz varsayılmaktadır:

Kurulum

İlk kurulumumuz aşağıdaki gibi tasarlanmıştır:

Hiçbir API'yi korumayan hizmet çevresine sahip ilk tasarım.

Normal hizmet çevresi oluşturma

Bu codelab'de, project-1 hizmetini koruyan normal bir hizmet çevresi kullanacağız.

Compute Engine sanal makinesi oluşturun

Bu codelab'de, project-2 bölgesinde, us-central1 konumunda bulunan ve default adlı varsayılan VPC ağını kullanan 1 Compute Engine örneği kullanacağız.

Maliyet

Bulut kaynaklarını/API'lerini kullanmak için Google Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'in ötesinde faturalandırmayla karşılaşmamak için kullanılan kaynakları kapatmanızı öneririz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz deneme programından yararlanabilir.

Maliyet oluşturan kaynaklar BigQuery ve Compute Engine örneğidir. Maliyeti BigQuery fiyat hesaplayıcı ve Compute Engine fiyat hesaplayıcı ile tahmin edebilirsiniz.

3. VPC Hizmet Kontrolleri kısıtlamaları olmadan BigQuery'ye erişim

Herkese Açık Veri Kümesini Sorgulama ve Sonuçları project-1'ya Kaydetme

  1. BigQuery Studio sayfasını ziyaret ederek BigQuery API'ye erişip erişemediğinizi doğrulamak için project-2 ve project-1'ye erişin. project-1 bir hizmet çevresinde olsa bile çevre henüz herhangi bir hizmeti korumadığından bunu yapabilirsiniz.
  2. project-2 bölümünde, herkese açık bir veri kümesini sorgulamak için aşağıdaki sorguyu çalıştırın.
SELECT  name, SUM(number) AS total
FROM  `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY   name
ORDER BY total DESC
LIMIT 10;

Herkese açık veri kümesinde sorguyu çalıştırdıktan sonra (project-2 içinde kalırken):

  1. Sonuçları Kaydet'i tıklayın ve BigQuery tablosu'nu seçin. (Aşağıdaki ekran görüntüsüne bakın). BigQuery sonuçlarını kaydetme
  2. Hedef proje olarak project-1 simgesini seçin.
  3. Veri kümesini codelab_dataset olarak adlandırın. (Mevcut bir veri kümesi kullanmıyorsanız YENİ VERİ KÜMESİ OLUŞTUR'u seçin). BigQuery sonuçlarını kaydederken hedef projeyi seçme
  4. Tabloyu codelab-table olarak adlandırın.
  5. Kaydet'i tıklayın.

Herkese açık veri kümesi verileri, project-2 adresinden sorgu yürütülerek project-1 konumuna başarıyla depolandı.

project-2 kaynağından project-1 içine kaydedilen sorgu veri kümesi

project-2 BigQuery Studio'da kalmaya devam ederken aşağıdaki sorguyu çalıştırarak verileri seçin:

  • Proje: project-1
  • Veri kümesi: codelab_dataset
  • Tablo: codelab-table
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

project-2 ve project-1, BigQuery kullanımında kısıtlanmadığı için sorgu başarıyla çalıştırılmalıdır. Kullanıcıda uygun IAM izinleri olduğu sürece BigQuery'ye her yerden erişilebilir.

VPC Hizmet Kontrolleri hizmet çevreleri olmadan Codelab kurulumu. Bu şemada, bir asıl BigQuery veri kümesini sorguladığında gerçekleşen süreç gösterilmektedir. Her BigQuery sorgusu bir BigQuery işi başlatır. Bu iş, gerçek işlemi (bu senaryoda verileri alma) gerçekleştirir. Asıl erişim, herkese açık bir veri kümesinden ve ayrı bir Google Cloud projesinden sorgulama yapılırken bir Compute Engine örneğinden ve internetten gösterilir. Verilere (GetData) sorgu gönderme işlemi, VPC Hizmet Kontrolleri tarafından engellenmeden başarıyla tamamlanır.

4. Kaynak veri kümesi projesinde BigQuery API'yi koruma

Çevre perimeter-1 yapılandırmasını değiştirin ve project-1 korumalı kaynağıyla birlikte BigQuery API hizmetini kısıtlayın.

Hizmet çevresini yapılandırma

Hizmet Çevresi Uygulamasını Doğrulama

project-2 bölümünde, önceki adımda olduğu gibi BigQuery Studio'da aşağıdaki sorguyu çalıştırın:

SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

VPC Hizmet Kontrolleri RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER ihlali oluşacak

Çıkış VPC Hizmet Kontrolleri ihlali

İhlal denetleme günlüğü, project-1 konumunda yer alır. Çünkü ihlal, bu konumda gerçekleşmiştir. Günlükler, gözlemlenen vpcServiceControlsUniqueId ile filtrelenebilir (VPC_SC_DENIAL_UNIQUE_ID yerine gözlemlenen benzersiz kimliği girin).

severity=ERROR
resource.type="audited_resource"
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="[*VPC_SC_DENIAL_UNIQUE_ID*]"

İhlal, aşağıdakileri içeren bir egressViolations:

  • principalEmail: [sorguyu çalıştıran kullanıcı hesabı]
  • callerIp: [Sorguyu çalıştıran kullanıcı aracısının IP adresi]
     "egressViolations": [
       {
         "targetResource": "projects/project-2",
         "sourceType": "Resource",
         "source": "projects/project-1",
         "servicePerimeter": "accessPolicies/REDACTED/servicePerimeters/perimeter-1",
         "targetResourcePermissions": [ "bigquery.jobs.create"]
       }      ],

5. BigQuery işi oluşturmak için ihlali düzeltme

BigQuery işi oluşturma için çıkış trafiği başarısız oldu. Bu şemada, bir asılın project-2 içindeki bir veri kümesi için project-1 üzerinden sorgu çalıştırması gösterilmektedir. Sorgunun çalıştırıldığı projedeki (project-2) veri kümesi projesinden (project-1) BigQuery işi oluşturma işlemi, BigQuery API'yi koruyan hizmet çevresi perimeter-1 nedeniyle VPC Hizmet Kontrolleri çıkış ihlaliyle başarısız oluyor. Çevre oluşturulduktan sonra, hizmet çevresi yapılandırmaları izin vermediği sürece project-1 konumundan çevre dışına veya çevre dışından korumalı projeye doğru hiçbir BigQuery API isteği başlatılamaz.

Çıkış ihlali, aşağıdakilere dayalı bir çıkış kuralı oluşturularak düzeltilebilir:

  • kaynak (FROM): yani kullanıcı e-posta adresi ve bağlam (ör.arayanın IP adresi, cihaz durumu, konum vb.)
  • Hedef (TO): Hedef kaynak, hizmet ve yöntem veya izin.

Gözlemlenen çıkış ihlalini düzeltmek için BigQuery hizmetinde sorguyu çalıştıran kullanıcı hesabı (user@example.com) tarafından hedef kaynağa (project-2) doğru trafiğe izin veren bir çıkış kuralı oluşturun ve bigquery.jobs.create yöntemini/ iznini kullanın.

Çıkış ihlali düzeltme yapılandırmaları.

Yapılandırılmış çıkış kuralından beklenen davranış:

  • FROM (Kaynak) | Kimlikler: Yalnızca belirtilen user@example.com kimliğinin sınır çizgisini geçmesine izin verilmelidir.
  • TO | projects: Belirtilen kimlik, yalnızca hedef belirtilen proje project-2 ise sınırları aşabilir.
  • TO | Hizmetler: Belirtilen kimlik, yalnızca API çağrısı belirtilen hizmet ve yöntem içinse çevre dışından belirtilen projeye doğru trafik başlatabilir. Aksi takdirde, örneğin hizmet çevresi tarafından korunan farklı bir hizmeti denemeleri durumunda, diğer hizmetlere izin verilmediği için işlem engellenir.

Düzeltmeyi test etme: Çıkış kuralı

Çıkış kuralı uygulandıktan sonra aynı sorguyu çalıştırın.

SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

Bu kez NO_MATCHING_ACCESS_LEVEL giriş ihlali olmak üzere başka bir ihlal meydana gelir. Yeni ihlal, hedef proje ve yöntem açısından ilk ihlalden farklıdır.

Giriş VPC Hizmet Kontrolleri ihlali

Yeni ihlal, aşağıdaki özelliklere sahip bir giriş ihlalidir:

  • principalEmail: [sorguyu çalıştıran kullanıcı hesabı]
  • callerIp: [Sorguyu çalıştıran kullanıcı aracısının IP adresi]
ingressViolations: [
0: {
 servicePerimeter: "accessPolicies/REDACTED/servicePerimeters/perimeter-1"
 targetResource: "projects/project-1"
 targetResourcePermissions: [0: "bigquery.tables.getData"]}
 ]

bigquery.tables.getData yöntemiyle ilgili ihlal, BigQuery tablosundan veri almaya çalışan BigQuery işi tarafından başlatılan bir API çağrısından kaynaklanmaktadır.

6. BigQuery Tablo Verilerini Almak İçin İhlali Düzeltme

Giriş kuralı, giriş ihlalini düzeltirken hizmet sınırı sınırını kimlerin geçmesine izin verildiği konusunda ayrıntılı kontrol sağlar. Ayrıca, izin verilen erişimin bağlamını (ör. kaynak/ hedef proje ve erişebilecekleri API yöntemi) de kontrol etmenizi sağlar.

Giriş ihlali, aşağıdakilerle yapılandırılmış bir giriş kuralıyla düzeltilir:

  • kaynak (FROM): yani kullanıcı e-posta adresi ve bağlam (ör.arayanın IP adresi, cihaz durumu, konum vb.)
  • Hedef (TO): Hedef kaynak, hizmet ve yöntem veya izin.

Giriş kuralı, belirtilen hizmet ve yöntemde belirtilen kullanıcı tarafından project-1 yönündeki trafiğe izin verir.

Giriş ihlali düzeltmesi

Yapılandırılan giriş kuralından beklenen davranış:

  • FROM (Kaynak) | Kimlikler: Yalnızca belirtilen user@example.com kimliğinin sınır çizgisini geçmesine izin verilmelidir.
  • TO | projects: Belirtilen kimlik, yalnızca hedef belirtilen proje project-1 ise çevre sınırlarını aşabilir.
  • TO | Hizmetler: Belirtilen kimlik, yalnızca API çağrısı BigQuery API içinse ve belirtilen yöntem bigquery.tables.getData ise çevre içinde trafiği başlatabilir.

Aynı sorgunun yürütülmesi bundan sonra VPC Hizmet Kontrolleri ihlalleri olmadan uygun şekilde çalışmalıdır.

project-1 içinde BigQuery API'nin yalnızca user@example.com tarafından kullanılabilecek ve user2@example.com tarafından kullanılamayacak şekilde kısıtlanması başarıyla tamamlandı.

BigQuery API'yi koruyan VPC Hizmet Kontrolleri çevresi Bu şema, iki farklı sorumlunun aynı veri kümesini nasıl sorgulamaya çalıştığını gösterir. user2@example.com (noktalı mavi çizgiler) tarafından erişim, hizmet çevresi yapılandırması nedeniyle project-1'den veya project-1'ye BigQuery işlemleri çalıştırmasına izin verilmediğinden VPC Hizmet Kontrolleri tarafından reddedilir. user@example.com (yeşil düz çizgi) tarafından yapılan erişim başarılıdır. Çünkü VPC Hizmet Kontrolleri yapılandırmaları, project-1'den ve project-1'ye yönelik işlemler yapılmasına izin verir.

7. Hizmet sınırının izin verdiği trafiği dahili IP adresine göre kısıtlama

Mevcut yapılandırma, belirlenen kullanıcının project-1 içindeki BigQuery'de sorgu çalıştırmasına olanak tanır. Kullanıcıya verilere sorgu gönderme için IAM izni verildiyse ve hesabını kullandığı sürece internetin herhangi bir yerinden sorgu gönderebilir. Güvenlik açısından bu, hesabın güvenliğinin ihlal edilmesi durumunda hesaba erişen herkesin BigQuery verilerine ek kısıtlamalar olmadan erişebileceği anlamına gelir.

Kullanıcı bağlamını belirtmek için giriş ve çıkış kurallarında erişim düzeyi kullanılarak daha fazla kısıtlama uygulanabilir. Örneğin, arayan kimliğine göre erişimi yetkilendiren, daha önce yapılandırılmış bir giriş kuralıyla birlikte kaynak IP'ye göre erişime izin verebilirsiniz. Kullanıcı istemcisine herkese açık bir IP atanmış olması koşuluyla, kaynak IP'ye göre erişim hem herkese açık IP CIDR aralıkları için hem de kullanıcı istemcisi bir Google Cloud projesinden çalışıyorsa dahili IP adresi kullanılarak mümkündür.

Dahili IP adresi erişim koşulu içeren erişim düzeyi oluşturma

Aynı kapsamlı erişim politikası klasöründe, erişim düzeyi oluşturmak için Bağlam Erişim Yöneticisi sayfasını açın.

  1. Bağlam Erişim Yöneticisi sayfasında ERİŞİM DÜZEYİ OLUŞTUR'u seçin.
  2. Yeni Erişim Düzeyi bölmesinde:
    1. Başlık girin: codelab-al kullanabilirsiniz.
    2. Koşullar bölümünde IP alt ağları'nı tıklayın.
    3. Özel IP sekmesini seçin ve VPC AĞLARINI SEÇ'i tıklayın.
    4. VPC ağları ekle bölmesinde default ağını bulmak için göz atabilir veya tam ağ adını //compute.googleapis.com/projects/project-2/global/networks/default biçiminde manuel olarak girebilirsiniz.
    5. VPC Ağı EKLE'yi tıklayın.
    6. IP alt ağlarını SEÇ'i tıklayın.
    7. Sanal makine örneğinin bulunduğu bölgeyi seçin. Bu codelab için us-central1.
    8. KAYDET'i tıklayın.

Bir erişim düzeyi oluşturduk ancak bu düzey henüz herhangi bir çevre veya giriş/çıkış politikasında zorunlu kılınmadı.

IP alt ağlarıyla yapılandırılmış erişim düzeyi

Giriş Kuralına Erişim Düzeyi Ekleme

Giriş kuralı tarafından izin verilen kullanıcının erişim düzeyine göre de doğrulandığını zorunlu kılmak için giriş kuralında erişim düzeyini yapılandırmak gerekir. Verileri sorgulama erişimini yetkilendiren giriş kuralı perimeter-1 içinde yer alır. Kaynak olarak erişim düzeyi codelab-al'yı tanımlamak için giriş kuralını değiştirin.

VPC ağı ile erişim düzeyi

Yeni Yapılandırmaları Test Etme

Giriş kuralına erişim düzeyi eklendikten sonra, aynı BigQuery sorgusu proje project-2 için VPC ağındaki default istemcisinden yürütülmediği sürece başarısız olur. Bu davranışı doğrulamak için uç nokta cihazı internete bağlıyken Google Cloud Console'dan sorguyu yürütün. Sorgu, giriş ihlali belirtisiyle birlikte başarısız bir şekilde sonlandırılır.

Aynı sorgu, project-2 konumundaki VPC ağı default'dan da çalıştırılabilir. Benzer şekilde, project-2 konumunda bulunan bir Compute Engine örneğinden VPC ağı default kullanılarak aynı BigQuery sorgusunun yürütülmesi de başarısız olur. Bunun nedeni, giriş kuralının yalnızca asıl user@example.com'ya izin verecek şekilde yapılandırılmış olmasıdır. Ancak sanal makine, varsayılan Compute Engine hizmet hesabını kullanıyor.

Aynı komutu project-2 içindeki Compute Engine örneğinden başarıyla çalıştırmak için şunları yapın:

  • Sanal makine, BigQuery API'yi kullanmak için erişim kapsamına sahiptir. Bu işlem, sanal makine erişim kapsamı olarak Tüm Cloud API'lerine tam erişime izin ver'i seçerek yapılabilir.
  • Sanal makineye eklenen hizmet hesabının şu işlemler için IAM izinlerine ihtiyacı vardır:
    • project-2 içinde BigQuery işleri oluşturma
    • project-1 konumundaki BigQuery tablosundan BigQuery verilerini alma
  • Giriş ve çıkış kuralı, varsayılan Compute Engine hizmet hesabına izin vermelidir.

Şimdi giriş kurallarına (BigQuery tablosundan veri alınmasına izin vermek için) ve çıkış kuralına (BigQuery işlerinin oluşturulmasına izin vermek için) Compute Engine varsayılan hizmet hesabını eklememiz gerekiyor.

Erişim düzeyleriyle VPC Hizmet Kontrolleri hizmet çevresi yapılandırması

default VPC ağındaki project-2 içinde bulunan bir Compute Engine örneğinden aşağıdaki bq query komutunu çalıştırın:

bq query --nouse_legacy_sql \
'SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;'

Mevcut yapılandırmayla BigQuery komutu yalnızca şu durumlarda başarılı olur:

  • project-2 bölgesindeki varsayılan VPC ağını kullanan bir sanal makinede çalıştırılıyorsa ve
  • Belirtilen us-central1 bölgesinde (IP alt ağı) bulunuyorsa ve
  • Hizmet çevresinde yapılandırılan varsayılan Compute Engine hizmet hesabı kullanılarak çalıştırılır.

BigQuery komut sorgusu, aşağıdakiler de dahil olmak üzere başka bir yerden çalıştırılırsa başarısız olur:

  • project-2 bölgesinde varsayılan VPC ağı kullanılarak çalışan bir sanal makinede çalıştırılıyorsa ancak erişim düzeyinde eklenen alt ağdan farklı bir bölgede bulunuyorsa veya
  • Kullanıcı tarafından user@example.com internetteki bir kullanıcı istemcisiyle çalıştırılıyorsa.

GCE varsayılan hizmet hesabının erişimine izin veren hizmet sınırı. Bu şemada, aynı asıl tarafından user@example.com iki farklı konumdan (internet ve bir Compute Engine örneği) başlatılan erişim gösterilmektedir. Doğrudan internetten BigQuery'ye erişim (mavi noktalı çizgiler) VPC Hizmet Kontrolleri tarafından engellenirken bir sanal makineden (yeşil düz çizgiler) erişime (Compute Engine varsayılan hizmet hesabının kimliğine bürünerek) izin verilir. İzin verilen erişim, hizmet çevresinin korumalı kaynaklara dahili bir IP adresinden erişime izin verecek şekilde yapılandırılmasından kaynaklanmaktadır.

8. 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 VM örneğini ve BigQuery veri kümelerini veya Google Cloud projelerini de silebilirsiniz. Cloud projesinin silinmesi, bu proje içinde kullanılan tüm kaynakların faturalandırılmasını durdurur.

  • Sanal makine örneğini silmek için aşağıdaki adımları uygulayın:
    • Google Cloud Console'da Sanal makine örnekleri sayfasına gidin.
    • Sanal makine örneği adının sol tarafındaki onay kutusunu işaretleyin, ardından Sil'i seçin ve onaylamak için tekrar Sil'i tıklayın. Compute Engine örneği örneğinin silinmesi.
  • Hizmet çevresini silmek için aşağıdaki adımları tamamlayın:
    • Google Cloud Console'da Güvenlik'i, ardından erişim politikasının kapsamının belirlendiği düzeyde (bu örnekte klasör düzeyinde) VPC Hizmet Kontrolleri'ni seçin.
    • VPC Hizmet Kontrolleri sayfasında, silmek istediğiniz çevreye karşılık gelen tablo satırında Sil'i tıklayın.
  • 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ını bulun, üç noktalı menüyü ve ardından Sil'i seçin.
  • Projeleri 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'ı seçin.
    • Proje kimliğini girin ve Yine de kapat'ı seçin.

9. Tebrikler!

Bu codelab'de bir VPC Hizmet Kontrolleri çevresi oluşturdunuz, bu çevreyi zorunlu kıldınız ve sorunlarını giderdiniz.

Daha Fazla Bilgi

Aşağıdaki senaryoları da inceleyebilirsiniz:

  • Proje, VPC Hizmet Kontrolleri ile korunduktan sonra aynı sorguyu herkese açık veri kümesinde çalıştırma
  • project-2'yı project-1 ile aynı çevreye ekleyin.
  • project-2 öğesini kendi çevresine ekleyin ve project-1 öğesini mevcut çevrede tutun.
  • Yalnızca verileri almak için değil, tablodaki verileri güncellemek için de sorgu çalıştırma

Lisans

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