4.6 KiB
TP : Gestion des Identités (IAM) et Accès SSH
Dans cette partie, vous allez configurer les accès pour que Terraform puisse interagir avec le projet et pour que vous puissiez vous connecter aux futures machines virtuelles.
Objectifs
- Créer une identité machine (Service Account).
- Lui donner des droits sur le projet.
- Configurer votre propre clé SSH via le service OS Login de GCP.
Étape 1 : Créer l'identité machine
Objectif : Créer un compte de service (Service Account) qui sera utilisé par nos scripts d'automatisation.
- Ressource à utiliser :
google_service_account - Consignes :
- Donnez-lui l'ID
terraform. - Ajoutez un
display_nameexplicite pour qu'on le reconnaisse dans la console GCP.
- Donnez-lui l'ID
Étape 2 : Générer une clé d'accès
Objectif : Pour utiliser ce compte de service depuis l'extérieur (ou via Terraform), nous avons besoin d'une clé.
- Ressource à utiliser :
google_service_account_key - Consignes :
- Vous devez lier cette ressource au compte de service créé à l'étape 1 via son attribut
name(ex:google_service_account.votre_nom.name). - Définissez le type de clé publique sur
"TYPE_X509_PEM_FILE".
- Vous devez lier cette ressource au compte de service créé à l'étape 1 via son attribut
Étape 3 : Donner des droits (IAM)
Objectif : Un compte de service naît sans aucun droit. Vous devez lui donner le rôle de "Viewer" sur le projet pour qu'il puisse lire les ressources.
- Ressource à utiliser :
google_project_iam_binding - Consignes :
- Project : Utilisez votre variable
var.project_id. - Role : Le rôle cible est
"roles/viewer". - Members : C'est une liste. Attention à la syntaxe spécifique GCP pour désigner un membre :
"serviceAccount:...". Vous devez concaténer ce préfixe avec l'email du service account créé à l'étape 1 (.email).
- Project : Utilisez votre variable
Étape 4 : Récupérer votre identité
Objectif : Terraform doit savoir "qui" lance le script actuellement pour associer la clé SSH à la bonne personne.
- Data Source à utiliser :
data "google_client_openid_userinfo" - Consignes :
- Déclarez simplement ce bloc
dataavec le nomme. Il n'a pas besoin d'arguments à l'intérieur. Il servira juste à récupérer votre email dynamiquement.
- Déclarez simplement ce bloc
Étape 5 : Ajouter votre clé SSH (OS Login)
Objectif : Uploader votre clé publique SSH locale vers GCP pour permettre la connexion aux VMs sans gestion manuelle.
- Ressource à utiliser :
google_os_login_ssh_public_key - Consignes :
- User : Utilisez l'email récupéré grâce au data source de l'étape 4 (
.email). - Key : Vous devez lire le contenu de votre fichier de clé publique locale.
- Fonction Terraform : Utilisez la fonction
file("chemin/vers/la/clé"). - Chemin recommandé :
~/.ssh/id_ed25519.pub.
- User : Utilisez l'email récupéré grâce au data source de l'étape 4 (
Attention : Vérifiez impérativement que vous avez bien généré une clé SSH sur votre poste local avant de lancer le
terraform apply. Sinon, Terraform ne trouvera pas le fichier et plantera.
Résumé des liens entre ressources
Assurez-vous que vos ressources se référencent correctement :
- La Clé référencie le Service Account.
- L'IAM Binding référencie le Service Account.
- L'OS Login référencie le Data User Info.
Voici la suite du document Markdown (MD) à ajouter à la suite de l'étape 5.
Étape 6 : Exposer les résultats (Outputs)
Objectif : Une fois le déploiement terminé, Terraform masque par défaut certaines informations. Nous devons définir explicitement quelles valeurs nous voulons voir ou récupérer (notamment pour les utiliser dans d'autres scripts).
- Fichier à utiliser :
outputs.tf(c'est une bonne pratique de séparer les outputs dumain.tf).
Consigne A : L'email du Service Account
Nous aurons besoin de connaître l'adresse email complète générée par Google pour ce compte.
- Créez un output nommé
service_account_email. - Dans la valeur (
value), référencez l'attribut.emailde la ressource créée à l'Étape 1.
Consigne B : La Clé Privée (Attention Sécurité)
Nous devons récupérer la clé privée générée pour pouvoir authentifier des applications externes.
- Créez un output nommé
service_account_key. - Dans la valeur, référencez l'attribut
.private_keyde la ressource créée à l'Étape 2. - Important : Terraform refusera d'afficher cette valeur ou l'affichera en clair dans vos logs si vous ne faites pas attention. Vous devez ajouter l'argument suivant dans ce bloc output pour masquer la valeur dans le terminal :
sensitive = true