Intégrer l'inventaire des éléments cloud à Google SecOps

Ce document explique comment intégrer inventaire des éléments cloud à Google Security Operations (Google SecOps).

Version de l'intégration : 12.0

Dans la plate-forme Google SecOps, l'intégration de inventaire des éléments cloud s'appelle Google Cloud Asset Inventory.

Avant de commencer

Pour utiliser l'intégration, vous avez besoin d'un rôle IAM (Identity and Access Management) et d'unGoogle Cloud compte de service.

Créer et configurer un rôle IAM personnalisé

Pour créer un rôle IAM personnalisé et lui configurer une autorisation spécifique, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page Rôles d'IAM.

    Accéder à la page "Rôles"

  2. Cliquez sur Créer un rôle pour créer un rôle personnalisé avec les autorisations requises pour l'intégration.

  3. Pour un nouveau rôle personnalisé, indiquez le titre, la description et un ID unique.

  4. Définissez l'étape de lancement du rôle sur Disponibilité générale.

  5. Ajoutez l'autorisation suivante au rôle créé :

    cloudasset.assets.searchAllResources
    

Créer et configurer un compte de service

Pour intégrer l'inventaire des éléments cloud à Google SecOps, vous pouvez utiliser un compte de service existant ou en créer un. Pour savoir comment créer un compte de service, consultez Créer des comptes de service.

L'intégration de l'inventaire des éléments cloud vous oblige à accorder à votre compte de service le rôle personnalisé que vous avez créé dans la section précédente et le rôle Cloud Asset Viewer.

Si vous n'utilisez pas d'adresse e-mail d'identité de charge de travail pour configurer l'intégration, créez une clé de compte de service au format JSON après avoir créé un compte de service. Vous devez fournir l'intégralité du contenu du fichier de clé JSON téléchargé lorsque vous configurez les paramètres d'intégration.

Pour des raisons de sécurité, nous vous recommandons d'utiliser des adresses e-mail Workload Identity au lieu de clés JSON de compte de service. Pour en savoir plus sur les identités de charge de travail, consultez Identités pour les charges de travail.

Attribuer un rôle personnalisé à un compte principal existant

Une fois que vous avez accordé votre nouveau rôle personnalisé à un compte principal sélectionné, celui-ci peut modifier les autorisations de n'importe quel utilisateur de votre organisation.

Pour attribuer le rôle personnalisé à un compte principal existant, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page IAM.

    Accéder à IAM

  2. Dans le champ Filtre, collez la valeur Adresse e-mail de l'identité de charge de travail que vous utilisez pour l'intégration inventaire des éléments cloud, puis recherchez le principal existant.

  3. Cliquez sur Modifier le compte principal. La boîte de dialogue Modifier l'accès à "PROJECT" s'ouvre.

  4. Sous Attribuer des rôles, cliquez sur Ajouter un autre rôle.

  5. Sélectionnez les rôles prédéfinis pour l'inventaire des éléments cloud.

  6. Cliquez sur Enregistrer.

Paramètres d'intégration

L'intégration Cloud Asset Inventory nécessite les paramètres suivants :

Paramètre Description
API Root Obligatoire

Racine de l'API de l'instance inventaire des éléments cloud.

La valeur par défaut est https://cloudasset.googleapis.com.

Organization ID Optional

ID de l'organisation à utiliser dans l'intégration de l'inventaire des éléments cloud.

Project ID Optional

ID du projet à utiliser pour l'intégration de inventaire des éléments cloud. Si vous ne définissez pas de valeur pour ce paramètre, l'intégration récupère l'ID du projet à partir du contenu du fichier JSON fourni dans le paramètre User's Service Account.

User's Service Account Obligatoire

Contenu du fichier JSON de clé de compte de service.

Vous pouvez configurer ce paramètre ou le paramètre Workload Identity Email.

Pour configurer ce paramètre, indiquez le contenu complet du fichier JSON de la clé de compte de service que vous avez téléchargé lors de la création d'un compte de service.

Quota Project ID Optional

ID de projet Google Cloud que vous utilisez pour les API Google Cloud et la facturation. Ce paramètre nécessite que vous accordiez le rôle Service Usage Consumer à votre compte de service.

Si vous ne définissez aucune valeur pour ce paramètre, l'intégration récupère l'ID du projet à partir de votre compte de service Google Cloud .

Workload Identity Email Optional

Adresse e-mail du client de votre compte de service.

Vous pouvez configurer ce paramètre ou le paramètre User's Service Account.

