Questo documento spiega come pubblicare contenuti statici sicuri da Cloud Storage utilizzando Cloud Run e Identity-Aware Proxy.
Cloud Run ti consente di ospitare un server web che fornisce contenuti statici da un bucket Cloud Storage privato. L'aggiunta di IAP ti aiuta a proteggere il servizio Cloud Run, impedendo l'accesso non autorizzato ed evitando la necessità di ricreare l'immagine container quando i contenuti cambiano.
L'hosting di siti web statici di Cloud Storage gestisce solo contenuti pubblici e richiede la concessione dell'accesso in lettura a allUsers. Se la tua organizzazione limita i bucket pubblici utilizzando policy come la prevenzione dell'accesso pubblico o la condivisione limitata per dominio, la funzionalità di hosting di siti web statici integrata di Cloud Storage non è disponibile.
Mantieni invece il bucket privato, esegui il deployment di un server web NGINX su Cloud Run con il bucket montato come volume e utilizza IAP per controllare l'accesso al servizio Cloud Run.
Prima di iniziare
Per completare le istruzioni riportate in questo documento, devi disporre di quanto segue:
Un progetto Google Cloud con fatturazione abilitata. Vai alla console Google Cloud
Un bucket Cloud Storage privato che contiene i tuoi file statici (ad esempio
index.html, CSS e immagini). Assicurati che il bucket non sia pubblico.Google Cloud CLI installato.
Concedi l'accesso al bucket Cloud Storage
Cloud Run deve disporre dell'autorizzazione per leggere i file dal tuo bucket Cloud Storage privato. Devi concedere all'identità del servizio Cloud Run il ruolo Storage Object Viewer (roles/storage.objectViewer) sul bucket.
Ti consigliamo di utilizzare un account di servizio gestito dall'utente per il tuo servizio Cloud Run anziché il account di servizio Compute Engine predefinito.
Crea un account di servizio da utilizzare come identità del servizio:
gcloud iam service-accounts create RUN_SERVICE_ACCOUNT \ --description="Service account for Cloud Run serving Cloud Storage" \ --display-name="Cloud Run Cloud Storage Reader"Concedi al account di servizio il ruolo Storage Object Viewer (
roles/storage.objectViewer) sul bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="serviceAccount:RUN_SERVICE_ACCOUNT@PROJECT_ID." \ --role="roles/storage.objectViewer"
Esegui il deployment del servizio Cloud Run
Esegui il deployment del server web NGINX in Cloud Run e monta il bucket Cloud Storage. Per supportare i montaggi dei volumi, devi utilizzare l'ambiente di esecuzione di seconda generazione.
Per montare il bucket, esegui il deployment del servizio con i flag del volume:
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
Sostituisci quanto segue:
SERVICE_NAME: il nome del tuo servizio Cloud RunRUN_SERVICE_ACCOUNT: il account di servizio che hai creato nel passaggio precedentePROJECT_ID: il tuo ID progetto Google CloudBUCKET_NAME: il nome del bucket Cloud Storage
Il bucket è montato su /usr/share/nginx/html, che è la directory predefinita in cui NGINX cerca gli asset statici. Ciò significa che i file nel tuo bucket sono mappati direttamente al percorso root del tuo servizio. Ad esempio, un file archiviato in gs://BUCKET_NAME/index.html è accessibile all'indirizzo https://SERVICE_URL/index.html.
Per verificare il deployment, controlla che il servizio blocchi l'accesso non autenticato e restituisca uno stato 403 Forbidden quando l'accesso avviene senza credenziali:
curl -I SERVICE_URL
In alternativa, puoi verificare se il container esegue correttamente il rendering dei file dal tuo bucket Cloud Storage privato prima di configurare l'accesso IAP. Per farlo, esegui questo comando per inviare una richiesta autenticata utilizzando le tue credenziali sviluppatore:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Sostituisci SERVICE_URL con l'URL del tuo servizio Cloud Run.
Abilita IAP
Dopo aver eseguito il deployment del servizio Cloud Run, puoi attivare IAP per proteggerlo.
Ti consigliamo di abilitare IAP direttamente sul servizio Cloud Run. Per istruzioni, consulta Configura IAP per Cloud Run.
In alternativa, se utilizzi un bilanciatore del carico HTTPS esterno davanti al tuo servizio Cloud Run, puoi attivare IAP sul servizio di backend. Per istruzioni, consulta Abilita IAP da un servizio di backend o da un bilanciatore del carico.
Memorizzazione nella cache e prestazioni
Quando utilizzi i montaggi dei volumi di Cloud Storage, ogni file letto da Cloud Run si traduce in una chiamata API Cloud Storage. Per ridurre al minimo la latenza e i costi delle API, puoi configurare la memorizzazione nella cache nel tuo server web (ad esempio, utilizzando le istruzioni di memorizzazione nella cache di NGINX) o configurare le opzioni di montaggio di Cloud Storage FUSE.
Se utilizzi un bilanciatore del carico HTTPS esterno, puoi anche abilitare Cloud CDN sul servizio di backend. IAP non è compatibile con Cloud CDN sullo stesso servizio di backend, quindi se hai bisogno di entrambi, potresti dover strutturare la tua architettura di conseguenza.
Limitazioni
La lettura dei file da un volume Cloud Storage montato potrebbe essere più lenta rispetto all'accesso a un file system locale. Per ridurre la latenza di lettura, configura la memorizzazione nella cache.
Altri casi d'uso
Puoi anche utilizzare i montaggi dei volumi Cloud Storage per altri scenari:
Funzioni basate su eventi: una funzione legge i file caricati direttamente dal file system.
Applicazioni di AI generativa: un'applicazione carica un database vettoriale (ad esempio Chroma) da un bucket Cloud Storage utilizzando letture standard del file system.
Alternativa: montaggio di volumi NFS
Se i tuoi file sono archiviati su Filestore o su un server NFS self-hosted, puoi montare volumi NFS sul tuo servizio Cloud Run anziché sui bucket Cloud Storage. Per saperne di più, consulta Montaggio dei volumi NFS.