1. 簡介
有了 Private Service Connect,您就能透過虛擬私有雲網路中的全域內部 IP 位址,建立私人端點來存取 Google API。根據這個概念,您現在可以透過內部 HTTP(S) 負載平衡器,建立含有用戶端 HTTP(S) 服務控制項的 Private Service Connect 端點。取得以下功能:
- 您可利用網址對應來選擇可用的服務。您可以按照路徑進行篩選,進行更精細的檢查。
- 您可以重新命名服務,並將其對應至您選擇的網址。
- 可以使用客戶自行管理的 TLS 憑證。
- 您可以從相同區域的工作負載連線至 Google API 的區域端點,啟用傳輸中的資料落地機制。
這些名稱和 IP 位址屬於您的虛擬私有雲網路內部,以及透過 Cloud VPN 通道或 Cloud Interconnect 連結 (VLAN) 連線的任何地端部署網路。
課程內容
- 使用 Consumer HTTP(S) Service Controls 建立 Private Service Connect 端點
- 建立 Cloud Key Management Service (KMS) 金鑰環和金鑰。
- 建立 Cloud DNS 代管私人區域和 A 記錄。
- 存取已針對公用 API 解析的 KMS API (區域性和全域性)。
- 透過 PSC 端點存取 KMS API (區域和全域)。
軟硬體需求
- 具備部署執行個體與設定網路元件的知識
2. 測試環境
系統會建立用戶端虛擬私有雲,其中含有 us-central1 區域中的一個用於託管 VM 的子網路,另一個用於託管 VM 的 HTTP(S) 內部負載平衡器轉送規則,另一個則是用於與 HTTP(S) 內部負載平衡器搭配使用的 Proxy 專屬子網路。我們會先在金鑰管理系統 (KMS) 中建立金鑰環和金鑰,並解析公用 API 端點。接著,我們會建立 PSC 端點,以解析位於 us-central1 的區域 KMS 端點。
3. 設定和需求
自修環境設定
- 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。
- 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
- 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為
PROJECT_ID
),因此如果您不喜歡的話,請隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後 - 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
在 Google Cloud 控制台,按一下右上方的工具列上的 Cloud Shell 圖示:
佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:
這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。這個研究室中的所有工作都可以透過瀏覽器完成。
4. 事前準備
啟用 API
在 Cloud Shell 中,確認您已設定專案 ID
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
啟用所有必要服務
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. 建立虛擬私有雲網路、子網路和防火牆規則
虛擬私有雲網路
透過 Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
建立子網路
透過 Cloud Shell
gcloud compute networks subnets create consumer-subnet-1 \ --network consumer-vpc \ --range 10.0.0.0/24 \ --region $region \ --enable-private-ip-google-access
在本研究室中,您將建立指向區域 API 後端的內部 L7 區域性負載平衡器。Google 內部 L7 負載平衡器是 Proxy 負載平衡器,因此您需要建立負載平衡器專用的 Proxy 子網路才能執行 Proxy。如要進一步瞭解僅限 Proxy 的子網路,請按這裡。
透過 Cloud Shell
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
建立防火牆規則
在本研究室中,您將使用 IAP 連線至您建立的執行個體。下列防火牆規則可讓您透過 IAP 連線至執行個體。如果您不想使用 IAP,可以略過這個步驟,改為在執行個體中新增公開 IP 位址,並建立防火牆規則,允許從 0.0.0.0/0 的 TCP 通訊埠 22 輸入。
如要允許 IAP 連線至您的 VM 執行個體,請建立下列防火牆規則:
- 適用於您要透過 IAP 存取的所有 VM 執行個體。
- 允許來自 IP 範圍 35.235.240.0/20 的輸入流量。這個範圍包含 IAP 用於 TCP 轉送的所有 IP 位址。
透過 Cloud Shell
gcloud compute firewall-rules create allow-ssh-iap \ --network consumer-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
建立 Cloud NAT 執行個體
必須建立 Cloud NAT,才能下載 Linux 套件發行版。
建立 Cloud Router
透過 Cloud Shell
gcloud compute routers create crnat \ --network consumer-vpc \ --region $region
建立 Cloud NAT
透過 Cloud Shell
gcloud compute routers nats create central-nat \ --router=crnat \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --enable-logging \ --region $region
6. 建立金鑰管理金鑰環和金鑰
透過 Cloud Shell
gcloud kms keyrings create central-keyring \ --location $region gcloud kms keyrings create global-keyring \ --location global
透過 Cloud Shell
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 中,確認已成功在 us-central1 區域建立金鑰環和金鑰。
gcloud kms keys list \ --location $region \ --keyring central-keyring
預期結果
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
gcloud kms keys list \ --location global \ --keyring global-keyring
預期結果
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
記下為金鑰提供的「完整路徑」名稱,因為稍後連線時會用到這個名稱。
7. 建立用戶端 VM 並連線至 KMS 區域端點
接下來,請建立用戶端 VM、透過 SSH 登入 VM,並測試 us-central1 區域 KMS API 端點的解析度。
透過 Cloud Shell
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'
接下來,您必須更新預設 Compute 服務帳戶,才能存取您建立的 KMS 金鑰。預設運算服務帳戶的格式為 <Project_Number>-compute@developer.gserviceaccount.com.如要取得專案編號,請透過 Cloud Shell 執行下列指令,然後複製傳回結果最後一行的數字。
gcloud projects describe $project
請更新預設的 Compute 服務帳戶,以便存取您建立的 KMS 金鑰。
透過 Cloud Shell
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
按一下「+」(螢幕截圖如下) ,建立其他 Cloud Shell 終端機
在分頁 2 中,透過通道透過 SSH 進入 client-vm。請注意,環境變數不會攜帶,您必須在下列指令中新增專案 ID。
透過 Cloud Shell
gcloud beta compute ssh --zone us-central1-a "client-vm" \ --tunnel-through-iap \ --project <PROJECT_ID>
使用您先前記下的 KMS 金鑰名稱連線至 KMS Regional API 端點。
從分頁 2,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
預期結果
{ "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,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
預期結果
{ "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 解析 us-central KMS 端點的位置。
從 Tab2、client-vm
dig us-central1-cloudkms.googleapis.com
預期結果
; <<>> 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,client-vm
dig cloudkms.googleapis.com
預期結果
; <<>> 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
從摘要結果中,我們可以看到 us-central1 區域 KMS 端點和全域 KMS 端點的 DNS 解析為外部 IP 位址。(注意:您看到的 IP 位址可能是不同的外部 IP 位址。這是正常的 Google API 行為)。
在下一節中,切換回 Cloud Shell 的第一個分頁。
8. 建立 Private Service Connect 端點
您會建立內部 HTTP(S) 負載平衡器,當中的網路端點群組會指向做為後端服務的 us-central1 區域性 KMS 端點。負載平衡器的轉送規則會以 Private Service Connect 端點的形式運作。
建立採用 Privet Service Connect 類型和目標服務 us-central1-cloudkms.googleapis.com 的網路端點群組 (NEG)。
透過 Cloud Shell
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
為負載平衡器建立後端服務。
透過 Cloud Shell
gcloud compute backend-services create l7-psc-kms \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --region=$region
將 NEG 新增至後端服務。
透過 Cloud Shell
gcloud beta compute backend-services add-backend l7-psc-kms \ --network-endpoint-group=l7psc-kms-neg \ --region=$region
建立負載平衡器的網址對應。
透過 Cloud Shell
gcloud compute url-maps create l7-psc-url-map \ --default-service=l7-psc-kms \ --region=$region
為端點要使用的自訂網址建立路徑比對器。
透過 Cloud Shell
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 建立主機規則。
透過 Cloud Shell
gcloud compute url-maps add-host-rule l7-psc-url-map \ --hosts=us-central1-cloudkms.example.com \ --path-matcher-name=example \ --region=$region
建立負載平衡器的目標 Proxy。在實際工作環境中,針對您在上一個指令中設定的主機,建議使用 HTTP(S) 和自訂憑證。
透過 Cloud Shell
gcloud compute target-http-proxies create psc-http-proxy \ --url-map=l7-psc-url-map \ --region=$region
為負載平衡器建立轉送規則,用來做為 Private Service Connect 端點。
透過 Cloud Shell
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 設定
在本節中,您將建立一個私人 DNS 區域 (例如 example.com) 及 A 記錄,指向我們在上一個步驟中建立的轉送規則。
建立代管 DNS 私人區域。
透過 Cloud Shell
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 建立 A 記錄。
透過 Cloud Shell
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 連線至區域性 KMS 端點
請切換回分頁 2 中的 client-vm,執行 tcpdump,查看所有連線詳細資料,並透過 PSC 端點測試與區域性和全域端點的連線。
sudo tcpdump -i any net 10.0.0.100 or port 53 -n
在 Cloud Shell 中開啟第 3 個分頁,並透過 SSH 進入 client-vm。
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
預期結果 + 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 視窗並檢查 tcpdump 資訊。您會發現您可以透過您建立的 PSC 端點存取 Cloud KMS 區域端點,而 us-central1 區域端點會以不公開的方式解析您建立的代管 Cloud DNS 區域。
從分頁 3,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
預期結果 + 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
嘗試存取全域 Cloud KMS 金鑰/金鑰環會導致錯誤。您也會在 tcpdump 中看見這些連線嘗試。
在分頁 3 中,client-vm
dig us-central1-cloudkms.example.com
預期結果
; <<>> 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
透過摘要,您現在會看見我們為 us-central1-cloudkms.googleapis.com 建立的自訂網址現在指向 PSC 端點,而且只會解析在該區域中建立的資源。
您現在可以關閉傳送至 client-vm 的兩個 SSH 分頁。
11. 清除步驟
從單一 Cloud Shell 終端機刪除研究室元件
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. 恭喜!
恭喜您完成本程式碼研究室。
涵蓋內容
- 使用消費者 HTTP(S) Service Controls 建立 Private Service Connect 端點
- 建立 Cloud Key Management Service (KMS) 金鑰環和金鑰。
- 建立 Cloud DNS 代管私人區域和 A 記錄。
- 存取 KMS API (區域性和全域性) 會根據公用 API 解析。
- 透過 PSC 端點存取 KMS API (區域和全域)。