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. Codelab, hizmet çevresi tarafından korunan bir API hizmetiyle başlar. Böylece herkese açık veri kümelerinde sorgular çalıştırılabilir ve sonuçlar, proje tablosuna kaydedilebilir. Sorgu bir projede çalışır ve tablo (sonuçların kaydedildiği) başka bir projede oluşturulur. Bu tablo, verilerin bir projede depolanabileceği ancak farklı bir proje kullanılarak erişilmesi gereken bir kurulumu taklit eder.

Sırada, veri projesini korumak için bir hizmet çevresi bulunuyor. Giriş kuralları 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 bir erişim düzeyi eklemeyi öğreneceksiniz. Bu codelab'in hedefleri şunlardır:

  • Sırasıyla giriş ve çıkış kurallarını kullanarak giriş ve çıkış ihlallerini nasıl düzelteceğinizi öğrenin.
  • Belirli bir ihlalin neden gerçekleştiğini öğrenin.
  • 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ştirerek kapsamını değiştirin.

2. Kaynak Kurulumu ve Şartları

Başlamadan önce

Bu codelab'de şunları bildiğinizi varsayıyoruz:

Kurulum

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

Hizmet çevresinin API'leri koruduğu ilk tasarım.

Normal bir hizmet çevresi oluşturun

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

Compute Engine sanal makinesi oluşturun

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

Maliyet

Bulut kaynaklarını/API'leri kullanmak için Google Cloud konsolunda faturalandırmayı etkinleştirmeniz gerekir. Bu codelab dışında faturalandırma yapılmasını önlemek için kullanılan kaynakların kullanımını kapatmanızı öneririz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına katılabilir.

Maliyete tabi kaynaklar BigQuery ve Compute Engine örneğidir. Maliyeti, BigQuery fiyat hesaplayıcı ve Compute Engine fiyat hesaplayıcıyı kullanarak tahmin edebilirsiniz.

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

