Edge-Cache mit Cloud Armor verteidigen

1. Einführung

Mit 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. So können Sie beispielsweise verhindern, dass Nutzer in eingeschränkten Regionen auf Objekte in Storage-Buckets zugreifen, oder sicherstellen, dass Ihre Medienverteilung nach den Regionen gefiltert wird, für die Sie eine entsprechende Lizenz haben.

In diesem Lab erstellen wir einen GCS-Bucket, laden ein Bild hoch, binden ihn an einen Load Balancer und aktivieren dann Cloud CDN und Edge-Sicherheitsrichtlinien.

Lerninhalte

  • Cloud Storage-Bucket mit cachefähigen Inhalten einrichten
  • Edge-Sicherheitsrichtlinie zum Schutz der Inhalte erstellen
  • Prüfen, ob die Edge-Sicherheitsrichtlinie wie erwartet funktioniert

Voraussetzungen

  • Grundkenntnisse in den Bereichen Netzwerk und HTTP
  • Grundkenntnisse zu Unix/Linux-Befehlszeilen

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird und den Sie jederzeit aktualisieren können.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als PROJECT_ID angegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Danach wird sie „eingefroren“.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit nach Abschluss dieses Codelabs keine Gebühren anfallen, folgen Sie der Anleitung zum Bereinigen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das kostenlose Testprogramm mit einem Guthaben von 300 $ infrage.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, 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:

bce75f34b2c53987.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

f6ef2b5f13479f3a.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für alle Aufgaben in diesem Lab benötigen Sie lediglich einen Browser.

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

Rufen Sie in der Cloud Console das Navigationsmenü > Cloud Storage > Browser auf. Klicken Sie auf BUCKET ERSTELLEN:

baf3d3c74282ecba.png

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 in Dezimalpunktschreibweise 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.

Klicken Sie auf WEITER.

Standorttyp:Region

Standort:Wählen Sie eine Region aus, die weit von Ihnen entfernt ist.

Klicken Sie auf WEITER.

Standard-Speicherklasse:Standard

Klicken Sie auf WEITER.

Entfernen Sie unter „Öffentlichen Zugriff verhindern“ das Häkchen bei Verhinderung des öffentlichen Zugriffs für diesen Bucket erzwingen.

Wählen Sie unter „Zugriffssteuerung“ die Option Detailgenau aus.

Klicken Sie auf WEITER.

Wenn 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 dieses Bild zuerst in eine temporäre Instanz in Cloud Shell herunter. Im folgenden Beispiel wird das Google-Bild von der Google-Startseite verwendet.

Über 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 vom gewählten Speicherort in den Bucket hochzuladen:

Über Cloud Shell

gsutil cp google.png gs://YOUR-BUCKET-NAME

Löschen Sie jetzt das heruntergeladene Bild:

Über Cloud Shell

rm google.png

Suchen Sie Ihr Objekt, klicken Sie rechts auf die drei Punkte und bearbeiten Sie die Berechtigungen so, dass sie öffentlich sind.

821aad82d8633922.png30a975d3ad22d33d.png

5. Load Balancer erstellen

Als Nächstes erstellen wir einen HTTP-Load-Balancer.

Rufen Sie Netzwerk >> Netzwerkdienste >> Load-Balancing >> Load Balancer erstellen >> HTTP-Load-Balancer >> Internet zu meinen VMs >> Klassischer HTTP(S)-Load-Balancer auf.

Erstellen Sie zuerst einen Namen für den Load-Balancer, den Sie erstellen werden.

Backend-Bucket erstellen

Erstellen Sie einen neuen Backend-Bucket, der dem Bucket entspricht, den Sie gerade erstellt haben, und wählen Sie „CDN aktivieren“ und „Statische Inhalte im Cache speichern“ aus. Klicken Sie auf „Erstellen“.

ed392a56538d499e.png

Host- und Pfadregeln erstellen

Rufen Sie links die Host- und Pfadregeln auf. Wir verwenden eine einfache Host-/Pfadregel und senden jede Anfrage an den Bucket.

7c1a664e0d1f15b0.png

Frontend-Konfiguration erstellen

Wählen Sie die Front-End-Konfiguration aus. Für die Frontend-Konfiguration verwenden wir HTTP (HTTPS funktioniert auch, wenn Sie ein Zertifikat haben) und eine sitzungsspezifische IP-Adresse. Achten Sie darauf, dass Sie das Premium-Netzwerk ausgewählt haben.

2597a5e63d618622.png

Klicken Sie auf „Erstellen“

IP-Adresse des Load Balancers abrufen