Pour emprunter l'identité de comptes de service avec la fédération d'identité de charge de travail, accordez le rôle Service Account Token Creator à votre compte de service. Pour en savoir plus sur les identités de charge de travail et sur la façon de les utiliser, consultez Identités pour les charges de travail.

Verify SSL Obligatoire

Si cette option est sélectionnée, l'intégration vérifie que le certificat SSL pour la connexion au serveur inventaire des éléments cloud est valide.

Cette option est sélectionnée par défaut.

Pour obtenir des instructions détaillées sur la configuration d'une intégration dans Google SecOps, consultez Configurer des intégrations.

Vous pourrez apporter des modifications ultérieurement si nécessaire. Une fois que vous avez configuré une instance d'intégration, vous pouvez l'utiliser dans des playbooks. Pour en savoir plus sur la configuration et la prise en charge de plusieurs instances, consultez Prise en charge de plusieurs instances.

Actions

Pour en savoir plus sur les actions, consultez Répondre aux actions en attente dans Votre espace de travail et Effectuer une action manuelle.

Enrichir une ressource

Utilisez l'action Enrichir la ressource pour enrichir les informations sur une ressource Google Cloudà l'aide de inventaire des éléments cloud.

L'action ne s'exécute pas sur les entités Google SecOps.

Entrées d'action

Pour configurer l'action Enrichir la ressource, utilisez les paramètres suivants :

Paramètre Description
Resource Names Obligatoire

Liste de noms de ressources (séparés par une virgule) pour lesquelles récupérer des informations.

Pour configurer ce paramètre, saisissez le nom complet de la ressource de métadonnées au format suivant : //cloudresourcemanager.googleapis.com/projects/PROJECT_ID.

Fields To Return Optional

Liste de champs à renvoyer, séparés par une virgule.

La valeur par défaut est *.

Voici quelques exemples de valeurs : assetType, project, folders, organization, displayName, description, location, labels, networkTags, kmsKeys, createTime, updateTime, state, additionalAttributes, parentFullResourceName, parentAssetType.

L'action renvoie toujours le champ displayName.

Vous pouvez également configurer des filtres avancés. Par exemple, pour renvoyer une clé spécifique à partir de additionalAttributes, saisissez additionalAttributes.{key}. Pour exclure une clé spécifique de additionalAttributes, saisissez -additionalAttributes.{key}.

Sorties d'action

L'action Enrichir la ressource fournit les résultats suivants :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Table du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat JSON

L'exemple suivant montre le résultat JSON reçu lors de l'utilisation de l'action Enrichir la ressource :

[
  {
    "Entity": "//iam.googleapis.com/projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT/keys/KEY_ID",
    "EntityResult": {
      "additionalAttributes": {
        "email": "email@example.iam.gserviceaccount.com",
        "uniqueId": 123456789
      },
      "name": "//iam.googleapis.com/projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT/keys/KEY_ID",
      "assetType": "iam.googleapis.com/ServiceAccountKey",
      "project": "projects/PROJECT",
      "displayName": "projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com/keys/KEY_ID",
      "createTime": "2022-05-26T17:35:07Z",
      "versionedResources": [
        {
          "version": "v1",
          "resource": {
            "keyAlgorithm": "KEY_ALG_RSA_2048",
            "keyOrigin": "GOOGLE_PROVIDED",
            "keyType": "USER_MANAGED",
            "name": "projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com/keys/KEY_ID",
            "validAfterTime": "2022-05-26T17:35:07Z",
            "validBeforeTime": "9999-12-31T23:59:59Z"
          }
        }
      ],
      "organization": "organizations/ORGANIZATION",
      "parentFullResourceName": "//iam.googleapis.com/projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com",
      "parentAssetType": "iam.googleapis.com/ServiceAccount"
    }
  }
]
Messages de sortie

L'action Enrichir la ressource peut renvoyer les messages de sortie suivants :

Message affiché Description du message

Successfully enriched the following resources using information from Google Cloud Asset Inventory: ASSET_IDENTIFIER

Action wasn't able to enrich the following resources using information from Google Cloud Asset Inventory: ASSET_IDENTIFIER

None of the provided resources were enriched.

L'action a réussi.
Error executing action "Enrich resources". Reason: ERROR_REASON

Échec de l'action.

Vérifiez la connexion au serveur, les paramètres d'entrée ou les identifiants.

Résultat du script

Le tableau suivant répertorie la valeur de la sortie du résultat du script lorsque vous utilisez l'action Enrichir la ressource :

Nom du résultat du script Valeur
is_success True ou False

