Private Service Connect – Consumer HTTP(S) Service Controls für regionale Google APIs verwenden

1. Einführung

Mit Private Service Connect können Sie private Endpunkte mit globalen internen IP-Adressen in Ihrem VPC-Netzwerk erstellen, um auf Google APIs zuzugreifen. Aufbauend auf diesem Konzept können Sie jetzt mithilfe eines internen HTTP(S)-Load-Balancers einen Private Service Connect-Endpunkt mit HTTP(S)-Dienststeuerungen für Nutzer erstellen. Dadurch stehen Ihnen die folgenden Funktionen zur Verfügung:

  • Mithilfe einer URL-Zuordnung können Sie auswählen, welche Dienste verfügbar sind. ermöglicht das Filtern nach Pfad detailliertere Prüfungen.
  • Sie können Dienste umbenennen und sie URLs Ihrer Wahl zuordnen.
  • Sie können vom Kunden verwaltete TLS-Zertifikate verwenden.
  • Sie können den Datenstandort während der Übertragung aktivieren, indem Sie eine Verbindung zu regionalen Endpunkten für Google APIs von Arbeitslasten in derselben Region herstellen.

Diese Namen und IP-Adressen gelten intern für Ihr VPC-Netzwerk und alle lokalen Netzwerke, die über Cloud VPN-Tunnel oder Cloud Interconnect-Anhänge (VLANs) verbunden sind.

Lerninhalte

  • Private Service Connect-Endpunkt mit Consumer HTTP(S) Service Controls erstellen
  • Erstellen Sie einen KMS-Schlüsselbund (Cloud Key Management Service) und einen Schlüssel.
  • Eine von Cloud DNS verwaltete private Zone und einen A-Eintrag erstellen
  • Auf die KMS API (regional und global) zugreifen, die anhand der öffentlichen API aufgelöst wurde
  • Greifen Sie über den PSC-Endpunkt auf die KMS API (regional und global) zu.

Voraussetzungen

  • Kenntnisse der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten

2. Testumgebung

Eine Nutzer-VPC wird mit einem Subnetz in der Region us-central1 zum Hosten einer VM, der Weiterleitungsregel für den internen HTTP(S)-Load-Balancer und einem Nur-Proxy-Subnetz zur Verwendung mit dem internen HTTP(S)-Load-Balancer erstellt. Zuerst erstellen wir einen Schlüsselbund und einen Schlüssel im Key Management System (KMS) und rufen den öffentlichen API-Endpunkt auf. Anschließend erstellen wir den PSC-Endpunkt, der zum regionalen KMS-Endpunkt in us-central1 aufgelöst wird.

13681df518662ba.png

3. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als PROJECT_ID identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.

4. Hinweis

APIs aktivieren

Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist

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

Alle erforderlichen Dienste aktivieren

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-Netzwerk, Subnetze und Firewallregeln erstellen

VPC-Netzwerk

Aus Cloud Shell

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

Subnetze erstellen

Aus 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

In diesem Lab erstellen Sie einen internen regionalen L7-Load-Balancer, der auf regionale API-Back-Ends verweist. Der interne L7-Load-Balancer von Google ist ein Proxy-Load-Balancer. Daher müssen Sie ein Proxy-Subnetz erstellen, das dem Load-Balancer zur Ausführung des Proxys zugewiesen ist. Weitere Informationen zum Nur-Proxy-Subnetz finden Sie hier.

Aus 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

Firewallregeln erstellen

In diesem Lab stellen Sie mit IAP eine Verbindung zu den von Ihnen erstellten Instanzen her. Mit der folgenden Firewallregel können Sie über IAP eine Verbindung zu Instanzen herstellen. Wenn Sie IAP lieber nicht verwenden möchten, können Sie diesen Schritt überspringen. Stattdessen müssen Sie der Instanz öffentliche IP-Adressen hinzufügen und eine Firewallregel erstellen, die eingehenden Traffic über TCP-Port 22 von 0.0.0.0/0 zulässt.

Damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann, müssen Sie eine Firewallregel erstellen, die:

  • Gilt für alle VM-Instanzen, die mit IAP zugänglich sein sollen.
  • Lässt eingehenden Traffic aus dem IP-Bereich 35.235.240.0/20 zu. Dieser Bereich enthält alle IP-Adressen, die IAP für die TCP-Weiterleitung verwendet.

Aus 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-Instanz erstellen

Zum Herunterladen von Linux-Paketverteilungen muss ein Cloud NAT-Dienst erstellt werden.

Cloud Router erstellen

Aus Cloud Shell

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

Cloud NAT erstellen

Aus 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. Key Management-Schlüsselbund und -Schlüssel erstellen

Aus Cloud Shell

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

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

Aus 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

Prüfen Sie in Cloud Shell, ob der Schlüsselbund und der Schlüssel erfolgreich in der Region „us-central1“ erstellt wurden.

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

ERWARTETES ERGEBNIS

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

Aus Cloud Shell

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

ERWARTETES ERGEBNIS

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

Notieren Sie sich die vollständigen Pfadnamen der Schlüssel, da Sie diese später verwenden werden.

7. Client-VM erstellen und mit regionalem KMS-Endpunkt verbinden

Als Nächstes erstellen Sie eine Client-VM, stellen eine SSH-Verbindung zur VM her und testen die Auflösung des regionalen KMS-API-Endpunkts us-central1.

Aus 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'

Als Nächstes müssen Sie das Compute Engine-Standarddienstkonto aktualisieren, um Zugriff auf den von Ihnen erstellten KMS-Schlüssel zu erhalten. Das Compute-Standarddienstkonto hat das Format <Projektnummer> -compute@developer.gserviceaccount.com. Führen Sie zum Abrufen der Projektnummer den folgenden Befehl in Cloud Shell aus und kopieren Sie die Nummer in der letzten Zeile der zurückgegebenen Ergebnisse.

 gcloud projects describe $project

Aktualisieren Sie das Compute-Standarddienstkonto, um Zugriff auf den von Ihnen erstellten KMS-Schlüssel zu erhalten.

Aus 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

Erstellen Sie ein zusätzliches Cloud Shell-Terminal, indem Sie auf „+“ klicken (Screenshot unten).

a36edc967333315a.png

In Tab 2 führen Sie einen Tunnel über IAP zu SSH in Verbindung mit der client-vm. Beachten Sie, dass Umgebungsvariablen nicht übernommen werden und Sie Ihre Projekt-ID dem Befehl unten hinzufügen müssen.

Aus Cloud Shell

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

Stellen Sie eine Verbindung zum regionalen KMS-API-Endpunkt her. Verwenden Sie dazu den KMS-Schlüsselnamen, den Sie sich zuvor notiert haben.

Von Tab 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

ERWARTETES ERGEBNIS

{
  "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"
}

Von Tab 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

ERWARTETES ERGEBNIS

{
  "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"}

Sehen Sie nach, an welcher Stelle das DNS den Endpunkt „us-central“ KMS im Vergleich zum globalen Endpunkt auflöst.

Von Tab2, Client-VM

dig us-central1-cloudkms.googleapis.com

ERWARTETES ERGEBNIS

; <<>> 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

Von Tab 2, client-vm

dig cloudkms.googleapis.com

ERWARTETES ERGEBNIS

; <<>> 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

Den Ergebnissen der Dig-Analyse können wir entnehmen, dass die DNS-Auflösung des regionalen KMS-Endpunkts us-central1 und des globalen KMS-Endpunkts in eine externe IP-Adresse aufgelöst wird. (Hinweis: Die angezeigte IP-Adresse ist möglicherweise eine andere externe IP-Adresse. Das ist das normale Verhalten von Google APIs.)

Kehren Sie für den nächsten Abschnitt zum ersten Tab in Cloud Shell zurück.

8. Private Service Connect-Endpunkt erstellen

Sie erstellen einen internen HTTP(S)-Load-Balancer mit einer Netzwerk-Endpunktgruppe, die auf den regionalen KMS-Endpunkt us-central1 als Back-End-Dienst verweist. Die Weiterleitungsregel des Load-Balancers fungiert als Private Service Connect-Endpunkt.

