Agent Engine PSC Explicit Proxy

1. Giriş

Private Service Connect arayüzü, üretici Sanal Özel Bulut (VPC) ağının tüketici VPC ağındaki çeşitli hedeflere bağlantı başlatmasına olanak tanıyan bir kaynaktır. Üretici ve tüketici ağları farklı projelerde ve kuruluşlarda olabilir.

Bir ağ eki, Private Service Connect arayüzünden gelen bağlantıyı kabul ederse Google Cloud, arayüze ağ eki tarafından belirtilen bir tüketici alt ağından IP adresi atar. Tüketici ve üretici ağları bağlıdır ve dahili IP adreslerini kullanarak iletişim kurabilir.

Ağ eki ile Private Service Connect arayüzü arasındaki bağlantı, Private Service Connect uç noktası ile hizmet eki arasındaki bağlantıya benzer ancak iki temel farkı vardır:

  • Ağ eki, üretici ağının tüketici ağına bağlantı başlatmasına (yönetilen hizmet çıkışı) olanak tanırken uç nokta, tüketici ağının üretici ağına bağlantı başlatmasına (yönetilen hizmet girişi) olanak tanır.
  • Private Service Connect arayüz bağlantısı geçişlidir. Bu, bir yapımcı ağının, tüketici ağına bağlı diğer ağlarla iletişim kurabileceği anlamına gelir.

Vertex AI PSC arayüzü erişilebilirliğiyle ilgili dikkat edilmesi gereken noktalar

  • PSC-Interface, trafiği RFC1918 adres bloğundaki VPC veya şirket içi tabanlı hedeflere yönlendirebilir.
  • RFC-1918 olmayan adres bloklarını hedefleyen PSC arayüzü, tüketicinin VPC'sinde RFC-1918 adresiyle açık bir proxy dağıtılmasını gerektirir. Vertex AI dağıtımında proxy, hedef uç noktanın tam alan adı ile birlikte tanımlanmalıdır.
  • Dağıtımınızı yalnızca bir PSC arayüzüyle yapılandırdığınızda varsayılan internet erişimi korunur. Bu giden trafik, doğrudan güvenli ve Google tarafından yönetilen kiracı ağından çıkar.

Vertex AI PSC arayüzü VPC-SC ile ilgili dikkat edilmesi gereken noktalar

  • Projeniz bir VPC Hizmet Kontrolleri çevresinin parçası olduğunda, Google tarafından yönetilen kiracıların varsayılan internet erişimi, veri hırsızlığını önlemek için çevre tarafından engellenir.
  • Bu senaryoda dağıtımın herkese açık internete erişmesine izin vermek için trafiği VPC'niz üzerinden yönlendiren güvenli bir çıkış yolu açıkça yapılandırmanız gerekir.
  • Bunu yapmanın önerilen yolu, VPC sınırınızın içinde RFC1918 adresiyle bir proxy sunucusu oluşturmak ve proxy VM'nin internete erişmesine izin vermek için bir Cloud NAT ağ geçidi oluşturmaktır.

Daha fazla bilgi için aşağıdaki kaynaklara bakın:

Aracı dağıtma | Vertex AI'da üretken yapay zeka | Google Cloud

Vertex AI kaynakları için Private Service Connect arayüzü oluşturma | Google Cloud

Ne oluşturacaksınız?

Bu eğitimde, tüketicinin VPC'sinde RFC1918 adresiyle dağıtılan bir proxy VM aracılığıyla herkese açık bir siteye (https://api.frankfurter.app/) bağlantı sağlamak için Private Service Connect (PSC) arayüzüyle dağıtılan kapsamlı bir Agent Engine oluşturacaksınız. Örnek dağıtım, VPC-SC'nin etkin olduğu bir projede veya kiracı VPC yerine müşterilerin ağı üzerinden internet çıkışı gerektiren yöneticiler için geçerlidir.

Şekil 1

f42f2db921f6d5af.png

Kiracı projesinde Agent Engine'i barındıran tüketici ağı proxy-vm'sini çözümlemek için DNS eşlemesinden yararlanarak tüketici VPC'sinde tek bir psc-network-attachment oluşturursunuz. Bu işlem aşağıdaki kullanım alanlarını sağlar:

Agent Engine'i dağıtma ve açık proxy olarak hareket edecek bir proxy sanal makinesi yapılandırma. Bu sayede, https://api.frankfurter.app gibi herkese açık bir URL'ye ulaşılabilir.

