Le processus de déploiement de la zone de destination comprend des étapes. À chaque étape, vous devez ajouter certaines variables au fichier terraform.tfvars. Une fois une étape terminée, Terraform écrit un fichier STAGE_NAME-tfvar.auto.tfvars.json dans le bucket Cloud Storage créé lors de l'étape initiale. Les étapes suivantes utilisent la Google Cloud CLI pour copier les fichiers et un fichier de fournisseur qui emprunte l'identité d'un compte de service spécifique à l'étape dans le nouveau dossier d'étape.
Selon le nombre de locataires, le déploiement d'un nouvel environnement prend environ une heure.
Prérequis
Effectuez les tâches suivantes avant de déployer Stellar Engine.
Configurer Google Cloud
Pour configurer Google Cloud :
Sélectionnez une organisation Google Cloud . Si vous créez une organisation, connectez-vous à la console d'administration Google au moins une fois.
Configurez plusieurs administrateurs pour implémenter la séparation des tâches. Dans un environnement de test, un utilisateur peut disposer de rôles d'administrateur pour toutes les ressources. Toutefois, dans un environnement de production, vous avez besoin de plusieurs administrateurs. Pour en savoir plus, consultez Configurer votre ressource d'organisation.
Activez la validation en deux étapes pour tous les comptes privilégiés.
Désactivez Cloud Shell. Cloud Shell n'est pas compatible avec les environnements IL4 ou IL5 et doit être désactivé par un administrateur Google Workspace.
Si vous n'avez pas de projet, créez un projet bootstrap.
Effectuez les tâches suivantes dans le projet d'amorçage :
Activez la facturation. Pour obtenir des instructions, consultez Vérifier l'état de facturation de vos projets.
Activez l'API Cloud Monitoring.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.
Vérifiez que votre compte utilisateur est un super-administrateur.
Si votre organisation ne dispose pas d'un système de classification des données, créez-en un.
Attribuer des rôles
Attribuez les rôles Identity and Access Management suivants au compte utilisateur qui déploie Stellar Engine.
-
Assurez-vous de disposer du ou des rôles suivants au niveau de l'organisation : Administrateur Access Transparency, Administrateur Assured Workloads, Administrateur de compte de facturation, Administrateur Logging, Administrateur de l'organisation, Administrateur de règles de l'organisation, Administrateur de rôles de l'organisation, Propriétaire, Créateur de projet, Administrateur de compte de service, Créateur de jetons du compte de service, Administrateur de tags
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 toutes les lignes qui vous identifient ou identifient un groupe dont vous faites partie. Pour savoir à quels groupes vous appartenez, contactez votre administrateur.
- Pour toutes les lignes qui vous spécifient ou vous incluent, consultez la colonne Rôle pour vous assurer que la liste 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 identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.
- Cliquez sur Sélectionner un rôle, puis recherchez le rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
- Cliquez sur Enregistrer.
-
Si vous commencez avec une nouvelle organisation, vous pouvez exécuter le script suivant situé dans le dossier fast/stages-aw/0-bootstrap pour appliquer les rôles :
./setIAM.sh EMAIL_ADDRESS ORGANIZATION_ID
Remplacez les éléments suivants :
EMAIL_ADDRESS: adresse e-mail de votre compte utilisateur.ORGANIZATION_ID: ID de votre organisation.
Ce script ajoute tous les rôles, à l'exception de ceux d'administrateur de compte de facturation et de super-administrateur.
Ajouter des groupes et configurer des services
Ajoutez les groupes suivants, comme décrit dans la section 2. Utilisateurs et groupes :
gcp-billing-admins@DOMAINgcp-developers@DOMAINgcp-devops@DOMAINgcp-hybrid-connectivity-admins@DOMAINgcp-logging-monitoring-admins@DOMAINgcp-logging-monitoring-viewers@DOMAINgcp-organization-admins@DOMAINgcp-vpc-network-admins@DOMAINgcp-security-admins@DOMAIN
Remplacez
DOMAINpar votre nom de domaine complet.Si vous y êtes invité, ignorez l'étape du fournisseur d'identité.
Google peut modifier les noms de groupes par défaut. Vous pouvez créer manuellement un groupe s'il ne figure pas dans le guide de configuration.
Activez les API Assured Workloads, BigQuery, Cloud Billing, Cloud Logging, Cloud KMS, IAM, Pub/Sub, Resource Manager, Service Account Credentials, Service Usage et Service de règles d'administration.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.Si votre quota est inférieur à 13 projets, accédez à Projet Google Cloud Platform/API : Demander une augmentation du quota de facturation pour demander 13 projets. Pour en savoir plus, consultez Afficher et gérer les quotas.
Vous pouvez également utiliser le script fast/stages-aw/0-bootstrap/enableServices.sh pour activer les services.
Configurer votre environnement local
Pour configurer votre environnement local, procédez comme suit :
- Clonez le dépôt GitHub Stellar Engine.
- Installez le SDK Google Cloud.
- Mettez à jour votre Terraform local vers la version 1.8.1 ou ultérieure.
- Installez le binaire jq.
Authentifiez-vous et définissez le projet bootstrap comme projet actif :
gcloud auth login gcloud config set project BOOTSTRAP_PROJECT_ID gcloud auth application-default login
Modifier des modules
Dans la plupart des cas, vous pouvez utiliser le dépôt sans le modifier. Si vous devez modifier un module, copiez-le entièrement et utilisez la convention d'attribution de noms <module-se> pour éviter les conflits de fusion lorsque des mises à jour périodiques sont extraites du dépôt Cloud Foundation Fabric.
Exécuter l'étape 0 : Amorçage
L'étape 0 aligne les parties existantes du réseau avec l'état Terraform. L'étape 0 crée les comptes de service et les projets d'amorçage IaC initiaux. L'étape 0 est conçue pour passer du projet initial de l'utilisateur à un nouveau projet principal et migrer l'état Terraform.
Accédez à
fast/stages-aw/0-bootstrap.Copiez le fichier
terraform.tfvars.sample:cp terraform.tfvars.sample terraform.tfvarsCopiez le fichier
providers.tf.tmpdans le fichier0-bootstrap-providers.tf:cp providers.tf.tmp 0-bootstrap-providers.tfMettez à jour les informations dans
fast/stages-aw/0-bootstrap/terraform.tfvars:billing_account = { id = "BILLING_ACCOUNT_ID" } regions = { primary = "REGION" } organization = { domain = "DOMAIN" id = "ORGANIZATION_ID" customer_id = "CUSTOMER_ID" } outputs_location = "~/fast-config" prefix = "PREFIX" log_sinks = { audit-logs = { filter = "logName:\"/logs/cloudaudit.googleapis.com%2Factivity\" OR logName:\"/logs/cloudaudit.googleapis.com%2Fsystem_event\" OR protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.TransparencyLog\"" type = "logging" } vpc-sc = { filter = "protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata\"" type = "logging" } workspace-audit-logs = { filter = "logName:\"/logs/cloudaudit.googleapis.com%2Fdata_access\" and protoPayload.serviceName:\"login.googleapis.com\"" type = "logging" } empty-audit-logs = { filter = "" type = "logging" } } org_policies_config = { constraints = { "ALLOWED_POLICY_MEMBER_DOMAINS" = [] } } fast_features = { envs = true } assured_workloads = { regime = "COMPLIANCE_REGIME" location = "LOCATION" } bootstrap_project = "BOOTSTRAP_PROJECT_ID" alert_email = "ALERT_EMAIL"Remplacez les éléments suivants :
BILLING_ACCOUNT_ID: compte de facturation à utiliser pour le déploiement des environnements. Pour trouver les informations sur le compte de facturation, consultez la console Google Cloud .REGION: région principale dans laquelle déployer les ressources. La valeur par défaut estus-east4pour IL5 et FedRAMP.Pour ajouter une région secondaire dans laquelle déployer des ressources, ajoutez
secondary=secondary.DOMAIN: nom de domaine complet. Pour afficher le nom de domaine complet, exécutezgcloud organizations list.ORGANIZATION: ID de l'organisationGoogle Cloud . Pour afficher l'ID de l'organisation, exécutezgcloud organizations list.CUSTOMER_ID: ID client de l'annuaire Google Workspace. Pour afficher l'ID, exécutezgcloud organizations list.PREFIX: préfixe à ajouter aux noms des projets et des ressources déployés. Le nom du projet doit être unique au niveau mondial et le préfixe ne doit pas comporter plus de six caractères. Une erreur 409 se produit si le nom du projet n'est pas unique.ALLOWED_POLICY_MEMBER_DOMAINS: Si nécessaire, ajoutez d'autres ID client. Pour en savoir plus, consultez Restreindre les identités avec le partage limité au domaine.COMPLIANCE_REGIME: Régime de conformité pour cet environnement, à savoirIL4,IL5,FEDRAMP_HIGHouCOMPLIANCE_REGIME_UNSPECIFIED. Si vous ne souhaitez pas utiliser Assured Workloads, définissez cette valeur surCOMPLIANCE_REGIME_UNSPECIFIED.LOCATION: région des États-Unis dans laquelle déployer les ressources. Les régions doubles telles queNAM9ou les continents ne sont pas acceptés.BOOTSTRAP_PROJECT_ID: ID du projet d'amorçage que vous avez créé dans Configurer Google Cloud.ALERT_EMAIL: adresse e-mail à laquelle envoyer les notifications d'alerte de journalisation.
Exécutez
terraform init.Exécutez
terraform apply:terraform apply -var bootstrap_user=$(gcloud config list --format 'value(core.account)')Saisissez
yeslorsque vous y êtes invité.Basculez vers votre nouveau projet :
gcloud config set project PREFIX-prod-iac-core-0Copiez le nouveau fichier de fournisseurs Terraform locaux :
gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/0-bootstrap-providers.tf ./Migrez l'état du local vers le distant :
terraform init --migrate-stateSaisissez
yeslorsque vous y êtes invité.Exécutez
./import.sh.Exécutez
terraform applyune fois de plus. Saisissezyeslorsque vous y êtes invité.
Étape 1 de l'exécution : gestion des ressources
L'étape 1 crée les différents dossiers, projets et comptes de service au niveau de l'organisation qui sont utilisés pour les étapes suivantes. Pour créer l'environnement, vous devez mettre à jour le fichier terraform.tfvars dans fast/stages-aw/1-resman afin d'inclure une variable tenants. Chaque locataire (par exemple, une agence fédérale spécifique ou un groupe de développement interne) dispose de sa propre limite dédiée et isolée pour exécuter ses charges de travail. Chaque locataire hérite des contrôles de sécurité centralisés, du périmètre réseau, des garde-fous de stratégie et des récepteurs de journaux d'audit créés aux étapes 0 et 2.
Si vous utilisez un compte de facturation externe, consultez Configurer la facturation lorsque vous utilisez des comptes de facturation externes.
Accédez à
fast/stages-aw/1-resman.Copiez le fichier
terraform.tfvars.sample:cp terraform.tfvars.sample terraform.tfvarsMettez à jour
terraform.tfvarscomme indiqué ci-dessous :tenants = { ten-1 = { admin_principal = "group:gcp-devops@DOMAIN" descriptive_name = "TENANT_ONE_NAME" locations = { gcs = "REGION" kms = "REGION" } }, ten-2 = { admin_principal = "group:gcp-devops@DOMAIN" descriptive_name = "TENANT_TWO_NAME" locations = { gcs = "REGION" kms = "REGION" } } } fast_features = { envs = true } envs_folders = { Prod = { admin = "gcp-organization-admins@DOMAIN" }, Int = { admin = "gcp-organization-admins@DOMAIN" }, Test = { admin = "gcp-organization-admins@DOMAIN" } }Remplacez les éléments suivants :
DOMAIN: nom de domaine complet principal. Pour afficher le nom de domaine complet, exécutezgcloud organizations list.TENANT_ONE_NAME: nom du premier projet de locataire déployé. Utilisez six caractères au maximum.REGION: région principale dans laquelle déployer les ressources. La valeur par défaut estus-east4pour IL5 et FedRAMP.TENANT_TWO_NAME: nom du deuxième projet locataire déployé. Utilisez six caractères au maximum.
Ajoutez autant de définitions de locataires que nécessaire.
Copiez les fichiers
tfvarsdepuis Cloud Storage :gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/1-resman-providers.tf ./ && gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./Exécutez
terraform init.Exécutez
terraform apply. Saisissezyeslorsque vous y êtes invité.
Exécuter l'étape 2 : création du réseau
L'étape 2 comprend deux options de mise en réseau : une pour FedRAMP High et une pour IL4 ou IL5.
Configurer la mise en réseau pour FedRAMP (niveau d'impact élevé)
Si vous utilisez un compte de facturation externe, consultez Configurer la facturation lorsque vous utilisez des comptes de facturation externes.
Accédez à
fast/stages-aw/2-networking-a-fedramp-high.Copiez les fichiers tfvars du fournisseur et globaux depuis les buckets Cloud Storage :
gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/2-networking-providers.tf ./ && \ gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && \ gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && \ gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./Copiez le fichier
terraform.tfvars.sample:cp terraform.tfvars.sample terraform.tfvarsDans le fichier
terraform.tfvars, mettez à jour les sous-réseaux personnalisés, les sous-réseaux de proxy, les règles de pare-feu, les CIDR nommés et les règles de stratégie de réponse DNS.Exécutez
terraform init.Exécutez
terraform apply. Saisissezyeslorsque vous y êtes invité.
Configurer la mise en réseau pour IL4 ou IL5
Cette étape déploie une paire de pare-feu nouvelle génération (NGFW) Palo Alto VM-Series dans le compte réseau. Les NGFW utilisent l'image de déploiement BYOL (Bring Your Own License, apportez votre propre licence) et vous obligent à utiliser la console Palo Alto pour importer un code de VM et les enregistrer. Pour obtenir d'autres instructions, consultez le fichier README dans le dossier de l'étape 2-networking-b-il5-ngfw.
Si vous utilisez un compte de facturation externe, consultez Configurer la facturation lorsque vous utilisez des comptes de facturation externes.
Accédez à
fast/stages-aw/2-networking-b-il5-ngfw.Copiez les fichiers tfvars du fournisseur et globaux depuis les buckets Cloud Storage :
gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/2-networking-providers.tf ./ && \ gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && \ gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && \ gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./Copiez le fichier
terraform.tfvars.sample:cp terraform.tfvars.sample terraform.tfvarsDans le fichier
terraform.tfvars, mettez à jour les sous-réseaux personnalisés (y compris mgmt), les sous-réseaux de proxy, les règles de pare-feu, les CIDR nommés et les règles de stratégie de réponse DNS.Exécutez
terraform init.Exécutez
terraform apply. Saisissezyeslorsque vous y êtes invité.Si vous recevez un message d'erreur indiquant qu'un compte de service ou Cloud Key Management Service n'existe pas, cliquez sur Paramètres dans le compte de stockage
PREFIX-net-vdss-hostde la console. Le compte de service est généré.
Exécuter l'étape 3 : configurer le compte de sécurité et d'audit
L'étape 3 configure les projets de sécurité et d'audit. Le projet de sécurité (prod-sec-core-0) contient Cloud KMS et peut contenir Secret Manager. Au niveau IL5, CMEK est activée par défaut pour Compute Engine, Google Kubernetes Engine (GKE), Cloud Storage et Cloud SQL. Les contraintes de règles d'administration suivantes sont appliquées :
gcp.restrictNonCmekServices:denied_values: "compute.googleapis.com"denied_values: "container.googleapis.com"denied_values: "storage.googleapis.com"denied_values: "sqladmin.googleapis.com"
gcp.restrictCmekCryptoKeyProjects:gcp.restrictCmekCryptoKeyProjectsinclut une liste des projets pouvant utiliser CMEK.
Dans le projet prod-sec-core-0, les éléments suivants sont configurés :
- Les administrateurs restreints Cloud KMS se voient attribuer le rôle d'administrateur restreint afin de pouvoir accorder des autorisations de déchiffrement à d'autres services.
- Des trousseaux de clés Cloud KMS sont provisionnés dans différents emplacements. Les emplacements du trousseau de clés doivent correspondre à ceux des services. Par exemple, un trousseau de clés multirégional ne peut pas être utilisé dans un bucket de stockage d'une seule région.
Le projet d'audit contient un bucket de journaux d'audit.
Les administrateurs de la sécurité sont responsables du projet de sécurité, et les auditeurs sont responsables du projet d'audit.
Si vous utilisez un compte de facturation externe, consultez Configurer la facturation lorsque vous utilisez des comptes de facturation externes.
Accédez à
fast/stages-aw/3-security.Copiez les fichiers de configuration à partir des buckets Cloud Storage :
gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/3-security-providers.tf ./ && gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./Exécutez
terraform init.Exécutez
terraform apply. Saisissezyeslorsque vous y êtes invité.Si vous rencontrez un problème avec les comptes de service, réexécutez
terraform apply.Exécutez
./sa_lockdown.shpour désactiver les comptes de service que vous avez utilisés lors du déploiement.
Configurer la facturation lorsque vous utilisez des comptes de facturation externes
Si vous utilisez un compte de facturation externe, vous devez ajouter le rôle "Administrateur de compte de facturation" aux comptes de service suivants :
PREFIX-prod-resman-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com: ce compte est créé à l'étape 0.PREFIX-prod-resman-net-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com: ce compte de service est créé à l'étape 1.PREFIX-security-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com: ce compte de service est créé à l'étape 2.
Pour ajouter le rôle à ces comptes de service, suivez les instructions Accéder au panneau "Autorisations" pour un compte Cloud Billing et Mettre à jour les rôles et les comptes principaux dans le panneau "Autorisations".
Modifier des projets locataires
Procédez comme suit lorsque vous ajoutez ou supprimez des projets locataires pour un déploiement Stellar Engine existant.
Authentifiez-vous et définissez le projet actif :
gcloud auth login gcloud config set project PREFIX-prod-iac-core-0 gcloud auth application-default loginActivez les comptes de service pour les étapes :
Accédez à
fast/stages-aw/3-security.Exécutez
./sa_lockdown.sh --enable.
Appliquer l'étape 1 :
Accédez à
fast/stages-aw/1-resman.Mettez à jour les informations dans
terraform.tfvarsen fonction de vos nouvelles exigences.Exécutez
terraform init.Exécutez
terraform apply. Saisissezyeslorsque vous y êtes invité.
Appliquer l'étape 2 :
Remplacez le répertoire par l'un des dossiers réseau suivants :
Copiez le fichier tfvars
1-resmanà partir du bucket Cloud Storage :
gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./Exécutez
terraform init.Exécutez
terraform apply. Saisissezyeslorsque vous y êtes invité.
Désactivez les comptes de service pour les étapes :
Accédez à
fast/stages-aw/3-security.Exécutez
./sa_lockdown.sh.
Dépannage
Cette section décrit certaines erreurs courantes et les solutions correspondantes.
Erreur "BigQuery inutilisable" à l'étape 1
Si vous obtenez un message d'erreur indiquant que bigquery.googleapis.com n'est pas utilisable dans Assured Workloads, procédez comme suit :
Dans la console, accédez à la page Assured Workloads.
Sélectionnez le dossier
StellarEngine-COMPLIANCE_REGIMEet le dossier "Mise en réseau", le cas échéant.Cliquez sur Vérifier les mises à jour disponibles.
Accédez à Services autorisés.
Cliquez sur Autoriser les services pour ajouter les API BigQuery.
Si vous y êtes invité, cliquez sur Oui pour confirmer votre choix.
Patientez environ deux minutes, puis réexécutez
terraform apply:terraform apply -var bootstrap_user=$(gcloud config list --format 'value(core.account)')Saisissez
yeslorsque vous y êtes invité.
Votre projet bootstrap perd l'accès à votre compte de facturation
Si votre projet d'amorçage perd l'accès à votre compte de facturation, réactivez la facturation pour votre projet d'amorçage.
Erreurs de clé Cloud KMS
Si des erreurs de clé se produisent lors du processus de compilation, vous devrez peut-être activer manuellement les clés. Pour obtenir des instructions, consultez Activer une version de clé.
Si vous recevez ces erreurs, attendez environ une minute, puis réexécutez terraform apply.
Les liens symboliques ne fonctionnent pas sur les ordinateurs Windows
Sur un ordinateur Windows, il est possible que les liens symboliques ne fonctionnent pas. Vous devrez peut-être copier manuellement certains fichiers, en particulier psc.tf et log-metric-alerts.tf, lors de l'étape 2.
Problèmes de facturation ou de quota
Si vous rencontrez des problèmes de facturation ou de quota, vérifiez que votre projet de quota est défini. Pour le définir, exécutez la commande suivante :
gcloud auth application-default set-quota-project PREFIX-prod-iac-core-0
Vous pouvez également utiliser un autre projet.
Étapes suivantes
Pour en savoir plus sur la configuration de la sécurité, consultez Normes de sécurité de Gemini.
Intégrez une solution SIEM telle que Google Security Operations pour surveiller les ressources. Segmentez votre SIEM dans un projet Google Cloud distinct et sur un VPC distinct de celui où il collecte les données.