Integre o Cloud Asset Inventory com o Google SecOps

Este documento explica como integrar o Cloud Asset Inventory com o Google Security Operations (Google SecOps).

Versão da integração: 12.0

Na plataforma Google SecOps, a integração do Cloud Asset Inventory chama-se Google Cloud Asset Inventory.

Antes de começar

Para usar a integração, precisa de uma função de gestão de identidade e de acesso (IAM) e de uma Google Cloud conta de serviço.

Crie e configure uma função de IAM personalizada

Para criar uma função do IAM personalizada e configurar uma autorização específica para esta, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página Funções do IAM.

    Aceda a Funções

  2. Clique em Criar função para criar uma função personalizada com as autorizações necessárias para a integração.

  3. Para uma nova função personalizada, indique o Título, a Descrição e um ID exclusivo.

  4. Defina o Role Launch Stage como General Availability.

  5. Adicione a seguinte autorização à função criada:

    cloudasset.assets.searchAllResources
    

Crie e configure uma conta de serviço

Para integrar o Cloud Asset Inventory com o Google SecOps, pode usar uma conta de serviço existente ou criar uma nova. Para ver orientações sobre como criar uma conta de serviço, consulte o artigo Criar contas de serviço.

A integração do Cloud Asset Inventory requer que conceda à sua conta de serviço a função personalizada que criou na secção anterior e a função Cloud Asset Viewer.

Se não usar um email de identidade da carga de trabalho para configurar a integração, crie uma chave de conta de serviço em JSON depois de criar uma conta de serviço. Tem de fornecer o conteúdo completo do ficheiro de chave JSON transferido quando configurar os parâmetros de integração.

Por motivos de segurança, recomendamos que use endereços de email da identidade da carga de trabalho em vez de chaves JSON de contas de serviço. Para mais informações sobre as identidades de cargas de trabalho, consulte o artigo Identidades para cargas de trabalho.

Conceda uma função personalizada a um principal existente

Depois de conceder a nova função personalizada a um principal selecionado, este pode alterar as autorizações de qualquer utilizador na sua organização.

Para conceder a função personalizada a um principal existente, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página IAM.

    Aceder ao IAM

  2. No campo Filtro, cole o valor do Email da identidade da carga de trabalho que usa para a integração do inventário de recursos da nuvem e pesquise o principal existente.

  3. Clique em Editar principal. A caixa de diálogo Editar acesso a "PROJECT" é aberta.

  4. Em Atribuir funções, clique em Adicionar outra função.

  5. Selecione as funções predefinidas para o Cloud Asset Inventory.

  6. Clique em Guardar.

Parâmetros de integração

A integração do Cloud Asset Inventory requer os seguintes parâmetros:

Parâmetro Descrição
API Root Obrigatório

A raiz da API da instância do Cloud Asset Inventory.

O valor predefinido é https://cloudasset.googleapis.com.

Organization ID Opcional

O ID da organização a usar na integração do Cloud Asset Inventory.

Project ID Opcional

O ID do projeto a usar para a integração do Cloud Asset Inventory. Se não definir um valor para este parâmetro, a integração obtém o ID do projeto a partir do conteúdo do ficheiro JSON fornecido no parâmetro User's Service Account.

User's Service Account Obrigatório

O conteúdo do ficheiro JSON da chave da conta de serviço.

Pode configurar este parâmetro ou o parâmetro Workload Identity Email.

Para configurar este parâmetro, forneça o conteúdo completo do ficheiro JSON da chave da conta de serviço que transferiu quando criou uma conta de serviço.

Quota Project ID Opcional

O Google Cloud ID do projeto que usa para Google Cloud APIs e faturação. Este parâmetro requer que conceda a função Service Usage Consumer à sua conta de serviço.

Se não definir nenhum valor para este parâmetro, a integração obtém o ID do projeto da sua Google Cloud conta de serviço.

Workload Identity Email Opcional

O endereço de email do cliente da sua conta de serviço.

Pode configurar este parâmetro ou o parâmetro User's Service Account.