Obtenir l'instantané de la ressource

Utilisez l'action Obtenir un instantané de la ressource pour obtenir des informations sur la ressource à l'aide de inventaire des éléments cloud.

Cette action ne s'applique pas aux entités Google SecOps.

Entrées d'action

Pour configurer l'action Obtenir un instantané de la ressource, utilisez les paramètres suivants :

Paramètre Description
Resource Names Obligatoire

Liste de ressources séparées par une virgule pour lesquelles récupérer les détails.

Pour configurer ce paramètre, saisissez le nom complet de la ressource de métadonnées au format suivant : //cloudresourcemanager.googleapis.com/projects/PROJECT_ID.

Fields To Return Optional

Liste de champs à renvoyer, séparés par une virgule.

Saisissez chaque champ au format suivant :

assets.FIELD

Voici quelques exemples de valeurs : assets.asset.name, assets.asset.assetType, assets.asset.resource.data.

L'action renvoie toujours le champ assets.asset.name.

La valeur par défaut est *.

Sorties d'action

L'action Obtenir un instantané de la ressource fournit les sorties suivantes :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Table du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat JSON

Les exemples suivants montrent les résultats JSON reçus lors de l'utilisation de l'action Obtenir l'instantané de la ressource :

Résultat JSON pour Google Cloud
    [
 {
   "Entity": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/example-instance",
   "EntityResult": {
     "window": {
       "startTime": "2023-08-14T19:43:41.805828Z",
       "endTime": "2262-04-11T23:47:16.854775807Z"
     },
     "asset": {
       "name": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/example-instance",
       "assetType": "compute.googleapis.com/Instance",
       "resource": {
         "version": "v1",
         "discoveryDocumentUri": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
         "discoveryName": "Instance",
         "parent": "//cloudresourcemanager.googleapis.com/projects/example-project-id",
         "data": {
           "description": "",
           "serviceAccounts": [
             {
               "email": "user@example.com",
               "scopes": [
                 "https://www.googleapis.com/auth/devstorage.read_only",
                 "https://www.googleapis.com/auth/logging.write",
                 "https://www.googleapis.com/auth/monitoring.write",
                 "https://www.googleapis.com/auth/servicecontrol",
                 "https://www.googleapis.com/auth/service.management.readonly",
                 "https://www.googleapis.com/auth/trace.append"
               ]
             }
           ],
           "lastStartTimestamp": "2022-05-26T01:44:52.756-07:00",
           "deletionProtection": false,
           "name": "example-name",
           "keyRevocationActionType": "NONE_ON_KEY_REVOCATION",
           "canIpForward": false,
           "shieldedInstanceIntegrityPolicy": {
             "updateAutoLearnPolicy": true
           },
           "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a",
           "resourceStatus": {},
           "scheduling": {
             "onHostMaintenance": "MIGRATE",
             "preemptible": false,
             "provisioningModel": "STANDARD",
             "automaticRestart": true
           },
           "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-micro",
           "confidentialInstanceConfig": {
             "enableConfidentialCompute": false
           },
           "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance",
           "id": "example-id",
           "fingerprint": "example-fingerprint",
           "startRestricted": false,
           "networkInterfaces": [
             {
               "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/example-network",
               "stackType": "IPV4_ONLY",
               "name": "example",
               "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/example-network-subnet",
               "accessConfigs": [
                 {
                   "type": "ONE_TO_ONE_NAT",
                   "name": "External NAT",
                   "natIP": "192.0.2.1",
                   "networkTier": "PREMIUM"
                 }
               ],
               "fingerprint": "example-fingerprint",
               "networkIP": "203.0.113.2"
             }
           ],
           "allocationAffinity": {
             "consumeAllocationType": "ANY_ALLOCATION"
           },
           "labelFingerprint": "example-label",
           "shieldedInstanceConfig": {
             "enableSecureBoot": false,
             "enableVtpm": true,
             "enableIntegrityMonitoring": true
           },
           "cpuPlatform": "Intel Broadwell",
           "creationTimestamp": "2022-05-26T01:44:40.323-07:00",
           "status": "RUNNING",
           "disks": [
             {
               "guestOsFeatures": [
                 {
                   "type": "VIRTIO_SCSI_MULTIQUEUE"
                 },
                 {
                   "type": "SEV_CAPABLE"
                 },
                 {
                   "type": "UEFI_COMPATIBLE"
                 },
                 {
                   "type": "GVNIC"
                 }
               ],
               "interface": "SCSI",
               "shieldedInstanceInitialState": {
                 "dbxs": [
                   {
                     "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndK",
                     "fileType": "BIN"
                   }
                 ],
                 "dbx": [
                   {
                     "fileType": "BIN",
                     "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndK"
                   }
                 ]
               },
               "diskSizeGb": "10",
               "deviceName": "example-device-name",
               "type": "PERSISTENT",
               "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/example-instance",
               "boot": true,
               "licenses": [
                 "https://www.googleapis.com/compute/v1/projects/example-project/global/licenses"
               ],
               "index": 0,
               "autoDelete": true,
               "mode": "READ_WRITE"
             }
           ],
           "tags": {
             "items": [
               "http-server"
             ],
             "fingerprint": "example-fingerprint"
           },
           "displayDevice": {
             "enableDisplay": false
           },
           "reservationAffinity": {
             "consumeReservationType": "ANY_ALLOCATION"
           }
         },
         "location": "us-central1-a"
       },
       "ancestors": [
         "projects/example-project-id",
         "organizations/example-org-id"
       ],
       "updateTime": "2023-08-14T19:43:41.805828Z"
     }
   }
 },
 {
   "Entity": "//iam.googleapis.com/projects/example-project/serviceAccounts/example-account-id",
   "EntityResult": {
     "window": {
       "startTime": "2023-12-22T13:37:50Z",
       "endTime": "2262-04-11T23:47:16.854775807Z"
     },
     "asset": {
       "name": "//iam.googleapis.com/projects/example-project/serviceAccounts/example-account-id",
       "assetType": "iam.googleapis.com/ServiceAccount",
       "resource": {
         "version": "v1",
         "discoveryDocumentUri": "https://iam.googleapis.com/$discovery/rest",
         "discoveryName": "ServiceAccount",
         "parent": "//cloudresourcemanager.googleapis.com/projects/example-project-id",
         "data": {
           "name": "projects/example-project/serviceAccounts/cloud-asset-inventory-auto@example-project.iam.gserviceaccount.com",
           "projectId": "example-project",
           "email": "cloud-asset-inventory-auto@example-project.iam.gserviceaccount.com",
           "uniqueId": "example-account-id",
           "displayName": "Cloud Asset Inventory Automation",
           "oauth2ClientId": "example-account-id"
         }
       },
       "ancestors": [
         "projects/example-project-id",
         "organizations/example-org-id"
       ],
       "updateTime": "2023-12-22T13:37:50Z"
     }
   }
 }
]
Résultat JSON pour AWS
[
   {
       "Entity": "//cloudasset.googleapis.com/organizations/example-org-id/otherCloudConnections/aws/arn:aws:s3:::aps-max-test-bucket",
       "EntityResult": {
           "assets": [
               {
                   "window": {
                       "startTime": "2024-01-24T17:51:03.412233028Z",
                       "endTime": "2262-04-11T23:47:16.854775807Z"
                   },
                   "asset": {
                       "name": "//cloudasset.googleapis.com/organizations/example-org-id/otherCloudConnections/aws/arn:aws:s3:::aps-max-test-bucket",
                       "assetType": "cloudasset.googleapis.com/AWS::S3::Bucket",
                       "resource": {
                           "version": "v1",
                           "discoveryDocumentUri": "n/a",
                           "discoveryName": "n/a",
                           "data": {
                               "dataSourceProvider": "AMAZON_WEB_SERVICES",
                               "supplementaryConfigurations": {
                                   "PublicAccessBlockConfiguration": {
                                       "BlockPublicPolicy": true,
                                       "RestrictPublicBuckets": true,
                                       "BlockPublicAcls": true,
                                       "IgnorePublicAcls": true
                                   },
                                   "TagSet": [
                                       {
                                           "Key": "my-key2",
                                           "Value": "my-value2"
                                       },
                                       {
                                           "Key": "my-key1",
                                           "Value": "my-value1"
                                       }
                                   ],
                                   "ServerSideEncryptionConfiguration": {
                                       "Rules": [
                                           {
                                               "ApplyServerSideEncryptionByDefault": {
                                                   "SSEAlgorithm": "AES256"
                                               },
                                               "BucketKeyEnabled": true
                                           }
                                       ]
                                   },
                                   "AccessControlPolicy": {
                                       "Grants": [
                                           {
                                               "Grantee": {
                                                   "DisplayName": "example",
                                                   "ID": "example-id",
                                                   "Type": "CanonicalUser"
                                               },
                                               "Permission": "FULL_CONTROL"
                                           }
                                       ],
                                       "Owner": {
                                           "DisplayName": "example",
                                           "ID": "example-id"
                                       }
                                   }
                               },
                               "configuration": {
                                   "Name": "aps-max-test-bucket",
                                   "CreationDate": "2023-12-04T15:29:50+00:00"
                               },
                               "tags": {
                                   "my-key2": "my-value2",
                                   "my-key1": "my-value1"
                               },
                               "originalResourceName": "arn:aws:s3:::aps-max-test-bucket",
                               "awsAccount": "arn:aws:organizations::example-id:account/example-account/example-account-id"
                           },
                           "location": "global"
                       },
                       "ancestors": [
                           "organizations/example-org-id"
                       ],
                       "updateTime": "2024-01-24T17:51:03.412233028Z"
                   }
               }
           ]
       }
   }
]
Messages de sortie

