GSP1021
Présentation
Dans cet atelier, vous allez découvrir la commande gcloud beta terraform vet, appelée outil de validation dans la suite de l'atelier. L'outil de validation permet d'appliquer la conformité aux stratégies dans un pipeline CI/CD d'infrastructure. Vous pouvez l'utiliser pour détecter les cas de non-respect des stratégies, et générer des avertissements ou interrompre les déploiements avant qu'ils n'atteignent l'environnement de production.
Dans cet atelier, vous allez apprendre à implémenter une contrainte qui applique une restriction de domaine. Vous testerez cette contrainte et générerez intentionnellement une erreur. Vous modifierez ensuite la contrainte de sorte que votre domaine soit validé.
Objectifs
Au cours de cet atelier, vous allez :
- implémenter une contrainte qui applique une restriction de domaine ;
- tester une contrainte pour générer intentionnellement une erreur de validation ;
- modifier la contrainte pour qu'elle soit validée ;
Prérequis
Pour cet atelier, vous devez déjà avoir utilisé Terraform. Suivez le cours Créer une infrastructure avec Terraform sur Google Cloud pour vous familiariser davantage avec Terraform.
Préparation
Avant de cliquer sur le bouton "Démarrer l'atelier"
Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.
Cet atelier pratique vous permet de suivre les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Des identifiants temporaires vous sont fournis pour vous permettre de vous connecter à Google Cloud le temps de l'atelier.
Pour réaliser cet atelier :
- Vous devez avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome).
Remarque : Ouvrez une fenêtre de navigateur en mode incognito (recommandé) ou de navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
- Vous disposez d'un temps limité. N'oubliez pas qu'une fois l'atelier commencé, vous ne pouvez pas le mettre en pause.
Remarque : Utilisez uniquement le compte de participant pour cet atelier. Si vous utilisez un autre compte Google Cloud, des frais peuvent être facturés à ce compte.
Démarrer l'atelier et se connecter à la console Google Cloud
-
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, une boîte de dialogue s'affiche pour vous permettre de sélectionner un mode de paiement.
Sur la droite, vous trouverez le panneau Préparation et accès à l'atelier, qui contient les éléments suivants :
- Le bouton Ouvrir la console Google Cloud
- Les identifiants temporaires (nom d'utilisateur et mot de passe) que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier, si nécessaire
Notez que le minuteur de l'atelier se trouve en haut de la page et indique le temps restant.
-
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans une fenêtre en navigation privée si vous utilisez Chrome).
L'atelier lance les ressources, puis ouvre la page "Se connecter" dans un nouvel onglet.
Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.
Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
Vous trouverez également le nom d'utilisateur dans le panneau Préparation et accès à l'atelier.
-
Cliquez sur Suivant.
-
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau Préparation et accès à l'atelier.
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. N'utilisez pas les identifiants de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires pourront vous être facturés.
-
Accédez aux pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour accéder aux produits et services Google Cloud, cliquez sur le menu de navigation ou saisissez le nom du service ou du produit dans le champ Recherche.
Activer Cloud Shell
Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud. Cloud Shell vous permet d'accéder via une ligne de commande à vos ressources Google Cloud.
-
Cliquez sur Activer Cloud Shell
en haut de la console Google Cloud.
-
Passez les fenêtres suivantes :
- Accédez à la fenêtre d'informations de Cloud Shell.
- Autorisez Cloud Shell à utiliser vos identifiants pour effectuer des appels d'API Google Cloud.
Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET : . Le résultat contient une ligne qui déclare l'ID_PROJET pour cette session :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- (Facultatif) Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
- Cliquez sur Autoriser.
Résultat :
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (Facultatif) Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Remarque : Pour consulter la documentation complète sur gcloud, dans Google Cloud, accédez au guide de présentation de la gcloud CLI.
Tâche 1 : Valider une contrainte
Pour découvrir comment implémenter une contrainte, vous allez copier une contrainte existante, fournir un scénario de test qui échoue à la validation, puis modifier la contrainte pour qu'elle passe la validation.
Copier la contrainte
- Ouvrez une nouvelle fenêtre Cloud Shell et exécutez la commande suivante pour cloner le dépôt de la bibliothèque de stratégies.
git clone https://github.com/GoogleCloudPlatform/policy-library.git
- Dans l'invite de commande, saisissez la commande suivante pour copier l'exemple de contrainte de restriction de domaine IAM :
cd policy-library/
cp samples/iam_service_accounts_only.yaml policies/constraints
- Examinez la contrainte que vous avez copiée en l'affichant sur le terminal.
cat policies/constraints/iam_service_accounts_only.yaml
Le résultat ressemble à ceci :
# This constraint checks that all IAM policy members are in the
# "gserviceaccount.com" domain.
apiVersion: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2
metadata:
name: service_accounts_only
annotations:
description: Checks that members that have been granted IAM roles belong to allowlisted
domains.
spec:
severity: high
match:
target: # {"$ref":"#/definitions/io.k8s.cli.setters.target"}
- "organizations/**"
parameters:
domains:
- gserviceaccount.com
Notez la section en surbrillance située en bas. Elle indique que seuls les membres du domaine gserviceaccount.com peuvent figurer dans une stratégie IAM.
Tester la contrainte
- Pour vérifier que la stratégie fonctionne comme prévu, vous allez créer un fichier Terraform dans le répertoire actuel.
touch main.tf
-
Dans la barre d'outils Cloud Shell, cliquez sur Ouvrir l'éditeur. Pour passer de Cloud Shell à l'éditeur de code et vice versa, cliquez sur Ouvrir l'éditeur ou Ouvrir le terminal selon les besoins, ou cliquez sur Ouvrir dans une nouvelle fenêtre pour laisser l'éditeur ouvert dans un autre onglet.
-
Ouvrez le fichier policy-library/main.tf et copiez-y le code suivant :
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 3.84"
}
}
}
resource "google_project_iam_binding" "sample_iam_binding" {
project = "<YOUR PROJECT ID>"
role = "roles/viewer"
members = [
"user:<USER>"
]
}
-
Remplacez <YOUR PROJECT ID> par .
-
Remplacez <USER> par .
-
Ensuite, revenez au terminal et exécutez la commande suivante pour initialiser Terraform :
terraform init
- Exécutez la commande suivante pour exporter le plan Terraform. Si vous y êtes invité, cliquez sur Autoriser.
terraform plan -out=test.tfplan
- Convertissez le plan Terraform au format JSON.
terraform show -json ./test.tfplan > ./tfplan.json
- Installez le composant terraform-tools.
sudo apt-get install google-cloud-sdk-terraform-tools
- Saisissez la commande suivante pour vérifier que votre plan Terraform est conforme à vos stratégies :
gcloud beta terraform vet tfplan.json --policy-library=.
Remarque : Vous pouvez ignorer les avertissements concernant la récupération de votre ID de projet.
Étant donné que l'adresse e-mail que vous avez fournie dans la liaison de stratégie IAM n'appartient pas à un compte de service, le plan ne respecte pas la contrainte que vous avez configurée. Le résultat doit se présenter comme suit :
constraint: GCPIAMAllowedPolicyMemberDomainsConstraintV2.service_accounts_only
constraint_config:
api_version: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2
metadata:
annotations:
description: Checks that members that have been granted IAM roles belong to
allowlisted domains.
validation.gcp.forsetisecurity.org/originalName: service_accounts_only
validation.gcp.forsetisecurity.org/yamlpath: policies/constraints/iam_service_accounts_only.yaml
name: service-accounts-only
spec:
match:
target:
- organizations/**
parameters:
domains:
- gserviceaccount.com
severity: high
message: 'IAM policy for //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d
contains member from unexpected domain: user:student-02-0edcb8aed69f@qwiklabs.net'
metadata:
ancestry_path: organizations/616463121992/folders/365352270458/folders/474147567761/folders/125430737939/projects/qwiklabs-gcp-02-ec89de7c9f9d
constraint:
annotations:
description: Checks that members that have been granted IAM roles belong to
allowlisted domains.
validation.gcp.forsetisecurity.org/originalName: service_accounts_only
validation.gcp.forsetisecurity.org/yamlpath: policies/constraints/iam_service_accounts_only.yaml
labels: {}
parameters:
domains:
- gserviceaccount.com
details:
member: user:student-02-0edcb8aed69f@qwiklabs.net
resource: //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d
resource: //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d
severity: high
Dépannage : Si l'erreur "Error 403: The caller does not have permission, forbidden" s'affiche, cela signifie que vous n'avez pas remplacé l'argument project_id dans policy-library/main.tf ou que vous ne disposez pas des autorisations nécessaires pour le projet que vous avez spécifié.
Tâche 2 : Modifier la contrainte
La contrainte fonctionne comme prévu, mais supposons que vous souhaitez la modifier pour autoriser d'autres adresses e-mail de votre domaine.
-
Dans l'éditeur, accédez au fichier policy-library/policies/constraints/iam_service_accounts_only.yaml.
-
Dans la section domains, ajoutez le domaine de messagerie qwiklabs.net à la liste d'autorisation des domaines :
apiVersion: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedPolicyMemberDomainsConstraintV1
metadata:
name: service_accounts_only
spec:
severity: high
match:
target: ["organizations/**"]
parameters:
domains:
- gserviceaccount.com
- qwiklabs.net
- Revenez à la fenêtre Cloud Shell et exportez un nouveau plan Terraform au format JSON.
terraform plan -out=test.tfplan
- Validez à nouveau votre plan Terraform. Aucune violation ne devrait être détectée.
gcloud beta terraform vet tfplan.json --policy-library=.
Résultat :
Validating resources...done.
- Enfin, appliquez le plan Terraform pour que la stratégie IAM attribue un rôle au membre.
terraform apply test.tfplan
Cliquez sur Vérifier ma progression pour valider l'objectif.
Modifier la contrainte
Félicitations !
Dans cet atelier, vous avez implémenté une contrainte qui applique une restriction de domaine. Vous avez testé cette contrainte, laquelle a déclenché une erreur. Vous l'avez ensuite modifiée pour que les domaines que vous définissez puissent passer la validation.
Étapes suivantes et informations supplémentaires
Pour vous familiariser davantage avec l'outil de validation et Terraform, consultez les ressources suivantes :
Formations et certifications Google Cloud
Les formations et certifications Google Cloud vous aident à tirer pleinement parti des technologies Google Cloud. Nos cours portent sur les compétences techniques et les bonnes pratiques à suivre pour être rapidement opérationnel et poursuivre votre apprentissage. Nous proposons des formations pour tous les niveaux, à la demande, en salle et à distance, pour nous adapter aux emplois du temps de chacun. Les certifications vous permettent de valider et de démontrer vos compétences et votre expérience en matière de technologies Google Cloud.
Dernière mise à jour du manuel : 29 novembre 2024
Dernier test de l'atelier : 29 novembre 2024
Copyright 2026 Google LLC. Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.