Para usar a identidade de contas de serviço com a federação de identidades da carga de trabalho, conceda a função Service Account Token Creator à sua conta de serviço. Para mais detalhes sobre as identidades de cargas de trabalho e como trabalhar com elas, consulte Identidades para cargas de trabalho.

Verify SSL Obrigatório

Se esta opção estiver selecionada, a integração verifica se o certificado SSL para a ligação ao servidor do Cloud Asset Inventory é válido.

Selecionado por predefinição.

Para obter instruções detalhadas sobre a configuração de uma integração no Google SecOps, consulte o artigo Configure integrações.

Se necessário, pode fazer alterações numa fase posterior. Depois de configurar uma instância de integração, pode usá-la em manuais de soluções. Para mais informações sobre a configuração e o suporte de várias instâncias, consulte o artigo Suporte de várias instâncias.

Ações

Para mais informações sobre ações, consulte os artigos Responda a ações pendentes a partir de O seu espaço de trabalho e Realize uma ação manual.

Enrich Resource

Use a ação Enrich Resource para enriquecer as informações sobre um recurso através do Cloud Asset Inventory. Google Cloud

A ação não é executada em entidades do Google SecOps.

Dados de ações

Para configurar a ação Enrich Resource, use os seguintes parâmetros:

Parâmetro Descrição
Resource Names Obrigatório

Uma lista separada por vírgulas que contém os nomes dos recursos para os quais quer obter detalhes.

Para configurar este parâmetro, introduza o nome completo do recurso de metadados no seguinte formato: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID.

Fields To Return Opcional

Uma lista de campos separados por vírgulas a devolver.

O valor predefinido é *.

Seguem-se exemplos de valores: assetType, project, folders, organization, displayName, description, location, labels, networkTags, kmsKeys, createTime, updateTime, state, additionalAttributes, parentFullResourceName, parentAssetType.

A ação devolve sempre o campo displayName.

Também existe uma opção para configurar filtros avançados. Por exemplo, para devolver uma chave específica de additionalAttributes, introduza additionalAttributes.{key}. Para excluir uma chave específica de additionalAttributes, introduza -additionalAttributes.{key}.

Resultados da ação

A ação Enrich Resource (Enriquecer recurso) fornece os seguintes resultados:

Tipo de saída da ação Disponibilidade
Fixação à parede da caixa Não disponível
Link da parede da caixa Não disponível
Mesa de parede para caixas Não disponível
Tabela de enriquecimento Não disponível
Resultado JSON Disponível
Mensagens de saída Disponível
Resultado do script Disponível
Resultado JSON

O exemplo seguinte mostra o resultado JSON recebido quando usa a ação Enrich Resource:

[
  {
    "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"
    }
  }
]
Mensagens de saída

A ação Enrich Resource pode devolver as seguintes mensagens de saída:

Mensagem de saída Descrição da mensagem

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.

A ação foi bem-sucedida.
Error executing action "Enrich resources". Reason: ERROR_REASON

A ação falhou.

Verifique a ligação ao servidor, os parâmetros de entrada ou as credenciais.

Resultado do script

A tabela seguinte lista o valor do resultado do script quando usa a ação Enrich Resource:

Nome do resultado do script Valor
is_success True ou False

Obter instantâneo do recurso

Use a ação Get Resource Snapshot para obter informações sobre o recurso através do Cloud Asset Inventory.

Esta ação não é executada em entidades do Google SecOps.

Dados de ações

Para configurar a ação Get Resource Snapshot, use os seguintes parâmetros:

Parâmetro Descrição
Resource Names Obrigatório

Uma lista de recursos separados por vírgulas para obter detalhes.

Para configurar este parâmetro, introduza o nome completo do recurso de metadados no seguinte formato: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID.

Fields To Return Opcional

Uma lista de campos separados por vírgulas a devolver.

Introduza todos os campos no seguinte formato:

assets.FIELD

Seguem-se alguns exemplos de valores: assets.asset.name, assets.asset.assetType, assets.asset.resource.data.

A ação devolve sempre o campo assets.asset.name.

O valor predefinido é *.

Resultados da ação

A ação Get Resource Snapshot apresenta os seguintes resultados:

Tipo de saída da ação Disponibilidade
Fixação à parede da caixa Não disponível
Link da parede da caixa Não disponível
Mesa de parede para caixas Não disponível
Tabela de enriquecimento Não disponível
Resultado JSON Disponível
Mensagens de saída Disponível
Resultado do script Disponível
Resultado JSON

Os exemplos seguintes mostram as saídas de resultados JSON recebidas quando usa a ação Get Resource Snapshot:

Resultado JSON para 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 para 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"
                   }
               }
           ]
       }
   }
]
Mensagens de saída

A ação Get Resource Snapshot pode devolver as seguintes mensagens de saída:

Mensagem de saída Descrição da mensagem
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.

A ação foi bem-sucedida.
Error executing action "Get Resource Snapshot". Reason: ERROR_REASON

A ação falhou.

Verifique a ligação ao servidor, os parâmetros de entrada ou as credenciais.

Resultado do script

A tabela seguinte lista o valor do resultado do script quando usa a ação Get Resource Snapshot:

Nome do resultado do script Valor
is_success True ou False

Liste as funções da conta de serviço

Use a ação List Service Account Roles para listar as funções relacionadas com a conta de serviço através do Cloud Asset Inventory. Google Cloud

Esta ação não é executada em entidades do Google SecOps.

Dados de ações

Para configurar a ação List Service Account Roles, use os seguintes parâmetros:

Parâmetro Descrição
Service Accounts Obrigatório

Uma lista de contas de serviço separadas por vírgulas para obter detalhes.

Check Roles Opcional

Uma lista de funções separadas por vírgulas a verificar em relação à conta de serviço, como roles/cloudasset.owner.

Check Permissions Opcional

Uma lista separada por vírgulas de autorizações a verificar em relação com a conta de serviço, como cloudasset.assets.listResource .

Expand Permissions Opcional

Se selecionada, a ação devolve informações sobre todas as autorizações únicas relacionadas com o recurso.

Não selecionado por predefinição.

Max Roles To Return Obrigatório

O número de funções relacionadas com a conta de serviço a devolver.

O valor predefinido é 100.

Max Permissions To Return Obrigatório

O número de autorizações relacionadas com a conta de serviço a devolver.

Resultados da ação

A ação List Service Account Roles (Listar funções da conta de serviço) fornece os seguintes resultados:

Tipo de saída da ação Disponibilidade
Fixação à parede da caixa Não disponível
Link da parede da caixa Não disponível
Mesa de parede para caixas Não disponível
Tabela de enriquecimento Não disponível
Resultado JSON Disponível
Mensagens de saída Disponível
Resultado do script Disponível
Resultado JSON

O exemplo seguinte mostra o resultado JSON recebido quando usa a ação List Service Account Roles:

{
   "roles": ["role1", "role2"],
   "unique_permissions": ["permission1", "permission2"]
}
Mensagens de saída

A ação List Service Account Roles pode devolver as seguintes mensagens de saída:

Mensagem de saída Descrição da mensagem

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.

A ação foi bem-sucedida.
Error executing action "List Service Account Roles". Reason: ERROR_REASON

A ação falhou.

Verifique a ligação ao servidor, os parâmetros de entrada ou as credenciais.

Tchim-tchim

Use a ação Ping para testar a conetividade ao Cloud Asset Inventory.

A ação não é executada em entidades do Google SecOps.

Dados de ações

Nenhum.

Resultados da ação

A ação Ping fornece os seguintes resultados:

Tipo de saída da ação Disponibilidade
Fixação à parede da caixa Não disponível
Link da parede da caixa Não disponível
Mesa de parede para caixas Não disponível
Tabela de enriquecimento Não disponível
Resultado JSON Não disponível
Mensagens de saída Disponível
Resultado do script Disponível
Mensagens de saída

A ação Ping pode devolver as seguintes mensagens de saída:

Mensagem de saída Descrição da mensagem
Successfully connected to the Google Cloud Asset Inventory server with the provided connection parameters! A ação foi bem-sucedida.
Failed to connect to the Google Cloud Asset Inventory server! A ação falhou.
Resultado do script

A tabela seguinte lista o valor do resultado do script quando usa a ação Ping:

Nome do resultado do script Valor
is_success True ou False

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.