Skip to content

TERRAFORM REGISTRY PROTOCOL

AWS

Terraform, outil open-source d’IaC (Infrastructure as Code), fonctionne au travers de providers afin d’interagir avec les différents fournisseurs Cloud, SaaS et bien d’autres encore. Terraform utilise, pour ces providers, un protocole particulier et open source, auquel nous allons nous intéresser aujourd’hui. Comment fonctionne-t-il ? Que trouve-t-on derrière ce protocole ?

Dans cet article, nous verrons comment Terraform utilise les Provider au travers de la Terraform public registry, puis les différents types de protocoles de registry utilisables.

Il est possible d’étendre cette méthode pour utiliser les modules Terraform mais le sujet n’est pas abordé ici. Pour plus d’informations sur le sujet, vous pouvez en apprendre plus sur la documentation officielle.

Prérequis

Côté Terraform:

Comment fonctionne Terraform avec la registry ?

Pour fonctionner, Terraform a besoin de récupérer et d’utiliser des providers afin d’interagir avec les plateformes cibles :

(Source)

La récupération de ces providers passe par défaut par la Terraform public registry (que nous nommerons ici simplement Terraform registry), qui est managée par HashiCorp et accessible via internet.

Pour l’utilisateur de Terraform, récupérer le provider est assez trivial et peut s’apparenter à un simple « téléchargement » (au travers de la commande terraform init). En réalité, les actions réalisées par Terraform sont bien plus nombreuses et complexes.

Terraform interagit avec la registry via un protocole particulier qui est défini dans la documentation Terraform.

Pour éviter la lecture de toute la documentation, voici un schéma qui retrace les grandes étapes entre Terraform core et la registry :

Comme vous l’aurez compris, les interactions sont plus nombreuses et plus complexes qu’un simple download de binaire.

Les différentes registry protocol

Il existe plusieurs types de protocoles de registry :

On résume dans un schéma :

A noter que le Network Mirror Protocol est moins complet que le Provider/Module Registry Protocol, mais se fait beaucoup plus facilement.

Authentification à la registry

A l’exception du Provider filesystem mirror, il est possible d’implémenter le Login Protocol dans votre registry afin de n’autoriser certains appels API que si vos utilisateurs sont authentifiés.

Le protocole se base sur OAuth 2.0 et ne supporte que les autorisations de type Code Grant avec certaines limitations comme :

  • Le refresh tokens n’est pas supporté. L’utilisateur devra s’authentifier de nouveau.
  • L’expiration des token n’est pas supportée. 

Au travers de la commande terraform login, l’utilisateur est en capacité de s’authentifier auprès d’un serveur OAuth. La commande supporte notamment le Proof Key for Code Exchange afin de protéger les interceptions de requête. 

Enfin, il est important de noter que l’authentification d’obtention de token se fait côté utilisateur et qu’il faudra ajouter à votre registry un mécanisme de vérification de validité du token sur les API cibles.

Aller plus loin

Nous avons vu notamment comment fonctionne le Protocole Registry et ses variations.

Pour ceux qui veulent aller plus loin, il est possible de mettre en place un Provider Registry sous forme de site web statique et simplement. Sauf exception, si vous implémentez un Login Protocol qui demandera de mettre en place un mécanisme de vérification de validité du token sur les API cibles.

Enfin, pour ceux qui souhaite implémenter le protocol registry, vous pouvez vous baser sur ce repository GitHub.

Author : Mehdi Laruelle, Devoteam Revolve Alumni