You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[deploy] Job de rotation des clés dans OpenTofu et déploiement sans clés de bucket #308
Passage de la rotation manuelle (#254) à la rotation automatique (ADR 0007, #306) dans l'infrastructure et le déploiement.
À faire
deploy/tofu : application IAM rotate, ses politiques (ADR 0007), son secret dans Secret Manager, le job planifié et son image par empreinte.
GitHub App créée par le propriétaire (permissions de l'ADR 0007, installée sur arnakoff/api seul), sa clé privée dans Secret Manager.
Sortir scaleway_iam_api_key.api et .sync de l'état sans les détruire (bloc removed), retirer la variable key_expiry.
Amorçage unique documenté : première clé du rotateur, puis plus aucune action manuelle.
.github/workflows/deploy.yml : ne plus écrire les clés des buckets (le rotateur en est la seule source), supprimer les quatre secrets GitHub *_SNAPSHOT_BUCKET_*.
Alerte Cockpit sur l'échec du job rotate (comme JobRunFailed pour sync).
docs/deploy.md : section « Rotation » mise à jour.
Variables du job : ARNAKOFF_ROTATE_* et ARNAKOFF_GITHUB_APP_* (voir .env.example). Clé du job : deux secrets Secret Manager, un par moitié (ARNAKOFF_ROTATE_SELF_ACCESS_SECRET_ID, …_SECRET_SECRET_ID), référencés par le job pour ARNAKOFF_ROTATE_ACCESS_KEY et ARNAKOFF_ROTATE_SECRET_KEY. Même chose pour sync (ARNAKOFF_ROTATE_SYNC_*_SECRET_ID).
Délai du job : au moins 25 min. Un jour de rotation peut prendre environ 20 min : vérification du bucket jusqu'à 5 min par clé, redéploiement du conteneur api jusqu'à 10 min.
Ordre : le déploiement doit cesser d'écrire les clés des buckets avant la première exécution du job. Sinon, il réécrirait des clés supprimées.
containers/v1beta1 : le SDK v1.39.0 marque UpdateContainer comme dépréciée. L'ADR 0007 la garde parce qu'elle conserve les secrets non envoyés. À revoir si Scaleway la retire.
À relever à l'amorçage : une vraie réponse de création de jeton d'installation (la documentation GitHub n'en donne pas d'exemple), à mettre en fixture ; le délai de propagation d'une nouvelle clé IAM sur Object Storage (aujourd'hui 6 essais à une minute d'écart, « à vérifier »).
GitHub Apparnakoff-rotate : créée, installée sur arnakoff/api seul, avec la seule permission « Environments: write ».
Amorçage : la première clé du job et la clé privée de l'App sont dans Secret Manager. Contrôle sans affichage : la clé d'accès commence par SCW, la clé secrète fait 36 caractères, la clé de l'App est un PEM RSA PRIVATE KEY.
SCW_ACCESS_KEY et SCW_SECRET_KEY de l'environnement production ont été réécrits par l'App à 14:27:46 et 14:27:47.
Contrôle : le déploiement de 14:28:55 a réussi avec la nouvelle clé de la CI.
Étape api du déploiement par containers/v1beta1 : trois déploiements réussis. Le conteneur reste ready et garde ses secrets.
Vérifié, au sens de l'ADR 0007 :
une application munie de IAMApplicationManager liste, crée et supprime les clés d'une autre application. La suppression de sa propre clé reste à voir à sa première rotation ;
le jeton d'installation et l'écriture des secrets d'environnement fonctionnent.
Reste à faire, vers le 04/12/2026, à la première rotation des clés des buckets (30 jours après leur création le 04/11) :
vérifier /readyz, le passage suivant de sync, et le temps qu'une nouvelle clé met à lire le bucket (dans le journal du job) ;
Activity
docs(docs): decide the automatic rotation of the scaleway keys in adr…
EnO33 commentedon Nov 5, 2026
Notes de #307 (PR #311) pour la mise en place :
ARNAKOFF_ROTATE_*etARNAKOFF_GITHUB_APP_*(voir.env.example). Clé du job : deux secrets Secret Manager, un par moitié (ARNAKOFF_ROTATE_SELF_ACCESS_SECRET_ID,…_SECRET_SECRET_ID), référencés par le job pourARNAKOFF_ROTATE_ACCESS_KEYetARNAKOFF_ROTATE_SECRET_KEY. Même chose poursync(ARNAKOFF_ROTATE_SYNC_*_SECRET_ID).apijusqu'à 10 min.containers/v1beta1: le SDK v1.39.0 marqueUpdateContainercomme dépréciée. L'ADR 0007 la garde parce qu'elle conserve les secrets non envoyés. À revoir si Scaleway la retire.feat(app): rotate the scaleway keys of the buckets, the ci and the ro…
fix(app): rotate a key close to its expiry, and sync before api (#315)
feat(ci): run the key rotation job and stop deploying the bucket keys (…
chore(main): release 0.59.0 (#313)
fix(registry): send the organization when the rotation job lists keys (…
chore(main): release 0.59.1 (#317)
EnO33 commentedon Nov 5, 2026
Avancement au 05/11/2026 :
tofu apply: 9 ressources ajoutées, 0 détruite, les 2 clés des buckets oubliées sans être détruites), puis fix(registry): send the organization when the rotation job lists keys #316, qui ajouteARNAKOFF_ROTATE_ORGANIZATION_ID.SCW_ROTATE_JOB_DEFINITION_IDest réglé ; le job est passé en 0.59.1 avec le déploiement.arnakoff-rotate: créée, installée surarnakoff/apiseul, avec la seule permission « Environments: write ».SCW, la clé secrète fait 36 caractères, la clé de l'App est un PEMRSA PRIVATE KEY.8537f3bc) : en échec dès le premier appel, avant tout changement (organization_id is required). Corrigé par fix(registry): send the organization when the rotation job lists keys #316.a144caa9, 14:27) : réussi.sync,apietrotate: rien à faire (rotated=false).ci-deploy: nouvelle cléSCW8RFRCSRVD1QXA0G42, valable jusqu'au 02/02/2027 ; ancienne cléSCWZ76VAA2DT1FC7NWVBsupprimée.SCW_ACCESS_KEYetSCW_SECRET_KEYde l'environnementproductionont été réécrits par l'App à 14:27:46 et 14:27:47.apidu déploiement parcontainers/v1beta1: trois déploiements réussis. Le conteneur restereadyet garde ses secrets.Vérifié, au sens de l'ADR 0007 :
IAMApplicationManagerliste, crée et supprime les clés d'une autre application. La suppression de sa propre clé reste à voir à sa première rotation ;Reste à faire, vers le 04/12/2026, à la première rotation des clés des buckets (30 jours après leur création le 04/11) :
/readyz, le passage suivant desync, et le temps qu'une nouvelle clé met à lire le bucket (dans le journal du job) ;API_SNAPSHOT_BUCKET_*etSYNC_SNAPSHOT_BUCKET_*, puis fermer [deploy] Vérifier la première rotation automatique des clés des buckets (vers le 04/12/2026) #254 et cette issue ;tofu plan, voir siretry_policy { max_retries = 0 -> null }revient surscaleway_job_definition.rotate. Si oui, la fixer dansrotate.tf.