Private Service Connect - Bölgesel Google API'leri için Tüketici HTTP(S) Hizmet Kontrollerini Kullanma

1. Giriş

Private Service Connect ile Google API'lerine erişmek için VPC ağınızdaki genel dahili IP adreslerini kullanarak özel uç noktalar oluşturabilirsiniz. Bu konseptten yola çıkarak artık dahili HTTP(S) yük dengeleyici kullanarak tüketici HTTP(S) hizmet kontrollerine sahip bir Private Service Connect uç noktası oluşturabilirsiniz. Bu size aşağıdaki özellikleri sağlar:

  • URL eşlemesi kullanarak hangi hizmetlerin kullanılabileceğini seçebilirsiniz. yola göre filtreleme, daha ayrıntılı kontroller yapmanıza olanak tanır.
  • Hizmetleri yeniden adlandırabilir ve istediğiniz URL'lerle eşleyebilirsiniz.
  • Müşteri tarafından yönetilen TLS sertifikalarını kullanabilirsiniz.
  • Aynı bölgedeki iş yüklerinden Google API'leri için bölgesel uç noktalara bağlanarak veri yerleşimini aktarım sırasında etkinleştirebilirsiniz.

Bu adlar ve IP adresleri, VPC ağınıza ve Cloud VPN tünelleri veya Cloud Interconnect ekleri (VLAN'lar) kullanarak buna bağlanan tüm şirket içi ağlar içinde yer alır.

Neler öğreneceksiniz?

  • Tüketici HTTP(S) Hizmet Kontrolleri ile Private Service Connect uç noktası oluşturma
  • Cloud Key Management Service (KMS) anahtarlığı ve anahtarı oluşturun.
  • Cloud DNS Tarafından Yönetilen Özel Alt Bölge ve A Kaydı oluşturma.
  • Herkese açık API'ye karşı çözümlenen KMS API'sine (bölgesel ve global) erişin.
  • PSC uç noktasına göre KMS API'ye (bölgesel ve küresel) erişin.

Gerekenler

  • Örnekleri dağıtma ve ağ bileşenlerini yapılandırma hakkında bilgi

2. Test Ortamı

Sanal makine barındırmak için us-central1 bölgesinde bir alt ağ, HTTP(S) Dahili Yük Dengeleyici iletim kuralı ve HTTP(S) Dahili Yük Dengeleyici ile kullanılacak bir yalnızca proxy alt ağıyla bir tüketici VPC'si oluşturulacak. Anahtar Yönetim Sistemi'nde (KMS) bir anahtarlık ve anahtar oluşturup herkese açık API uç noktasına çözümleyerek başlayacağız. Ardından, us-central1'deki bölgesel KMS uç noktasına çözümlenecek PSC uç noktasını oluşturacağız.

13681df518662ba.png

3. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da, sağ üstteki araç çubuğunda bulunan Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

7ffe5cbb04455448

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.

4. Başlamadan önce

API'leri etkinleştir

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
export zone=us-central1-a
echo $project
echo $region
echo $zone

Gerekli tüm hizmetleri etkinleştirin

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudkms.googleapis.com

5. VPC ağı, Alt ağlar ve Güvenlik Duvarı Kuralları oluşturma

VPC Ağı

Cloud Shell'den

gcloud compute networks create consumer-vpc --subnet-mode custom

Alt Ağ Oluşturma

Cloud Shell'den

gcloud compute networks subnets create consumer-subnet-1 \
--network consumer-vpc \
--range 10.0.0.0/24 \
--region $region \
--enable-private-ip-google-access

Bu laboratuvarda, bölgesel API arka uçlarına işaret edecek dahili bir L7 bölgesel yük dengeleyici oluşturacaksınız. Google dahili L7 yük dengeleyici, proxy yük dengeleyicidir. Bu nedenle, proxy'yi gerçekleştirmek için yük dengeleyiciye ayrılmış bir proxy alt ağı oluşturmanız gerekir. Yalnızca proxy alt ağı hakkında daha fazla bilgiyi burada bulabilirsiniz.

Cloud Shell'den

gcloud compute networks subnets create proxy-subnet1 \
--purpose=INTERNAL_HTTPS_LOAD_BALANCER \
--role=ACTIVE \
--network consumer-vpc \
--range 10.100.100.0/24 \
--region $region

Güvenlik Duvarı Kuralları Oluşturma

Bu laboratuvarda, oluşturduğunuz örneklere bağlanmak için IAP kullanacaksınız. Aşağıdaki güvenlik duvarı kuralı, örneklere IAP üzerinden bağlanmanızı sağlar. IAP kullanmamayı tercih ederseniz bu adımı atlayabilir ve örneğe genel IP adresleri ekleyebilir ve 0.0.0.0/0 adresinden TCP bağlantı noktası 22'ye girişe izin veren bir güvenlik duvarı kuralı oluşturabilirsiniz.

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

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

Cloud Shell'den

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

Cloud NAT örneği oluşturma

Linux paket dağıtımlarını indirmek için bir Cloud NAT oluşturulmalıdır.

Cloud Router oluşturma

Cloud Shell'den

gcloud compute routers create crnat \
    --network consumer-vpc \
    --region $region

Cloud NAT oluşturma

Cloud Shell'den

gcloud compute routers nats create central-nat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region $region

6. Anahtar Yönetim Anahtarlığı ve Anahtar Oluşturma

Cloud Shell'den

gcloud kms keyrings create central-keyring \
    --location $region

gcloud kms keyrings create global-keyring \
    --location global

Cloud Shell'den

gcloud kms keys create central-key \
    --location $region \
    --keyring central-keyring \
    --purpose encryption

gcloud kms keys create global-key \
    --location global \
    --keyring global-keyring \
    --purpose encryption

Cloud Shell'den anahtarlığın ve anahtarın us-central1 bölgesinde başarıyla oluşturulduğunu onaylayın.

gcloud kms keys list \
    --location $region \
    --keyring central-keyring

BEKLENEN SONUÇ

NAME: projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

Cloud Shell'den

gcloud kms keys list \
    --location global \
    --keyring global-keyring

BEKLENEN SONUÇ

NAME: projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

Daha sonra bağlanmak için bunu kullanacağınızdan anahtarlar için verilen tam yol adlarını not edin.

7. İstemci sanal makinesi oluşturma ve KMS bölgesel uç noktasına bağlanma

Şimdi bir istemci sanal makinesi ve sanal makineye SSH uygulayacak ve us-central1 bölgesel KMS API uç noktasının çözünürlüğünü test edeceksiniz.

Cloud Shell'den

gcloud compute instances create client-vm \
    --network=consumer-vpc \
    --subnet=consumer-subnet-1 \
    --zone=$zone \
    --no-address \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y
    sudo apt-get install tcpdump -y'

Daha sonra, oluşturduğunuz KMS anahtarına erişmek için varsayılan Compute hizmet hesabını güncellemeniz gerekir. Varsayılan Compute hizmet hesabı <Project_Number> biçiminde olur -compute@developer.gserviceaccount.com. Proje numarasını almak için Cloud Shell'den aşağıdaki komutu çalıştırın ve döndürülen sonuçların son satırındaki numarayı kopyalayın.

 gcloud projects describe $project

Oluşturduğunuz KMS anahtarına erişim elde etmek için varsayılan Compute hizmet hesabını güncelleyin.

Cloud Shell'den

 gcloud kms keys add-iam-policy-binding central-key \
    --location $region \
    --keyring central-keyring \
    --member serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
    --role roles/cloudkms.admin


gcloud kms keys add-iam-policy-binding global-key \
    --location global \
    --keyring global-keyring \
    --member serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
    --role roles/cloudkms.admin

+ simgesini tıklayarak ek bir Cloud Shell terminali oluşturun (ekran görüntüsü aşağıdadır)

a36edc967333315a.png

2. sekmede, IAP'den SSH'ye geçerek client-vm'ye geçin. Ortam değişkenlerinin taşınmayacağını ve aşağıdaki komuta proje kimliğinizi eklemeniz gerektiğini unutmayın.

Cloud Shell'den

gcloud beta compute ssh --zone us-central1-a "client-vm" \
--tunnel-through-iap \
--project <PROJECT_ID>

Daha önce not ettiğiniz KMS anahtarının adını kullanarak KMS Regional API uç noktasına bağlanın.

2. sekmeden client-vm

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--resolve cloudkms.googleapis.com:443:us-central1-cloudkms.googleapis.com \
https://cloudkms.googleapis.com/v1/projects/<YOUR_PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key

BEKLENEN SONUÇ

{
  "name": "projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key",
  "primary": {
    "name": "projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-12T17:41:21.543348620Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-12T17:41:21.543348620Z"
  },
  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-12T17:41:21.543348620Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"
}

2. sekmeden client-vm

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--resolve cloudkms.googleapis.com:443:cloudkms.googleapis.com \
https://cloudkms.googleapis.com/v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key

BEKLENEN SONUÇ

{
  "name": "projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key",
  "primary": {
    "name": "projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-22T19:19:43.271238847Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-22T19:19:43.271238847Z"
  },  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-22T19:19:43.271238847Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"}

DNS'nin, global uç noktaya kıyasla us-central KMS uç noktasını nerede çözdüğünü kontrol edin.

Tab2'den, client-vm

dig us-central1-cloudkms.googleapis.com

BEKLENEN SONUÇ

; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> us-central1-cloudkms.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4383
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-cloudkms.googleapis.com. IN        A

;; ANSWER SECTION:
us-central1-cloudkms.googleapis.com. 300 IN A   142.250.125.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Fri Nov 12 20:40:05 UTC 2021
;; MSG SIZE  rcvd: 80

2. sekmeden client-vm

dig cloudkms.googleapis.com

BEKLENEN SONUÇ

; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> cloudkms.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49528
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;cloudkms.googleapis.com.       IN      A

;; ANSWER SECTION:
cloudkms.googleapis.com. 300    IN      A       209.85.200.95

;; Query time: 8 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon Nov 22 15:26:17 UTC 2021
;; MSG SIZE  rcvd: 68

İncelemenin sonuçlarından, us-central1 bölgesel KMS uç noktasının ve Global KMS uç noktasının DNS çözümlemesinin harici bir IP adresine çözümlendiğini görebiliriz. (Not: Gördüğünüz IP adresi farklı bir harici IP adresi olabilir. Bu, normal Google API'leri davranışıdır.)

Sonraki bölüm için Cloud Shell'deki ilk sekmeye geri dönün.

8. Private Service Connect uç noktası oluşturma

Arka uç hizmeti olarak us-central1 bölgesel KMS uç noktasına işaret eden bir ağ uç noktası grubuna sahip bir Dahili HTTP(S) Yük Dengeleyici oluşturacaksınız. Yük dengeleyicinin iletim kuralı, Private Service Connect uç noktası görevi görür.

Privet Service Connect türünde ağ uç noktası grubunu (NEG) oluşturun ve us-central1-cloudkms.googleapis.com hizmetini hedefleyin.

Cloud Shell'den

gcloud beta compute network-endpoint-groups create l7psc-kms-neg \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=us-central1-cloudkms.googleapis.com \
  --region=$region

Yük dengeleyici için arka uç hizmetini oluşturun.

Cloud Shell'den

gcloud compute backend-services create l7-psc-kms \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --region=$region

NEG'yi arka uç hizmetine ekleyin.

Cloud Shell'den

gcloud beta compute backend-services add-backend l7-psc-kms \
  --network-endpoint-group=l7psc-kms-neg \
  --region=$region

Yük dengeleyici için URL eşlemesi oluşturun.

Cloud Shell'den

gcloud compute url-maps create l7-psc-url-map \
  --default-service=l7-psc-kms \
  --region=$region

Uç noktanın kullanacağı Özel URL için Yol Eşleştirici'yi oluşturun.

Cloud Shell'den

gcloud compute url-maps add-path-matcher l7-psc-url-map \
 --path-matcher-name=example \
 --default-service=l7-psc-kms \
 --region=$region

us-central1-cloudkms.example.com özel URL'si için ana makine kuralını oluşturun.

Cloud Shell'den

gcloud compute url-maps add-host-rule l7-psc-url-map \
--hosts=us-central1-cloudkms.example.com \
--path-matcher-name=example \
--region=$region

Yük dengeleyici için hedef proxy'ler oluşturun. Üretim kullanım alanında, son komutta yapılandırdığınız ana makine için HTTP(S) ve özel sertifikaları kullanmanız önerilir.

Cloud Shell'den

gcloud compute target-http-proxies create psc-http-proxy \
    --url-map=l7-psc-url-map \
    --region=$region

Private Service Connect Endpoint görevini yerine getirecek yük dengeleyici için iletim kuralını oluşturun.

Cloud Shell'den

gcloud beta compute forwarding-rules create l7-psc-forwarding-rule \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=consumer-vpc \
  --subnet=consumer-subnet-1 \
  --address=10.0.0.100 \
  --ports=80 \
  --region=$region \
  --target-http-proxy=psc-http-proxy \
  --target-http-proxy-region=$region

9. DNS Yapılandırması

Bu bölümde, example.com için gizli bir DNS alt bölgesi ve son adımda oluşturduğumuz iletim kuralını işaret eden bir A kaydı oluşturacaksınız.

Yönetilen DNS Özel Alt Bölgesi oluşturun.

Cloud Shell'den

gcloud dns managed-zones create example \
    --description="example domain for KMS" \
    --dns-name=example.com \
    --networks=consumer-vpc \
    --visibility=private

us-central1-cloudkms.example.com için A kaydı oluşturun.

Cloud Shell'den

gcloud dns record-sets transaction start \
   --zone=example

gcloud dns record-sets transaction add 10.0.0.100 \
   --name=us-central1-cloudkms.example.com \
   --ttl=300 \
   --type=A \
   --zone=example

gcloud dns record-sets transaction execute \
   --zone=example

10. PSC aracılığıyla Bölgesel KMS Uç Noktasına bağlanma

Tüm bağlantı ayrıntılarını görmek ve PSC uç noktası üzerinden hem bölgesel hem de global uç noktalarla olan bağlantıları test etmek için tcpdump'ı çalıştırmak üzere sekme 2'de client-vm'ye geri dönün.

sudo tcpdump -i any net 10.0.0.100 or port 53 -n

Cloud Shell'de 3. bir sekme açın ve client-vm'ye SSH üzerinden bağlanın.

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
http://us-central1-cloudkms.example.com/v1/projects/<YOUR_PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key

BEKLENEN SONUÇ + TCPDUMP

{
  "name": "projects/psc-2-321213/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key",
  "primary": {
    "name": "projects/psc-2-321213/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-12T17:41:21.543348620Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-12T17:41:21.543348620Z"
  },
  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-12T17:41:21.543348620Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"
}

---

19:54:42.924923 IP 10.0.0.3.55290 > 169.254.169.254.53: 26132+ A? cloudkms.googleapis.com. (41)
19:54:42.925137 IP 10.0.0.3.55290 > 169.254.169.254.53: 40734+ AAAA? cloudkms.googleapis.com. (41)
19:54:42.931480 IP 169.254.169.254.53 > 10.0.0.3.55290: 26132 1/0/0 A 10.0.0.100 (57)
19:54:42.931781 IP 169.254.169.254.53 > 10.0.0.3.55290: 40734 1/0/0 AAAA 2607:f8b0:4001:c0d::5f (69)
19:54:42.932285 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [S], seq 3382081170, win 65320, options [mss 1420,sackOK,TS val 1907763603 ecr 0,nop,wscale 7], length 0
19:54:42.934951 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [S.], seq 3147938658, ack 3382081171, win 65535, options [mss 1420,sackOK,TS val 3206048204 ecr 1907763603,nop,wscale 8], length 0
19:54:42.934978 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1, win 511, options [nop,nop,TS val 1907763606 ecr 3206048204], length 0
19:54:42.935182 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [P.], seq 1:422, ack 1, win 511, options [nop,nop,TS val 1907763606 ecr 3206048204], length 421: HTTP: GET /v1/projects/<PROJECT_ID/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key HTTP/1.1
19:54:42.935614 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [.], ack 422, win 261, options [nop,nop,TS val 3206048205 ecr 1907763606], length 0
19:54:43.010268 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [P.], seq 1:1072, ack 422, win 261, options [nop,nop,TS val 3206048280 ecr 1907763606], length 1071: HTTP: HTTP/1.1 200 OK
19:54:43.010295 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1072, win 503, options [nop,nop,TS val 1907763681 ecr 3206048280], length 0
19:54:43.011545 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [F.], seq 422, ack 1072, win 503, options [nop,nop,TS val 1907763683 ecr 3206048280], length 0
19:54:43.012013 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [F.], seq 1072, ack 423, win 261, options [nop,nop,TS val 3206048282 ecr 1907763683], length 0
19:54:43.012021 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1073, win 503, options [nop,nop,TS val 1907763683 ecr 3206048282], length 0

2. sekme penceresini tekrar kontrol edin ve tcpdump bilgilerini inceleyin. Cloud KMS bölgesel uç noktasına oluşturduğunuz PSC uç noktası üzerinden erişebildiğinizi ve us-central1 bölgesel uç noktasının, oluşturduğunuz Yönetilen Cloud DNS alt bölgesine gizli olarak çözümlendiğini göreceksiniz.

3. sekmeden,client-vm

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
http://us-central1-cloudkms.example.com/v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key

BEKLENEN SONUÇ + TCPDUMP

{
  "error": {
    "code": 404,
    "message": "The request concerns location 'global' but was sent to location 'us-central1'. Either Cloud KMS is not available in 'global' or the request was misrouted. gRPC clients must ensure that 'x-goog-request-params' is specified in request metadata. See https://cloud.google.com/kms/docs/grpc for more information.",
    "status": "NOT_FOUND"
  }
}

---

20:04:32.199247 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [S], seq 2782317346, win 65320, options [mss 1420,sackOK,TS val 1908352831 ecr 0,nop,wscale 7], length 0
20:04:32.201643 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [S.], seq 1927472124, ack 2782317347, win 65535, options [mss 1420,sackOK,TS val 3731555085 ecr 1908352831,nop,wscale 8], length 0
20:04:32.201666 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 1, win 511, options [nop,nop,TS val 1908352834 ecr 3731555085], length 0
20:04:32.201812 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [P.], seq 1:415, ack 1, win 511, options [nop,nop,TS val 1908352834 ecr 3731555085], length 414: HTTP: GET /v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key HTTP/1.1
20:04:32.202308 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [.], ack 415, win 261, options [nop,nop,TS val 3731555086 ecr 1908352834], length 0
20:04:32.237629 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [P.], seq 1:760, ack 415, win 261, options [nop,nop,TS val 3731555121 ecr 1908352834], length 759: HTTP: HTTP/1.1 404 Not Found
20:04:32.237656 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 760, win 506, options [nop,nop,TS val 1908352870 ecr 3731555121], length 0
20:04:32.238283 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [F.], seq 415, ack 760, win 506, options [nop,nop,TS val 1908352870 ecr 3731555121], length 0
20:04:32.238833 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [F.], seq 760, ack 416, win 261, options [nop,nop,TS val 3731555122 ecr 1908352870], length 0
20:04:32.238851 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 761, win 506, options [nop,nop,TS val 1908352871 ecr 3731555122], length 0

Genel bir Cloud KMS Anahtarı/Anahtarlığı'na erişmeye çalıştığınızda hata oluşur. Bu bağlantı denemelerini tcpdump'ta da görürsünüz.

3. sekmede, client-vm

dig us-central1-cloudkms.example.com

BEKLENEN SONUÇ

; <<>> DiG 9.11.5-P4-5.1+deb10u7-Debian <<>> us-central1-cloudkms.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27474
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-cloudkms.example.com. IN   A

;; ANSWER SECTION:
us-central1-cloudkms.example.com. 300 IN A      10.0.0.100

;; Query time: 7 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon May 23 16:22:12 UTC 2022
;; MSG SIZE  rcvd: 77

İnceleme sırasında us-central1-cloudkms.googleapis.com için oluşturduğumuz özel URL'nin artık PSC uç noktasına işaret ettiğini ve yalnızca bu bölgede oluşturulan kaynakları çözümlediğini göreceksiniz.

Artık her iki SSH sekmesini de client-vm'ye kapatabilirsiniz.

11. Temizleme adımları

Laboratuvar bileşenlerini tek bir Cloud Shell terminalinden silin

gcloud dns record-sets transaction start --zone=example

gcloud dns record-sets transaction remove 10.0.0.100 \
    --name=us-central1-cloudkms.example.com \
    --ttl=300 \
    --type=A \
    --zone=example

gcloud dns record-sets transaction execute --zone=example

gcloud dns managed-zones delete example

gcloud compute forwarding-rules delete l7-psc-forwarding-rule --region=$region --quiet

gcloud compute target-http-proxies delete psc-http-proxy --region=$region --quiet

gcloud compute url-maps delete l7-psc-url-map --region=$region --quiet

gcloud compute backend-services delete l7-psc-kms --region=$region --quiet

gcloud compute network-endpoint-groups delete l7psc-kms-neg --region=$region --quiet

gcloud compute instances delete client-vm --zone=$zone --quiet

#Replace PROJECT_NUMBER
gcloud kms keys remove-iam-policy-binding global-key --keyring=global-keyring --location=global \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role roles/cloudkms.admin

#Replace PROJECT_NUMBER
gcloud kms keys remove-iam-policy-binding central-key --keyring=central-keyring --location=$region \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role roles/cloudkms.admin

gcloud kms keys versions destroy 1 --location=global --keyring=global-keyring --key=global-key

gcloud kms keys versions destroy 1 --location=$region --keyring=central-keyring --key=central-key

gcloud compute routers nats delete central-nat --router=crnat --region=$region --quiet

gcloud compute routers delete crnat --region=$region --quiet

gcloud compute firewall-rules delete allow-ssh-iap --quiet

gcloud compute networks subnets delete proxy-subnet1 --region=$region --quiet

gcloud compute networks subnets delete consumer-subnet-1 --region=$region --quiet

gcloud compute networks delete consumer-vpc --quiet

12. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

İşlediklerimiz

  • Tüketici HTTP(S) Hizmet Kontrolleri ile Private Service Connect uç noktası oluşturma
  • Cloud Key Management Service (KMS) anahtarlığı ve anahtarı oluşturma.
  • Cloud DNS Tarafından Yönetilen Özel Alt Bölge ve A Kaydı oluşturma.
  • KMS API'ye (bölgesel ve küresel) erişim, herkese açık API'ye karşı çözüldü.
  • PSC uç noktasına göre KMS API'ye (bölgesel ve küresel) erişme.