Repository navigation
Description
Partie de #309.
Contexte
Les clés API Scaleway durent au plus 90 jours (réglage de l'organisation, relevé le 04/11/2026). Les clés des buckets de api et sync sont aujourd'hui créées par OpenTofu et renouvelées à la main (#254), ce qui coupe l'accès au bucket entre le tofu apply et le déploiement. Le propriétaire veut une rotation sans aucune action manuelle (décision du 05/11/2026).
Ce qui est vérifié :
- Scaleway ne propose pas d'identité de charge de travail sans clé pour Serverless Containers, ni de fédération OIDC pour GitHub Actions ([deploy] Rotation de la clé Scaleway de la CI avant son expiration #238).
- Le plus petit droit qui crée les clés d'une application est
IAMApplicationManager(« Full access to IAM applications, including management of applications API keys »), de portéeorganization: il ne se restreint pas à quelques applications (scw iam permission-set list, relevé le 05/11/2026). Le détenteur peut donc créer une clé pour n'importe quelle application de l'organisation,ci-deploycomprise. - Les jobs Serverless lisent leurs secrets dans Secret Manager (
secret_reference,deploy/tofu/compute.tf). Le conteneur API reçoit les siens ensecret-environment-variablesau déploiement (.github/workflows/deploy.yml) ;scw container container update2.65.2 ne montre pas de référence à Secret Manager.
Décision à écrire (ADR 0007)
Un job Serverless rotate, privé, planifié (proposition : tous les 30 jours, clés valables 89 jours, donc deux échecs tolérés) :
- crée une nouvelle clé pour
apiet poursync; - écrit celle de
syncdans Secret Manager (disable-previous), met à jour les secrets du conteneur API et attend qu'il soit prêt ; - vérifie, puis supprime les anciennes clés (aucune coupure, contrairement à la rotation par OpenTofu) ;
- fait tourner sa propre clé, lue dans Secret Manager, et supprime l'ancienne en dernier.
L'ADR consigne l'exception au moindre privilège (IAMApplicationManager sur l'organisation, droit d'écriture sur les conteneurs du projet) et ses garde-fous : image construite par la CI et déployée par empreinte, aucun point d'accès entrant, liste fermée d'identifiants d'application dans le code, journaux sans secret, alerte Cockpit sur l'échec du job, revue de l'Audit Trail.
À vérifier avant d'écrire l'ADR
-
scw container container update secret-environment-variables.X=…remplace-t-il toute la liste ou seulement les clés passées ? (le déploiement et le rotateur ne doivent pas s'effacer mutuellement) - Le conteneur API peut-il référencer Secret Manager ; sinon, la mise à jour des secrets redéploie-t-elle sans coupure ?
- Droits exacts du rotateur sur Secret Manager et Serverless Containers (noms des permission sets, portée projet).
- Le SDK Go de Scaleway (
github.com/scaleway/scaleway-sdk-go) : licence, activité,govulncheck, et s'il accepte le client HTTP deplatform(liste d'hôtes, délais, taille). - L'Audit Trail permet-il une alerte sur la création de clé par le rotateur pour une autre application ?
Clé de ci-deploy par une GitHub App (décision du propriétaire, 05/11/2026)
Le rotateur fait aussi tourner la clé de ci-deploy (30 jours, #238) et l'écrit dans les secrets SCW_ACCESS_KEY et SCW_SECRET_KEY de l'environnement GitHub production, par une GitHub App installée sur arnakoff/api seul. L'ADR consigne l'échange : une clé privée d'App, de longue durée, gardée dans Secret Manager, contre plus aucune rotation manuelle.
- Permission minimale de l'App pour écrire un secret d'environnement (« Secrets », « Environments » ?) et point d'accès exact (
PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}). - Durée de vie d'une clé privée d'App et possibilité d'en avoir deux pendant une rotation ; durée du jeton d'installation.
- Chiffrement exigé par GitHub (boîte scellée libsodium avec la clé publique de l'environnement) et bibliothèque Go vérifiée (
golang.org/x/crypto/nacl/box,SealAnonymous?). - Hôtes à ajouter à la liste du client HTTP de
platform(api.github.com).
Liens
- Remplace la rotation manuelle de [deploy] Vérifier la première rotation automatique des clés des buckets (vers le 04/12/2026) #254 ; voir aussi [deploy] Rotation de la clé Scaleway de la CI avant son expiration #238 (clé de
ci-deploy, hors de ce périmètre : elle vit dans les secrets GitHub). - Remplace la rotation manuelle de [deploy] Vérifier la première rotation automatique des clés des buckets (vers le 04/12/2026) #254 et de [deploy] Rotation de la clé Scaleway de la CI avant son expiration #238.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTerminé
Activity
[-][deploy] ADR 0007 — rotation automatique des clés Scaleway[/-][+][deploy] ADR 0007 — rotation automatique des clés Scaleway (buckets et ci-deploy)[/+]