IAP für Cloud Storage-Buckets aktivieren

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 Hosting statischer Websites in Cloud Storage werden nur öffentliche Inhalte bereitgestellt. Außerdem muss Lesezugriff auf allUsers gewährt werden. Wenn Ihre Organisation öffentliche Buckets mithilfe von Richtlinien wie der Verhinderung des öffentlichen Zugriffs oder der domainbeschränkten Freigabe einschränkt, ist die integrierte Funktion zum Hosten statischer Websites in Cloud Storage nicht verfügbar. Lassen Sie den Bucket stattdessen privat, stellen Sie einen NGINX-Webserver in Cloud Run bereit, wobei der Bucket als Volume bereitgestellt wird, und verwenden Sie IAP, um den Zugriff auf den Cloud Run-Dienst zu steuern.

Hinweis

Zum Ausführen der Schritte in diesem Dokument benötigen Sie Folgendes:

  • Ein Google Cloud -Projekt mit aktivierter Abrechnung. Zur Google Cloud Console

  • Einen privaten Cloud Storage-Bucket, der Ihre statischen Dateien enthält (z. B. index.html, CSS und Bilder). Achten Sie darauf, dass der Bucket nicht öffentlich ist.

  • 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-Objekt-Betrachter“ (roles/storage.objectViewer) für den Bucket zuweisen.

Wir empfehlen, für Ihren Cloud Run-Dienst ein nutzerverwaltetes Dienstkonto anstelle des Compute Engine-Standarddienstkontos zu verwenden.

  1. 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"
    
  2. Weisen Sie dem Dienstkonto die Rolle „Storage-Objekt-Betrachter“ (roles/storage.objectViewer) für den Bucket zu:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member="serviceAccount:RUN_SERVICE_ACCOUNT@PROJECT_ID." \
        --role="roles/storage.objectViewer"
    

Cloud Run-Dienst bereitstellen

Stellen Sie den NGINX-Webserver in Cloud Run bereit und hängen Sie den Cloud Storage-Bucket an. Sie müssen die Ausführungsumgebung der zweiten Generation verwenden, um Volume-Bereitstellungen zu unterstützen.

Stellen Sie den Dienst mit Volume-Flags bereit, um den Bucket bereitzustellen:

gcloud run deploy SERVICE_NAME \
    --image=nginx \
    --port=80 \
    --execution-environment=gen2 \
    --service-account=RUN_SERVICE_ACCOUNT@PROJECT_ID. \
    --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-Dienstes

  • RUN_SERVICE_ACCOUNT: das Dienstkonto, das Sie im vorherigen Schritt erstellt haben

  • PROJECT_ID: Ihre Projekt-ID in Google Cloud

  • BUCKET_NAME: der Name Ihres Cloud Storage-Buckets

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 unter gs://BUCKET_NAME/index.html gespeicherte Datei ist beispielsweise unter https://SERVICE_URL/index.html zugänglich.

Prüfen Sie, ob der Dienst 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 schützen.

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 einen externen HTTPS-Load-Balancer vor Ihrem Cloud Run-Dienst verwenden, können Sie IAP auch im Backend-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, wird jede von Cloud Run gelesene Datei in einen Cloud Storage API-Aufruf übersetzt. Um die Latenz und die API-Kosten zu minimieren, können Sie das Caching auf Ihrem Webserver konfigurieren (z. B. mit NGINX-Caching-Anweisungen) oder Cloud Storage FUSE-Bereitstellungsoptionen konfigurieren.

Wenn Sie einen externen HTTPS-Load-Balancer verwenden, können Sie auch Cloud CDN für den Backend-Dienst aktivieren. IAP ist nicht mit Cloud CDN im selben Backend-Dienst kompatibel. Wenn Sie beides benötigen, müssen Sie Ihre Architektur entsprechend strukturieren.

Beschränkungen

Das Lesen von Dateien aus einem Cloud Storage-Volume-Mount 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 mithilfe von Standardlesevorgängen im 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 in Ihren Cloud Run-Dienst einbinden. Weitere Informationen finden Sie unter NFS-Volumes bereitstellen.