Edge-Cache mit Cloud Armor verteidigen

1. Einführung

Mit Google Cloud Armor-Edge-Sicherheitsrichtlinien können Sie den Zugriff auf im Google Cloud CDN und Google Cloud Storage zwischengespeicherte Objekte einschränken. Beispiele für Gründe dafür sind, dass Ihre Nutzer nicht auf Objekte in Speicher-Buckets aus eingeschränkten Regionen zugreifen oder dass Ihre Medienverteilung nach den Regionen gefiltert wird, für die Sie eine Lizenz haben.

In diesem Lab erstellen wir einen GCS-Bucket, laden ein Bild darin hoch, binden ihn an einen Load Balancer und aktivieren dann Cloud CDN- und Edge Security-Richtlinien dafür.

Lerninhalte

  • Cloud Storage-Bucket mit cachefähigen Inhalten einrichten
  • Edge-Sicherheitsrichtlinie zum Schutz von Inhalten erstellen
  • So prüfen Sie, 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.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser 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. Nachdem das Projekt erstellt wurde, wird es „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 den Bereinigungsanweisungen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen 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 dieses 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 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.

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 das Häkchen bei Verhinderung des öffentlichen Zugriffs für diesen Bucket erzwingen unter „Öffentlichen Zugriff verhindern“.

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 das Dreipunkt-Menü und bearbeiten Sie die Berechtigungen so, dass sie öffentlich sind.

821aad82d8633922.png

30a975d3ad22d33d.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 aktiviert“ 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 alle Anfragen 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 aber auch, wenn Sie ein Zertifikat haben) und eine sitzungsspezifische IP-Adresse. Außerdem muss das Premium-Tier-Netzwerk ausgewählt sein.

2597a5e63d618622.png

Klicken Sie auf „Erstellen“

Load-Balancer-IP abrufen

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

9b757362d806e835.png

Load Balancer abfragen

Versuchen Sie nach einigen Minuten, den Load Balancer nach dem hochgeladenen Objekt zu fragen. Sie benötigen die IP-Adresse des Load Balancers und den Namen des Images. 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, ob Ihre Inhalte über CDN- oder Load-Balancing-Monitoring vom 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 bestätigen

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

a52d0ba4c084aa05.png

6. Objekt aus GCS löschen

Nachdem der Cache gefüllt ist, löschen wir das Objekt aus dem Bucket, um zu verdeutlichen, 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.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Wenden Sie die Richtlinie auf Ihren Backend-Bucket an.

8. Edge-Sicherheitsrichtlinie validieren

Nachdem wir eine Edge-Sicherheitsrichtlinie vor unserem Back-End-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
<

Protokolle prüfen

Als Nächstes können Sie die Logs prüfen, um die angewendete Edge-Sicherheitsrichtlinie zu sehen. Rufen Sie Vorgänge >> Logging >> Log-Explorer auf.

Fügen Sie den folgenden 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%)

403-Antwort und erzwungene Sicherheitsrichtlinie beachten

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

Senden Sie nach einigen Minuten 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.