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
- Validé sur un vrai projet (2026-10-30).
dormeto gcp check,install,uninstall,statusetworkloads. 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
| Quoi | Où | À quoi cela sert |
|---|---|---|
| Les API | Le projet | Dix API (la liste). dormeto gcp install les active et n'en désactive jamais aucune. |
| Deux rôles personnalisés | Le projet | dormetoRouter 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 routeur | Le projet | dmtr-<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 projet | dormeto=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 routeur | La région du routeur | Une 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 routeur | La région du routeur, avec --image | Deux 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 workload | Votre équilibreur de charge | Un 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 facultatifs | Le projet, si vous le demandez | Cloud 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.
| API | Service |
|---|---|
compute.googleapis.com | Compute Engine |
run.googleapis.com | Cloud Run |
firestore.googleapis.com | Firestore |
cloudtasks.googleapis.com | Cloud Tasks |
cloudscheduler.googleapis.com | Cloud Scheduler |
monitoring.googleapis.com | Cloud Monitoring |
artifactregistry.googleapis.com | Artifact Registry |
iam.googleapis.com | Identity and Access Management |
cloudresourcemanager.googleapis.com | Cloud Resource Manager |
logging.googleapis.com | Cloud 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.
| Ressource | Permissions |
|---|---|
compute.urlMaps | compute.urlMaps.get, compute.urlMaps.list, compute.urlMaps.update |
compute.backendServices | compute.backendServices.get, compute.backendServices.use, compute.backendServices.create, compute.backendServices.delete |
compute.regionNetworkEndpointGroups | compute.regionNetworkEndpointGroups.use |
compute.globalForwardingRules | compute.globalForwardingRules.list |
compute.targetHttpProxies | compute.targetHttpProxies.list |
compute.targetHttpsProxies | compute.targetHttpsProxies.list |
compute.instances | compute.instances.get |
compute.instanceGroups | compute.instanceGroups.get |
compute.instanceGroupManagers | compute.instanceGroupManagers.get |
compute.autoscalers | compute.autoscalers.get, compute.autoscalers.update |
compute.machineTypes | compute.machineTypes.get |
compute.globalOperations | compute.globalOperations.get |
compute.zoneOperations | compute.zoneOperations.get |
compute.regionOperations | compute.regionOperations.get |
monitoring.timeSeries | monitoring.timeSeries.list |
compute.networkEndpointGroups | compute.networkEndpointGroups.get |
compute.regionUrlMaps | compute.regionUrlMaps.get, compute.regionUrlMaps.list, compute.regionUrlMaps.update |
compute.regionBackendServices | compute.regionBackendServices.get, compute.regionBackendServices.use, compute.regionBackendServices.create, compute.regionBackendServices.delete |
compute.regionTargetHttpProxies | compute.regionTargetHttpProxies.list |
compute.regionTargetHttpsProxies | compute.regionTargetHttpsProxies.list |
compute.forwardingRules | compute.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.
| Ressource | Permissions |
|---|---|
compute.instances | compute.instances.start, compute.instances.stop, compute.instances.suspend, compute.instances.resume |
compute.instanceGroupManagers | compute.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ôle | Permissions |
|---|---|
roles/datastore.user | datastore.entities.get, datastore.entities.list, datastore.entities.create, datastore.entities.update, datastore.entities.delete |
roles/cloudtasks.enqueuer | cloudtasks.tasks.create |
roles/run.invoker | run.routes.invoke |
roles/iam.serviceAccountUser | iam.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ôle | Où | Condition | Ce qu'il permet |
|---|---|---|---|
projects/{project}/roles/dormetoRouter | Le projet | Aucune | Lit et gère les équilibreurs de charge, les VM et les groupes des workloads. |
projects/{project}/roles/dormetoRouterBackends | Le projet | Dormeto-managed resources : resource.matchTag('{project}/dormeto', 'managed') | Démarre et arrête ce qui porte le tag. |
roles/datastore.user | Le projet | The router's database : resource.name == "projects/{project}/databases/{database}" | Lit et écrit les documents Firestore du routeur. |
roles/cloudtasks.enqueuer | La file dmtr-<region> | Aucune | Crée des tâches dans la file du routeur. |
roles/run.invoker | Le service Cloud Run dmtr-<region>-controller | Aucune | Appelle le contrôleur. Le job Cloud Scheduler et les tâches le font, avec le compte de service. |
roles/iam.serviceAccountUser | Le compte de service lui-même | Aucune | Signe 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ôle | Membre | Apparue après | De qui |
|---|---|---|---|
roles/cloudscheduler.serviceAgent | serviceAccount:service-<project number>@gcp-sa-cloudscheduler.iam.gserviceaccount.com | apis | L'agent de service de Cloud Scheduler |
roles/cloudtasks.serviceAgent | serviceAccount:service-<project number>@gcp-sa-cloudtasks.iam.gserviceaccount.com | apis | L'agent de service de Cloud Tasks |
roles/containerregistry.ServiceAgent | serviceAccount:service-<project number>@containerregistry.iam.gserviceaccount.com | apis | L'agent de service de Container Registry |
roles/pubsub.serviceAgent | serviceAccount:service-<project number>@gcp-sa-pubsub.iam.gserviceaccount.com | apis | L'agent de service de Pub/Sub |
roles/run.serviceAgent | serviceAccount:service-<project number>@serverless-robot-prod.iam.gserviceaccount.com | apis | L'agent de service de Cloud Run |
roles/firestore.serviceAgent | serviceAccount:service-<project number>@gcp-sa-firestore.iam.gserviceaccount.com | database | L'agent de service de Firestore |
roles/firebaserules.system | serviceAccount:service-<project number>@firebase-rules.iam.gserviceaccount.com | projectBindings | Le compte système de Firebase Rules, ajouté tardivement, depuis la base |
roles/artifactregistry.serviceAgent | serviceAccount:service-<project number>@gcp-sa-artifactregistry.iam.gserviceaccount.com | La création du dépôt de l'image, que la CLI ne fait pas | L'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 sert | Permissions |
|---|---|---|
read | Lire le projet, sa politique IAM et les API activées | resourcemanager.projects.get, resourcemanager.projects.getIamPolicy, serviceusage.services.list, serviceusage.services.use |
dormeto gcp install
| Étape | À quoi elle sert | Permissions |
|---|---|---|
read | Lire le projet, sa politique IAM et les API activées | resourcemanager.projects.get, resourcemanager.projects.getIamPolicy, serviceusage.services.list, serviceusage.services.use |
apis | Activer les API | serviceusage.services.enable, serviceusage.operations.get |
roles | Cré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 restaure | iam.roles.get, iam.roles.create, iam.roles.update, iam.roles.undelete |
serviceAccount | Créer le compte de service du routeur et ses liaisons | iam.serviceAccounts.get, iam.serviceAccounts.create, iam.serviceAccounts.getIamPolicy, iam.serviceAccounts.setIamPolicy, iam.serviceAccounts.actAs |
projectBindings | Lire la politique IAM, y ajouter les liaisons de Dormeto, l'écrire avec son etag | resourcemanager.projects.getIamPolicy, resourcemanager.projects.setIamPolicy |
tag | Créer le tag sécurisé | resourcemanager.tagKeys.create, resourcemanager.tagKeys.get, resourcemanager.tagValues.create, resourcemanager.tagValues.get |
database | Créer la base Firestore, écrire l'enregistrement de l'installation | datastore.databases.create, datastore.databases.get, datastore.operations.get, datastore.entities.create, datastore.entities.get, datastore.entities.update |
queue | Créer la file de tâches et ses liaisons | cloudtasks.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 sert | Permissions |
|---|---|---|
image | Lire l'image du routeur dans Artifact Registry | artifactregistry.repositories.get, artifactregistry.repositories.downloadArtifacts, artifactregistry.dockerimages.get |
cloudRun | Créer les deux services Cloud Run, désactiver le contrôle d'invocation du waker | run.services.create, run.services.get, run.services.update, run.services.getIamPolicy, run.services.setIamPolicy, run.operations.get, run.routes.invoke, iam.serviceAccounts.actAs |
neg | Créer le groupe de points de terminaison réseau du waker | compute.regionNetworkEndpointGroups.create, compute.regionNetworkEndpointGroups.get, compute.regionOperations.get |
job | Créer le job de vérification | cloudscheduler.jobs.create, cloudscheduler.jobs.get, cloudscheduler.jobs.update, iam.serviceAccounts.actAs |
dormeto gcp uninstall
| Étape | À quoi elle sert | Permissions |
|---|---|---|
read | Lire le projet, l'enregistrement de l'installation et les workloads | resourcemanager.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 |
job | Supprimer le job de vérification | cloudscheduler.jobs.get, cloudscheduler.jobs.delete |
neg | Supprimer le groupe de points de terminaison réseau | compute.regionNetworkEndpointGroups.get, compute.regionNetworkEndpointGroups.delete, compute.regionOperations.get |
cloudRun | Supprimer les services Cloud Run | run.services.get, run.services.delete, run.operations.get |
queue | Supprimer la file | cloudtasks.queues.get, cloudtasks.queues.delete |
database | Supprimer la base | datastore.databases.get, datastore.databases.delete, datastore.operations.get |
projectBindings | Retirer les liaisons ajoutées par l'installation | resourcemanager.projects.getIamPolicy, resourcemanager.projects.setIamPolicy |
tag | Supprimer le tag, sauf si un autre routeur le liste | resourcemanager.tagKeys.get, resourcemanager.tagKeys.delete, resourcemanager.tagValues.get, resourcemanager.tagValues.delete |
serviceAccount | Supprimer le compte de service | iam.serviceAccounts.get, iam.serviceAccounts.delete |
roles | Supprimer les rôles personnalisés, sauf si un autre routeur les liste | iam.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 sert | Permissions |
|---|---|---|
invoke | Appeler le contrôleur du routeur | run.routes.invoke |
dormeto gcp workloads onboard
| Étape | À quoi elle sert | Permissions |
|---|---|---|
invoke | Appeler le contrôleur du routeur | run.routes.invoke |
tag | Associer le tag aux VM et aux groupes du workload | resourcemanager.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 sert | Permissions |
|---|---|---|
invoke | Appeler le contrôleur du routeur | run.routes.invoke |
tag | Retirer les associations du tag | resourcemanager.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ôle | Permissions | Où | Condition |
|---|---|---|---|
dormetoRouterDatabasesReadprojects/{project}/roles/dormetoRouterDatabasesRead | cloudsql.instances.get, cloudsql.instances.list | Le projet | Aucune |
dormetoRouterDatabasesprojects/{project}/roles/dormetoRouterDatabases | cloudsql.instances.update | Le projet | Ressources gérées par Dormeto : resource.matchTag('{project}/dormeto', 'managed') |
| Commande | Étape | Permissions |
|---|---|---|
gcp workloads onboard | tag | cloudsql.instances.get, cloudsql.instances.listTagBindings, cloudsql.instances.createTagBinding, cloudsql.instances.deleteTagBinding, datastore.entities.get |
gcp workloads offboard | tag | cloudsql.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ôle | Permissions | Où | Condition |
|---|---|---|---|
dormetoRouterKubernetesprojects/{project}/roles/dormetoRouterKubernetes | container.clusters.get, container.clusters.connect | Le projet | Aucune |
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 :
getsurdeployments,statefulsets.listsurreplicasets.patchsurdeployments/scale,statefulsets/scale.listsurpods,events.list,patchsurscaledobjects.
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 | Étape | Permissions |
|---|---|---|
gcp workloads onboard | cluster | container.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 offboard | cluster | container.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 = [...] } :
| Ressource | Champs | Pourquoi |
|---|---|---|
google_compute_url_map | host_rule, path_matcher | La 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_manager | target_size, target_stopped_size, target_suspended_size | Une 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_autoscaler | autoscaling_policy[0].mode | Une mise en veille désactive l'autoscaler, et un réveil le réactive. |
google_compute_instance | desired_status | Seulement 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 classique | default_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_instance | settings[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_v1 | spec[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.