IAP für Cloud Storage-Buckets aktivieren

In diesem Dokument wird beschrieben, 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 schützen und unbefugten Zugriff verhindern, ohne dass Sie Ihr Container-Image neu erstellen müssen, wenn sich der Inhalt ändert.

Beim Cloud Storage-Hosting statischer Websites werden nur öffentliche Inhalte bereitgestellt. Dazu muss Lesezugriff auf allUsers gewährt werden. Wenn Ihre Organisation öffentliche Buckets mithilfe von Richtlinien wie Verhinderung des öffentlichen Zugriffs oder domaineingeschränkte Freigabe einschränkt, ist die integrierte Funktion für das statische Websitehosting in Cloud Storage nicht verfügbar. Stattdessen sollten Sie Ihren Bucket privat halten, einen NGINX-Webserver in Cloud Run bereitstellen, wobei der Bucket als Volume eingebunden wird, und IAP verwenden, 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
  • Ein privater 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.iam.gserviceaccount.com" \
        --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 ein. Sie müssen die Ausführungsumgebung der zweiten Generation verwenden, um Volume-Bereitstellungen zu unterstützen.

So stellen Sie den Bucket 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-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 Root-Pfad 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.

So prüfen Sie die Bereitstellung: Der Dienst muss nicht authentifizierten Zugriff blockieren und den Status 403 Forbidden zurückgeben, 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 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 dazu finden Sie unter IAP über einen Backend-Dienst oder Load-Balancer aktivieren.

Caching und Leistung

Wenn Sie Cloud Storage-Volume-Bereitstellungen verwenden, entspricht jeder von Cloud Run gelesenen Datei ein 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 für denselben Back-End-Dienst kompatibel. Wenn Sie beide benötigen, müssen Sie Ihre Architektur entsprechend strukturieren.

Beschränkungen

Das Lesen von Dateien aus einer Cloud Storage-Volumebereitstellung kann langsamer sein als der Zugriff auf ein lokales Dateisystem. Um die Leselatenz zu verringern, konfigurieren Sie das Caching.

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 für generative KI: Eine Anwendung lädt eine Vektordatenbank (z. B. Chroma) aus einem Cloud Storage-Bucket mithilfe von Standarddateisystemlesevorgängen.

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.