8000 [deploy] Job de rotation des clés dans OpenTofu et déploiement sans clés de bucket · Issue #308 · arnakoff/api · GitHub
[go: up one dir, main page]

Skip to content

[deploy] Job de rotation des clés dans OpenTofu et déploiement sans clés de bucket #308

Closed

Description

@EnO33

Partie de #309.

Contexte

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.
  • Vérifié en production : une exécution complète, anciennes clés supprimées, API et sync lisent le bucket ; puis fermeture de [deploy] Vérifier la première rotation automatique des clés des buckets (vers le 04/12/2026) #254.

Liens

Activity

  1. added
    type:choreOutillage, CI, maintenance
    owner-onlyRéservée au propriétaire : compte, paiement, juridique, DNS
    on Nov 5, 2026
  2. EnO33 commented on Nov 5, 2026

    @EnO33
    ContributorAuthor

    Notes de #307 (PR #311) pour la mise en place :

    • 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 »).
  3. added a commit that references this issue on Nov 5, 2026
  4. added a commit that references this issue on Nov 5, 2026
  5. EnO33 commented on Nov 5, 2026

    @EnO33
    ContributorAuthor

    Avancement au 05/11/2026 :

    • Infrastructure : feat(ci): run the key rotation job and stop deploying the bucket keys #314 appliquée (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 ajoute ARNAKOFF_ROTATE_ORGANIZATION_ID. SCW_ROTATE_JOB_DEFINITION_ID est réglé ; le job est passé en 0.59.1 avec le déploiement.
    • GitHub App arnakoff-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.
    • Premier passage (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.
    • Deuxième passage (a144caa9, 14:27) : réussi.
      • sync, api et rotate : rien à faire (rotated=false).
      • ci-deploy : nouvelle clé SCW8RFRCSRVD1QXA0G42, valable jusqu'au 02/02/2027 ; ancienne clé SCWZ76VAA2DT1FC7NWVB supprimée.
      • 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) :

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:deployZone : deployowner-onlyRéservée au propriétaire : compte, paiement, juridique, DNSsecuritySécuritétype:choreOutillage, CI, maintenance

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    0