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.
3. Einrichtung und Anforderungen
Umgebung für das selbstbestimmte Lernen einrichten
- 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.
- 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.
- 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:
Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:
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).
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.