Activer IAP pour les buckets Cloud Storage

Ce document explique comment diffuser du contenu statique sécurisé depuis Cloud Storage à l'aide de Cloud Run et d'Identity-Aware Proxy.

Cloud Run vous permet d'héberger un serveur Web qui diffuse du contenu statique à partir d'un bucket Cloud Storage privé. L'ajout d'IAP vous aide à sécuriser le service Cloud Run, en empêchant tout accès non autorisé, tout en évitant de devoir reconstruire votre image de conteneur lorsque le contenu change.

L'hébergement de sites Web statiques Cloud Storage ne diffuse que du contenu public et nécessite d'accorder un accès en lecture à allUsers. Si votre organisation restreint les buckets publics à l'aide de règles telles que la protection contre l'accès public ou le partage restreint au domaine, la fonctionnalité d'hébergement de sites Web statiques Cloud Storage intégrée n'est pas disponible. Au lieu de cela, gardez votre bucket privé, déployez un serveur Web NGINX sur Cloud Run avec le bucket monté en tant que volume, et utilisez IAP pour contrôler l'accès au service Cloud Run.

Avant de commencer

Pour suivre les instructions de ce document, vous avez besoin des éléments suivants :

  • Un projet Google Cloud pour lequel la facturation est activée. Accéder à la console Google Cloud
  • Bucket Cloud Storage privé contenant vos fichiers statiques (par exemple, index.html, CSS et images). Assurez-vous que le bucket n'est pas public.
  • Une installation de Google Cloud CLI.

Accorder l'accès au bucket Cloud Storage

Cloud Run a besoin d'une autorisation pour lire les fichiers de votre bucket Cloud Storage privé. Vous devez attribuer à l'identité de service Cloud Run le rôle Lecteur des objets Storage (roles/storage.objectViewer) sur le bucket.

Nous vous recommandons d'utiliser un compte de service géré par l'utilisateur pour votre service Cloud Run au lieu du compte de service Compute Engine par défaut.

  1. Créez un compte de service à utiliser comme identité de service :

    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. Attribuez au compte de service le rôle Lecteur des objets Storage (roles/storage.objectViewer) sur le 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"
    

Déployer le service Cloud Run

Déployez le serveur Web NGINX sur Cloud Run et installez le bucket Cloud Storage. Vous devez utiliser l'environnement d'exécution de deuxième génération pour prendre en charge les installations de volume.

Pour installer le bucket, déployez le service avec des options de 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

Remplacez les éléments suivants :

  • SERVICE_NAME : nom de votre service Cloud Run.
  • RUN_SERVICE_ACCOUNT : compte de service que vous avez créé à l'étape précédente
  • PROJECT_ID : ID de votre projet Google Cloud
  • BUCKET_NAME : nom de votre bucket Cloud Storage

Le bucket est installé sur /usr/share/nginx/html, qui est le répertoire par défaut dans lequel NGINX recherche les éléments statiques. Cela signifie que les fichiers de votre bucket sont mappés directement au chemin racine de votre service. Par exemple, un fichier stocké à l'adresse gs://BUCKET_NAME/index.html est accessible à l'adresse https://SERVICE_URL/index.html.

Pour vérifier le déploiement, assurez-vous que le service bloque l'accès non authentifié et renvoie un état 403 Forbidden lorsqu'il est consulté sans identifiants :

curl -I SERVICE_URL

Vous pouvez également tester si le conteneur affiche correctement les fichiers de votre bucket Cloud Storage privé avant de configurer l'accès IAP. Pour ce faire, exécutez la commande suivante afin d'envoyer une requête authentifiée à l'aide de vos identifiants de développeur :

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

Remplacez SERVICE_URL par l'URL de votre service Cloud Run.

Activer IAP

Une fois votre service Cloud Run déployé, vous pouvez activer IAP pour le sécuriser.

Nous vous recommandons d'activer IAP directement sur le service Cloud Run. Pour obtenir des instructions, consultez Configurer IAP pour Cloud Run.

Vous pouvez également activer IAP sur le service de backend si vous utilisez un équilibreur de charge HTTPS externe devant votre service Cloud Run. Pour obtenir des instructions, consultez Activer IAP à partir d'un service de backend ou d'un équilibreur de charge.

Mise en cache et performances

Lorsque vous utilisez des installations de volume Cloud Storage, chaque fichier lu par Cloud Run se traduit par un appel d'API Cloud Storage. Pour minimiser la latence et les coûts d'API, vous pouvez configurer la mise en cache dans votre serveur Web (par exemple, à l'aide des directives de mise en cache NGINX) ou configurer les options de montage Cloud Storage FUSE.

Si vous utilisez un équilibreur de charge HTTPS externe, vous pouvez également activer Cloud CDN sur le service de backend. IAP n'est pas compatible avec Cloud CDN sur le même service de backend. Vous devrez peut-être structurer votre architecture en conséquence si vous avez besoin des deux.

Limites

La lecture de fichiers à partir d'un montage de volume Cloud Storage peut être plus lente que l'accès à un système de fichiers local. Pour réduire la latence de lecture, configurez la mise en cache.

Autres cas d'utilisation

Vous pouvez également utiliser des installations de volume Cloud Storage pour d'autres scénarios :

  • Fonctions basées sur des événements : une fonction lit les fichiers importés directement à partir du système de fichiers.
  • Applications d'IA générative : une application charge une base de données vectorielle (telle que Chroma) à partir d'un bucket Cloud Storage à l'aide de lectures de système de fichiers standards.

Alternative : Installer des volumes NFS

Si vos fichiers sont stockés sur Filestore ou sur un serveur NFS auto-hébergé, vous pouvez installer des volumes NFS sur votre service Cloud Run au lieu de buckets Cloud Storage. Pour en savoir plus, consultez Monter des volumes NFS.