Neler öğreneceksiniz?

  • Ağ eki oluşturma
  • Üreticinin PSC arayüzü oluşturmak için ağ eki nasıl kullanabileceği
  • DNS eşleme kullanarak üreticiden tüketiciye iletişimi nasıl kurabilirsiniz?
  • İnternet çıkışı için proxy sanal makinesi dağıtma ve kullanma

Gerekenler

Google Cloud projesi

IAM İzinleri

2. Başlamadan önce

Projeyi, eğitimi destekleyecek şekilde güncelleme

Bu eğitimde, Cloud Shell'de gcloud yapılandırmasının uygulanmasına yardımcı olmak için $değişkenleri kullanılır.

Cloud Shell'de aşağıdakileri yapın:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

API Etkinleştirme

Cloud Shell'de aşağıdakileri yapın:

gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "dns.googleapis.com"
gcloud services enable "notebooks.googleapis.com"
gcloud services enable "storage.googleapis.com"
gcloud services enable "iap.googleapis.com"

API'lerin başarıyla etkinleştirildiğini doğrulama

gcloud services list --enabled

3. Tüketici Kurulumu

Tüketici VPC'sini oluşturma

Bu VPC, bir müşteri projesinde bulunur. Bu VPC'de aşağıdaki kaynaklar oluşturulur:

  • Tüketici Alt Ağı
  • Ağa Bağlı Alt Ağ
  • Cloud Router (Cloud NAT için gereklidir)
  • Cloud NAT

Cloud Shell'de aşağıdakileri yapın:

gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom

Tüketici alt ağlarını oluşturma

Cloud Shell'de Proxy VM için alt ağı oluşturun:

gcloud compute networks subnets create rfc1918-subnet1 --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=us-central1

Private Service Connect ağ eki alt ağını oluşturma

Cloud Shell'de PSC ağ eki için alt ağı oluşturun:

gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1

Cloud Router ve NAT yapılandırması

Bu eğitimde, genel IP adresi olmayan proxy VM'ye internet erişimi sağlamak için Cloud NAT kullanılır. Cloud NAT, yalnızca özel IP adreslerine sahip sanal makinelerin internete bağlanmasını sağlayarak yazılım paketleri yükleme gibi görevleri gerçekleştirmelerine olanak tanır.

Cloud Shell'de Cloud Router'ı oluşturun.

gcloud compute routers create cloud-router-for-nat --network consumer-vpc --region us-central1

