Integrar Inventario de Recursos de Cloud con Google SecOps

En este documento se explica cómo integrar Cloud Asset Inventory con Google Security Operations (Google SecOps).

Versión de integración: 12.0

En la plataforma Google SecOps, la integración de Inventario de Recursos de Cloud se llama Inventario de Recursos de Google Cloud.

Antes de empezar

Para usar la integración, necesitas un rol de Gestión de Identidades y Accesos (IAM) y unaGoogle Cloud cuenta de servicio.

Crear y configurar un rol de gestión de identidades y accesos personalizado

Para crear un rol de gestión de identidades y accesos personalizado y configurarle un permiso específico, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Roles de gestión de identidades y accesos.

    Ir a Roles

  2. Haz clic en Crear rol para crear un rol personalizado con los permisos necesarios para la integración.

  3. Para crear un rol personalizado, indica el título, la descripción y un ID único.

  4. En Fase de lanzamiento del rol, selecciona Disponibilidad general.

  5. Añade el siguiente permiso al rol creado:

    cloudasset.assets.searchAllResources
    

Crear y configurar una cuenta de servicio

Para integrar Inventario de Recursos de Cloud con Google SecOps, puedes usar una cuenta de servicio que ya tengas o crear una. Para obtener instrucciones sobre cómo crear una cuenta de servicio, consulta el artículo Crear cuentas de servicio.

Para integrar Cloud Asset Inventory, debes conceder a tu cuenta de servicio el rol personalizado que has creado en la sección anterior y el rol Cloud Asset Viewer.

Si no usas un correo de identidad de carga de trabajo para configurar la integración, crea una clave de cuenta de servicio en JSON después de crear una cuenta de servicio. Debes proporcionar todo el contenido del archivo de clave JSON descargado al configurar los parámetros de integración.

Por motivos de seguridad, te recomendamos que utilices direcciones de correo de identidad de carga de trabajo en lugar de claves JSON de cuentas de servicio. Para obtener más información sobre las identidades de carga de trabajo, consulta Identidades de cargas de trabajo.

Asignar un rol personalizado a una cuenta principal

Una vez que hayas concedido tu nuevo rol personalizado a un principal seleccionado, este podrá cambiar los permisos de cualquier usuario de tu organización.

Para asignar el rol personalizado a una cuenta principal, sigue estos pasos:

  1. En la consola de Google Cloud , ve a la página Gestión de identidades y accesos.

    Ir a IAM

  2. En el campo Filter (Filtro), pega el valor de Workload Identity Email (Correo de identidad de carga de trabajo) que usas para la integración de Cloud Asset Inventory y busca el principal.

  3. Haz clic en Editar principal. Se abrirá el cuadro de diálogo Editar acceso a "PROJECT".

  4. En Asignar roles, haz clic en Añadir otro rol.

  5. Selecciona los roles predefinidos de Cloud Asset Inventory.

  6. Haz clic en Guardar.

Parámetros de integración

La integración de Cloud Asset Inventory requiere los siguientes parámetros:

Parámetro Descripción
API Root Obligatorio

La raíz de la API de la instancia de Inventario de Recursos de Cloud.

El valor predeterminado es https://cloudasset.googleapis.com.

Organization ID Optional

El ID de organización que se va a usar en la integración del Inventario de Recursos de Cloud.

Project ID Optional

El ID de proyecto que se usará para la integración del Inventario de Recursos de Cloud. Si no asigna ningún valor a este parámetro, la integración obtiene el ID del proyecto del contenido del archivo JSON proporcionado en el parámetro User's Service Account.

User's Service Account Obligatorio

El contenido del archivo JSON de la clave de la cuenta de servicio.

Puede configurar este parámetro o el parámetro Workload Identity Email.

Para configurar este parámetro, proporciona el contenido completo del archivo JSON de la clave de la cuenta de servicio que has descargado al crear una cuenta de servicio.

Quota Project ID Optional

El Google Cloud ID de proyecto que usas para las APIs Google Cloud y la facturación. Para usar este parámetro, debe conceder el rol Service Usage Consumer a su cuenta de servicio.

Si no asignas ningún valor a este parámetro, la integración obtiene el ID de proyecto de tu cuenta de servicio Google Cloud .

Workload Identity Email Optional

La dirección de correo del cliente de tu cuenta de servicio.

Puede configurar este parámetro o el parámetro User's Service Account.

