Ce tutoriel explique comment vérifier que votre infrastructure en tant que code (IaC) respecte vos règles d'administration ou vos détecteurs Security Health Analytics.
Objectifs
- Créez une stratégie de sécurité.
- Déployer la stratégie sur un projet
- Recherchez des cas de non-respect des règles dans un exemple de fichier Terraform.
- Corrigez les cas de non-respect dans le fichier Terraform, puis revérifiez le fichier pour vérifier que le correctif a été corrigé.
Avant de commencer
Configurer les autorisations
-
Assurez-vous que vous disposez du ou des rôles suivants au niveau de l'organisation : Project Creator and Security Posture Admin
Vérifier les rôles
-
Dans la console Google Cloud, accédez à la page IAM.
Accéder à IAM - Sélectionnez l'organisation.
-
Dans la colonne Compte principal, recherchez la ligne qui contient votre adresse e-mail.
Si votre adresse e-mail ne figure pas dans cette colonne, cela signifie que vous n'avez aucun rôle.
- Dans la colonne Rôle de la ligne contenant votre adresse e-mail, vérifiez si la liste des rôles inclut les rôles requis.
Attribuer les rôles
-
Dans la console Google Cloud, accédez à la page IAM.
Accéder à IAM - Sélectionnez l'organisation.
- Cliquez sur Accorder l'accès.
- Dans le champ Nouveaux comptes principaux, saisissez votre adresse e-mail.
- Dans la liste Sélectinoner un rôle, sélectionnez un rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
- Cliquez sur Enregistrer.
-
Configurer Cloud Shell
-
Dans la console Google Cloud, activez Cloud Shell.
En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
- Recherchez l'ID de votre organisation :
gcloud organizations list
Préparer l'environnement
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créez ou sélectionnez un projet Google Cloud.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_ID
par le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_ID
par le nom de votre projet Google Cloud.
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Security posture service and Security Command Center management :
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créez ou sélectionnez un projet Google Cloud.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_ID
par le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_ID
par le nom de votre projet Google Cloud.
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Security posture service and Security Command Center management :
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Copiez l'ID du projet :
gcloud projects describe PROJECT_ID
- Initialisez Terraform :
terraform init
Créer et déployer une stratégie
Dans Cloud Shell, lancez l'éditeur Cloud Shell. Pour lancer l'éditeur, cliquez sur Ouvrir l'éditeur dans la barre d'outils de la fenêtre Cloud Shell.
Créez un fichier YAML nommé
example-standard.yaml
.Collez le code suivant dans votre fichier:
name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard state: ACTIVE policySets: - policies: - constraint: orgPolicyConstraintCustom: customConstraint: actionType: ALLOW condition: "resource.initialNodeCount == 3" description: Set initial node count to be exactly 3. displayName: fixedNodeCount methodTypes: - CREATE name: organizations/ORGANIZATION_ID/customConstraints/custom.fixedNodeCount resourceTypes: - container.googleapis.com/NodePool policyRules: - enforce: true policyId: fixedNodeCount - constraint: securityHealthAnalyticsCustomModule: config: customOutput: {} description: Set MTU for a network to be exactly 1000. predicate: expression: "!(resource.mtu == 1000)" recommendation: Only create networks whose MTU is 1000. resourceSelector: resourceTypes: - compute.googleapis.com/Network severity: HIGH displayName: fixedMTU moduleEnablementState: ENABLED policyId: fixedMTU - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_POLICY_ONLY_DISABLED policyId: bucket_policy_only_disabled - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_LOGGING_DISABLED policyId: bucket_logging_disabled policySetId: policySet1
Remplacez
ORGANIZATION_ID
par votre ID d'organisation.Dans Cloud Shell, créez la stratégie:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
Copiez l'ID de révision de la stratégie généré par la commande.
Déployez la stratégie dans votre projet:
gcloud scc posture-deployments create organizations/ORGANIZATION_ID/locations/global/postureDeployments/example-standard \ --posture-name=organizations/ORGANIZATION_ID/locations/global/postures/example-standard \ --posture-revision-id="POSTURE_REVISION_ID" \ --target-resource=projects/PROJECT_ID
Remplacez les éléments suivants :
ORGANIZATION_ID
: ID de votre organisationPOSTURE REVISION_ID
: ID de révision de la stratégie que vous avez copié.PROJECT_ID
: ID de votre projet.
Créer le fichier Terraform et le valider
Dans Cloud Shell, lancez l'éditeur Cloud Shell.
Créez un fichier Terraform nommé
main.tf
.Collez le code suivant dans votre fichier:
terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 100 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 2 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = false }
Remplacez
PROJECT_ID
par l'ID du projet que vous avez créé.Dans Cloud Shell, créez le fichier de plan Terraform et convertissez-le au format JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Créez le rapport de validation de l'IaC pour
mainplan.json
:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Cette commande renvoie un rapport de validation IaC décrivant les infractions suivantes:
- La valeur
mtu
deexample_network
n'est pas de 1 000. - La valeur de
initial_node_count
pourexample_node_pool
n'est pas de 3. - L'accès uniforme au niveau du bucket n'est pas activé pour
example_bucket
. - La journalisation n'est pas activée sur
example_bucket
.
- La valeur
Résoudre les cas de violation
Dans Cloud Shell, lancez l'éditeur Cloud Shell.
Mettez à jour le fichier
main.tf
en apportant les modifications suivantes:terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 1000 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 3 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = true logging { log_bucket = "my-unique-logging-bucket" // Create a separate bucket for logs log_object_prefix = "tf-logs/" // Optional prefix for better structure } }
Remplacez
PROJECT_ID
par l'ID du projet que vous avez créé.Dans Cloud Shell, créez le fichier de plan Terraform et convertissez-le au format JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Recréez le rapport de validation de l'IaC pour
mainplan.json
:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Supprimez un projet Google Cloud :
gcloud projects delete PROJECT_ID
Étapes suivantes
- Consultez Vérifiez que votre IaC respecte les règles de votre organisation.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.