Abilitare IAP per i bucket Cloud Storage

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 ricompilare l'immagine container quando i contenuti cambiano.

L'hosting di siti web statici di Cloud Storage pubblica 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 con limitazioni del dominio, la funzionalità di hosting di siti web statici di Cloud Storage integrata 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, hai bisogno di quanto segue:

  • Un progetto Google Cloud con la 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 necessita dell'autorizzazione per leggere i file dal tuo bucket Cloud Storage privato. Devi concedere all'identità di servizio Cloud Run il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer) sul bucket.

Ti consigliamo di utilizzare un account di servizio gestito dall'utente per il servizio Cloud Run anziché il account di servizio Compute Engine predefinito.

  1. 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"
    
  2. 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.iam.gserviceaccount.com" \
        --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.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

Sostituisci quanto segue:

  • SERVICE_NAME: il nome del tuo servizio Cloud Run
  • RUN_SERVICE_ACCOUNT: il account di servizio che hai creato nel passaggio precedente
  • PROJECT_ID: il tuo Google Cloud ID progetto
  • BUCKET_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 principale del tuo servizio. Ad esempio, un file memorizzato 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 lo stato 403 Forbidden quando viene eseguito l'accesso 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.

Abilitare IAP

Dopo aver eseguito il deployment del servizio Cloud Run, puoi abilitare IAP per proteggerlo.

Ti consigliamo di abilitare IAP direttamente sul servizio Cloud Run. Per istruzioni, vedi Configurare 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, vedi Abilitare IAP da un servizio di backend o un bilanciatore del carico.

Memorizzazione nella cache e prestazioni

Quando utilizzi i volumi di Cloud Storage, ogni file letto da Cloud Run si traduce in una chiamata all'API Storage. Per ridurre al minimo la latenza e i costi dell'API, puoi configurare la memorizzazione nella cache nel server web (ad esempio, utilizzando le direttive di memorizzazione nella cache NGINX) o configurare le opzioni di montaggio FUSE di Cloud Storage.

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 potrebbe essere necessario strutturare l'architettura di conseguenza se hai bisogno di entrambi.

Limitazioni

La lettura dei file da un punto di montaggio del volume Cloud Storage 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 i volumi NFS sul tuo servizio Cloud Run anziché sui bucket Cloud Storage. Per saperne di più, consulta Montaggio di volumi NFS.