Para suplantar cuentas de servicio con la federación de identidades de cargas de trabajo, asigna el rol Service Account Token Creator a tu cuenta de servicio. Para obtener más información sobre las identidades de carga de trabajo y cómo trabajar con ellas, consulta Identidades de cargas de trabajo.

Verify SSL Obligatorio

Si se selecciona esta opción, la integración verifica que el certificado SSL para conectarse al servidor de Cloud Asset Inventory sea válido.

Esta opción está seleccionada de forma predeterminada.

Para obtener instrucciones detalladas sobre cómo configurar una integración en Google SecOps, consulta Configurar integraciones.

Si es necesario, puedes hacer cambios más adelante. Después de configurar una instancia de integración, puedes usarla en los cuadernos de estrategias. Para obtener más información sobre cómo configurar y admitir varias instancias, consulta Admitir varias instancias.

Acciones

Para obtener más información sobre las acciones, consulta Responder a las acciones pendientes de Mi mesa de trabajo y Realizar una acción manual.

Recurso Enrich

Usa la acción Enriquecer recurso para enriquecer la información sobre un Google Cloud recurso mediante Inventario de Recursos de Cloud.

La acción no se ejecuta en entidades de Google SecOps.

Entradas de acciones

Para configurar la acción Enrich Resource (Enriquecer recurso), usa los siguientes parámetros:

Parámetro Descripción
Resource Names Obligatorio

Lista separada por comas que contiene los nombres de los recursos de los que se quieren obtener los detalles.

Para configurar este parámetro, introduce el nombre completo del recurso de metadatos con el siguiente formato: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID.

Fields To Return Optional

Lista de campos separados por comas que se devolverán.

El valor predeterminado es *.

Estos son algunos ejemplos de valores: assetType, project, folders, organization, displayName, description, location, labels, networkTags, kmsKeys, createTime, updateTime, state, additionalAttributes, parentFullResourceName, parentAssetType.

La acción siempre devuelve el campo displayName.

También hay una opción para configurar filtros avanzados. Por ejemplo, para devolver una clave específica de additionalAttributes, introduce additionalAttributes.{key}. Para excluir una clave específica de additionalAttributes, introduce -additionalAttributes.{key}.

Resultados de la acción

La acción Enriquecer recurso proporciona los siguientes resultados:

Tipo de salida de la acción Disponibilidad
Adjunto del panel de casos No disponible
Enlace del panel de casos No disponible
Tabla del panel de casos No disponible
Tabla de enriquecimiento No disponible
Resultado de JSON Disponible
Mensajes de salida Disponible
Resultado de la secuencia de comandos Disponible
Resultado de JSON

En el siguiente ejemplo se muestra la salida del resultado JSON recibida al usar la acción Enrich Resource (Enriquecer recurso):

[
  {
    "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"
    }
  }
]
Mensajes de salida

La acción Enrich Resource puede devolver los siguientes mensajes de salida:

Mensaje resultante Descripción del mensaje

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.

La acción se ha realizado correctamente.
Error executing action "Enrich resources". Reason: ERROR_REASON

No se ha podido realizar la acción.

Comprueba la conexión al servidor, los parámetros de entrada o las credenciales.

Resultado de la secuencia de comandos

En la siguiente tabla se muestra el valor de la salida del resultado de la secuencia de comandos al usar la acción Enriquecer recurso:

Nombre del resultado del script Valor
is_success True o False

Obtener captura de recurso

Usa la acción Obtener una instantánea de un recurso para obtener información sobre el recurso mediante Inventario de Recursos de Cloud.

Esta acción no se ejecuta en entidades de Google SecOps.

Entradas de acciones

Para configurar la acción Obtener información de recursos, usa los siguientes parámetros:

Parámetro Descripción
Resource Names Obligatorio

Lista de recursos separados por comas de los que se deben obtener los detalles.

Para configurar este parámetro, introduce el nombre completo del recurso de metadatos con el siguiente formato: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID.

Fields To Return Optional

Lista de campos separados por comas que se devolverán.

Introduce todos los campos con el siguiente formato:

assets.FIELD

Estos son algunos ejemplos de valores: assets.asset.name, assets.asset.assetType, assets.asset.resource.data.

La acción siempre devuelve el campo assets.asset.name.

El valor predeterminado es *.

Resultados de la acción

La acción Obtener información general del recurso proporciona los siguientes resultados:

Tipo de salida de la acción Disponibilidad
Adjunto del panel de casos No disponible
Enlace del panel de casos No disponible
Tabla del panel de casos No disponible
Tabla de enriquecimiento No disponible
Resultado de JSON Disponible
Mensajes de salida Disponible
Resultado de la secuencia de comandos Disponible
Resultado de JSON