Erstellen Sie die Netzwerk-Endpunktgruppe (NEG) mit dem Typ Privet Service Connect und dem Zieldienst us-central1-cloudkms.googleapis.com.

Aus 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

Erstellen Sie den Back-End-Dienst für den Load-Balancer.

Aus Cloud Shell

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

Fügen Sie dem Back-End-Dienst die NEG hinzu.

Aus Cloud Shell

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

Erstellen Sie die URL-Zuordnung für den Load-Balancer.

Aus Cloud Shell

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

Erstellen Sie den Pfad-Matcher für die benutzerdefinierte URL, die vom Endpunkt verwendet wird.

Aus Cloud Shell

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

Erstellen Sie die Hostregel für die benutzerdefinierte URL „us-central1-cloudkms.example.com“.

Aus 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

Erstellen Sie die Zielproxys für den Load-Balancer. Für einen Produktionsanwendungsfall wird empfohlen, HTTP(S) und benutzerdefinierte Zertifikate für den Host zu verwenden, den Sie im letzten Befehl konfiguriert haben.

Aus Cloud Shell

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

Erstellen Sie die Weiterleitungsregel für den Load-Balancer, der als Private Service Connect-Endpunkt dient.

Aus 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-Konfiguration

In diesem Abschnitt erstellen Sie eine private DNS-Zone für beispiel.de und einen A-Eintrag, der auf die im letzten Schritt erstellte Weiterleitungsregel verweist.

Private Zone für verwaltete DNS erstellen.

Aus Cloud Shell

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

Erstellen Sie einen Eintrag für us-central1-cloudkms.example.com.

Aus 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. Über PSC mit regionalem KMS-Endpunkt verbinden

Wechseln Sie in Tab 2 wieder zu „client-vm“ und führen Sie „tcpdump“ aus, um alle Verbindungsdetails zu sehen und die Verbindungen zu den regionalen und globalen Endpunkten über den PSC-Endpunkt zu testen.

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

Öffnen Sie einen dritten Tab in Cloud Shell und stellen Sie eine SSH-Verbindung zu „client-vm“ her.

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

ERWARTETES ERGEBNIS + 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

Sehen Sie sich im Fenster von Tab 2 die tcpdump-Informationen an. Sie sehen, dass Sie über den von Ihnen erstellten PSC-Endpunkt auf den regionalen Cloud KMS-Endpunkt zugreifen konnten und dass der regionale Endpunkt us-central1 privat in die von Ihnen erstellte Managed Cloud DNS-Zone aufgelöst wird.

Auf Tab 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

ERWARTETES ERGEBNIS + 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

Der Versuch, auf einen globalen Cloud KMS-Schlüssel/-Schlüsselbund zuzugreifen, führt zu einem Fehler. Diese Verbindungsversuche werden auch im „tcpdump“ angezeigt.

Auf Tab 3: client-vm

dig us-central1-cloudkms.example.com

ERWARTETES ERGEBNIS

; <<>> 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

Sie sehen nun, dass die benutzerdefinierte URL, die wir für us-central1-cloudkms.googleapis.com erstellt haben, jetzt auf den PSC-Endpunkt verweist und nur Ressourcen aufgelöst werden, die in dieser Region erstellt wurden.

Sie können jetzt beide SSH-Tabs für client-vm schließen.

11. Bereinigungsschritte

Löschen Sie die Lab-Komponenten in einem einzelnen Cloud Shell-Terminal.

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. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Private Service Connect-Endpunkt mit Consumer HTTP(S) Service Controls erstellen
  • Schlüsselbund und Schlüssel für Cloud Key Management Service (KMS) erstellen
  • Eine von Cloud DNS verwaltete private Zone und einen A-Eintrag erstellen
  • Der Zugriff auf die KMS API (regional und global) wurde anhand der öffentlichen API aufgelöst.
  • Zugriff auf die KMS API (regional und global) über den PSC-Endpunkt.