Publié le: 2023-03-24

Feedback sur Scaleway Secret Manager

Cela fait bien longtemps que je n’avais pas rédigé d’article. Ce soir j’avais envie de tester le nouveau secret manager de scaleway, disponible en bêta, et essayer de l’utiliser dans Terraform de manière à setup des tokens Gitlab pour ArgoCD.

Création des accès au secret manager

Scaleway ayant mis à disposition un IAM depuis 2022, nous allons tout d’abord configurer des accès propres à nos secrets pour Terraform. A noter que je ne provisionne pas l’IAM via terraform dans cet article, pour l’exercice.

Note: je vous conseille de créer un projet dédié à votre test dans la console Scaleway.

Dans un premier temps créons une application qui sera liée à notre Terraform:

SCW app creation

Sélectionnez ensuite l’application, on va désormais lui attacher une policy

SCW app attache policy

Nous arrivons désormais dans l’outil de création de policy. Nommez là. Comme vous le voyez notre application est bien sélectionnée

SCW policy 1

Ajoutons désormais des règles, c’est ici que l’on va restreindre le scope au projet en cours (ici default):

SCW policy 2

Ensuite on va ajouter la seule permission qui nous intéresse, SecretManagerReadOnly:

SCW policy 3

Notre règle est prête nous pouvons valider

SCW policy 4

L’IAM est quasiment totalement configuré, retournons dans l’application, onglet API Key, et créons une clef dédiée à notre Terraform:

SCW app api key

Création d’un secret dans Secret Manager

Regardons l’UI fournie par Scaleway.

Ici rien de spécial, pour ceux opérant du Hashicorp Vault, c’est plutôt simple, une clef on met un payload au format qu’on le souhaite et roule. Nous pouvons sélectionner l’une des 3 grandes régions pour stocker ce secret. A noter qu’une limite de 64KiB a été imposée, somme toute c’est fortement raisonnable. Je vous conseille du format JSON, cela sera plus pratique pour les outils d’automation.

SCW secret creation

SCW secret out

Les secrets sont également versionnés c’est top, seul regret dans l’UI, la création d’une nouvelle version ne reprend pas directement la dernière, il faut copier manuellement. Il est possible de désactiver une version, ce qui la rend inaccessible dans l’API, c’est top, évitons les erreurs dans l’automation.

SCW secret version

Utilisation du secret dans Terraform

La documentation du provider Terraform Scaleway est plutôt qualitative.

J’espère que vous avez bien recopié l’access key et la secret key associée à notre application scaleway pour Terraform plus haut, auquel cas recréez en une et supprimez la précédente.

Créons maintenant un code terraform permettant de récupérer la valeur de notre secret et de l’envoyer en tant que token Gitlab pour ArgoCD via l’API ArgoCD:

terraform {
  required_providers {
    scaleway = {
      source = "scaleway/scaleway"
      version = ">= 2.14.1"
    }
  }
  required_version = ">= 0.13"
}

data "scaleway_secret" "my_secret" {
  secret_id = "xxx"
}

data "scaleway_secret_version" "my_secret" {
  secret_id  = data.scaleway_secret.my_secret.id
  revision   = data.scaleway_secret.my_secret.version_count
}

resource "argocd_repository_credentials" "git_credentials" {
  url        = "https://gitlab.com"
  username   = "myself"
  password   = jsondecode(base64decode(data.scaleway_secret_version.my_secret.data))["gitlab_argo_token"]
}

Il faut exporter les variables SCW_ACCESS_KEY et SCW_SECRET_KEY pour pouvoir accéder à l’API Scaleway, avant d’appeler Terraform.

Terraform va ici dans un premier temps récupérer les métadonnées liées au secret, puis appeler la version correspondante du secret. Pour utiliser le secret, il va falloir le décoder, il est encodé en base64, et ensuite déserialiser notre JSON.

Feedback

J’ai été agréablement supris par l’expérience sur l’IAM, c’est un premier pas très intéressant, même si on ne peut filtrer qu’au projet, c’est un bon début, mais si on pouvait aller jusqu’à la ressource, ce serait top. On a au moins les features de base d’un IAM qui fonctionne et c’est l’essentiel.

En ce qui concerne le Secret Manager, cela fait le café, c’est rapide, néanmoins on aimerait peut être comprendre comment les données sont sécurisées depuis l’UI, ou au moins un lien vers une documentation plus explicite.

Autre point d’automatisation, dans la version actuelle du provider et de l’API, malheureusement on n’a accès qu’à un champ version_count, il nous est impossible de savoir quelle est la dernière version du secret, donc on déduit celle ci du nombre de version. Quid de ce champ version_count si on drop une version intermédiaire ? Si un développeur Scaleway passe dans le coin, fournissez nous la dernière version dans la ressource scaleway_secret svp 🙂

Sur fin 2022 et début 2023, Scaleway montre qu’il peut commencer à rivaliser avec les cloud US sur des services de base dont on a besoin dans toute infrastructure moderne. Continuez comme cela !

Note finale: je ne suis pas sponsorisé par Scaleway, j’apprécie juste une offre décente et honnête, qui sait évoluer avec son temps.