1. Giriş
Bu laboratuvarda, Cloud Storage'dan BigQuery veri kümesine veri aktarırken VPC Hizmet Kontrolleri'ni kullanarak BigQuery Veri Aktarım Hizmeti'ni nasıl koruyacağımızı öğreneceğiz. Ardından Cloud Storage'ı koruruz ve Cloud Storage'dan BigQuery'ye veri aktarmak için işlemi tekrarlarız. Cloud Storage'ın korunması, başarılı aktarım için düzeltilmesi gereken bir VPC Hizmet Kontrolleri ihlaline neden olur. Son olarak, BigQuery'yi de koruruz ve ardından veri kümesini projeler arasında kopyalamaya çalışırız. Bu da düzeltilmesi gereken bir ihlale neden olur.
Bu laboratuvar boyunca, sırasıyla giriş ve çıkış kurallarını kullanarak hem giriş hem de çıkış ihlallerini nasıl düzelteceğimizi göreceğiz. BigQuery Veri Aktarım Hizmeti giriş ihlalini düzeltmek için de bir erişim düzeyi kullanacağız. Bu codelab'in hedefleri şunlardır:
- Giriş ve çıkış kurallarını kullanarak farklı hizmetlerde (özellikle Cloud Storage, BigQuery ve BigQuery Veri Aktarım Hizmeti) giriş ve çıkış ihlallerini nasıl düzelteceğinizi öğrenin.
- Belirli bir ihlalin neden gerçekleştiğini anlama
2. Kaynak kurulumu ve şartları
Başlamadan önce
Bu codelab'de, aşağıdaki konuları bildiğiniz varsayılmaktadır:
- Klasör oluşturma
- Klasörde proje oluşturma veya mevcut projeyi klasöre taşıma
- Kapsamlı erişim politikası oluşturma
- Google Cloud Console'dan hizmet çevresi oluşturma ve yapılandırma
- Denetleme günlüklerinden ihlallerle ilgili günlükleri 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
codelab-folderolarak adlandıracağız. codelab-folderklasöründe iki Google Cloud projesi. Bu codelab'de projelereproject-1veproject-2adını veriyoruz.- Klasör ve projeler henüz oluşturulmamışsa Google Cloud Console'da Kuruluş altında bir klasör oluşturun ve iki yeni proje oluşturun.
- Gerekli izinler: Klasörleri yönetmek için IAM rolleri, projeleri yönetmek için IAM rolleri, VPC Hizmet Kontrolleri'ni yapılandırmak için gereken IAM rolleri, BigQuery'yi yönetmek için IAM rolleri ve Cloud Storage'ı yönetmek için IAM rolleri.
- Hem
project-1hem deproject-2projelerinin faturalandırma hesabı.
Kapsamlı politika ve normal hizmet çevresi oluşturma
Bu codelab'de, project-2 hizmetini koruyan normal bir hizmet çevresi kullanacağız.
- Klasör
codelab-folderdüzeyinde kapsamı belirlenmiş bir kapsamlı erişim politikası oluşturun. Bu codelab'de, oluşturulan erişim politikasının kimliğinin987654321olduğunu varsayıyoruz. - Normal bir çevre oluşturun (
perimeter-2olarak adlandırılır) ve projeyi (project-2) ekleyin.
Çevre perimeter-2 içinde BigQuery Data Transfer API kısıtlayın.