Rufen Sie die IP-Adresse des Load Balancers in der Console ab, indem Sie in der Liste der Load Balancer für Ihr Projekt auf den Namen des gewünschten Load Balancers klicken.

9b757362d806e835.png

Load Balancer abfragen

Versuchen Sie nach ein paar Minuten, den Load Balancer nach dem hochgeladenen Objekt abzufragen. Sie benötigen die IP-Adresse des Load Balancers und den Namen des Bilds. Der Befehl ist so strukturiert:

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 mit dem Monitoring für CDN oder Load Balancing, ob Ihre Inhalte über das CDN bereitgestellt werden. Sie sollten eine Trefferquote von nahezu 100 % erreichen können. Wenn Sie einige Abfragen ausführen müssen, können Sie so vorgehen:

Vom Terminal

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

Von Cloud CDN bereitgestellte Inhalte prüfen

Prüfen Sie, ob der Traffic über das CDN bereitgestellt wird. Rufen Sie dazu Netzwerkdienste >> CDN auf.

a52d0ba4c084aa05.png

6. Objekt aus GCS löschen

Nachdem der Cache gefüllt ist, löschen wir das Objekt aus dem Bucket. So können wir erkennen, dass wir die Richtlinie auf den Cache und nicht auf das Backend anwenden.

Rufen Sie Cloud Storage >> %bucket name% >> Objekte auf.

Wählen Sie das Bild aus und löschen Sie es.

a1cc1bb9a0ff41df.png

7. Edge-Sicherheitsrichtlinie für Ihren CDN-Cache erstellen

Rufen Sie Netzwerksicherheit >> Cloud Armor auf und klicken Sie auf „Richtlinie erstellen“.

Wählen Sie Folgendes aus:

Richtlinientyp: Edge-Sicherheitsrichtlinie

Standardaktion: Ablehnen

7a12374be33026fd.pngb7c4efc091272358.png77ddbcddd07b65d2.png

Wenden Sie die Richtlinie auf Ihren Backend-Bucket an.

8. Edge-Sicherheitsrichtlinie validieren

Nachdem wir eine Edge-Sicherheitsrichtlinie vor unserem Backend-Bucket erstellt haben, prüfen wir, ob sie wie erwartet funktioniert.

Sicherheitsrichtlinie 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 Fehlercode 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 prüfen, um die erzwungene Edge-Sicherheitsrichtlinie zu sehen. Rufen Sie Vorgänge >> Logging >> Log-Explorer auf.

Fügen Sie das folgende Snippet in die Abfrage ein und klicken Sie auf „Ausführen“.

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Beachten Sie die 403-Antwort und die erzwungene Sicherheitsrichtlinie.

cddc48ca93ad79ca.png

Sicherheitsrichtlinie entfernen

Entfernen Sie die Sicherheitsrichtlinie und fragen Sie das Objekt aus dem Cache ab.

Gehen Sie zu Netzwerksicherheit >> Cloud Armor >> %POLICY NAME% >> Ziele und entfernen Sie den Ziel-Bucket.

350655729a89eb33.png

Entfernung der Richtlinie bestätigen

Warten Sie einige Minuten und senden Sie dann einen weiteren curl-Befehl an die Ressource im Storage-Bucket. Diesmal 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 Firmen- und Produktnamen können Marken der betreffenden Unternehmen sein.

9. Lab bereinigen

Rufen Sie Netzwerksicherheit >> Cloud Armor >> %POLICY NAME% auf und wählen Sie „Löschen“ aus.

21eefb5f375e8fee.png

Rufen Sie Cloud Storage auf, wählen Sie den von Ihnen erstellten Bucket aus und klicken Sie auf „Löschen“.

ef2fa8d45c1d3452.png

Klicken Sie auf Netzwerk >> Netzwerkdienste >> Load-Balancing. Wählen Sie den erstellten Load-Balancer aus und klicken Sie auf „Löschen“.

ee2e78c10f4104eb.png

10. Glückwunsch!

Sie haben das Codelab „Edge-Cache mit Cloud Armor schützen“ abgeschlossen.

Behandelte Themen

  • Cloud Storage-Bucket und zugehörigen Cloud Load Balancer einrichten
  • Cloud Armor-Edge-Sicherheitsrichtlinie erstellen
  • So prüfen Sie, ob die Edge-Sicherheitsrichtlinie wie vorgesehen funktioniert.

Weiteres Vorgehen

  • Richten Sie eine Edge-Sicherheitsrichtlinie mit einem Cache-Treffer aus einer Compute Engine-Ressource ein.