Chiffrer des secrets dans Terraform

05 février 2022

Pour que Terraform puisse communiquer avec les fournisseurs de services (“providers”) sur lesquels il doit pouvoir créer ses ressources, il a besoin des identifiants des plateformes en questions. Il y a plusieurs manières de faire, la plus basique étant de les passer via des variables d’environnement.

Personnellement je trouve embêtant d’avoir une étape supplémentaire qui consiste à sourcer un éventuel fichier .env. Puis si on est parano ou imprudent on peut craindre de faire fuiter ses secrets, par exemple avec un programme qui planterait et souhaiterait envoyer un rapport de plantage avec le contenu des variables d’environnement.

Jusque-là j’utilisais donc le plugin terraform-sops qui permet d’utiliser sops pour chiffrer et déchiffrer des secrets statiques, en se reposant sur des outils tels que GPG (beurk) et Age (miam) entre autres. Sauf que ça nous fait une chaine de dépendances terraform > plugin > sops > age que je serais content de pouvoir raccourcir.

Ça tombe bien, Terraform fournit une fonction rsadecrypt qui devrait pouvoir nous y aider.

On commence par générer une clé :

$ openssl genrsa -out ./privkey.pem 4096

Ensuite on créer le fichier JSON qui va contenir nos identifiants :

$ cat /tmp/secrets.json
{
  "scaleway": {
    "access_key": "***",
    "secret_key": "***"
  }
}

On le chiffre à l’aide notre clé RSA :

$ openssl rsautl -encrypt -inkey ./privkey.pem -in /tmp/secrets.json -out ./secrets.json

Et ensuite on peut le charger dans nos fichiers Terraform :

$ cat ./main.tf
[...]

locals {
  secrets = jsondecode(rsadecrypt(filebase64("${path.module}/secrets.json"), file("${path.module}/privkey.pem")))
}

provider "scaleway" {
  region     = "fr-par"
  zone       = "fr-par-1"
  access_key = local.secrets.scaleway.access_key
  secret_key = local.secrets.scaleway.secret_key
}

[...]

On se retrouve donc maintenant avec une chaine de dépendances nettement plus courte : terraform > openssl. Une victoire de plus pour le minimalisme !

Bon après il se pourrait qu’utiliser RSA via OpenSSL soit moins sécurisé que AEAD via Age, toutefois je pense que c’est suffisant pour mon modèle de menace.


Commenter
Articles de blogs que je lis

Catalogue des vaisseaux imaginaires

Un livre qui donne envie de voyager et de lire : l'auteur a dressé un catalogue de bateaux qui apparaissent dans des œuvres de fiction. Chaque entrée résume le bateau, sa carrière, son rôle dans le roman, et est l'occasion de passer d'œuvres archi-connues à des textes bien moins célèbres.
Blog de Stéphane Bortzmeyer · 21 mars 2023

De l’importance de comprendre ce qu’est une licence

De l’importance de comprendre ce qu’est une licence On entend souvent que les programmes informatiques ou les œuvres en ligne sont publiées sous une licence. Qu’est-ce que cela signifie ? Et en quoi est-ce important ? Pour simplifier, dans nos sociétés, tout échange se fait suivant un contrat. Ce contrat peut être implicite, mais il existe. Si j’achète une pomme au marché, le contrat implicite est qu’après avoir payé, je reçois ma pomme et je peux en faire ce que je veux. Pour les biens …
Ploum.net · 14 mars 2023

#57 : Adaptation climatique : un coup de gueule salutaire

Cette semaine il s’est passé une chose dans l’actualité climatique française qui mérite de s’y attarder, au vu des incompréhensions et des controverses suscitées. L’info en question : la stratégie d’adaptation au changement climatique de la France va désormais s’appuyer aussi sur l’hypothèse d’un réchauffement de + 4°C (semble-t-il en France même si cela n’a pas été précisé) d'ici la fin du siècle... ce qui correspondrait à un
Nourritures terrestres · 5 févr. 2023

Intel­li­gence

« Atten­tion, chatGPT est une IA géné­ra­tive. Ce n’est pas de l’in­tel­li­gence, juste de la géné­ra­tion de texte vrai­sem­blable par mimé­tisme. On peut d’ailleurs obte­nir une réponse fausse donnée avec aplomb. Je l’ai entendu, je l’ai certai­ne­ment dit aussi. Et pour­tant, ça m’in­ter­roge. En quoi n’est-ce pas de l’in­tel­li­gence juste­ment ? Je ne suis pas certain que […]
Carnet de notes · 21 mars 2023