Cloud Storage paketi ve BigQuery veri kümesi oluşturma
Bu codelab'de içerikten bağımsız olarak herhangi bir CSV dosyası yeterlidir. Temel sınırlama, birlikte yerleştirme şartıyla ilgilidir. Bu şart şunları zorunlu kılar:
- BigQuery veri kümeniz çok bölgeli bir bölgedeyse aktardığınız verileri içeren Cloud Storage paketi aynı çok bölgeli bölgede veya çok bölgeli bölge içinde yer alan bir konumda olmalıdır.
- Veri kümeniz bir bölgedeyse Cloud Storage paketiniz de aynı bölgede olmalıdır.
Bu nedenle, bu codelab'de hem Cloud Storage paketi hem de BigQuery veri kümesinin aynı bölgede veya çoklu bölgede olmasını sağlayacağız.
project-1 projesinde yeni bir Cloud Storage paketi oluşturun.
Yeni bir Cloud Storage paketi oluşturmak için yeni paket oluşturma ile ilgili belgelenmiş adımları uygulayın.
- Paketin adı için paket adı gereksinimlerini karşılayan bir ad girin. Bu codelab'de, pakete
codelab-bqtransfer-bucketadını vereceğiz. - Verilerin depolanacağı yer, paket konumu için bir Konum türü ve paket verilerinin kalıcı olarak depolanacağı Konum seçin. Bu codelab'de us (Amerika Birleşik Devletleri'nde birden fazla bölge) seçeneğini kullanacağız.

CSV dosyası oluşturma
Yerel makinenizden veya Cloud Shell'i kullanarak aşağıdaki komutlarla örnek bir CSV dosyası (codelab-test-file.csv) oluşturmak için echo komutunu kullanabiliriz:
echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;
CSV dosyasını Cloud Storage paketine yükleme
CSV dosyası oluşturulduktan sonra dosya nesnesini oluşturulan pakete yüklemek için aşağıdaki komutu çalıştırın:
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

Paketteki nesneleri listeleyerek veya aşağıdaki komutu çalıştırarak dosyanın oluşturulan pakete yüklendiğini doğrulayabilirsiniz:
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
project-2 içinde BigQuery veri kümesi ve tablosu oluşturma
- Bu adımları uygulayarak
project-2projesinde bir BigQuery veri kümesi oluşturun.- Veri Kümesi Kimliği için benzersiz bir veri kümesi adı girin. Bu codelab'de şunları kullanıyoruz:
codelab_bqtransfer_dataset. - Konum türü için veri kümesinin coğrafi konumunu seçin. Bu codelab'de Cloud Storage paketiyle aynı konumu kullanıyoruz: ABD (Amerika Birleşik Devletleri'nde birden fazla bölge).

