Travailler sur plusieurs projets

Selon vos besoins, vous devrez peut-être concevoir votre architecture pour qu'elle fonctionne dans plusieurs projets lorsque vous utilisez l'inventaire des éléments cloud. Les scénarios suivants sont les plus courants:

  • Projets d'orchestrateur: lorsque vous souhaitez qu'un seul projet déclenche des opérations Cloud Asset Inventory dans d'autres projets.

  • Exporter entre les projets: lorsque vous souhaitez exporter les métadonnées de ressources d'un projet vers un autre.

Chacun de ces scénarios nécessite une configuration pour garantir que les opérations aboutissent.

Projets d'orchestrateur

Lorsque vous utilisez un projet pour déclencher des opérations d'inventaire des éléments cloud sur les ressources d'un autre projet, dans certains cas, vous devez spécifier que le compte de service d'inventaire des éléments cloud par défaut de l'autre projet doit être utilisé pour effectuer l'opération. Voici quelques exemples de scénarios:

Pour définir le compte de service à utiliser, définissez le projet de facturation sur l'ID du projet contenant les ressources sur lesquelles vous travaillez. Si le projet de facturation n'est pas spécifié, Cloud Asset Inventory utilise le compte de service Cloud Asset Inventory par défaut du projet qui effectue l'appel, qui ne dispose peut-être pas des autorisations requises pour effectuer l'opération.

Bien que cela ne soit pas obligatoire pour toutes les opérations, il est recommandé de toujours spécifier un projet de facturation pour éviter toute confusion.

gcloud

Pour gcloud CLI, ajoutez l'option --billing-project à votre commande pour spécifier l'ID de projet contenant le compte de service approprié:

--billing-project=BILLING_PROJECT_ID

Vous pouvez également définir le projet de facturation avant d'exécuter des commandes avec la gcloud CLI. Tout d'abord, vérifiez si le projet de facturation est différent du projet principal:

gcloud config list

Si nécessaire, définissez le projet de facturation:

gcloud config set billing/quota_project BILLING_PROJECT_ID

Indiquez les valeurs suivantes :

  • BILLING_PROJECT_ID: un ID de projet pour lequel l'API Cloud Asset Inventory est activée, ainsi qu'un compte de service disposant des autorisations nécessaires pour gérer votre sujet Pub/Sub, votre bucket Cloud Storage ou votre table BigQuery cibles.

REST

Pour l'API REST, ajoutez l'en-tête X-Goog-User-Project pour spécifier l'ID de projet contenant le compte de service approprié:

"X-Goog-User-Project: BILLING_PROJECT_ID"

Indiquez les valeurs suivantes :

  • BILLING_PROJECT_ID: un ID de projet pour lequel l'API Cloud Asset Inventory est activée, ainsi qu'un compte de service disposant des autorisations nécessaires pour gérer votre sujet Pub/Sub, votre bucket Cloud Storage ou votre table BigQuery cibles.

Exporter entre les projets

Pour exporter les métadonnées d'un élément d'un projet (PROJECT_A) vers un autre (PROJECT_B), vous devez accorder au compte de service par défaut de l'inventaire des éléments cloud dans PROJECT_A un accès aux ressources de PROJECT_B.

Cela permet deux choses:

  • Vous pouvez exporter les métadonnées des éléments depuis PROJECT_A vers un sujet Pub/Sub, un bucket Cloud Storage ou une table BigQuery situés dans PROJECT_B.

  • Vous pouvez utiliser PROJECT_A pour exporter les métadonnées d'éléments de PROJECT_B vers un sujet Pub/Sub, un bucket Cloud Storage ou une table BigQuery situés dans PROJECT_B.

Pour exporter les métadonnées d'un élément d'un projet vers un autre, procédez comme suit:

  1. Assurez-vous que l'API Cloud Asset Inventory est activée dans le projet à partir duquel vous souhaitez exécuter votre requête, PROJECT_A.

  2. Effectuez au moins un appel à l'API Cloud Asset Inventory dans PROJECT_A pour créer le compte de service Cloud Asset Inventory par défaut. Vous pouvez également le créer manuellement:

    gcloud beta services identity create \
        --service=cloudasset.googleapis.com \
        --project=PROJECT_A_ID
    gcloud projects add-iam-policy-binding PROJECT_A_ID \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/cloudasset.serviceAgent
    

    Trouver un Google Cloud numéro de projet

    Console Google Cloud

    Pour trouver un numéro de projet Google Cloud , procédez comme suit:

    1. Accédez à la page Bienvenue dans la console Google Cloud.

      Accéder à "Bienvenue"

    2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
    3. Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.

      Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.

    CLI gcloud

    Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"

  3. Attribuez les rôles appropriés au compte de service dans PROJECT_A.

    • Pour publier dans un flux via Pub/Sub, attribuez le rôle Éditeur Pub/Sub (roles/pubsub.publisher) au compte de service sur le sujet:

      gcloud pubsub topics add-iam-policy-binding projects/PROJECT_B_ID/topics/TOPIC_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/pubsub.publisher
      
    • Pour écrire dans un bucket Cloud Storage, attribuez le rôle Administrateur de l'espace de stockage (roles/storage.admin) au compte de service du bucket:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/storage.admin
      
    • Pour écrire dans une table BigQuery, attribuez les rôles Éditeur de données BigQuery (roles/bigquery.dataEditor) et Utilisateur BigQuery (roles/bigquery.user) au compte de service du projet:

      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.dataEditor
      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.user
      

Si vous envoyez une requête d'inventaire des ressources Cloud avec la CLI gcloud à partir de PROJECT_B ou si vous utilisez l'API REST, veillez à spécifier PROJECT_A comme projet de facturation.