In diesem Dokument wird erläutert, wie Sie sichere statische Inhalte aus Cloud Storage mit Cloud Run und Identity-Aware Proxy bereitstellen.
Mit Cloud Run können Sie einen Webserver hosten, der statische Inhalte aus einem privaten Cloud Storage-Bucket bereitstellt. Durch das Hinzufügen von IAP können Sie den Cloud Run-Dienst sichern und unbefugten Zugriff verhindern. Außerdem müssen Sie Ihr Container-Image nicht neu erstellen, wenn sich der Inhalt ändert.
Beim statischen Websitehosting in Cloud Storage werden nur öffentliche Inhalte bereitgestellt und es ist erforderlich, allUsers Lesezugriff zu gewähren. Wenn Ihre Organisation öffentliche Buckets mit
Richtlinien wie der Verhinderung des öffentlichen Zugriffs oder
der domainbeschränkten Freigabe einschränkt,
ist die integrierte Funktion für statisches Websitehosting in Cloud Storage nicht verfügbar.
Stattdessen können Sie Ihren Bucket privat lassen, einen NGINX-Webserver in Cloud Run bereitstellen, wobei der Bucket als Volume bereitgestellt wird, und den Zugriff auf den Cloud Run-Dienst mit IAP steuern.
Hinweis
Für die Anleitung in diesem Dokument benötigen Sie Folgendes:
- Ein Google Cloud Projekt mit aktivierter Abrechnung. Zur Google Cloud Console
- Einen privaten Cloud Storage-Bucket mit Ihren statischen Dateien (z. B.
index.html, CSS und Bilder). Der Bucket darf nicht öffentlich sein. - Die installierte Google Cloud CLI.
Zugriff auf den Cloud Storage-Bucket gewähren
Cloud Run benötigt die Berechtigung, Dateien aus Ihrem privaten Cloud Storage-Bucket zu lesen. Sie müssen der Cloud Run-Dienstidentität die Rolle „Storage Object Viewer“ (roles/storage.objectViewer) für den Bucket gewähren.
Wir empfehlen, für Ihren Cloud Run-Dienst ein nutzerverwaltetes Dienstkonto anstelle des Compute Engine-Standarddienstkontos zu verwenden.
Erstellen Sie ein Dienstkonto, das als Dienstidentität verwendet werden soll:
gcloud iam service-accounts create RUN_SERVICE_ACCOUNT \ --description="Service account for Cloud Run serving Cloud Storage" \ --display-name="Cloud Run Cloud Storage Reader"Gewähren Sie dem Dienstkonto die Rolle „Storage Object Viewer“ (
roles/storage.objectViewer) für den Bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="serviceAccount:RUN_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Cloud Run-Dienst bereitstellen
Stellen Sie den NGINX-Webserver in Cloud Run bereit und stellen Sie den Cloud Storage-Bucket bereit. Sie müssen die Ausführungsumgebung der zweiten Generation verwenden, um Volume-Bereitstellungen zu unterstützen.
Wenn Sie den Bucket bereitstellen möchten, stellen Sie den Dienst mit Volume-Flags bereit:
gcloud run deploy SERVICE_NAME \
--image=nginx \
--port=80 \
--execution-environment=gen2 \
--service-account=RUN_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--add-volume=name=static,type=cloud-storage,bucket=BUCKET_NAME,readonly=true \
--add-volume-mount=volume=static,mount-path=/usr/share/nginx/html \
--no-allow-unauthenticated
Ersetzen Sie Folgendes:
SERVICE_NAME: der Name Ihres Cloud Run-DienstesRUN_SERVICE_ACCOUNT: das Dienstkonto, das Sie im vorherigen Schritt erstellt habenPROJECT_ID: Ihre Google Cloud Projekt-IDBUCKET_NAME: der Name Ihres Cloud Storage-Bucket
Der Bucket wird in /usr/share/nginx/html bereitgestellt. Das ist das Standardverzeichnis, in dem NGINX nach statischen Assets sucht. Das bedeutet, dass die Dateien in Ihrem Bucket direkt dem Stammpfad Ihres Dienstes zugeordnet werden. Eine Datei, die unter gs://BUCKET_NAME/index.html gespeichert ist, ist beispielsweise unter https://SERVICE_URL/index.html verfügbar.
Prüfen Sie die Bereitstellung, indem Sie prüfen, ob der Dienst den nicht authentifizierten Zugriff blockiert und den Status 403 Forbidden zurückgibt, wenn ohne Anmeldedaten darauf zugegriffen wird:
curl -I SERVICE_URL
Alternativ können Sie testen, ob der Container Dateien aus Ihrem privaten Cloud Storage-Bucket korrekt rendert, bevor Sie den IAP-Zugriff konfigurieren. Führen Sie dazu den folgenden Befehl aus, um eine authentifizierte Anfrage mit Ihren Entwickleranmeldedaten zu senden:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Ersetzen Sie SERVICE_URL durch die URL Ihres Cloud Run-Dienstes.
IAP aktivieren
Nachdem Sie Ihren Cloud Run-Dienst bereitgestellt haben, können Sie IAP aktivieren, um ihn zu sichern.
Wir empfehlen, IAP direkt für den Cloud Run-Dienst zu aktivieren. Eine Anleitung finden Sie unter IAP für Cloud Run konfigurieren.
Wenn Sie alternativ einen externen HTTPS-Load-Balancer vor Ihrem Cloud Run-Dienst verwenden, können Sie IAP für den Back-End-Dienst aktivieren. Eine Anleitung finden Sie unter IAP über einen Backend-Dienst oder Load-Balancer aktivieren.
Caching und Leistung
Wenn Sie Cloud Storage-Volume-Bereitstellungen verwenden, entspricht jeder Lesevorgang in Cloud Run einem Cloud Storage API-Aufruf. Um die Latenz und die API-Kosten zu minimieren, können Sie das Caching auf Ihrem Webserver konfigurieren (z. B. mit NGINX-Caching-Direktiven) oder Cloud Storage FUSE-Bereitstellungsoptionen konfigurieren.
Wenn Sie einen externen HTTPS-Load-Balancer verwenden, können Sie Cloud CDN auch für den Backend-Dienst aktivieren. IAP ist nicht mit Cloud CDN im selben Back-End-Dienst kompatibel. Sie müssen Ihre Architektur entsprechend strukturieren, wenn Sie beides benötigen.
Beschränkungen
Das Lesen von Dateien aus einer Cloud Storage-Volume-Bereitstellung kann langsamer sein als der Zugriff auf ein lokales Dateisystem. Konfigurieren Sie das Caching, um die Leselatenz zu verringern.
Andere Anwendungsfälle
Sie können Cloud Storage-Volume-Bereitstellungen auch für andere Szenarien verwenden:
- Ereignisgesteuerte Funktionen: Eine Funktion liest hochgeladene Dateien direkt aus dem Dateisystem.
- Anwendungen mit generativer KI: Eine Anwendung lädt eine Vektordatenbank (z. B. Chroma) aus einem Cloud Storage-Bucket mit Standardlesevorgängen für das Dateisystem.
Alternative: NFS-Volumes bereitstellen
Wenn Ihre Dateien in Filestore oder auf einem selbst gehosteten NFS-Server gespeichert sind, können Sie NFS-Volumes anstelle von Cloud Storage-Buckets für Ihren Cloud Run-Dienst bereitstellen. Weitere Informationen finden Sie unter NFS-Volumes bereitstellen.