project-1 Uygulamasında Herkese Açık Veri Kümesini Sorgulayın ve Sonuçları Kaydedin

  1. BigQuery API'ye erişip erişemediğinizi doğrulamak için BigQuery Studio sayfasına giderek project-2 ve project-1 özelliklerine erişin. project-1, hizmet çevresinde olsa bile çevre henüz herhangi bir hizmeti korumadığından bunu yapabilmeniz gerekir.
  2. Ortak bir veri kümesini sorgulamak için project-2 tarihinden itibaren 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 veri kümesinde kalırken):

  1. Save Results (Sonuçları Kaydet) seçeneğini tıklayıp BigQuery tablosu'nu seçin. (aşağıdaki ekran görüntüsüne bakın). BigQuery sonuçlarını kaydedin..
  2. Hedef proje olarak project-1'i seçin.
  3. Veri Kümesine codelab_dataset olarak ad verin. (Mevcut bir veri kümesi kullanılmıyorsa YENİ VERİ KÜMESİ OLUŞTUR'u seçin). BigQuery sonuçları kaydedilirken hedef projeyi seçme.
  4. Tabloyu şu şekilde adlandırın: codelab-table.
  5. Kaydet'i tıklayın.

project-2 üzerinden yapılan sorgunun yürütülmesi sonucunda, herkese açık veri kümesi verileri project-1 konumunda başarıyla depolandı.

Sorgu Veri Kümesi, project-2 konumundan project-1 konumuna kaydedildi

project-2 BigQuery Studio'da kaldığınız sürece aşağıdaki sorguyu çalıştırarak veri seçmek için aşağıdaki sorguyu çalıştırın:

  • 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;

Ne project-2 ne de project-1 BigQuery'yi kullanmak üzere kısıtlanmadığından sorgu başarıyla çalıştırılmalıdır. Kullanıcı uygun IAM izinlerine sahip olduğu sürece BigQuery'ye herhangi bir yerden veya herhangi bir yerden erişim izni verilir.

VPC Hizmet Kontrolleri hizmet çevreleri olmadan Codelab kurulumu. Bu diyagramda, ana hesap bir BigQuery veri kümesini sorguladığında bu işlem gösterilmektedir. Her BigQuery sorgusu bir BigQuery işi başlatır. Bu iş daha sonra, bu senaryoda veri alarak gerçek işlemi gerçekleştirir. Ana erişim, bir Compute Engine örneğinden ve internetten, herkese açık veri kümesinden ve ayrı bir Google Cloud projesinden sorgulama yapılırken gösterilir. Verileri (GetData) sorgulama işlemi, VPC Hizmet Kontrolleri tarafından engellenmeden başarıyla tamamlandı.

4. Kaynak Veri Kümesi Projesinde BigQuery API'yi Koruma

perimeter-1 çevresinin yapılandırmasını değiştirin ve korunan kaynak project-1 olacak şekilde BigQuery API hizmetini kısıtlayın.

Hizmet çevresini yapılandırma

Hizmet Çevresi Yaptırımını Doğrulama

project-2 tarihinden itibaren, ö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 yapılacak

Çıkış VPC Hizmet Kontrolleri ihlali

İhlal denetleme günlüğü, çevreyi aşmak için ihlalin gerçekleştiği yer project-1 konumundadır. Günlükler, gözlemlenen vpcServiceControlsUniqueId ile filtrelenebilir (VPC_SC_DENIAL_UNIQUE_ID değerini gözlemlenen benzersiz kimlikle değiştirin).

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, şu özelliklere sahip 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 Oluşturma İhlalini Düzeltme

BigQuery İşi oluşturulurken çıkış trafiği başarısız olur. Bu diyagramda, ana hesap project-1 konumundaki bir veri kümesi için project-2 üzerinden sorgu çalıştırdığında 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 bir VPC Hizmet Kontrolleri çıkış ihlali nedeniyle başarısız olur. Çevre oluşturulduktan sonra project-1 kaynağından çevre dışına doğru herhangi bir BigQuery API isteği başlatılamaz veya koruma altındaki projeye yönelik çevrenin dışında yeniden başlatılamaz; (hizmet çevresi yapılandırmaları tarafından izin verilmedikçe)

Aşağıdakileri temel alan bir çıkış kuralı oluşturarak çıkış ihlali düzeltilebilir:

  • kaynak (FROM): kullanıcının e-posta adresi ve içeriği (ör.arayanın IP adresi, cihaz durumu, konum vb.)
  • hedef (ALICI): yani hedef kaynak, hizmet ve yöntem veya izin.

Gözlemlenen çıkış ihlalini düzeltmek için BigQuery hizmetinde sorguyu (user@example.com) çalıştıran kullanıcı hesabı ve bigquery.jobs.create yöntemi/ izni üzerinden targetResource (project-2) trafiğine izin veren bir çıkış kuralı oluşturun.

Çıkış ihlali Yapılandırmaları düzeltin.

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

  • BAŞLANGIÇ | Kimlikler: Yalnızca belirtilen user@example.com kimliğinin çevre sınırını aşmasına izin verilmelidir.
  • ALICI | projeler: belirtilen kimlik, yalnızca hedefin belirtilen project-2 projesi olması durumunda çevre sınırlarını aşabilir.
  • ALICI | Hizmetler: Belirtilen kimlik, yalnızca API çağrısı belirtilen hizmet ve yöntemle ilgiliyse belirtilen projeye yönelik çevre dışına trafik başlatabilir. Aksi takdirde, örneğin hizmet çevresi tarafından korunan farklı bir hizmeti denerse diğer hizmetlere izin verilmediğinden işlem engellenir.

Çözümü Test Etme: Çıkış Kuralı

Çıkış kuralı oluşturulduktan sonra aynı sorguyu çalıştırın.

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

Başka bir ihlal söz konusu olacaktır. Bu kez NO_MATCHING_ACCESS_LEVEL giriş ihlali söz konusudur. Yeni ihlal, hedef proje ve yöntem açısından ilk ihlalden farklıdır.

Giriş VPC Hizmet Kontrolleri ihlali

Yeni ihlal, şunları içeren 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önteminin ihlali, BigQuery tablosundan veri almaya çalışan BigQuery işi tarafından başlatılan bir API çağrısından kaynaklanır.

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

Giriş kuralları, giriş ihlallerini düzeltirken, hizmet çevresi sınırını kimlerin geçebileceğine dair ayrıntılı bir kontrol ve izin verilen erişim bağlamı (ör. kaynak/ hedef proje ve erişebilecekleri API yöntemi) hakkında ayrıntılı bilgi sağlar.

Giriş ihlali, aşağıdaki şekilde yapılandırılan bir giriş kuralıyla düzeltilir:

  • kaynak (FROM): kullanıcının e-posta adresi ve içeriği (ör.arayanın IP adresi, cihaz durumu, konum vb.)
  • hedef (ALICI): yani hedef kaynak, hizmet ve yöntem veya izin.

Giriş kuralı, belirtilen kullanıcı tarafından project-1 uygulamasına yönelik trafiğe, belirtilen hizmette ve yöntemde izin verir.

Giriş ihlalini düzeltme

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

  • BAŞLANGIÇ | Kimlikler: Yalnızca belirtilen user@example.com kimliğinin çevre sınırını aşmasına izin verilmelidir.
  • ALICI | projeler: belirtilen kimlik, yalnızca hedefin belirtilen project-1 projesi olması durumunda çevre sınırlarını aşabilir.
  • ALICI | Hizmetler: Belirtilen kimlik, yalnızca API çağrısı BigQuery API ve belirtilen bigquery.tables.getData yöntemine yönelikse çevre içindeki trafiği başlatabilir.

Dolayısıyla, aynı sorgunun yürütülmesi VPC Hizmet Kontrolleri ihlalleri olmadan düzgün bir şekilde çalışacaktır.

BigQuery API'yi project-1 bölgesinde başarıyla kısıtlayarak yalnızca user@example.com tarafından kullanılabilmesini sağladık, user2@example.com tarafından kullanılmasını sağlamadık.

BigQuery API'yi koruyan VPC Hizmet Kontrolleri çevresi Bu diyagramda, iki farklı ana hesabın aynı veri kümesini nasıl sorgulamaya çalıştığı gösterilmektedir. VPC Hizmet Kontrolleri'nin user2@example.com (noktalı mavi çizgiler) erişimi, hizmet çevresi yapılandırması tarafından project-1 içinden veya bu noktaya doğru BigQuery işlemleri çalıştırmasına izin verilmediği için tarafından reddedildi. VPC Hizmet Kontrolleri yapılandırmaları tarafından project-1 içinden veya başka bir noktaya işlem yapılmasına izin verildiğinden user@example.com (yeşil düz çizgi) ile erişim başarılı oldu.

7. Hizmet Çevresinin İzin Verilen Trafiği Dahili IP Adresine Göre Kısıtla

Mevcut yapılandırma, tanımlanan kullanıcının project-1 ürününde BigQuery'de herhangi bir konumdan sorgu çalıştırabilmesini sağlar. verileri sorgulamak için IAM izni verildiyse ve hesabını kullandığı sürece bunu yapabilir. Güvenlik açısından bakıldığında, hesabın güvenliğinin ihlal edilmesi durumunda, hesaba erişim elde eden tüm kullanıcılar BigQuery verilerine herhangi bir ek kısıtlama olmadan erişebilir.

Kullanıcı bağlamını belirtmek için giriş ve çıkış kurallarında erişim düzeyinden yararlanılarak başka kısıtlamalar da uygulanabilir. Örneğin, çağrı kimliğine göre erişim yetkisi veren önceden yapılandırılmış bir giriş kuralıyla birlikte kaynak IP'ye göre erişime izin verebilirsiniz. Kaynak IP'ye göre erişim, kullanıcı istemcisine bir genel IP atanmış olması koşuluyla her iki genel IP CIDR aralığı için veya kullanıcı istemcisi bir Google Cloud projesinden çalışıyorsa dahili IP adresi kullanarak uygundur.

Dahili IP Adresi Erişim Koşulu ile Erişim Düzeyi Oluşturma

Bir erişim düzeyi oluşturmak için aynı kapsamlı erişim politikası klasöründe 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. Bir başlık girin: codelab-al özelliğini kullanabilirsiniz.
    2. Koşullar bölümünde, IP alt ağları'nı tıklayın.
    3. Gizli IP sekmesini seçin ve VPC AĞLARI SEÇ'i tıklayın.
    4. Add VPC Networks (VPC Ağları Ekle) bölmesinde, default ağına göz atıp ağı bulabilir 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ĞLARI SEÇ'i tıklayın.
    7. Sanal makine örneğinin bulunduğu bölgeyi seçin. Bu codelab için us-central1 değeri geçerlidir.
    8. KAYDET'i tıklayın.

Hâlâ herhangi bir çevre veya giriş/çıkış politikasında zorunlu kılınmayan bir erişim düzeyi oluşturduk.

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

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

Giriş kuralının izin verdiği kullanıcının aynı zamanda erişim düzeyine göre de doğrulanmasını zorunlu kılmak için giriş kuralında erişim düzeyinin yapılandırılması gerekir. Sorgu verilerine erişim yetkisi veren giriş kuralı perimeter-1 konumunda. Kaynağı codelab-al erişim düzeyi olarak tanımlamak için giriş kuralını değiştirin.

VPC ağıyla erişim düzeyi

Yeni Yapılandırmaları Test Etme

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

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

Aynı komutu project-2 bölgesinde Compute Engine örneğinden başarıyla çalıştırmak için şu işlemlerin yapıldığından emin olun:

  • Sanal makine BigQuery API'yi kullanmak için erişim kapsamına sahip. Bu işlem, sanal makine erişim kapsamı olarak Tüm Cloud API'lerine tam erişime izin ver seçilerek yapılabilir.
  • Sanal makineye bağlı hizmet hesabının IAM izinlerine ihtiyacı var:
    • project-2 İçinde BigQuery İşleri Oluşturma
    • project-1 konumunda bulunan BigQuery tablosundan BigQuery verilerini alın
  • Giriş ve çıkış kuralı, varsayılan Compute Engine hizmet hesabına izin vermelidir.

Şimdi giriş kurallarına (BigQuery tablosundan veri almaya 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 bölgesindeki 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;'

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

  • project-2 bölgesindeki varsayılan VPC ağını kullanarak bir sanal makine üzerinde çalışma ve
  • belirtilen us-central1 bölgesinde (IP alt ağı) bulunur ve
  • hizmet çevresinde yapılandırılmış varsayılan Compute Engine hizmet hesabını kullanarak çalıştırın.

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

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

GCE varsayılan hizmet hesabına erişime izin veren hizmet çevresi. Bu şema, aynı ana hesap (user@example.com) tarafından iki farklı konumdan (internet ve bir Compute Engine örneği) başlatılan erişimi göstermektedir. Doğrudan internetten BigQuery'ye erişim (mavi noktalı çizgiler) VPC Hizmet Kontrolleri tarafından engellenir ancak Compute Engine varsayılan hizmet hesabının kimliğine bürünerek sanal makineden (yeşil kesintisiz çizgiler) erişime izin verilir. İzin verilen erişim, hizmet çevresinin dahili bir IP adresinden korumalı kaynaklara erişime izin verecek şekilde yapılandırılmasından kaynaklanır.

8. 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ğini ve BigQuery veri kümelerini ya da Google Cloud projelerini silebilirsiniz. Cloud projesinin silinmesi, söz konusu projede kullanılan tüm kaynakların faturalandırılmasını durdurur.

  • Sanal makine örneğini silmek için aşağıdaki adımları tamamlayın:
    • Google Cloud Console'da Sanal makine örnekleri sayfasına gidin.
    • Sanal makine örneği adının sol tarafındaki onay kutusunu işaretleyip Sil'i seçin. İşlemi 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 konsolunda Güvenlik'i ve ardından erişim politikasının kapsamında olduğu 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üzeyi'ni silmek için aşağıdaki adımları tamamlayın:
    • Google Cloud konsolunda 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ı belirleyin, üç nokta menü simgesini ve ardından Sil'i seçin.
  • Projeleri kapatmak için aşağıdaki adımları tamamlayın:
    • Google Cloud konsolunda IAM ve Yönetici Ayarları sayfasına giderek silebilirsiniz.
    • 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 VPC Hizmet Kontrolleri çevresi oluşturdunuz, bu çevreyi zorunlu kıldınız ve sorunu giderdiniz.

Daha Fazla Bilgi

Aşağıdaki senaryoları da inceleyebilirsiniz:

  • Proje, VPC Hizmet Kontrolleri tarafından korunduktan sonra aynı sorguyu herkese açık veri kümesinde çalıştırın.
  • project-1 ile aynı çevreye project-2 ekleyin.
  • project-2 değerini kendi çevresine ekleyin ve project-1 değerini geçerli çevrede tutun.
  • Yalnızca veri almak için değil, tablodaki verileri güncellemek için de sorgu çalıştırın.

Lisans

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