L'action Obtenir un instantané de ressource peut renvoyer les messages de sortie suivants :

Message affiché Description du message
Successfully returned information about the following resources using Google Cloud Asset Inventory: ASSET_IDENTIFIER

Action wasn't able to return information about the following resources using Google Cloud Asset Inventory: ASSET_IDENTIFIER.

No information was found for the provided resources.

L'action a réussi.
Error executing action "Get Resource Snapshot". Reason: ERROR_REASON

Échec de l'action.

Vérifiez la connexion au serveur, les paramètres d'entrée ou les identifiants.

Résultat du script

Le tableau suivant répertorie la valeur de la sortie du résultat du script lorsque vous utilisez l'action Obtenir un instantané de la ressource :

Nom du résultat du script Valeur
is_success True ou False

Lister les rôles des comptes de service

Utilisez l'action Lister les rôles du compte de service pour lister les rôles associés au compte de service Google Cloud à l'aide de inventaire des éléments cloud.

Cette action ne s'applique pas aux entités Google SecOps.

Entrées d'action

Pour configurer l'action Lister les rôles du compte de service, utilisez les paramètres suivants :

Paramètre Description
Service Accounts Obligatoire

Liste de comptes de service dont vous souhaitez récupérer les détails, séparés par une virgule.

Check Roles Optional

