Integrar o Inventário de recursos do Cloud ao Google SecOps
Neste documento, explicamos como integrar o Inventário de recursos do Cloud ao Google Security Operations.
Casos de uso
A integração do Inventário de recursos do Cloud usa os recursos do Google SecOps para oferecer suporte aos seguintes casos de uso:
Enriquecer recursos do Google Cloud : busque automaticamente metadados detalhados de recursos de nuvem usando nomes completos de recursos para fornecer contexto para alertas de segurança.
Recuperar snapshots de recursos: tenha uma visualização pontual das configurações e do status dos recursos para ajudar em investigações forenses e análises de mudanças.
Auditar permissões de conta de serviço serviço: liste papéis e permissões exclusivas associadas a contas de serviço para identificar identidades com privilégios excessivos e manter o princípio de privilégio mínimo.
Inventariar recursos multicloud: acesse detalhes de recursos noGoogle Cloud e em ambientes externos conectados para centralizar a visibilidade dos recursos nas investigações.
Antes de começar
Antes de configurar a integração do Inventário de recursos do Cloud no Google SecOps, conclua as seguintes etapas de pré-requisito:
Escolha e configure um dos seguintes métodos de autenticação:
Opção 1: Identidade da carga de trabalho (recomendado): esse método usa tokens de acesso temporários de curta duração com a identidade temporária de conta de serviço, eliminando a necessidade de armazenar secrets.
Opção 2: chave JSON da conta de serviço: esse método depende de um arquivo de chave secreta estático e de longa duração. Use esse método somente se a Identidade da carga de trabalho não estiver disponível no seu ambiente.
Criar uma conta de serviço
Para criar uma conta de serviço, conclua estas etapas:
No console do Google Cloud , acesse Credenciais.
No menu Criar credenciais, selecione Conta de serviço.
Insira um nome no campo Nome da conta de serviço e clique em Criar e continuar.
Pule as telas opcionais de atribuição de papel e acesso de principal clicando em Continuar > Concluído.
Copie o endereço de e-mail da conta de serviço para usar nas etapas de configuração.
Criar um papel personalizado do IAM
Para fornecer à integração os recursos de pesquisa necessários, crie um papel personalizado:
No console do Google Cloud , acesse IAM e administrador > Papéis.
Clique em Criar papel e forneça um Título (como "Pesquisador de recursos do SecOps") e um ID exclusivo.
Defina o Estágio de lançamento do papel como Disponibilidade geral.
Clique em Adicionar permissões e adicione
cloudasset.assets.searchAllResources.Clique em Criar.
Conceder papéis à conta de serviço
Para permitir que a integração acesse seus recursos, conceda os seguintes papéis à sua conta de serviço:
No console do Google Cloud , acesse IAM e administrador > IAM.
Localize sua conta de serviço e clique em editEditar principal.
Clique em Adicionar outro papel e selecione o seguinte:
O papel personalizado do IAM criado na etapa anterior.
Leitor de recursos do Cloud.
Consumidor do Service Usage (necessário apenas se você usar um
Quota Project ID).
Clique em Salvar.
Configurar credenciais da Identidade da carga de trabalho
Escolha esse método ou o método de chave JSON para autenticar a integração. A Identidade da carga de trabalho é a abordagem recomendada e mais segura porque usa tokens de acesso temporários de curta duração com a identidade temporária de conta de serviço, eliminando a necessidade de armazenar ou alternar secrets de longa duração.
Identificar a identidade exclusiva da instância
Para autenticar usando uma Identidade da carga de trabalho, conceda à instância do Google SecOps permissão para representar sua conta de serviço. Isso permite que a instância acesse os recursos do Google Cloud com segurança.
No Google SecOps, acesse Hub de conteúdo > Integrações de resposta.
Selecione a integração do Inventário de recursos do Cloud e insira o e-mail da conta de serviço em
Workload Identity Email.Clique em Salvar > Testar. O teste deve falhar.
Clique em close_small à direita de Teste e pesquise na mensagem de erro o e-mail de identidade que começa com
gke-init-python@...ousoar-python@....Copie esse endereço de e-mail exclusivo.
Autorize a identidade da instância em Google Cloud
Depois de recuperar a identidade exclusiva da sua instância do Google SecOps, você precisa autorizá-la a acessar seus recursos doGoogle Cloud . Essa etapa permite a identidade temporária de conta de serviço, permitindo que a plataforma gere tokens de curta duração e aja em seu nome sem a necessidade de chaves estáticas.
No console do Google Cloud , acesse IAM e administrador > Contas de serviço.
Selecione a conta de serviço de destino e acesse Permissões > Conceder acesso.
Cole o endereço de e-mail exclusivo no campo Novos principais e atribua o papel Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator).
Conceder acesso ao projeto de cota
Ao autenticar com uma Identidade da carga de trabalho, é preciso especificar um
Quota Project ID nas configurações de integração para acompanhar o uso e o faturamento da API.
Para autorizar isso, conceda à conta de serviço o seguinte papel no projeto de cota designado:
No console do Google Cloud , acesse IAM e administrador > IAM e selecione seu projeto.
Localize sua conta de serviço na lista de principais e clique em editar(Editar principal) para essa conta.
Clique em Adicionar outro papel e selecione o papel Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer).Clique em Salvar.
Configurar uma chave JSON
Escolha esse método ou o método de Identidade da carga de trabalho para autenticar a integração. Use o método de chave JSON somente se a Identidade da carga de trabalho não estiver disponível no seu ambiente. A Identidade da carga de trabalho é a abordagem recomendada e mais segura. Esse método depende de um arquivo de chave secreta estático e de longa duração que exige gerenciamento e rotação manuais.
Use o procedimento a seguir para gerar o arquivo de chave JSON necessário para autenticar a integração:
No console do Google Cloud , acesse IAM e administrador > Contas de serviço e selecione a conta de serviço que você criou.
Acesse a guia Chaves.
Clique em Adicionar chave > Criar nova chave.
Selecione
JSONcomo o tipo de chave e clique em Criar. O download do arquivo JSON será feito no seu computador.Copie todo o conteúdo desse arquivo e cole em
User's Service Accountdurante a configuração da integração.
Parâmetros de integração
A integração do Inventário de recursos do Cloud requer os seguintes parâmetros:
| Parâmetro | Descrição |
|---|---|
API Root |
Obrigatório
A raiz da API da instância do Inventário de recursos do Cloud. O valor padrão é |
Organization ID |
Opcional
O ID da organização que será usado na integração do Inventário de recursos do Cloud. |
Project ID |
Opcional O ID do projeto a ser usado para a integração do Inventário de recursos do Cloud. Se nenhum valor for fornecido, a integração
recuperará o ID do projeto do conteúdo do arquivo JSON fornecido no
parâmetro |
User's Service Account |
Obrigatório
O conteúdo completo do arquivo de chave JSON da conta de serviço. |
Quota Project ID |
Opcional O ID do projeto do Google Cloud que você usa para
as APIs e o faturamento do Google Cloud . Esse parâmetro exige que você conceda
o papel Se nenhum valor for fornecido, a integração vai recuperar o ID do projeto da sua conta de serviço do Google Cloud . |
Workload Identity Email |
Opcional.
O endereço de e-mail do cliente da conta de serviço usada para a identidade temporária da Identidade da carga de trabalho. |
Verify SSL |
Obrigatório
Se selecionada, a integração valida o certificado SSL ao se conectar ao servidor do Inventário de recursos do Cloud. Ativado por padrão. |
Para instruções sobre como configurar uma integração no Google SecOps, consulte Configurar integrações.
Se necessário, você pode fazer mudanças depois. Depois de configurar uma instância de integração, é possível usá-la em playbooks. Para mais informações sobre como configurar e oferecer suporte a várias instâncias, consulte Como oferecer suporte a várias instâncias.
Ações
Para mais informações sobre ações, consulte Responder a ações pendentes na sua mesa de trabalho e Executar uma ação manual no seu caso.
Enriquecer recurso
Use a ação Enriquecer recurso para enriquecer informações sobre um recurso do Google Cloud usando o Inventário de recursos do Cloud.
Essa ação não é executada em entidades do Google SecOps.
Entradas da ação
Para configurar a ação Enriquecer recurso, use os seguintes parâmetros:
| Parâmetro | Descrição |
|---|---|
Resource Names |
Obrigatório
Uma lista separada por vírgulas com nomes de recursos para buscar detalhes. Para configurar esse parâmetro, insira o nome completo do recurso de metadados no seguinte formato: |
Fields To Return |
Opcional
Uma lista separada por vírgulas de campos a serem retornados. O valor padrão é Confira alguns exemplos de valores:
A ação sempre retorna o campo Também é possível configurar filtros avançados. Por exemplo, para
retornar uma chave específica de |
Saídas da ação
A ação Enriquecer recurso fornece as seguintes saídas:
| Tipo de saída da ação | Disponibilidade |
|---|---|
| Anexo do Painel de Casos | Indisponível |
| Link do Painel de Casos | Indisponível |
| Tabela do painel de casos | Indisponível |
| Tabela de enriquecimento | Indisponível |
| Resultado JSON | Disponível |
| Mensagens de saída | Disponível |
| Resultado do script | Disponível |
Resultado JSON
O exemplo a seguir mostra a saída do resultado JSON recebida ao usar a ação 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"
}
}
]
Mensagens de saída
A ação Enrich Resource pode retornar as seguintes mensagens de saída:
| Mensagem de resposta | Descrição da mensagem |
|---|---|
|
A ação foi concluída. |
Error executing action "Enrich resources". Reason:
ERROR_REASON |
A ação falhou. Verifique a conexão com o servidor, os parâmetros de entrada ou as credenciais. |
Resultado do script
A tabela a seguir lista o valor da saída do resultado do script ao usar a ação Enriquecer recurso:
| Nome do resultado do script | Valor |
|---|---|
is_success |
True ou False |
Receber snapshot de recurso
Use a ação Receber snapshot do recurso para receber informações sobre o recurso usando o Inventário de recursos do Cloud.
Essa ação não é executada em entidades do Google SecOps.
Entradas da ação
Para configurar a ação Get Resource Snapshot, use os seguintes parâmetros:
| Parâmetro | Descrição |
|---|---|
Resource Names |
Obrigatório Uma lista separada por vírgulas de recursos para buscar detalhes. Para configurar esse parâmetro, insira o nome completo do recurso de metadados no seguinte formato: |
Fields To Return |
Opcional Uma lista separada por vírgulas de campos a serem retornados. Insira todos os campos no seguinte formato: assets.FIELD
Confira alguns exemplos de valores: A ação sempre retorna o campo O valor padrão é |
Saídas da ação
A ação Get Resource Snapshot fornece as seguintes saídas:
| Tipo de saída da ação | Disponibilidade |
|---|---|
| Anexo do Painel de Casos | Indisponível |
| Link do Painel de Casos | Indisponível |
| Tabela do painel de casos | Indisponível |
| Tabela de enriquecimento | Indisponível |
| Resultado JSON | Disponível |
| Mensagens de saída | Disponível |
| Resultado do script | Disponível |
Resultado JSON
Os exemplos a seguir mostram as saídas de resultado JSON recebidas ao usar 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 retornar as seguintes mensagens de saída:
| Mensagem de resposta | Descrição da mensagem |
|---|---|
Successfully returned information about the following resources
using Google Cloud Asset Inventory:
ASSET_IDENTIFIER
|
A ação foi concluída. |
Error executing action "Get Resource Snapshot". Reason:
ERROR_REASON |
A ação falhou. Verifique a conexão com o servidor, os parâmetros de entrada ou as credenciais. |
Resultado do script
A tabela a seguir lista o valor da saída do resultado do script ao usar a ação Get Resource Snapshot:
| Nome do resultado do script | Valor |
|---|---|
is_success |
True ou False |
Listar papéis da conta de serviço
Use a ação Listar papéis da conta de serviço para listar papéis relacionados à conta de serviço do Google Cloud usando o Inventário de recursos do Cloud.
Essa ação não é executada em entidades do Google SecOps.
Entradas da ação
Para configurar a ação Listar papéis da conta de serviço, use os seguintes parâmetros:
| Parâmetro | Descrição |
|---|---|
Service Accounts |
Obrigatório Uma lista separada por vírgulas de contas de serviço para buscar detalhes. |
Check Roles |
Opcional Uma lista separada por vírgulas de papéis a serem verificados em relação
à conta de serviço, como |
Check Permissions |
Opcional Uma lista separada por vírgulas de permissões para verificar em
relação à conta de serviço, como |
Expand Permissions |
Opcional Se selecionada, a ação retorna informações sobre todas as permissões exclusivas relacionadas ao recurso. Não selecionada por padrão. |
Max Roles To Return |
Obrigatório O número de papéis relacionados à conta de serviço a serem retornados. O valor padrão é 100. |
Max Permissions To Return |
Obrigatório O número de permissões relacionadas à conta de serviço a serem retornadas. |
Saídas da ação
A ação Listar papéis da conta de serviço fornece as seguintes saídas:
| Tipo de saída da ação | Disponibilidade |
|---|---|
| Anexo do Painel de Casos | Indisponível |
| Link do Painel de Casos | Indisponível |
| Tabela do painel de casos | Indisponível |
| Tabela de enriquecimento | Indisponível |
| Resultado JSON | Disponível |
| Mensagens de saída | Disponível |
| Resultado do script | Disponível |
Resultado JSON
O exemplo a seguir mostra a saída do resultado JSON recebida ao usar a ação Listar papéis da conta de serviço:
{
"roles": ["role1", "role2"],
"unique_permissions": ["permission1", "permission2"]
}
Mensagens de saída
A ação Listar papéis da conta de serviço pode retornar as seguintes mensagens de saída:
| Mensagem de resposta | Descrição da mensagem |
|---|---|
|
A ação foi concluída. |
Error executing action "List Service Account Roles". Reason:
ERROR_REASON |
A ação falhou. Verifique a conexão com o servidor, os parâmetros de entrada ou as credenciais. |
Ping
Use a ação Ping para testar a conectividade com o Inventário de recursos do Cloud.
Essa ação não é executada em entidades do Google SecOps.
Entradas da ação
Nenhuma.
Saídas da ação
A ação Ping fornece as seguintes saídas:
| Tipo de saída da ação | Disponibilidade |
|---|---|
| Anexo do Painel de Casos | Indisponível |
| Link do Painel de Casos | Indisponível |
| Tabela do painel de casos | Indisponível |
| Tabela de enriquecimento | Indisponível |
| Resultado JSON | Indisponível |
| Mensagens de saída | Disponível |
| Resultado do script | Disponível |
Mensagens de saída
A ação Ping pode retornar as seguintes mensagens de saída:
| Mensagem de resposta | Descrição da mensagem |
|---|---|
Successfully connected to the Google Cloud Asset Inventory
server with the provided connection parameters! |
A ação foi concluída. |
Failed to connect to the Google Cloud Asset Inventory server!
|
A ação falhou. |
Resultado do script
A tabela a seguir lista o valor da saída do resultado do script ao usar 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 do Google SecOps.