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:
- BigQuery sorgusu çalıştırmanın temel bilgileri: BigQuery'de Wikipedia veri kümesini nasıl sorgulayacağınızı öğrenmek için bu codelab'i inceleyebilirsiniz.
- Klasör oluşturma ve yönetme
- Klasörde proje oluşturma veya mevcut bir projeyi klasöre taşıma
- Kapsamlı erişim politikası oluşturma
- Hizmet çevresi oluşturma ve yapılandırma
- Günlüklerde güvenlik politikası ihlallerini bulma
Kurulum
İlk kurulumumuz aşağıdaki gibi tasarlanmıştır:
- Google Cloud kuruluşu
- Kuruluşun altındaki bir klasör. Bu codelab'de buna
codelab-folderadını vereceğiz. - Aynı klasörde bulunan iki Google Cloud projesi,
codelab-folder. Bu codelab'de bunlaraproject-1veproject-2- adını veriyoruz.
- Klasör ve projeler henüz oluşturulmadıysa Google Cloud Console'da kuruluş altında bir klasör oluşturun ve oluşturulan bu klasör altında iki yeni proje oluşturun.
- Gerekli izinler:
- Klasörleri yönetmek için IAM rolleri: Klasör düzeyinde atanır.
- Projeleri yönetmek için IAM rolleri: Proje düzeyinde atanır.
- VPC Hizmet Kontrolleri'ni yapılandırmak için gereken IAM rolleri: kuruluş düzeyinde atanır
- BigQuery'yi yönetmeye yönelik IAM rolleri: Proje düzeyinde atanır.
- Compute Engine örneğini yönetmeye yönelik IAM rolleri: Proje düzeyinde atanır.
project-2veproject-1projelerinin faturalandırma hesabı.
Normal hizmet çevresi oluşturma
Bu codelab'de, project-1 hizmetini koruyan normal bir hizmet çevresi kullanacağız.
- Normal bir çevre oluşturun,
perimeter-1veproject-1ekleyin.
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.
- Herkese açık bir görüntüden Compute Engine örneği oluşturma konusunda kılavuz olarak dokümanlardan yararlanabilirsiniz.
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
- BigQuery Studio sayfasını ziyaret ederek BigQuery API'ye erişip erişemediğinizi doğrulamak için
project-2veproject-1'ye erişin.project-1bir hizmet çevresinde olsa bile çevre henüz herhangi bir hizmeti korumadığından bunu yapabilirsiniz. project-2bö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):
- Sonuçları Kaydet'i tıklayın ve BigQuery tablosu'nu seçin. (Aşağıdaki ekran görüntüsüne bakın).

- Hedef proje olarak
project-1simgesini seçin. - Veri kümesini
codelab_datasetolarak adlandırın. (Mevcut bir veri kümesi kullanmıyorsanız YENİ VERİ KÜMESİ OLUŞTUR'u seçin).
- Tabloyu
codelab-tableolarak adlandırın. - 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.
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 Ç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

İ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
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.

Yapılandırılmış çıkış kuralından beklenen davranış:
- FROM (Kaynak) | Kimlikler: Yalnızca belirtilen
user@example.comkimliğinin sınır çizgisini geçmesine izin verilmelidir. - TO | projects: Belirtilen kimlik, yalnızca hedef belirtilen proje
project-2ise 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.

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.

Yapılandırılan giriş kuralından beklenen davranış:
- FROM (Kaynak) | Kimlikler: Yalnızca belirtilen
user@example.comkimliğinin sınır çizgisini geçmesine izin verilmelidir. - TO | projects: Belirtilen kimlik, yalnızca hedef belirtilen proje
project-1ise ç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.getDataise ç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ı.
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.
- Bağlam Erişim Yöneticisi sayfasında ERİŞİM DÜZEYİ OLUŞTUR'u seçin.
- Yeni Erişim Düzeyi bölmesinde:
- Başlık girin:
codelab-alkullanabilirsiniz. - Koşullar bölümünde IP alt ağları'nı tıklayın.
- Özel IP sekmesini seçin ve VPC AĞLARINI SEÇ'i tıklayın.
- VPC ağları ekle bölmesinde
defaultağını bulmak için göz atabilir veya tam ağ adını//compute.googleapis.com/projects/project-2/global/networks/defaultbiçiminde manuel olarak girebilirsiniz. - VPC Ağı EKLE'yi tıklayın.
- IP alt ağlarını SEÇ'i tıklayın.
- Sanal makine örneğinin bulunduğu bölgeyi seçin. Bu codelab için
us-central1. - KAYDET'i tıklayın.
- Başlık girin:
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ı.

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.

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-2içinde BigQuery işleri oluşturmaproject-1konumundaki 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.

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-2bölgesindeki varsayılan VPC ağını kullanan bir sanal makinede çalıştırılıyorsa ve- Belirtilen
us-central1bö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-2bö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.cominternetteki bir kullanıcı istemcisiyle çalıştırılıyorsa.
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.

- 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-1ile aynı çevreye ekleyin.project-2öğesini kendi çevresine ekleyin veproject-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.