- Veri Kümesi Kimliği için benzersiz bir veri kümesi adı girin. Bu codelab'de şunları kullanıyoruz:
- Bu adımları uygulayarak oluşturulan veri kümesi
codelab_bqtransfer_datasetaltında bir BigQuery tablosu oluşturun.- Kaynak bölümündeki Şu kaynaktan tablo oluşturun listesinde Boş tablo'yu seçin.
- Tablo alanına oluşturmak istediğiniz tablonun adını girin. Bu codelab'de
codelab-bqtransfer-tableadını kullanıyoruz. - Tablo türü alanının Yerel tablo olarak ayarlandığını doğrulayın.
- Şema bölümüne şema tanımını girin. Metin olarak düzenle'yi tıklayıp oluşturulan CSV dosyasının biçimine uygun olan aşağıdaki şemayı girerek şema bilgilerini girebilirsiniz.
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
Maliyet
Cloud kaynaklarını/API'lerini kullanmak için project-2 ve project-1 projelerinde faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'in ötesinde faturalandırmayla karşılaşmamak için kullanılan kaynakları kapatmanızı öneririz.
Maliyete neden olan kaynaklar BigQuery ve Cloud Storage'dır. Tahmini maliyeti BigQuery fiyat hesaplayıcısında ve Cloud Storage hesaplayıcısında bulabilirsiniz.
3. Cloud Storage Nesnesinden BigQuery Tablosuna Veri Aktarımını Yapılandırma
Şimdi, project-2 konumundaki BigQuery Veri Aktarım Hizmeti'ni VPC Hizmet Kontrolleri ile korurken Cloud Storage'dan (project-1 konumunda) BigQuery'ye (project-2 konumunda) veri aktarmak için bir Veri Aktarım Hizmeti (project-2 konumunda) oluşturmayı deneyeceğiz. Yalnızca BigQuery Veri Aktarım Hizmeti'nin korunması (BigQuery ve Cloud Storage'ın korunmaması) asıl kullanıcıların yalnızca veri aktarımları oluşturup yönetmesiyle (ör. veri aktarımını manuel olarak başlatma) sınırlıdır.
Cloud Storage'dan veri aktarımını ayarlama
Veri aktarımı oluşturmak için aşağıdaki adımları uygulayın:
project-2Google Cloud Console'da BigQuery sayfasına gidin.- Veri transferleri'ni tıklayın.

Veri aktarımları sayfasına erişirken ihlali inceleme
Google Cloud Console'da VPC Hizmet Kontrolleri'nin benzersiz tanımlayıcısını görebiliriz. Günlükleri filtrelemek ve ihlal ayrıntılarını belirlemek için aynı tanımlayıcıyı kullanın (OBSERVED_VPCSC_DENIAL_UNIQUE_ID yerine gözlemlenen ret kimliğini girin):
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
Gözlemlenen ihlal, aşağıdaki gibi ayrıntılara sahip bir giriş ihlali olan NO_MATCHING_ACCESS_LEVEL ihlalidir:
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
Veri aktarımları sayfasına erişildiğinde, yapılandırılmış tüm veri aktarımları listelenmeye çalışılır. Bu nedenle, ListTransferConfigs yöntemi ihlal edilir.
bigquerydatatransfer.googleapis.com hizmetindeki ihlali düzeltme
Giriş ihlalini düzeltmek için bir erişim düzeyi veya giriş kuralı kullanılabilir. Bu codelab'de, bigquerydatatransfer.googleapis.com hizmetine ve tüm yöntemlere erişime izin veren, reddedilen kullanıcı kimliğiyle yapılandırılmış bir giriş kuralı kullanalım.

Giriş kuralı uygulandıktan sonra Veri aktarımları sayfasına erişim sorunsuz bir şekilde çalışır.
Cloud Storage'dan veri aktarma kurulumuna devam etme
Önceki adımlarda Veri aktarımları sayfasındayken (Veri aktarımları'nı tıkladıktan sonra) aşağıdaki adımlarla devam edin:
- + Transfer oluştur'u tıklayın.
- Kaynak türü bölümünde, Kaynak için Google Cloud Storage'ı seçin.
- Aktarım yapılandırması adı bölümündeki Görünen ad alanına, aktarım için bir ad girin (ör.
Codelab Transfer). - Planlama seçenekleri bölümünde:
- 15 dakika gibi bir Tekrar sıklığı seçin.
- Hemen başlat'ı seçtiğinizden emin olun. Aksi takdirde, veri aktarımı yalnızca yapılandırılan Yinelenme sıklığı'ndan sonra başlar.
- Hedef ayarları bölümündeki Hedef veri kümesi için verilerinizi depolamak üzere oluşturduğunuz veri kümesini seçin:
codelab_bqtransfer_dataset - Veri kaynağı ayrıntıları bölümünde
- Hedef tablo için hedef tablonuzun adını girin. Hedef tablo, tablo adlandırma kurallarına uymalıdır. Bu codelab'de daha önce oluşturduğumuz tabloyu kullanacağız:
codelab-bqtransfer-table - Cloud Storage URI için Cloud Storage URI'sını girin. Bu codelab'de, oluşturulan paketi ve dosyayı kullanıyoruz:
codelab-bqtransfer-bucket/codelab-test-file.csv - Yazma tercihi için
APPENDişaretini koruyun (veyaMIRRORişaretini seçin). - Aktarımdan sonra dosyaları silme seçeneğini BELİRLEMEYİN (Çünkü aynı dosyayı birden fazla kez kullanacağız. Ancak, birden fazla dosya kullanabilir ve aktarımdan sonra kaynak dosyaları silebilirsiniz.)
- Dosya biçimi için CSV'yi seçin.
- Transfer Seçenekleri'nde, CSV bölümünde Alan sınırlayıcı olarak virgül(",") girin.
- Hedef tablo için hedef tablonuzun adını girin. Hedef tablo, tablo adlandırma kurallarına uymalıdır. Bu codelab'de daha önce oluşturduğumuz tabloyu kullanacağız:
- Hizmet Hesabı menüsünde, Google Cloud projenizle ilişkili hizmet hesapları arasından bir hizmet hesabı seçin.
- Seçilen hizmet hesabının, bu codelab'de
project-1depolama paketi barındıran projedeki Cloud Storage için gerekli izinlere sahip olması gerekir. - Bu codelab'de,
project-2içinde oluşturulan bir hizmet hesabınıcodelab-sa@project-2.iam.gserviceaccount.comolarak kullanacağız.
- Seçilen hizmet hesabının, bu codelab'de
- Kaydet'i tıklayın.
Zamanlama seçeneği olarak Hemen Başlat'ı seçtiğimiz için Kaydet'i seçtiğimiz anda ilk transfer başlar.
Veri aktarımı hizmetinin durumunu doğrulama
Yapılandırılan veri aktarımının durumunu doğrulamak için:
- Google Cloud Console'da BigQuery sayfasına gidin.
- Veri transferleri'ni tıklayın.
- Yapılandırılmış aktarımın listesi gösterilir.

Codelab Transfer simgesini (Görünen adın altında) tıkladığınızda şimdiye kadar gerçekleştirilen tüm çalıştırmaların listesi gösterilir.

Hem manuel olarak tetiklenen hem de planlanan veri aktarımı için veri aktarımı çalıştırması başarılı olmalı ve VPC Hizmet Kontrolleri ihlali olmamalıdır. Yalnızca manuel olarak tetiklenen aktarımda, aktarımı manuel olarak başlatan asıl kullanıcıya erişime izin vermek için giriş kuralı gerekir.
4. Manuel olarak tetiklenen veri aktarımları için IP adresi kısıtlamaları
Mevcut yapılandırılmış giriş kuralları, yapılandırılmış kimliğin herhangi bir IP adresinden veri aktarımını manuel olarak tetiklemesine izin veriyor.
VPC Hizmet Kontrolleri, erişim düzeyi kullanılarak belirli API isteği özelliklerine göre izin verilen erişimi sınırlama olanağı sağlar. Bu özellikler şunlardır:
- IP alt ağları: İsteğin belirli bir IP adresinden gelip gelmediğini kontrol eder.
- Bölgeler: İsteğin, IP adresinin coğrafi konumuna göre belirlenen belirli bir bölgeden gelip gelmediğini kontrol eder.
- Asıl kullanıcılar: İsteğin belirli bir hesaptan gelip gelmediğini kontrol eder.
- Cihaz politikası: İsteğin, belirli koşulları karşılayan bir cihazdan gelip gelmediğini kontrol eder.
Bu özelliklerin doğrulanmasını, önceden yapılandırılmış giriş kuralıyla birlikte zorunlu kılmak için istenen özelliklere izin veren bir erişim düzeyi oluşturmamız ve ardından oluşturulan erişim düzeyini giriş kuralına kaynak olarak eklememiz gerekir.
Bu diyagramda, iki sorumlu (
user@example.com ve user2@example.com) tarafından başlatılan erişim üç senaryoda gösterilmektedir. Bu senaryolarda, VPC Hizmet Kontrolleri'nin kaynakları (giriş erişim düzeyi) ve kimlik özelliklerini nasıl değerlendirdiği gösterilmektedir. Bu değerlendirmede, her ikisinin de eşleşmesi gereken bir VE koşulu kullanılır.
- user@example.com kullanıcısı, erişim düzeyinin izin verdiği bir IP adresinden erişmeye çalıştığında IP adresi ve kullanıcı hesabı, giriş kuralındaki yapılandırmalarla eşleştiği için erişime izin verilir.
- user@example.com kullanıcısının IP adresi, giriş kuralında yapılandırılan hesap olmasına rağmen izin verilen IP adresiyle eşleşmediği için erişimi engelleniyor.
- user2@example.com kullanıcısı, izin verilen bir IP adresinden erişmeye çalışmasına rağmen hesabı giriş kuralı tarafından engellendiği için erişimi engelleniyor.
Erişim düzeyi oluşturma
Erişimi IP adresine göre sınırlayan bir erişim düzeyi oluşturmak için:
- Google Cloud Console'da Bağlam Erişim Yöneticisi sayfasını açın.
- İstenirse
codelab-folderklasörünü seçin.
- İstenirse
- Bağlam Erişim Yöneticisi sayfasının üst kısmında CREATE ACCESS LEVEL'ı (Erişim düzeyi oluştur) tıklayın.
- Yeni Erişim Düzeyi bölmesinde, yeni erişim düzeyine bir Başlık verin. Bu codelab'de
project_2_alolarak adlandıracağız. - Koşullar bölümünde, IP alt ağları'nın önündeki + simgesini tıklayın.
- IP Alt Ağları kutusunda Genel IP'yi seçin.
- Alternatif olarak, erişim düzeylerinde dahili IP adresini kullanmak için özel IP'yi kullanmayı seçebilirsiniz. Ancak bu codelab'de herkese açık bir IP kullanıyoruz.
- CIDR blokları olarak biçimlendirilmiş bir veya daha fazla IPv4 ya da IPv6 aralığı girin.
Giriş kuralına erişim düzeyi ekleme
Giriş kuralında, erişim düzeyi giriş kuralı referansında belgelendiği gibi zorunlu bir alan olan sources alanında referans alınır. VPC Hizmet Kontrolleri, kaynaklara girişe izin vermek için sources ve identityType özelliklerini AND koşulu olarak değerlendirir. Giriş kuralı, veri aktarımını manuel olarak tetikleyen asıl öğenin kimliğini kullanır. Veri aktarımı yapılandırmasında belirtilen hizmet hesabını kullanmaz.

Erişimi IP adresine göre sınırlayan yapılandırmalarla aktarımı yeniden çalıştırma
Uygulanan yapılandırmaların etkinliğini değerlendirmek için aşağıdaki senaryoları kullanarak aktarımı tekrar tetikleyin:
- Giriş kuralı tarafından referans verilen erişim düzeyinde izin verilen aralıktaki IP adresini kullanarak.
- yapılandırmaların izin vermediği bir IP adresi kullanılıyorsa
İzin verilen IP adreslerinden erişim başarılı olmalı, izin verilmeyen IP adreslerinden erişim ise başarısız olmalı ve VPC Hizmet Kontrolleri ihlaline neden olmalıdır.
Farklı bir IP adresi kullanarak test etmenin kolay bir yolu, Google Cloud Console'u kullanırken atanan IP adresine izin vermek ve ardından Cloud Shell'i kullanırken test etmektir.
Cloud Shell'de, hem RUN_TIME hem de RESOURCE_NAME yerine kendi değerlerinizi girerek aktarımı manuel olarak tetiklemek için aşağıdaki komutu çalıştırın:
bq mk \
--transfer_run \
--run_time='RUN_TIME' \
RESOURCE_NAME
Örneğin, aşağıdaki örnek komut, 1234567890 projesindeki bir 12345678-90ab-cdef-ghij-klmnopqrstuv yapılandırması için hemen çalıştırılır.
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
--transfer_run \
--run_time=$NOW \
projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv
Gözlemlenen çıkışta, IP adresine izin verilmediğinden beklendiği gibi bir VPC Hizmet Kontrolleri ihlali gösteriliyor.

Gözlemlenen ihlal, DataTransferService.StartManualTransferRuns yönteminde.
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"
5. Cloud Storage hizmetini korurken veri aktarımını başlatma
Cloud Storage'dan BigQuery'ye aktarım yaptığımız için VPC Hizmet Kontrolleri ile korunan hizmetler arasına Cloud Storage'ı ekleyelim ve aktarımın başarılı olup olmadığını kontrol edelim.
perimeter-2 yapılandırmasında, Cloud Storage API'yi BigQuery Data Transfer API ile birlikte Kısıtlanmış Hizmetler'den biri olarak ekleyin.

Cloud Storage API'yi güvenli hale getirdikten sonra, bir sonraki planlanmış veri aktarımını bekleyin veya aşağıdaki adımları uygulayarak aktarımı manuel olarak tetikleyin:
- Google Cloud Console'da BigQuery sayfasına gidin.
- Veri transferleri'ni tıklayın.
- Listeden transferinizi seçin: Bu codelab'de Codelab Transferi transferi kullanılmaktadır.
- Aktarımı şimdi çalıştır'ı tıklayın.
- Tamam'ı tıklayın.
Başka bir aktarım başlatılır. Bu seçeneği görmek için sayfayı yenilemeniz gerekebilir. Bu kez aktarım, VPC Hizmet Kontrolleri ihlali nedeniyle başarısız olur.

Cloud Storage VPC Hizmet Kontrolleri ihlalini inceleme
Aktarım Özetinde gösterildiği gibi vpcServiceControlsUniqueIdentifier kullanarak denetleme günlüklerini filtreleyin.
Gözlemlenen ihlal, aşağıdaki ayrıntılara sahip bir RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER çıkış ihlalidir:
- Asıl, Veri Aktarımı Hizmeti'nde yapılandırılan hizmet hesabıdır (manuel olarak tetiklenmiş veya planlanmış veri aktarımı çalıştırılmış olsun, reddedilen asıl aynı olacaktır).
- Etkilenen hizmet Cloud Storage
- İsteğin kaynağı, Veri Aktarımı Hizmeti'nin yapılandırıldığı projedir:
project-2 - Hedef proje, Cloud Storage nesnesinin bulunduğu projedir:
project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}
Cloud Storage çıkış ihlalini düzeltme
Çıkış ihlalini düzeltmek için, reddedilen hizmet hesabından Cloud Storage nesneleri içeren projeye trafik akışına izin veren bir çıkış kuralı kullanmamız gerekir.

Hizmet çevresini değiştirdikten sonra perimeter-2, aktarımı tekrar tetiklemek için işlemi tekrarlayın. Aktarımda hata gösterilmez.

6. BigQuery veri kümesini project-2'den project-1'e kopyalama
project-1 içindeki Cloud Storage paketinden project-2 içindeki BigQuery veri kümesine veri aktarabileceğimiz onaylandıktan sonra, BigQuery API, VPC Hizmet Kontrolleri ile korunurken project-2 içindeki BigQuery veri kümesini project-1'ya kopyalayalım.
Veri kümesini oluşturup kopyalamak için bq aracını kullanan bq mk komutunu kullanacağız.
project-1 içinde hedef veri kümesi oluşturma
Veri kümesi kopyalanmadan önce hedef veri kümesinin oluşturulması gerekir. Hedef veri kümesini oluşturmak için aşağıdaki komutu çalıştırabiliriz. Bu komut, copied_dataset adlı bir veri kümesini project-1 projesinde us konumunda oluşturur.
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
project-2 bölgesindeki BigQuery hizmetini VPC Hizmet Kontrolleri ile koruma
Sınırın yapılandırmasını değiştirin perimeter-2 ve BigQuery API'yi, BigQuery Veri Aktarımı ve Cloud Storage hizmetleriyle birlikte korunan hizmet olarak ekleyin.

Veri kümesi kopyalama işlemini başlatma
Veri kümesini kopyalamak için aşağıdaki bq mk komutunu çalıştırın. Bu komut, project-2 projesindeki codelab_bqtransfer_dataset veri kümesini project-1 içindeki copied_dataset veri kümesine kopyalar ve varsa veri kümesi içeriğinin üzerine yazar.
bq mk \
--transfer_config \
--project_id=project-1 \
--target_dataset=copied_dataset \
--data_source=cross_region_copy \
--display_name='Dataset from project-2 to project-1' \
--params='{
"source_dataset_id":"codelab_bqtransfer_dataset",
"source_project_id":"project-2",
"overwrite_destination_table":"true"
}'
Komut başarıyla çalışır. Bu sırada, veri kümesini kopyalama işlemini başlatmak için aktarım yapılandırması başarıyla oluşturulur. Veri kümesinin kendisini kopyalama işlemi, VPC Hizmet Kontrolleri ihlali nedeniyle başarısız olur.
İlgili VPC Hizmet Kontrolleri ihlali ayrıntılarını bulmak için project-2 (kaynak veri kümesi projesi) içindeki günlükleri aşağıdaki günlük sorgusuyla kontrol edin. Günlük sorgusu, kopyalanan veri kümesinin BigQuery hizmetindeki ve kaynak adındaki günlükleri filtreler (codelab_bqtransfer_dataset).
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
Gözlemlenen VPC Hizmet Kontrolleri ihlali, project-2 hizmetinden project-1 hizmetine çıkış ihlalidir.
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT-2-NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT-1-NUMBER]"
targetResourcePermissions: [
0: "bigquery.transfers.update"
1: "bigquery.transfers.get"
2: "bigquery.jobs.create"
]
}
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"
Tüm BigQuery ihlallerini düzeltin ve veri kümesi kopyalama işlemini tekrar başlatın.
Çıkış ihlalini düzeltmek için reddedilen asıl öğeye izin veren bir çıkış kuralı oluşturmamız gerekir. Reddedilen ana hesap, mk komutunu çalıştıran hesaptır.

