Terraform est aujourd’hui un outil incontournable pour la gestion d’infrastructure "as code".
Dans cet article, il sera abordé les sujets suivants :
Initialisation d'un projet Terraform
Déclaration du provider Ogo
Ajout des principales datasources Ogo pouvant être nécessaires à la création d'un site
Création d'un site à partir d'une ressource
ogo_shield_siteImportation d'un site existant du dashboard dans la configuration Terraform
Initialisation d'un projet Terraform
Créer un dossier qui contient la configuration Terraform permettant de gérer la configuration des sites :
$ mkdir ogoCréer le fichier de configuration Terraform main.tf avec le contenu suivant :
# Provider
terraform {
required_providers {
ogo = {
source = "ogosecurity/ogo"
version = "~> 0.2"
}
}
}
# Provider configuration
provider "ogo" {
endpoint = "https://api.ogosecurity.com"
email = "your-mail@example.com"
apikey = "your-api-key"
organization = "your-organization-id"
}Cette configuration indique à Terraform d'utiliser le provider Ogo et permet également de déclarer les informations nécessaire pour s'authentifier sur le dashboard Ogo.
Dans la configuration du provider Ogo, il est donc nécessaire d'adapter les informations suivantes :
email: adresse mail utilisé pour s'authentifier sur le dashboardapikey: clé d'API disponible depuis le menu du dashboardMon compte>Mon profil>Authentification>API Keyorganization: code de l'organisation disponible depuis le menu du dashboardMon compte> Monorganisation>Paramètres>Code de l'organisation
Initialiser le projet permettant à Terraform de télécharger le provider Ogo et de préparer l'environnement :
$ terraform initUtilisation des datasources
Maintenant que l'environnement a été initialisé, il peut être utile de déclarer les datasources qui contiennent certains informations qui seront nécessaire pour déclarer un nouveau site, notamment l'UID du cluster sur lequel le nouveau site sera déclaré.
Pour cela, créer un fichier datasources.tf avec le contenu suivant :
data "ogo_shield_clusters" "shield" {}
data "ogo_shield_tlsoptions" "tlsoptions" {}Ce fichier permet maintenant à Terraform de pouvoir accéder aux informations issues du dashboard concernant les clusters et les options TLS.
Exécuter la commande plan de Terraform qui va permettre de valider que l'authentification au près du dashboard fonctionne :
$ terraform planEnsuite, si aucune erreur n'est renvoyée appliquer la configuration avec la commande apply de Terraform pour récupérer les informations relatives aux datasources précédemment déclarées :
$ terraform applyLister les nouvelles datasources à l'aide de la commande :
$ terraform state listPar exemple, pour afficher les informations relatives à vos clusters, utiliser la commande suivante en lui passant en paramètre le nom de la datasource data.ogo_shield_clusters.shield listée dans la commande précédente :
$ terraform state show data.ogo_shield_clusters.shieldDans la sortie de la commande, il est alors possible de récupérer, entre autre, la valeur de l'UID d'un cluster disponible dans l'attribut uid de la data source, qui sera nécessaire pour la création d'un site dans la section suivante.
D'autres datasources existent et peuvent être consultées depuis la documentation officiel du provider Ogo : https://registry.terraform.io/providers/OGOSecurity/ogo/latest/docs
Création d'un site
L'étape suivante permet de provisionner un nouveau site sur le cluster dont l'UID a été récupérer à travers la data source ogo_shield_clusters à l'étape précédente.
Créer le fichier sites.tf avec le contenu suivant :
# Simple example with only required attributes
resource "ogo_shield_site" "foo_example_com" {
domain_name = "foo.example.com"
cluster_uid = "cluster-uid"
origin_server = "195.154.168.43"
}Il est nécessaire d'adapter les éléments suivants dans votre configuration :
Nom de la ressource Terraform
ogo_shield_sitenomméfoo_example_comdans l'exemple ci-dessusdomain_name: nom DNS du site à provisionner sur le cluster Ogocluster_uid: UID du cluster Ogo récupéré à l'étape précédenteorigin_server: Adresse IP ou nom de domaine DNS du serveur origine qui sera utilisé par le Shield Ogo pour joindre votre site.
Vérifier les actions qui seront menées par Terraform suite à la déclaration de notre nouvelle configuration :
$ terraform planSi le plan d'action proposé par Terraform est bien celui attendu, appliquer la nouvelle configuration qui va permettre de provisionner le nouveau site sur le cluster Shield :
$ terraform applyLe nouveau site doit maintenant être provisionné sur le cluster Shield et visible depuis le Dashboard Ogo dans la liste de vos sites consultable depuis le menu Mes sites.
Dans cet exemple, nous avons utilisé une configuration minimale qui contient uniquement les attributs d'un site qui sont strictement nécessaires pour sa création, mais n'importe quel configuration du site peut-être modifiée. Pour cela, se référer à la documentation de la ressource ogo_shield_site officiel du provider Ogo : https://registry.terraform.io/providers/OGOSecurity/ogo/latest/docs/resources/shield_site
Import d'un site dans la configuration Terraform
Cette section détaille la procédure à suivre pour importer dans la configuration de Terraform un site qui aurait créé au préalable dans le Dashboard Ogo. Le but étant de pouvoir ensuite gérer sa configuration directement depuis Terraform sans avoir besoin de se connecter au Dashboard Ogo.
Dans l'exemple suivant, nous allons importé un site bar.exemple.com, déjà existant dans la configuration du Dashboard Ogo. Pour cela, il est nécessaire de déclarer d’abord le prototype vide de la ressource ogo_shield_site dans le fichier de configuration sites.tf de Terraform à la suite des déclarations de sites existantes :
# Simple example with only required attributes
resource "ogo_shield_site" "foo_example_com" {
domain_name = "foo.example.com"
cluster_uid = "cluster-uid"
origin_server = "195.154.168.43"
}
resource "ogo_shield_site" "bar_example_com" {}Exécuter ensuite la commande suivante pour importer le site dans le fichier d'état de Terraform :
$ terraform import "ogo_shield_site.bar_example_com" bar.example.comAfficher la configuration du site qui a été importé par Terraform dans son fichier d'état :
$ terraform state show ogo_shield_site.bar_example_comVous pouvez maintenant mettre à jour le fichier de configuration sites.tf de Terraform en remplaçant le prototype précédemment déclaré par le contenu de la ressourceogo_shield_site.bar_example_com renvoyée par la commande précédente terraform state show et exécuter la commande plan de Terraform pour vérifier que la configuration est bien à jour :
$ terraform planCertains attributs (comme cluster_entrypoint_4, cluster_entrypoint_6, cluster_entrypoint_cdn et status) sont en lecture seule, la commande plan de Terraform les remontera en erreur s'ils sont présents dans votre configuration. Il faudra simplement les retirer de la configuration de la ressource Terraform.