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

  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. 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-Dienstes
  • RUN_SERVICE_ACCOUNT: das Dienstkonto, das Sie im vorherigen Schritt erstellt haben
  • PROJECT_ID: Ihre Google Cloud Projekt-ID
  • BUCKET_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.