Liste de rôles séparés par une virgule à vérifier par rapport au compte de service, par exemple roles/cloudasset.owner.

Check Permissions Optional

Liste d'autorisations séparées par une virgule à vérifier par rapport au compte de service, par exemple cloudasset.assets.listResource .

Expand Permissions Optional

Si cette option est sélectionnée, l'action renvoie des informations sur toutes les autorisations uniques associées à la ressource.

(non sélectionnée par défaut).

Max Roles To Return Obligatoire

Nombre de rôles associés au compte de service à renvoyer.

La valeur par défaut est 100.

Max Permissions To Return Obligatoire

Nombre d'autorisations liées au compte de service à renvoyer.

Sorties d'action

L'action Lister les rôles du compte de service fournit les sorties suivantes :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Table du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat JSON

L'exemple suivant montre le résultat JSON reçu lors de l'utilisation de l'action Lister les rôles du compte de service :

{
   "roles": ["role1", "role2"],
   "unique_permissions": ["permission1", "permission2"]
}
Messages de sortie

L'action Lister les rôles du compte de service peut renvoyer les messages de sortie suivants :

Message affiché Description du message

Successfully enriched for the following service accounts using information from Google Cloud Asset Inventory: ASSET_IDENTIFIER

Action wasn't able to enrich the following service accounts using information from Google Cloud Asset Inventory: ASSET_IDENTIFIER

None of the service accounts were enriched.

L'action a réussi.
Error executing action "List Service Account Roles". Reason: ERROR_REASON

Échec de l'action.

Vérifiez la connexion au serveur, les paramètres d'entrée ou les identifiants.

Ping

Utilisez l'action Ping pour tester la connectivité à inventaire des éléments cloud.

L'action ne s'exécute pas sur les entités Google SecOps.

Entrées d'action

Aucun

Sorties d'action

L'action Ping fournit les résultats suivants :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Table du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Non disponible
Messages de sortie Disponible
Résultat du script Disponible
Messages de sortie

L'action Ping peut renvoyer les messages de résultat suivants :

Message affiché Description du message
Successfully connected to the Google Cloud Asset Inventory server with the provided connection parameters! L'action a réussi.
Failed to connect to the Google Cloud Asset Inventory server! Échec de l'action.
Résultat du script

Le tableau suivant répertorie la valeur du résultat du script lorsque vous utilisez l'action Ping :

Nom du résultat du script Valeur
is_success True ou False

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.