Étape 1 : Préparez votre projet

Cette page décrit les étapes à suivre pour préparer votre projet Google Cloud avant de déployer Manufacturing Data Engine (MDE) à l'aide de Terraform.

Présentation

MDE est fourni sous forme de solution packagée. Un script Terraform déploie tous les composants requis et le code d'intégration dans votre projet Google Cloud . Vous disposez ainsi d'un maximum de flexibilité pour modifier et étendre l'architecture selon vos besoins.

Le script de déploiement crée et configure automatiquement la solution, si les conditions préalables sont remplies (par exemple, un projet Google Cloud créé et des autorisations définies). Certains clients peuvent avoir mis en place des restrictions Google Cloud importantes et personnalisées. Dans ce cas, il faudra peut-être faire appel à un partenaire d'intégration de systèmes ou à un consultant Google Cloud pour les aider à déployer la solution.

1. Préparer votre environnement client

Votre environnement client doit disposer des outils CLI suivants dans leur version la plus récente :

2. Préparer votre projet Google Cloud

Assurez-vous que votre projet Google Cloud présente les caractéristiques suivantes :

  • Un compte de facturation Cloud actif.
  • Il fait partie d'une organisation disposant d'un compte Cloud Identity ou Workspace actif.

  • Définissez le projet par défaut sur le projet de déploiement MDE à l'aide de la commande suivante :

    gcloud config set project PROJECT_ID
    

    Remplacez les éléments suivants :

    • PROJECT_ID par l'ID du projet de déploiement MDE.

3. Créer des comptes de service

Vous aurez besoin de deux comptes de service différents dans votre projet Google Cloud  :

  • mde-df-worker@PROJECT_ID.iam.gserviceaccount.com
  • mde-tf@PROJECT_ID.iam.gserviceaccount.com.

Remplacez les éléments suivants :

  • PROJECT_ID par l'ID du projet de déploiement MDE.

Un utilisateur de votre organisation disposant du rôle roles/iam.serviceAccountCreator peut créer les comptes de service mde-df-worker et mde-tf à l'aide des commandes suivantes :

gcloud iam service-accounts create mde-df-worker \
--description="Manufacturing Data Engine Dataflow Worker Service Account" \
--display-name="Manufacturing Data Engine Dataflow Worker Service Account"

gcloud iam service-accounts create mde-tf \
--description="Manufacturing Data Engine Terraform Service Account" \
--display-name="Manufacturing Data Engine Terraform Service Account"

4. Attribuer des rôles au compte de service mde-tf

Attribuez les rôles suivants au compte de service mde-tf utilisé par Terraform pour les déploiements :

  • roles/bigquery.admin
  • roles/bigtable.admin
  • roles/cloudsql.admin
  • roles/compute.instanceAdmin
  • roles/compute.loadBalancerAdmin
  • roles/compute.networkAdmin
  • roles/compute.securityAdmin
  • roles/container.admin
  • roles/container.developer
  • roles/dataflow.admin
  • roles/dns.admin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/pubsub.admin
  • roles/resourcemanager.projectIamAdmin
  • roles/secretmanager.admin
  • roles/secretmanager.secretVersionManager
  • roles/serviceusage.serviceUsageAdmin
  • roles/storage.admin
  • roles/monitoring.admin
  • roles/redis.admin
  • roles/file.editor

Un utilisateur disposant du rôle roles/iam.securityAdmin ou d'autorisations équivalentes peut accorder les rôles requis au compte de service mde-tf à l'aide des commandes suivantes :

export PROJECT_ID=$(gcloud config get-value project)
export SA_TERRAFORM="mde-tf"

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/bigquery.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/dataflow.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/bigtable.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/cloudsql.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.instanceAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.loadBalancerAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.networkAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.securityAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/container.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/container.developer'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/dns.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/iam.serviceAccountAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/iam.serviceAccountUser'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/pubsub.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/resourcemanager.projectIamAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/secretmanager.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/secretmanager.secretVersionManager'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/serviceusage.serviceUsageAdmin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/storage.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/monitoring.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/redis.admin'

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/file.editor'

5. Emprunter l'identité du compte de service mde-tf

Autorisez votre compte utilisateur à emprunter l'identité du compte de service mde-tf si vous disposez du rôle roles/iam.serviceAccountTokenCreator.

Un utilisateur disposant du rôle roles/iam.serviceAccountAdmin ou d'autorisations équivalentes peut attribuer ce rôle à votre compte utilisateur sur le compte de service mde-tf à l'aide de la commande suivante :

export USER_EMAIL=$(gcloud auth list --filter=status:ACTIVE --format="value(account)")
export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.serviceAccountTokenCreator \
--member "user:${USER_EMAIL}" \
"mde-tf"@"${PROJECT_ID}".iam.gserviceaccount.com

6. Activer les API Google Cloud

Assurez-vous que les API Google Cloud sont activées.

Les API Google Cloud suivantes doivent être activées pour exécuter les scripts Terraform :

  • compute.googleapis.com
  • iamcredentials.googleapis.com
  • cloudresourcemanager.googleapis.com

Un utilisateur disposant du rôle roles/servicemanagement.serviceConsumer ou d'autorisations équivalentes peut activer les API à l'aide de la commande suivante :

gcloud services enable \
compute.googleapis.com \
iamcredentials.googleapis.com \
cloudresourcemanager.googleapis.com

7. Préparer un bucket Cloud Storage

Préparez un bucket Cloud Storage pour stocker l'état Terraform :

Terraform nécessite un bucket Cloud Storage pour enregistrer l'état Terraform (PROJECT_ID-tf). Le compte de service mde-tf doit disposer d'autorisations de lecture et d'écriture sur ce bucket.

Un utilisateur disposant du rôle roles/storage.admin ou d'autorisations équivalentes peut créer le bucket et accorder les autorisations requises à mde-tf à l'aide de la commande suivante :

export PROJECT_ID=$(gcloud config get-value project)

gcloud storage buckets create "gs://${PROJECT_ID}-tf"

gcloud storage buckets add-iam-policy-binding gs://"${PROJECT_ID}-tf" \
--member="serviceAccount:mde-tf@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/storage.objectViewer'

gcloud storage buckets add-iam-policy-binding gs://"${PROJECT_ID}-tf" \
--member="serviceAccount:mde-tf@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/storage.objectCreator'