Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen PCSE avec Terraform simple — un bloc à la fois, chacun étant lié à un domaine de l'examen. Le même code fonctionne sur OpenTofu.
À la fin de ce labo, vous aurez provisionné, avec Terraform, la base de sécurité PCSE la plus petite et la plus réaliste — une contrainte de politique d'organisation empêchant la création de réseaux par défaut, un trousseau de clés Cloud KMS + une clé de chiffrement gérée par le client avec rotation automatique, un bucket Cloud Storage chiffré par CMK, et un récepteur Cloud Audit Logs acheminant les événements IAM vers un bucket de journalisation dédié. Cinq blocs ; la boucle PCSE prévenir → chiffrer → auditer.
Déposez les extraits dans un seul fichier main.tf, exécutez terraform init, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.roles/orgpolicy.policyAdmin au niveau du projet. La version au niveau de l'organisation de la même contrainte existe mais nécessite le rôle Org Admin.your-project-id dans le bloc du fournisseur.Quasi-gratuit à l'échelle du labo:
~0 $–1 $/mois. Peu coûteux à laisser fonctionner si vous souhaitez étudier les tableaux de bord.
Activez les API Cloud KMS, Cloud Storage, Cloud Logging et Org Policy.
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE
region = "us-central1"
}
locals {
labels = {
project = "certlabpro-pcse"
managed_by = "terraform"
}
}
data "google_project" "current" {}
resource "google_project_service" "cloudkms" {
service = "cloudkms.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "logging" {
service = "logging.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "orgpolicy" {
service = "orgpolicy.googleapis.com"
disable_on_destroy = false
}Le service Org Policy est la primitive de garde-fou de PCSE — définissez les contraintes une seule fois au niveau de l'organisation / du dossier / du projet, et les ressources qui les violent ne pourront jamais être créées. L'examen PCSE teste la distinction contraintes vs IAM : IAM contrôle qui peut agir ; Org Policy contrôle ce qui peut exister.
Nous appliquons compute.skipDefaultNetworkCreation au niveau du projet — lorsqu'un nouveau projet est initialisé, GCP crée normalement un VPC par défaut avec des règles de pare-feu trop permissives. La contrainte empêche cela. C'est la forme canonique PCSE prévenir par défaut.
resource "google_project_organization_policy" "skip_default_network" {
project = data.google_project.current.project_id
constraint = "compute.skipDefaultNetworkCreation"
boolean_policy {
enforced = true
}
depends_on = [google_project_service.orgpolicy]
}Cloud KMS est la primitive CMK de PCSE — des clés de chiffrement gérées par le client pour chaque scénario de chiffrement au repos à travers GCS, BigQuery, les disques Compute Engine, Cloud SQL, Spanner, Secret Manager. L'examen PCSE teste la rotation des CMK (toujours activée par défaut dans CMEK ; la rotation par défaut de 90 jours est le paramètre recommandé) et la séparation du trousseau de clés + de la clé (le trousseau de clés est la limite IAM ; les clés en héritent).
Nous créons un trousseau de clés régional + une clé SYMMETRIC_ENCRYPTION avec une rotation de 90 jours. L'octroi du compte de service Cloud Storage roles/cloudkms.cryptoKeyEncrypterDecrypter est requis avant que le bucket de l'étape 4 puisse utiliser la clé — l'étape 4 inclut cette liaison.
resource "google_kms_key_ring" "main" {
name = "certlabpro-pcse-keyring"
location = "us-central1"
depends_on = [google_project_service.cloudkms]
}
resource "google_kms_crypto_key" "storage_cmk" {
name = "storage-cmk"
key_ring = google_kms_key_ring.main.id
purpose = "ENCRYPT_DECRYPT"
rotation_period = "7776000s" # 90 days
lifecycle {
prevent_destroy = false # lab-only
}
}Modèle de chiffrement au repos recommandé par PCSE : n'utilisez jamais le chiffrement par défaut géré par Google pour les données sensibles ; connectez toujours une CMK. Nous accordons à l'agent de service Cloud Storage (un compte de service spécifique au projet service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com) le rôle roles/cloudkms.cryptoKeyEncrypterDecrypter sur la CMK, puis nous provisionnons un bucket qui référence la clé.
Tout objet écrit dans ce bucket est encapsulé avec une clé de chiffrement de données (DEK), qui est elle-même encapsulée par la CMK. La rotation de la CMK fait pivoter la prochaine DEK ; les objets existants sont rechiffrés lors de la prochaine écriture. L'examen PCSE teste cette forme d'« envelope encryption » (chiffrement par enveloppe).
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_project_service_account" "gcs_account" {}
resource "google_kms_crypto_key_iam_member" "gcs_kms" {
crypto_key_id = google_kms_crypto_key.storage_cmk.id
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
member = "serviceAccount:${google_storage_project_service_account.gcs_account.email_address}"
}
resource "google_storage_bucket" "secure" {
name = "certlabpro-pcse-secure-${random_id.suffix.hex}"
location = "us-central1"
uniform_bucket_level_access = true
force_destroy = true # lab-only
encryption {
default_kms_key_name = google_kms_crypto_key.storage_cmk.id
}
labels = local.labels
depends_on = [google_kms_crypto_key_iam_member.gcs_kms]
}Rétention des journaux d'audit recommandée par PCSE : les buckets de journaux par défaut _Required et _Default ont une rétention de 30 jours. Les événements d'audit sensibles (octrois/révocations IAM, modifications de politiques) nécessitent une durée beaucoup plus longue — souvent 7 ans pour la conformité SOX / HIPAA / FedRAMP.
Nous créons un bucket de journalisation dédié avec une rétention de 400 jours + un récepteur de journaux qui achemine les journaux d'audit liés aux politiques IAM vers ce bucket. L'indicateur unique_writer_identity = true génère une identité de service par récepteur (préserve la chaîne d'audit — vous pouvez lui accorder un accès en écriture seule sans exposer votre identité d'utilisateur).
Avec cinq blocs en place (fournisseur + API, garde-fou Org Policy, trousseau de clés KMS + CMK, bucket CMK, récepteur de journaux d'audit), la base PCSE prévenir → chiffrer → auditer est formée. Les déploiements PCSE réels superposent Security Command Center (SCC) Premium, les périmètres VPC Service Controls, Binary Authorization, Cloud Armor WAF, Identity-Aware Proxy, Workforce Identity Federation et Sensitive Data Protection (DLP) sur cette base.
resource "google_logging_project_bucket_config" "audit" {
project = data.google_project.current.project_id
location = "global"
retention_days = 400
bucket_id = "audit-events"
depends_on = [google_project_service.logging]
}
resource "google_logging_project_sink" "audit_sink" {
name = "certlabpro-pcse-audit-sink"
destination = "logging.googleapis.com/${google_logging_project_bucket_config.audit.id}"
filter = "logName:\"cloudaudit.googleapis.com\" AND (protoPayload.serviceName=\"iam.googleapis.com\" OR protoPayload.serviceName=\"cloudkms.googleapis.com\")"
unique_writer_identity = true
}
# Required so the sink can write to the bucket.
resource "google_project_iam_member" "audit_sink_writer" {
project = data.google_project.current.project_id
role = "roles/logging.bucketWriter"
member = google_logging_project_sink.audit_sink.writer_identity
}terraform destroy déconstruit tout. La clé KMS est planifiée pour la destruction (période de grâce de 24 heures — les clés Cloud KMS ne sont jamais supprimées immédiatement). Le bucket chiffré par CMK est détruit (force_destroy = true) ; les objets existants sont rechiffrés lors de la suppression — Cloud Storage gère cela de manière transparente. La contrainte de politique d'organisation est supprimée ; la création de réseaux par défaut est à nouveau autorisée sur le projet. Le récepteur de journaux d'audit + le bucket sont détruits proprement.
PCSE couvre de nombreuses surfaces de sécurité que ce labo ne peut pas inclure — Security Command Center (SCC Premium / Enterprise — la surface unifiée de détection des menaces + gestion de la posture), VPC Service Controls (périmètres d'exfiltration de données autour de BigQuery / Storage / etc.), Cloud Armor (WAF + DDoS + gestion des bots), Identity-Aware Proxy (IAP — authentification sans confiance au niveau des applications), Cloud HSM (KMS basé sur du matériel FIPS-140-2 de niveau 3), Cloud External Key Manager (EKM — clés détenues en dehors de Google), Confidential VMs / Confidential GKE Nodes (chiffrement de la mémoire), Binary Authorization (contrôle d'attestation d'image), Container Threat Detection / Web App and API Protection (WAAP), Sensitive Data Protection (DLP — découverte + masquage de PII), Workforce Identity Federation, Workload Identity Federation, Access Context Manager (politiques d'accès contextuel), et toute la surface acquise par Mandiant (veille sur les menaces, gestion de la surface d'attaque, analyse des violations).
Nous nous en tenons aux primitives Org Policy + KMS + CMK Storage + Audit Logs car elles constituent la fondation PCSE sur laquelle chaque contrôle plus avancé se compose. SCC lit les mêmes journaux d'audit. Les périmètres VPC-SC encapsulent les mêmes buckets. Cloud HSM remplace KMS comme backend de clé. IAP se superpose aux mêmes identités IAM. Maîtrisez le substrat ; superposez les contrôles spécialisés.
Pour une couverture conceptuelle service par service, consultez les sections Parcourir, Guide et Editorial de cette page de certification.