Dormeto
ENFR

Prise en main

Google Cloud

Le routeur de Dormeto s'exécute dans votre projet Google Cloud avec un compte de service à lui, deux rôles personnalisés et quelques rôles prédéfinis. Dormeto ne les crée jamais lui-même. C'est la CLI qui le fait, avec votre propre compte, et elle affiche chaque modification d'IAM. Cette page liste tout ce dont le routeur a besoin et tout ce que la CLI modifie, permission par permission. Elle dit ensuite comment le vérifier et comment le retirer.

16 min de lectureManager 0.21.0

Jusqu'où Google Cloud a été essayé
  • Validé sur un vrai projet (2026-10-30). dormeto gcp check, install, uninstall, status et workloads. Aussi les VM Compute Engine (autonomes et groupes gérés, suspendues quand c'est possible) derrière un équilibreur de charge d'application externe global.
  • Écrit et relu, sa validation pas encore faite. Les équilibreurs régionaux et classiques, les groupes de points de terminaison réseau zonaux, les plannings et les pauses, les listes d'adresses IP. Une partie de leur comportement a été mesurée sur Google, pas davantage.
  • Écrit, jamais exécuté contre Google. Les bases Cloud SQL associées et GKE. Essayez-les dans un projet que vous pouvez perdre : la CLI affiche un avertissement quand vous les utilisez, et continue.

Il n'y a pas d'image publique du routeur : vous construisez la vôtre et vous la poussez dans votre Artifact Registry. Il n'y a pas encore de tableau de bord ni de manager pour Google Cloud, et la page d'attente personnalisée ne s'y applique pas. Le routeur 0.35.0 et la CLI 0.8.0 contiennent tout ce code.

Ce dont il a besoin

QuoiOùÀ quoi cela sert
Les APILe projetDix API (la liste). dormeto gcp install les active et n'en désactive jamais aucune.
Deux rôles personnalisésLe projetdormetoRouter lit les équilibreurs de charge, les VM et les groupes et gère les services de backend du waker. dormetoRouterBackends démarre, arrête, suspend et reprend les VM et les groupes qui portent le tag (toutes les permissions).
Le compte de service du routeurLe projetdmtr-<region>@<project>.iam.gserviceaccount.com : la seule identité des services Cloud Run et des tâches du routeur (ses droits).
Le tag sécuriséLe projetdormeto=managed. Le routeur ne démarre et n'arrête que les VM et les groupes qui le portent. Vous l'associez à l'intégration d'un workload. Le routeur lui-même n'a aucune permission de tagger, sans quoi il pourrait tagger n'importe quelle VM et l'arrêter.
L'état du routeurLa région du routeurUne base Firestore dmtr-<region> (mode Native, protection contre la suppression désactivée) et une file Cloud Tasks dmtr-<region>. La base contient aussi l'enregistrement de l'installation, que uninstall relit.
Le routeurLa région du routeur, avec --imageDeux services Cloud Run, dmtr-<region>-waker et dmtr-<region>-controller. Le groupe de points de terminaison réseau du waker dmtr-<region>-waker. Le job Cloud Scheduler dmtr-<region>-check (toutes les 5 minutes).
Chaque workloadVotre équilibreur de chargeUn service de backend dmtr-<region>-<workload> qui sert la page d'attente, et le tag sur les VM et les groupes du workload. L'intégration ajoute définitivement une route /_dormeto/* vers ce service de backend. La sortie restaure chaque référence. Si Terraform écrit votre équilibreur de charge ou vos VM, il doit ignorer ce qui change.
Accès facultatifsLe projet, si vous le demandezCloud SQL et GKE ont leur API et leurs rôles, à partir du routeur 0.35.0 (ce que chacun ajoute).

Les API

dormeto gcp install active ces dix API, de la forme .googleapis.com, dans le projet. uninstall n'en désactive aucune : d'autres éléments du projet peuvent les utiliser.

APIService
compute.googleapis.comCompute Engine
run.googleapis.comCloud Run
firestore.googleapis.comFirestore
cloudtasks.googleapis.comCloud Tasks
cloudscheduler.googleapis.comCloud Scheduler
monitoring.googleapis.comCloud Monitoring
artifactregistry.googleapis.comArtifact Registry
iam.googleapis.comIdentity and Access Management
cloudresourcemanager.googleapis.comCloud Resource Manager
logging.googleapis.comCloud Logging

Les rôles

Deux rôles personnalisés, créés dans le projet, et quatre rôles prédéfinis. Chaque permission ci-dessous figure dans le manifeste que le routeur et la CLI partagent. Les tests du routeur vérifient que chaque appel qu'il fait à Google Cloud est couvert par l'une d'elles.

dormetoRouter

Dormeto router. Permet à un routeur Dormeto de lire les équilibreurs de charge, les VM et les groupes de ses workloads, et de modifier leurs URL maps. Il peut créer et supprimer leurs services de backend du waker, et désactiver et réactiver leurs autoscalers. Il lit aussi leur nombre de requêtes.

RessourcePermissions
compute.urlMapscompute.urlMaps.get, compute.urlMaps.list, compute.urlMaps.update
compute.backendServicescompute.backendServices.get, compute.backendServices.use, compute.backendServices.create, compute.backendServices.delete
compute.regionNetworkEndpointGroupscompute.regionNetworkEndpointGroups.use
compute.globalForwardingRulescompute.globalForwardingRules.list
compute.targetHttpProxiescompute.targetHttpProxies.list
compute.targetHttpsProxiescompute.targetHttpsProxies.list
compute.instancescompute.instances.get
compute.instanceGroupscompute.instanceGroups.get
compute.instanceGroupManagerscompute.instanceGroupManagers.get
compute.autoscalerscompute.autoscalers.get, compute.autoscalers.update
compute.machineTypescompute.machineTypes.get
compute.globalOperationscompute.globalOperations.get
compute.zoneOperationscompute.zoneOperations.get
compute.regionOperationscompute.regionOperations.get
monitoring.timeSeriesmonitoring.timeSeries.list
compute.networkEndpointGroupscompute.networkEndpointGroups.get
compute.regionUrlMapscompute.regionUrlMaps.get, compute.regionUrlMaps.list, compute.regionUrlMaps.update
compute.regionBackendServicescompute.regionBackendServices.get, compute.regionBackendServices.use, compute.regionBackendServices.create, compute.regionBackendServices.delete
compute.regionTargetHttpProxiescompute.regionTargetHttpProxies.list
compute.regionTargetHttpsProxiescompute.regionTargetHttpsProxies.list
compute.forwardingRulescompute.forwardingRules.list

Google classe compute.urlMaps.get, compute.urlMaps.list et compute.urlMaps.update en testing dans les rôles personnalisés : utilisables, mais non recommandées en production par Google. Aucun rôle prédéfini plus étroit ne les contient, donc dormetoRouter les garde. Un autoscaler ne peut pas porter de tag : compute.autoscalers.update figure donc ici, sans la condition du tag.

dormetoRouterBackends

Dormeto router backends. Permet à un routeur Dormeto de démarrer, arrêter, suspendre et reprendre les VM et les groupes d'instances gérés de ses workloads. Accordé à la condition que la ressource porte le tag dormeto=managed.

RessourcePermissions
compute.instancescompute.instances.start, compute.instances.stop, compute.instances.suspend, compute.instances.resume
compute.instanceGroupManagerscompute.instanceGroupManagers.update, compute.instanceGroupManagers.use

Accordé à la condition que la ressource porte le tag dormeto=managed. La modification d'un autoscaler désigne son groupe : compute.instanceGroupManagers.update et .use sont donc vérifiées sur le tag du groupe.

Rôles prédéfinis

Accordés comme décrit dans les droits. Dormeto s'appuie sur ces permissions de chacun :

RôlePermissions
roles/datastore.userdatastore.entities.get, datastore.entities.list, datastore.entities.create, datastore.entities.update, datastore.entities.delete
roles/cloudtasks.enqueuercloudtasks.tasks.create
roles/run.invokerrun.routes.invoke
roles/iam.serviceAccountUseriam.serviceAccounts.actAs

Les droits accordés

Le routeur s'exécute avec le compte de service dmtr-<region>@<project>.iam.gserviceaccount.com. La CLI ajoute exactement ces liaisons, et seulement celles-ci. Elle ne modifie ni ne supprime jamais une liaison qu'elle n'a pas ajoutée. Dans une condition, {project} est l'ID du projet et {database} la base du routeur, dmtr-<region>.

RôleOùConditionCe qu'il permet
projects/{project}/roles/dormetoRouterLe projetAucuneLit et gère les équilibreurs de charge, les VM et les groupes des workloads.
projects/{project}/roles/dormetoRouterBackendsLe projetDormeto-managed resources : resource.matchTag('{project}/dormeto', 'managed')Démarre et arrête ce qui porte le tag.
roles/datastore.userLe projetThe router's database : resource.name == "projects/{project}/databases/{database}"Lit et écrit les documents Firestore du routeur.
roles/cloudtasks.enqueuerLa file dmtr-<region>AucuneCrée des tâches dans la file du routeur.
roles/run.invokerLe service Cloud Run dmtr-<region>-controllerAucuneAppelle le contrôleur. Le job Cloud Scheduler et les tâches le font, avec le compte de service.
roles/iam.serviceAccountUserLe compte de service lui-mêmeAucuneSigne lui-même les jetons OIDC des tâches.

Ce que Google ajoute

Activer des API et créer des ressources conduit Google à ajouter ses propres liaisons à la politique IAM du projet. Dormeto n'en utilise aucune pour son travail. La CLI affiche chacune comme venant de Google, avec l'étape après laquelle elle est apparue, puis l'enregistre. Sur un vrai projet, sept ont été ajoutées pendant l'installation, et une huitième à la création du dépôt de l'image :

RôleMembreApparue aprèsDe qui
roles/cloudscheduler.serviceAgentserviceAccount:service-<project number>@gcp-sa-cloudscheduler.iam.gserviceaccount.comapisL'agent de service de Cloud Scheduler
roles/cloudtasks.serviceAgentserviceAccount:service-<project number>@gcp-sa-cloudtasks.iam.gserviceaccount.comapisL'agent de service de Cloud Tasks
roles/containerregistry.ServiceAgentserviceAccount:service-<project number>@containerregistry.iam.gserviceaccount.comapisL'agent de service de Container Registry
roles/pubsub.serviceAgentserviceAccount:service-<project number>@gcp-sa-pubsub.iam.gserviceaccount.comapisL'agent de service de Pub/Sub
roles/run.serviceAgentserviceAccount:service-<project number>@serverless-robot-prod.iam.gserviceaccount.comapisL'agent de service de Cloud Run
roles/firestore.serviceAgentserviceAccount:service-<project number>@gcp-sa-firestore.iam.gserviceaccount.comdatabaseL'agent de service de Firestore
roles/firebaserules.systemserviceAccount:service-<project number>@firebase-rules.iam.gserviceaccount.comprojectBindingsLe compte système de Firebase Rules, ajouté tardivement, depuis la base
roles/artifactregistry.serviceAgentserviceAccount:service-<project number>@gcp-sa-artifactregistry.iam.gserviceaccount.comLa création du dépôt de l'image, que la CLI ne fait pasL'agent de service d'Artifact Registry. La prochaine exécution de la CLI l'affiche comme vu plus tard

Les noms d'étapes sont ceux du tableau de l'opérateur. Les agents de service sont gérés par Google : laissez-les. uninstall les laisse aussi, et les liste comme laissés en place. Les agents de service propres à Compute Engine, déjà présents dès que Compute Engine est activé, sont eux aussi à Google.

Le rôle Éditeur du compte de service par défaut

Prenons un projet hors d'une organisation qui impose la contrainte iam.automaticIamGrantsForDefaultServiceAccounts. Quand Compute Engine est activé, Google donne à son compte de service par défaut, <project number>-compute@developer.gserviceaccount.com, le rôle roles/editor sur tout le projet. Dormeto ne l'utilise pas : les services Cloud Run du routeur s'exécutent avec dmtr-<region>. dormeto gcp check signale cette liaison par un avertissement et la laisse : c'est à vous de la retirer. Avant cela, vérifiez quelles VM, quels modèles d'instance et quels services s'exécutent avec ce compte, car ils perdent ce que l'Éditeur leur donnait :

gcloud compute instances list --format="table(name,zone.basename(),serviceAccounts[].email)"
gcloud projects remove-iam-policy-binding my-project \
  --member="serviceAccount:123456789012-compute@developer.gserviceaccount.com" \
  --role="roles/editor"

Pour que Google ne l'accorde plus dans vos prochains projets, imposez iam.automaticIamGrantsForDefaultServiceAccounts sur l'organisation ou le dossier.

Les permissions de l'opérateur

Vous lancez la CLI avec votre compte gcloud (sa configuration active, ou --gcloud-configuration). Chaque commande teste les permissions de ses étapes avant de rien modifier : une seule manquante l'arrête sans rien changer. roles/owner les contient toutes. Les tableaux listent les étapes de chaque commande, comme le fait le manifeste.

dormeto gcp check

ÉtapeÀ quoi elle sertPermissions
readLire le projet, sa politique IAM et les API activéesresourcemanager.projects.get, resourcemanager.projects.getIamPolicy, serviceusage.services.list, serviceusage.services.use

dormeto gcp install

ÉtapeÀ quoi elle sertPermissions
readLire le projet, sa politique IAM et les API activéesresourcemanager.projects.get, resourcemanager.projects.getIamPolicy, serviceusage.services.list, serviceusage.services.use
apisActiver les APIserviceusage.services.enable, serviceusage.operations.get
rolesCréer ou mettre à jour les rôles personnalisés. L'ID d'un rôle supprimé ne peut pas être réutilisé pendant 37 jours : la CLI le restaureiam.roles.get, iam.roles.create, iam.roles.update, iam.roles.undelete
serviceAccountCréer le compte de service du routeur et ses liaisonsiam.serviceAccounts.get, iam.serviceAccounts.create, iam.serviceAccounts.getIamPolicy, iam.serviceAccounts.setIamPolicy, iam.serviceAccounts.actAs
projectBindingsLire la politique IAM, y ajouter les liaisons de Dormeto, l'écrire avec son etagresourcemanager.projects.getIamPolicy, resourcemanager.projects.setIamPolicy
tagCréer le tag sécuriséresourcemanager.tagKeys.create, resourcemanager.tagKeys.get, resourcemanager.tagValues.create, resourcemanager.tagValues.get
databaseCréer la base Firestore, écrire l'enregistrement de l'installationdatastore.databases.create, datastore.databases.get, datastore.operations.get, datastore.entities.create, datastore.entities.get, datastore.entities.update
queueCréer la file de tâches et ses liaisonscloudtasks.queues.create, cloudtasks.queues.get, cloudtasks.queues.update, cloudtasks.queues.getIamPolicy, cloudtasks.queues.setIamPolicy

dormeto gcp install --image

S'ajoute à install quand vous indiquez l'image du routeur.

ÉtapeÀ quoi elle sertPermissions
imageLire l'image du routeur dans Artifact Registryartifactregistry.repositories.get, artifactregistry.repositories.downloadArtifacts, artifactregistry.dockerimages.get
cloudRunCréer les deux services Cloud Run, désactiver le contrôle d'invocation du wakerrun.services.create, run.services.get, run.services.update, run.services.getIamPolicy, run.services.setIamPolicy, run.operations.get, run.routes.invoke, iam.serviceAccounts.actAs
negCréer le groupe de points de terminaison réseau du wakercompute.regionNetworkEndpointGroups.create, compute.regionNetworkEndpointGroups.get, compute.regionOperations.get
jobCréer le job de vérificationcloudscheduler.jobs.create, cloudscheduler.jobs.get, cloudscheduler.jobs.update, iam.serviceAccounts.actAs

dormeto gcp uninstall

ÉtapeÀ quoi elle sertPermissions
readLire le projet, l'enregistrement de l'installation et les workloadsresourcemanager.projects.get, resourcemanager.projects.getIamPolicy, serviceusage.services.list, serviceusage.services.use, datastore.databases.list, datastore.databases.get, datastore.entities.get, datastore.entities.list, run.routes.invoke
jobSupprimer le job de vérificationcloudscheduler.jobs.get, cloudscheduler.jobs.delete
negSupprimer le groupe de points de terminaison réseaucompute.regionNetworkEndpointGroups.get, compute.regionNetworkEndpointGroups.delete, compute.regionOperations.get
cloudRunSupprimer les services Cloud Runrun.services.get, run.services.delete, run.operations.get
queueSupprimer la filecloudtasks.queues.get, cloudtasks.queues.delete
databaseSupprimer la basedatastore.databases.get, datastore.databases.delete, datastore.operations.get
projectBindingsRetirer les liaisons ajoutées par l'installationresourcemanager.projects.getIamPolicy, resourcemanager.projects.setIamPolicy
tagSupprimer le tag, sauf si un autre routeur le listeresourcemanager.tagKeys.get, resourcemanager.tagKeys.delete, resourcemanager.tagValues.get, resourcemanager.tagValues.delete
serviceAccountSupprimer le compte de serviceiam.serviceAccounts.get, iam.serviceAccounts.delete
rolesSupprimer les rôles personnalisés, sauf si un autre routeur les listeiam.roles.get, iam.roles.delete

dormeto gcp workloads list

Aussi show, nap et wake : ils appellent le contrôleur du routeur avec votre jeton d'identité.

ÉtapeÀ quoi elle sertPermissions
invokeAppeler le contrôleur du routeurrun.routes.invoke

dormeto gcp workloads onboard

ÉtapeÀ quoi elle sertPermissions
invokeAppeler le contrôleur du routeurrun.routes.invoke
tagAssocier le tag aux VM et aux groupes du workloadresourcemanager.tagValues.get, resourcemanager.tagValueBindings.create, resourcemanager.tagValueBindings.delete, compute.instances.listTagBindings, compute.instances.createTagBinding, compute.instances.deleteTagBinding, compute.instanceGroupManagers.listTagBindings, compute.instanceGroupManagers.createTagBinding, compute.instanceGroupManagers.deleteTagBinding

dormeto gcp workloads offboard

ÉtapeÀ quoi elle sertPermissions
invokeAppeler le contrôleur du routeurrun.routes.invoke
tagRetirer les associations du tagresourcemanager.tagValues.get, resourcemanager.tagValueBindings.delete, compute.instances.listTagBindings, compute.instances.deleteTagBinding, compute.instanceGroupManagers.listTagBindings, compute.instanceGroupManagers.deleteTagBinding

Un rôle personnalisé pour un opérateur plus restreint

Si roles/owner est trop large, créez un rôle avec les permissions des commandes que cet opérateur lance. Celui-ci contient toutes les permissions des tableaux ci-dessus :

title: Dormeto operator
description: Runs dormeto gcp in this project
stage: GA
includedPermissions:
- artifactregistry.dockerimages.get
- artifactregistry.repositories.downloadArtifacts
- artifactregistry.repositories.get
- cloudscheduler.jobs.create
- cloudscheduler.jobs.delete
- cloudscheduler.jobs.get
- cloudscheduler.jobs.update
- cloudtasks.queues.create
- cloudtasks.queues.delete
- cloudtasks.queues.get
- cloudtasks.queues.getIamPolicy
- cloudtasks.queues.setIamPolicy
- cloudtasks.queues.update
- compute.instanceGroupManagers.createTagBinding
- compute.instanceGroupManagers.deleteTagBinding
- compute.instanceGroupManagers.listTagBindings
- compute.instances.createTagBinding
- compute.instances.deleteTagBinding
- compute.instances.listTagBindings
- compute.regionNetworkEndpointGroups.create
- compute.regionNetworkEndpointGroups.delete
- compute.regionNetworkEndpointGroups.get
- compute.regionOperations.get
- datastore.databases.create
- datastore.databases.delete
- datastore.databases.get
- datastore.databases.list
- datastore.entities.create
- datastore.entities.get
- datastore.entities.list
- datastore.entities.update
- datastore.operations.get
- iam.roles.create
- iam.roles.delete
- iam.roles.get
- iam.roles.undelete
- iam.roles.update
- iam.serviceAccounts.actAs
- iam.serviceAccounts.create
- iam.serviceAccounts.delete
- iam.serviceAccounts.get
- iam.serviceAccounts.getIamPolicy
- iam.serviceAccounts.setIamPolicy
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
- resourcemanager.projects.setIamPolicy
- resourcemanager.tagKeys.create
- resourcemanager.tagKeys.delete
- resourcemanager.tagKeys.get
- resourcemanager.tagValueBindings.create
- resourcemanager.tagValueBindings.delete
- resourcemanager.tagValues.create
- resourcemanager.tagValues.delete
- resourcemanager.tagValues.get
- run.operations.get
- run.routes.invoke
- run.services.create
- run.services.delete
- run.services.get
- run.services.getIamPolicy
- run.services.setIamPolicy
- run.services.update
- serviceusage.operations.get
- serviceusage.services.enable
- serviceusage.services.list
- serviceusage.services.use
gcloud iam roles create dormetoOperator --project=my-project --file=operator-role.yaml
gcloud projects add-iam-policy-binding my-project \
  --member="user:you@example.com" --role="projects/my-project/roles/dormetoOperator"

Retirez les permissions des commandes que vous ne donnez pas, puis vérifiez le résultat avec dormeto gcp check, qui liste ce qui manque pour chaque commande. Notez que resourcemanager.projects.setIamPolicy permet à son titulaire de s'accorder n'importe quel rôle dans le projet. Donnez ce rôle le temps de l'installation puis retirez-le. Ou réservez-le aux quelques personnes qui la lancent.

Google classe trois de ces permissions en TESTING dans les rôles personnalisés, comme compute.urlMaps.* : cloudtasks.queues.getIamPolicy, cloudtasks.queues.setIamPolicy et serviceusage.operations.get. Elles sont utilisables et aucune n'est refusée.

Accès facultatifs

À partir du routeur 0.35.0 et de la CLI 0.8.0. Activer l'API Cloud SQL ou GKE fait ajouter à Google ses propres agents de service. Un projet qui n'utilise aucun des deux ne doit pas les recevoir. Vous demandez donc chacun par son nom :

dormeto gcp install --with cloud-sql,gke

L'enregistrement de l'installation garde votre choix. Une exécution ultérieure avec davantage de fonctions les ajoute. Une exécution sans --with garde ce qui existe. Seul uninstall retire une fonction. dormeto gcp check ne teste une fonction que si --with la nomme ou si l'enregistrement la contient. L'exécution suivante de la CLI affiche toute association ajoutée par Google.

cloud-sql

Jamais exécuté contre Google pour l'instant. Une base de données associée, arrêtée par une mise en veille et démarrée par un réveil. API : sqladmin.googleapis.com.

RôlePermissionsOùCondition
dormetoRouterDatabasesReadprojects/{project}/roles/dormetoRouterDatabasesReadcloudsql.instances.get, cloudsql.instances.listLe projetAucune
dormetoRouterDatabasesprojects/{project}/roles/dormetoRouterDatabasescloudsql.instances.updateLe projetRessources gérées par Dormeto : resource.matchTag('{project}/dormeto', 'managed')
CommandeÉtapePermissions
gcp workloads onboardtagcloudsql.instances.get, cloudsql.instances.listTagBindings, cloudsql.instances.createTagBinding, cloudsql.instances.deleteTagBinding, datastore.entities.get
gcp workloads offboardtagcloudsql.instances.get, cloudsql.instances.listTagBindings, cloudsql.instances.deleteTagBinding

gke

Jamais exécuté contre Google pour l'instant. Des pods derrière des groupes de points de terminaison réseau autonomes, sur un équilibreur de charge à vous. API : container.googleapis.com.

RôlePermissionsOùCondition
dormetoRouterKubernetesprojects/{project}/roles/dormetoRouterKubernetescontainer.clusters.get, container.clusters.connectLe projetAucune

Le rôle n'accorde rien dans le cluster. Quand vous intégrez un workload, la CLI lit le cluster en votre nom. Elle affiche, demande et applique ensuite un Role et un RoleBinding nommés dormeto-<workload>, dans le namespace du workload, pour le compte de service du routeur. Rien ne s'applique à tout le cluster, et la sortie retire les deux. Les règles :

  • get sur deployments, statefulsets.
  • list sur replicasets.
  • patch sur deployments/scale, statefulsets/scale.
  • list sur pods, events.
  • list, patch sur scaledobjects.

Kubernetes ne laisse accorder que ce que l'on détient : l'opérateur a donc besoin de container.roles.escalate et de container.roles.bind. Google classe container.roles.escalate en TESTING dans les rôles personnalisés.

CommandeÉtapePermissions
gcp workloads onboardclustercontainer.clusters.get, container.roles.create, container.roles.update, container.roleBindings.create, container.roleBindings.update, container.services.get, container.roles.escalate, container.roles.bind, container.clusters.connect, container.replicaSets.list, container.pods.list, container.roles.get, container.roleBindings.get, container.roles.delete, container.roleBindings.delete, datastore.databases.get, datastore.entities.get, datastore.entities.update
gcp workloads offboardclustercontainer.roles.delete, container.roleBindings.delete, container.roleBindings.update, container.roles.bind, container.clusters.connect, container.clusters.get, container.roles.get, container.roleBindings.get, datastore.databases.get, datastore.entities.get, datastore.entities.update

Listes d'adresses IP

À partir du routeur 0.35.0. Avec --ip-list name=<n>,url=<u>[,refresh=<hours>], répétable, une visite depuis une adresse de la liste ne réveille jamais un workload. Un POST /_dormeto/wake d'un client d'API le réveille toujours. --no-ip-lists les efface. Elles ne demandent aucun rôle de plus. L'URL d'une liste, chaîne de requête comprise, est affichée et enregistrée dans le plan, l'enregistrement de l'installation et l'environnement des services. N'y mettez pas de jeton. Une URL avec des identifiants est refusée.

Si Terraform écrit votre équilibreur de charge et vos VM

Terraform ignore ce que le routeur écrit : chaque plan propose donc de l'annuler. Après un tel apply, la vérification du routeur répare la carte d'URL en moins de 5 minutes. D'ici là, un workload en veille affiche la page d'erreur de l'équilibreur de charge et ne se réveille pas depuis un navigateur. Ignorez ces champs sur les ressources que vous avez écrites, avec lifecycle { ignore_changes = [...] } :

RessourceChampsPourquoi
google_compute_url_maphost_rule, path_matcherLa route /_dormeto/* et la politique de réponse d'erreur de la mise en veille. Quand le service par défaut de la carte est celui du workload, aussi une règle d'hôte et un path matcher.
google_compute_instance_group_manager, google_compute_region_instance_group_managertarget_size, target_stopped_size, target_suspended_sizeUne mise en veille fait passer les VM du groupe de sa taille cible à sa taille arrêtée ou suspendue. Un apply les ramènerait, et pourrait créer de nouvelles VM.
google_compute_autoscaler, google_compute_region_autoscalerautoscaling_policy[0].modeUne mise en veille désactive l'autoscaler, et un réveil le réactive.
google_compute_instancedesired_statusSeulement si vous le définissez : un apply démarrerait une VM en veille.
google_compute_region_url_map, et le google_compute_url_map d'un équilibreur de charge classiquedefault_service, default_route_action, host_rule, path_matcherÀ partir du routeur 0.35.0 : une mise en veille fait pointer les références de la carte vers le waker.
google_sql_database_instancesettings[0].activation_policyÀ partir du routeur 0.35.0, une base Cloud SQL associée : une mise en veille le met à NEVER, un réveil à ALWAYS.
kubernetes_deployment_v1, kubernetes_stateful_set_v1spec[0].replicasÀ partir du routeur 0.35.0, GKE : une mise en veille ramène le workload à 0.

Avec les path matchers ignorés, Terraform n'applique plus vos propres modifications. Retirez l'ignore le temps de cet apply. Cela retire aussi ce que le routeur a écrit jusqu'à ce que sa vérification le réécrive. L'association du tag n'est pas un champ de ces ressources : elle n'a besoin de rien.

Vérifier

dormeto gcp check est en lecture seule. Pour chaque commande, il affiche une coche quand vous détenez toutes les permissions nécessaires, et une croix avec les manquantes sinon. Il affiche ensuite le parent du projet, les API déjà activées et les avertissements (le rôle Éditeur du compte de service par défaut). Il se termine par le code 1 quand une commande manque d'une permission. Sans aucun rôle dans le projet, il le dit et liste toutes les permissions comme manquantes. --json affiche le rapport.

dormeto gcp check --project my-project --region europe-west1

dormeto gcp status affiche l'enregistrement du routeur et son état réel : version, services, santé du contrôleur, file, job, base et droits.

Retirer

dormeto gcp uninstall retire exactement ce que l'installation a ajouté, dans l'ordre inverse, d'après son enregistrement. Il refuse tant que des workloads sont intégrés. --force les sort d'abord un par un, associations du tag comprises. Il garde les rôles personnalisés et le tag tant qu'un autre routeur du projet les liste. Il ne désactive aucune API. Il liste les API et les liaisons de Google comme laissées en place.

dormeto gcp uninstall --project my-project --region europe-west1
dormeto gcp uninstall --project my-project --region europe-west1 --force   # workloads still onboarded

Ensuite, si rien d'autre dans le projet n'en a besoin, désactivez vous-même les API. Retirez aussi le rôle Éditeur du compte de service par défaut comme ci-dessus :

gcloud services disable \
  compute.googleapis.com \
  run.googleapis.com \
  firestore.googleapis.com \
  cloudtasks.googleapis.com \
  cloudscheduler.googleapis.com \
  monitoring.googleapis.com \
  artifactregistry.googleapis.com \
  iam.googleapis.com \
  cloudresourcemanager.googleapis.com \
  logging.googleapis.com \
  --project my-project

Google peut refuser de désactiver une API tant qu'un autre service en dépend, ou demander --force. Décidez pour chacune : ces API peuvent servir à d'autres usages dans le projet.

Le nom d'une file supprimée reste bloqué jusqu'à 3 jours et l'ID d'une base supprimée environ 5 minutes. Réinstaller avant échoue, et la CLI le dit.