Çıkış kuralı uygulandıktan sonra, veri kümesini kopyalamak için çevre perimeter-2 üzerinde aynı komutu çalıştırın. Bu kez, veri kümesini VPC Hizmet Kontrolleri ihlali olmadan başarıyla kopyalaması gerekir.
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ğini ve/veya Cloud projelerini de silebilirsiniz. Cloud projesinin silinmesi, bu proje içinde kullanılan tüm kaynakların faturalandırılmasını durdurur.
- Cloud Storage paketini silmek için aşağıdaki adımları tamamlayın:
- Google Cloud Console'da Cloud Storage paketleri sayfasına gidin.
- Silinecek paketin onay kutusunu işaretleyin ve Sil'i tıklayın.
- Görünen yer paylaşımı penceresinde, paketi ve içeriğini silmek istediğinizi onaylayın.

- BigQuery veri kümesini silmek için aşağıdaki adımları tamamlayın:
- Google Cloud Console'da BigQuery sayfasına gidin.
- Gezgin bölmesinde projenizi genişletin ve bir veri kümesi seçin.
- Üç nokta menüsünü genişletip Sil'i tıklayın.
- Veri kümesini sil iletişim kutusundaki alana
deleteyazın ve 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
Delete Iconsimgesini seçin.
- Erişim düzeyini silmek için aşağıdaki adımları tamamlayın:
- Google Cloud Console'da, Bağlam Erişim Yöneticisi sayfasını klasör kapsamında 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.
8. Tebrikler!
Bu codelab'de bir VPC Hizmet Kontrolleri çevresi oluşturdunuz, zorunlu kıldınız ve sorunlarını giderdiniz.
Daha fazla bilgi
Aşağıdaki senaryoları da inceleyebilirsiniz:
- BigQuery, BigQuery Veri Aktarım Hizmeti ve Cloud Storage'ı da koruyan farklı bir çevre ekleyin.
project-1 - Diğer desteklenen kaynaklardan BigQuery veri aktarımı gerçekleştirin.
- Kullanıcı erişimini konum veya cihaz politikası gibi diğer özelliklere göre kısıtlayın.
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.