Cloud Shell'de, günlük kaydı etkinleştirilmiş NAT ağ geçidini oluşturun. Frankfurter API'ye (https://api.frankfurter.app/) herkese açık IP üzerinden erişimi doğrulamak için günlük kaydını kullanırız.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1 --enable-logging --log-filter=ALL

4. IAP'yi etkinleştirme

IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdaki özellikleri içeren bir güvenlik duvarı kuralı oluşturun:

  • IAP kullanarak erişmek istediğiniz tüm sanal makine örnekleri için geçerlidir.
  • 35.235.240.0/20 IP aralığından gelen giriş trafiğine izin verir. Bu aralık, IAP'nin TCP yönlendirme için kullandığı tüm IP adreslerini içerir.

Cloud Shell'de IAP güvenlik duvarı kuralını oluşturun.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

5. Tüketici sanal makine örnekleri oluşturma

Cloud Shell'de, Agent Engine için açık proxy görevi görecek olan tüketici sanal makine örneği proxy-vm'yi oluşturun. HTTP trafiğini proxy'lemek için tinyproxy uygulamasını kullanacağız.

gcloud compute instances create proxy-vm \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --can-ip-forward \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=rfc1918-subnet1 \
    --shielded-secure-boot \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install tinyproxy -y
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'proxy server !!' | tee /var/www/html/index.html
      EOF"

6. Private Service Connect ağ eki

Ağ ekleri, Private Service Connect arayüzünün tüketici tarafını temsil eden bölgesel kaynaklardır. Bir ağ ekiyle tek bir alt ağ ilişkilendirirsiniz ve üretici, bu alt ağdan Private Service Connect arayüzüne IP'ler atar. Alt ağ, ağ ekiyle aynı bölgede olmalıdır. Ağ eki, üretici hizmetiyle aynı bölgede olmalıdır.

Ağ eki oluşturma

Cloud Shell'de ağ ekini oluşturun.

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_AUTOMATIC \
    --subnets=intf-subnet

Ağ eklerini listeleme

Cloud Shell'de ağ ekini listeleyin.

gcloud compute network-attachments list

Ağ eklerini açıklama

Cloud Shell'de ağ ekini açıklayın.

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

Üretici, Private Service Connect arayüzünü oluştururken kullanılacak PSC ağ eki adını (psc-network-attachment) not edin.

PSC ağ eki URL'sini Cloud Console'da görüntülemek için şuraya gidin:

Ağ Hizmetleri → Private Service Connect → Ağ Eki → psc-network-attachment

8eec51cb197da218.png

7. Özel DNS bölgesi

demo.com için bir Cloud DNS bölgesi oluşturacak ve bu bölgeyi proxy-vm'nizin IP adreslerini gösteren bir A kaydıyla dolduracaksınız. Daha sonra, DNS eşleme Agent Engine'de dağıtılacak ve tüketicinin DNS kayıtlarına erişime izin verecek.

Cloud Shell'de, demo.com DNS adını oluşturan aşağıdaki işlemi yapın.

gcloud dns --project=$projectid managed-zones create private-dns-codelab --description="" --dns-name="demo.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc"

DNS A kayıtları için kullanılan örneklerin IP adreslerini alın ve saklayın.

Cloud Shell'de sanal makine örneklerine karşı bir açıklama işlemi gerçekleştirin.

gcloud compute instances describe proxy-vm --zone=us-central1-a | grep  networkIP:

Cloud Shell'de sanal makine için kayıt kümesini (proxy-vm.demo.com) oluşturun. Ortamınızın çıkışına göre IP adresini güncellediğinizden emin olun.

gcloud dns --project=$projectid record-sets create proxy-vm.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="10.10.10.2"

PSC arayüzünden erişime izin verecek bir Cloud Firewall kuralı oluşturun

Aşağıdaki bölümde, PSC Ağ Eki'nden kaynaklanan trafiğin Consumer VPC'deki proxy-vm'ye erişmesine izin veren bir güvenlik duvarı kuralı oluşturun.

Cloud Shell'de giriş güvenlik duvarı kuralını oluşturun.

gcloud compute firewall-rules create allow-access-to-compute \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="10.10.10.0/28" \
    --enable-logging

8. Jupyter Notebook oluşturma

Aşağıdaki bölümde, Jupyter Notebook oluşturma konusunda size yol gösterilir. Bu not defteri, internet çıkışı için açık bir proxy'yi hedefleyen Agent Engine'i dağıtmak için kullanılır.

Kullanıcı tarafından yönetilen hizmet hesabı oluşturma

Aşağıdaki bölümde, eğitimde kullanılan Vertex AI Workbench örneğiyle ilişkilendirilecek bir hizmet hesabı oluşturacaksınız.

Eğitimde, hizmet hesabına aşağıdaki roller uygulanır:

Cloud Shell'de hizmet hesabını oluşturun.

gcloud iam service-accounts create notebook-sa \
    --display-name="notebook-sa"

Cloud Shell'de hizmet hesabını Storage Admin rolüyle güncelleyin.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

Cloud Shell'de hizmet hesabını Vertex AI Kullanıcısı rolüyle güncelleyin.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Cloud Shell'de hizmet hesabını Artifact Registry Yöneticisi rolüyle güncelleyin.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

Cloud Shell'de, not defteri hizmet hesabının varsayılan Compute Engine hizmet hesabını kullanmasına izin verin.

gcloud iam service-accounts add-iam-policy-binding \
    $(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')-compute@developer.gserviceaccount.com \
    --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" \
    --role="roles/iam.serviceAccountUser"

9. Açık proxy'yi güncelleme

Aşağıdaki bölümde, açık proxy'ye SSH ile bağlanmanız ve tinyproxy.conf yapılandırma dosyasını güncelleyip sıfırlama işlemi yapmanız gerekir.

Cloud Shell'den

gcloud compute ssh --zone us-central1-a "proxy-vm" --tunnel-through-iap --project $projectid

tinyproxy yapılandırma dosyasını açın ve tercih ettiğiniz düzenleyiciyi kullanarak güncelleyin. Aşağıda VIM'in kullanıldığı bir örnek verilmiştir.

sudo vim /etc/tinyproxy/tinyproxy.conf

# Locate the "Listen" configuration line to restrict listening to only its private IP address of the Proxy-VM, rather than all interfaces. 

Listen 10.10.10.2

# Locate the "Allow" configuration line to allow requests ONLY from the PSC Network Attachment Subnet

Allow 192.168.10.0/24

Save