En los siguientes ejemplos se muestran las salidas de resultados JSON recibidas al usar la acción Obtener una instantánea de un recurso:

Resultado en JSON de 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"
     }
   }
 }
]
Resultado JSON de 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"
                   }
               }
           ]
       }
   }
]
Mensajes de salida

La acción Obtener una vista de un recurso puede devolver los siguientes mensajes de salida:

Mensaje resultante Descripción del mensaje
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.

La acción se ha realizado correctamente.
Error executing action "Get Resource Snapshot". Reason: ERROR_REASON

No se ha podido realizar la acción.

Comprueba la conexión al servidor, los parámetros de entrada o las credenciales.

Resultado de la secuencia de comandos

En la siguiente tabla se muestra el valor del resultado de la secuencia de comandos cuando se usa la acción Obtener una copia de un recurso:

Nombre del resultado del script Valor
is_success True o False

Mostrar roles de cuentas de servicio

Usa la acción List Service Account Roles (Listar roles de cuenta de servicio) para enumerar los roles relacionados con la cuenta de servicio Google Cloud mediante Inventario de Recursos de Cloud.

Esta acción no se ejecuta en entidades de Google SecOps.

Entradas de acciones

Para configurar la acción List Service Account Roles (Listar roles de cuenta de servicio), usa los siguientes parámetros:

Parámetro Descripción
Service Accounts Obligatorio

Lista separada por comas de las cuentas de servicio de las que se quieren obtener detalles.

Check Roles Optional

Lista de roles separados por comas que se deben comprobar en relación con la cuenta de servicio, como roles/cloudasset.owner.

Check Permissions Optional

Lista separada por comas de permisos que se deben comprobar en relación con la cuenta de servicio, como cloudasset.assets.listResource .

Expand Permissions Optional

Si se selecciona, la acción devuelve información sobre todos los permisos únicos relacionados con el recurso.

No está seleccionada de forma predeterminada.

Max Roles To Return Obligatorio

Número de roles relacionados con la cuenta de servicio que se van a devolver.

El valor predeterminado es 100.

Max Permissions To Return Obligatorio

Número de permisos relacionados con la cuenta de servicio que se devolverán.

Resultados de la acción

La acción List Service Account Roles (Listar roles de cuenta de servicio) proporciona los siguientes resultados:

Tipo de salida de la acción Disponibilidad
Adjunto del panel de casos No disponible
Enlace del panel de casos No disponible
Tabla del panel de casos No disponible
Tabla de enriquecimiento No disponible
Resultado de JSON Disponible
Mensajes de salida Disponible
Resultado de la secuencia de comandos Disponible
Resultado de JSON

En el siguiente ejemplo se muestra la salida del resultado JSON recibida al usar la acción List Service Account Roles (Listar roles de cuenta de servicio):

{
   "roles": ["role1", "role2"],
   "unique_permissions": ["permission1", "permission2"]
}
Mensajes de salida

La acción List Service Account Roles puede devolver los siguientes mensajes de salida:

Mensaje resultante Descripción del mensaje

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.

La acción se ha realizado correctamente.
Error executing action "List Service Account Roles". Reason: ERROR_REASON

No se ha podido realizar la acción.

Comprueba la conexión al servidor, los parámetros de entrada o las credenciales.

Ping

Usa la acción Ping para probar la conectividad con Inventario de Recursos de Cloud.

La acción no se ejecuta en entidades de Google SecOps.

Entradas de acciones

Ninguno

Resultados de la acción

La acción Ping proporciona las siguientes salidas:

Tipo de salida de la acción Disponibilidad
Adjunto del panel de casos No disponible
Enlace del panel de casos No disponible
Tabla del panel de casos No disponible
Tabla de enriquecimiento No disponible
Resultado de JSON No disponible
Mensajes de salida Disponible
Resultado de la secuencia de comandos Disponible
Mensajes de salida

La acción Ping puede devolver los siguientes mensajes de salida:

Mensaje resultante Descripción del mensaje
Successfully connected to the Google Cloud Asset Inventory server with the provided connection parameters! La acción se ha realizado correctamente.
Failed to connect to the Google Cloud Asset Inventory server! No se ha podido realizar la acción.
Resultado de la secuencia de comandos

En la siguiente tabla se muestra el valor de la salida del resultado de la secuencia de comandos al usar la acción Ping:

Nombre del resultado del script Valor
is_success True o False

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.