Ce document explique comment diffuser du contenu statique sécurisé à partir de 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 les accès non autorisés et en évitant d'avoir à recréer 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 limite les buckets publics à l'aide de
stratégies telles que la protection contre l'accès public ou
le partage limité à un domaine,
la fonctionnalité d'hébergement de sites Web statiques intégrée à Cloud Storage n'est pas disponible.
À la place, conservez votre bucket privé, déployez un serveur Web NGINX sur Cloud Run avec le bucket installé en tant que volume, puis 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 Google Cloud projet avec facturation activée. Accéder à la Google Cloud console
- Un 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 accorder au rôle Lecteur des objets de l'espace de stockage (roles/storage.objectViewer) l'identité du service Cloud Run 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.
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"Accordez au compte de service le rôle Lecteur des objets de l'espace de stockage (
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 indicateurs 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 RunRUN_SERVICE_ACCOUNT: compte de service que vous avez créé à l'étape précédentePROJECT_ID: ID de votre Google Cloud projetBUCKET_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 directement mappés au chemin racine de votre service. Par exemple, un fichier
stocké dans 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 vérifier 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 pour 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 de directives de mise en cache NGINX) ou configurer les options d'installation de 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'une installation 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 dans d'autres cas :
- Fonctions basées sur des événements : une fonction lit les fichiers importés directement à partir de le 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 standard.
Autre solution : 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 Installer des volumes NFS.