1. Einführung
Mit den Google Cloud Armor Edge-Sicherheitsrichtlinien können Sie den Zugriff auf im Cache gespeicherte Objekte in Google Cloud CDN und Google Cloud Storage einschränken. Das kann beispielsweise dafür sorgen, dass Ihre Nutzer nicht auf Objekte in Storage-Buckets aus eingeschränkten Regionen zugreifen können oder dass Ihre Medienverteilung nach den Regionen filtert, für die Sie eine entsprechende Lizenz haben.
In diesem Lab erstellen Sie einen GCS-Bucket, laden ein Bild hoch, binden es an einen Load-Balancer und aktivieren dann Cloud CDN- und Edge Security-Richtlinien.
Aufgaben in diesem Lab
- Cloud Storage-Bucket mit cachefähigen Inhalten einrichten
- So erstellen Sie eine Edge-Sicherheitsrichtlinie zum Schutz der Inhalte
- So prüfen Sie, ob die Edge-Sicherheitsrichtlinie wie erwartet funktioniert
Voraussetzungen
- Grundkenntnisse in Netzwerken und HTTP-Kenntnissen
- Grundkenntnisse zu Unix/Linux-Befehlszeilen
2. 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 möglichst wenig kosten. 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 mit 300$Guthaben.
Cloud Shell starten
Sie können Google Cloud zwar von Ihrem Laptop 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 GCP Console oben rechts 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.
Hinweis
Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
APIs aktivieren
Alle erforderlichen Dienste aktivieren
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Cloud Storage-Bucket erstellen
Öffnen Sie in der Cloud Console das Navigationsmenü > Cloud Storage > Browser: Klicken Sie auf BUCKET ERSTELLEN:
Benennungsregeln für Buckets:
- Der Bucket-Name darf keine vertraulichen Informationen enthalten, da der Bucket-Namespace global und öffentlich sichtbar ist.
- Bucket-Namen dürfen nur Kleinbuchstaben, Ziffern, Bindestriche (-), Unterstriche (_) und Punkte (.) enthalten. Für Namen mit Punkten ist eine Bestätigung erforderlich.
- Bucket-Namen müssen mit einer Ziffer oder einem Buchstaben beginnen und enden.
- Bucket-Namen dürfen 3 bis 63 Zeichen lang sein. Namen mit Punkten dürfen bis zu 222 Zeichen lang sein, wobei jeder durch einen Punkt getrennte Teil nicht mehr als 63 Zeichen enthalten darf.
- Bucket-Namen dürfen nicht wie eine IP-Adresse im Dezimalformat mit Punkten als Trennzeichen dargestellt werden (z. B. 192.168.5.4).
- Bucket-Namen dürfen nicht mit dem Präfix „goog“ beginnen.
- Bucket-Namen dürfen nicht das Wort „google“ oder ähnliche, falsch geschriebene Versionen von „google“ enthalten.
- Außerdem sollten Sie wegen DNS-Compliance und zukünftiger Kompatibilität keine Unterstriche (_) verwenden oder einen Punkt neben einen anderen Punkt oder Bindestrich setzen. „..“, „-.“ und „.-“ sind in DNS-Namen nicht zulässig.
Klicke auf WEITER.
Standorttyp:Region
Standort:Wählen Sie eine weit entfernte Region aus.
Klicke auf WEITER.
Standardspeicherklasse:Standard
Klicke auf WEITER.
Entfernen Sie das Häkchen bei Verhinderung des öffentlichen Zugriffs für diesen Bucket erzwingen unter „Öffentlichen Zugriff verhindern“.
Wählen Sie unter „Zugriffssteuerung“ die Option Detailliert aus.
Klicke auf WEITER.
Nachdem Sie den Bucket konfiguriert haben, klicken Sie auf ERSTELLEN:
Fertig – Sie haben soeben einen Cloud Storage-Bucket erstellt.
4. Objekt in den Bucket hochladen
Laden Sie jetzt ein Objekt in den Bucket hoch.
Laden Sie zuerst dieses Image in eine temporäre Instanz in Cloud Shell herunter. Im folgenden Beispiel wird das Google-Bild von der Google-Startseite verwendet.
Von Cloud Shell
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
Verwenden Sie den Befehl "gsutil cp", um das Bild von dem Speicherort, an dem Sie es gespeichert haben, in den von Ihnen erstellten Bucket hochzuladen:
Von Cloud Shell
gsutil cp google.png gs://YOUR-BUCKET-NAME
Löschen Sie jetzt das heruntergeladene Bild:
Von Cloud Shell
rm google.png
Suchen Sie Ihr Objekt, klicken Sie auf die drei Punkte auf der rechten Seite und ändern Sie die Berechtigungen in öffentlich.
5. Load-Balancer erstellen
Als Nächstes erstellen wir einen HTTP-Load-Balancer.
Gehen Sie zu Netzwerk >> Netzwerkdienste >> Load-Balancing >> Load-Balancer erstellen >> HTTP-Load-Balancer >> Internet zu meinen VMs >> Klassischer HTTP(S)-Load-Balancer
Geben Sie zuerst einen Namen für den zu erstellenden Load-Balancer ein.
Backend-Bucket erstellen
Erstellen Sie einen neuen Backend-Bucket als den Bucket, den Sie gerade erstellt haben, und wählen Sie Aktivierte CDN und Cache für statische Inhalte aus. Klicken Sie auf „Erstellen“.
Host- und Pfadregeln erstellen
Gehen Sie zu Host- und Pfadregeln auf der linken Seite. Wir verwenden eine einfache Host-/Pfadregel und senden jede Anfrage an den Bucket.
Front-End-Konfiguration erstellen
Wählen Sie die Front-End-Konfiguration aus. Für die Front-End-Konfiguration verwenden wir HTTP (HTTPS funktioniert aber auch, wenn Sie über ein Zertifikat verfügen) und eine sitzungsspezifische IP-Adresse. Stellen Sie außerdem sicher, dass Sie das Netzwerk der Premium-Stufe ausgewählt haben.
Klicken Sie auf „Erstellen“
Load-Balancer-IP abrufen
Rufen Sie die Load-Balancer-IP-Adresse in der Console ab. Klicken Sie dazu in der Liste der Load-Balancer für Ihr Projekt auf den Namen des Load-Balancers.
Load-Balancer abfragen
Versuchen Sie nach einigen Minuten, den Load-Balancer für das hochgeladene Objekt abzufragen. Sie benötigen die IP-Adresse des Load-Balancers und den Namen des Images. Der Befehl ist so aufgebaut:
Vom Terminal
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Ausgabe
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
Prüfen Sie, ob Ihr Inhalt vom CDN über das CDN oder das Load-Balancing-Monitoring bereitgestellt wird. Sie sollten eine Trefferquote von nahezu 100% erreichen können. Wenn Sie mehrere Abfragen ausführen müssen, haben Sie folgende Möglichkeiten:
Vom Terminal
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
Von Cloud CDN bereitgestellte Inhalte bestätigen
Überprüfen Sie, ob Traffic aus CDN bereitgestellt wird. Rufen Sie dazu Netzwerkdienste >> CDN
6. Objekt aus GCS löschen
Jetzt, da der Cache gefüllt ist, löschen wir das Objekt aus dem Bucket, um zu betonen, dass wir die Richtlinie auf den Cache und nicht auf das Back-End anwenden.
Gehen Sie zu Cloud Storage >> %bucket-Name% >> Objekte
Wählen Sie das Bild aus und löschen Sie es.
7. Edge-Sicherheitsrichtlinie für Ihren CDN-Cache erstellen
Navigieren Sie zu Netzwerksicherheit >> Cloud Armor und klicken Sie auf „Richtlinie erstellen“.
Wählen Sie Folgendes aus:
Richtlinientyp: Edge-Sicherheitsrichtlinie
Standardaktion: Ablehnen
Wenden Sie die Richtlinie auf Ihren Backend-Bucket an.
8. Edge-Sicherheitsrichtlinie validieren
Nachdem Sie nun eine Edge-Sicherheitsrichtlinie vor unserem Backend-Bucket erstellt haben, können Sie überprüfen, ob sie wie erwartet funktioniert.
Sicherheitsrichtlinien prüfen
Nach einigen Minuten können Sie prüfen, ob die Cloud Armor-Richtlinie ausgeführt wird. Wenn Sie in der Befehlszeile den folgenden Befehl ausführen, erhalten Sie den Fehler 403
Vom Terminal
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Ausgabe
curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer <
Logs untersuchen
Als Nächstes können Sie die Logs überprüfen, um die erzwungene Edge-Sicherheitsrichtlinie zu sehen. Navigieren Sie zu Operations >> Protokollierung >> Log-Explorer
Geben Sie das folgende Snippet in die Abfrage ein und klicken Sie auf „Run“ (Ausführen).
resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
Beachten Sie die 403-Antwort und die erzwungene Sicherheitsrichtlinie.
Sicherheitsrichtlinie entfernen
Entfernen Sie die Sicherheitsrichtlinie und fragen Sie das Objekt aus dem Cache ab.
Navigieren Sie zu Netzwerksicherheit >> Wolkenrüstung >> %POLICY NAME% >> Ziele und entfernen Sie den Ziel-Bucket.
Entfernen der Richtlinie bestätigen
Nach einigen Minuten senden Sie eine weitere curl-Datei an die Ressource im Storage-Bucket. Dieses Mal erhalten Sie eine 200-Antwort.
Vom Terminal
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Ausgabe
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M < Date: Mon, 13 Dec 2021 23:06:46 GMT < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer < Age: 1621 < Cache-Control: public,max-age=3600 < { [775 bytes data] * Connection #0 to host 34.98.81.123 left intact * Closing connection 0
Glückwunsch! Sie haben dieses Lab zu Cloud Armor Edge-Sicherheitsrichtlinien abgeschlossen.
© 2020 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.
9. Lab-Bereinigen
Navigieren Sie zu Netzwerksicherheit >> Wolkenrüstung >> %POLICY NAME% und wählen Sie „Löschen“ aus.
Rufen Sie Cloud Storage auf, wählen Sie den erstellten Bucket aus und klicken Sie auf „Löschen“.
Gehen Sie zu Netzwerk >> Netzwerkdienste >> Load-Balancing. Wählen Sie den erstellten Load-Balancer aus und klicken Sie auf „Löschen“.
10. Glückwunsch!
Sie haben das Codelab zum Verteidigen des Edge-Cache mit Cloud Armor abgeschlossen.
Behandelte Themen
- Cloud Storage-Bucket und zugehörigen Cloud Load Balancer einrichten
- So erstellen Sie eine Cloud Armor-Edge-Sicherheitsrichtlinie
- So validieren Sie, ob die Edge-Sicherheitsrichtlinie wie beabsichtigt funktioniert.
Weiteres Vorgehen
- Richten Sie eine Edge-Sicherheitsrichtlinie mit einem Cache-Treffer von einer Compute Engine-Ressource ein.