Melhorar sua postura de segurança com insights de recursos

Os insights do inventário de recursos do Cloud podem ajudar a detectar possíveis riscos nas configurações de recursos e melhorar sua postura de segurança. Ele faz parte do serviço do Recomendador e é fornecido como o tipo de insight google.cloudasset.asset.Insight.

Os insights são anomalias específicas que exigem uma análise mais detalhada para determinar a ação adequada. Eles são gerados diariamente com base em um snapshot dos dados armazenados no Inventário de recursos do Cloud.

Os insights fornecidos pelo Inventário de recursos do Cloud são baseados nas políticas do IAM associadas aos recursos da sua organização.

Antes de começar

Antes de começar a usar os insights de recursos, conclua as seguintes etapas.

  1. Ative a API Recommender.

  2. Verifique se a sua conta tem as seguintes permissões:

    • recommender.cloudAssetInsights.get

    • recommender.cloudAssetInsights.list

    • recommender.cloudAssetInsights.update

    É possível conceder essas permissões individualmente ou então um dos papéis a seguir.

    • Papel Leitor de insights de recursos do Cloud (roles/recommender.cloudAssetInsightsViewer)

    • Papel Administrador de insights de recursos do Cloud (roles/recommender.cloudAssetInsightsAdmin)

Limitações

  • Esses insights não consideram as associações a grupos ou contas de serviço como parte das descobertas e não podem ser considerados uma lista completa de vulnerabilidades correspondentes.

  • Os insights individuais incluem uma amostragem das políticas de IAM correspondentes, limitada a 100 políticas distintas. Todas as políticas correspondentes podem ser recuperadas pesquisando políticas de permissão do IAM em recursos.

Solicitar insights de recursos

A maneira mais fácil de solicitar insights de recursos é listá-los, conforme mostrado nas etapas a seguir. Para outros tipos de interações de insights, consulte Usar a API - Insights.

gcloud

gcloud recommender insights list \
    --SCOPE \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \

Forneça os valores a seguir:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, em que PROJECT_ID é o ID do projeto para o qual você quer insights.
    • folder=FOLDER_ID, em que FOLDER_ID é o ID da pasta para a qual você quer insights.

      Como encontrar o ID de uma pasta

      Google Cloud console

      Para encontrar o ID de uma pasta do Google Cloud , siga estas etapas:

      1. Acesse o console Google Cloud .

        Acesse o console do Google Cloud

      2. Clique na caixa de lista switcher na barra de menu.
      3. Selecione sua organização no campo de lista.
      4. Pesquise o nome da pasta. O ID da pasta é mostrado ao lado do nome dela.

      CLI da gcloud

      É possível extrair o ID de uma pasta do Google Cloud que está no nível da organização com o seguinte comando:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      Em que TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para conferir mais informações sobre as pastas encontradas.

      O comando anterior não retorna os IDs das subpastas dentro das pastas. Para fazer isso, execute o seguinte comando usando o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, em que ORGANIZATION_ID é o ID da organização para a qual você quer insights.

      Como encontrar o ID de uma organização do Google Cloud

      Google Cloud console

      Para encontrar o ID de uma organização do Google Cloud , siga estas etapas:

      1. Acesse o console Google Cloud .

        Acesse o console do Google Cloud

      2. Clique na caixa de lista switcher na barra de menu.
      3. Selecione sua organização no campo de lista.
      4. Selecione a guia Todos. O ID da organização aparece ao lado do nome dela.

      CLI da gcloud

      É possível extrair o ID de uma organização do Google Cloud com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: opcional. O ID do projeto em que o agente de serviço padrão do Inventário de recursos do Cloud tem permissões para gerenciar seu faturamento e sua cota. Saiba mais sobre como configurar o projeto de faturamento.

  • SUBTYPE: o subtipo de insight do recurso. Um dos seguintes valores:

    • EXTERNAL_MEMBER: detecta políticas do IAM que contêm usuários ou grupos que pertencem a um domínio fora dos domínios da sua organização.
    • EXTERNAL_POLICY_EDITOR: detecta políticas do IAM que contêm usuários ou grupos fora dos domínios da organização e que têm permissão para modificar políticas do IAM.
    • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER: detecta políticas do IAM que contêm usuários ou grupos fora dos domínios da organização e que têm permissão para receber ou listar objetos de armazenamento (permissão storage.objects.list ou storage.objects.get).
    • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR: detecta políticas do IAM que contêm usuários ou grupos fora dos domínios da organização e que têm permissão para representar contas de serviço.
    • TERMINATED_MEMBER: detecta políticas do IAM que contêm usuários ou grupos com contas desativadas, excluídas ou limpas.
    • PUBLIC_IAM_POLICY: detecta políticas do IAM que contêm todos os usuários ou todos os usuários autenticados.
    • OWNER_TERMINATED_PROJECT: detecta projetos que não contêm usuários ou grupos ativos na política do IAM do projeto.
  • Se não for especificado, todos os subtipos serão retornados.

Consulte a referência da CLI do gcloud para conferir todas as opções.

Exemplo

Execute o comando a seguir para listar insights do projeto my-project.

gcloud recommender insights list \
    --project=my-project \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight

Exemplo de resposta

INSIGHT_ID: 00000000-0000-0000-0000-000000000000
CATEGORY: SECURITY
INSIGHT_STATE: ACTIVE
LAST_REFRESH_TIME: 2024-01-30T00:00:00Z
SEVERITY: LOW
INSIGHT_SUBTYPE: EXTERNAL_MEMBER
DESCRIPTION: Domain example.com detected in 1 IAM policies

REST

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/SCOPE_PATH/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Forneça os valores a seguir:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, em que PROJECT_ID é o ID do projeto para o qual você quer insights.
    • projects/PROJECT_NUMBER, em que PROJECT_NUMBER é o número do projeto para o qual você quer insights.

      Como encontrar um número de projeto do Google Cloud

      Google Cloud console

      Para encontrar um número de projeto do Google Cloud , siga estas etapas:

      1. Acesse a página Welcome no console Google Cloud .

        Acessar a página de boas-vindas

      2. Clique na caixa de lista switcher na barra de menu.
      3. Selecione sua organização na caixa de lista e pesquise o nome do projeto. O nome, o número e o ID do projeto são mostrados perto do título Welcome.

        Até 4.000 recursos são exibidos. Se você não encontrar o projeto que está procurando, acesse a página Gerenciar recursos e filtre a lista usando o nome dele.

      CLI da gcloud

      É possível extrair um número de projeto do Google Cloud com o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, em que FOLDER_ID é o ID da pasta para a qual você quer insights.

      Como encontrar o ID de uma pasta do Google Cloud

      Google Cloud console

      Para encontrar o ID de uma pasta do Google Cloud , siga estas etapas:

      1. Acesse o console Google Cloud .

        Acesse o console do Google Cloud

      2. Clique na caixa de lista switcher na barra de menu.
      3. Selecione sua organização no campo de lista.
      4. Pesquise o nome da pasta. O ID da pasta é mostrado ao lado do nome dela.

      CLI da gcloud

      É possível extrair o ID de uma pasta do Google Cloud que está no nível da organização com o seguinte comando:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      Em que TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para conferir mais informações sobre as pastas encontradas.

      O comando anterior não retorna os IDs das subpastas dentro das pastas. Para fazer isso, execute o comando abaixo usando o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, em que ORGANIZATION_ID é o ID da organização para a qual você quer insights.

      Como encontrar o ID de uma organização do Google Cloud

      Google Cloud console

      Para encontrar o ID de uma organização do Google Cloud , siga estas etapas:

      1. Acesse o console Google Cloud .

        Acesse o console do Google Cloud

      2. Clique na caixa de lista switcher na barra de menu.
      3. Selecione sua organização no campo de lista.
      4. Selecione a guia Todos. O ID da organização aparece ao lado do nome dela.

      CLI da gcloud

      É possível extrair o ID de uma organização do Google Cloud com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: o ID do projeto em que o agente de serviço padrão do Inventário de recursos do Cloud tem permissões para gerenciar seu faturamento e sua cota. Saiba mais sobre como configurar o projeto de faturamento.

Exemplos de comando

Execute um dos comandos a seguir para listar insights do projeto my-project.

curl (Linux, macOS ou Cloud Shell)

curl -X GET \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://recommender.googleapis.com/v1/projects/my-project/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://recommender.googleapis.com/v1/projects/my-project/locations/global/insightTypes/google.cloudasset.asset.Insight/insights" | Select-Object -Expand Content

Exemplo de resposta

{
   "name": "organizations/000000000000/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/00000000-0000-0000-0000-000000000000",
   "description": "Domain example.com detected in 1 IAM policies",
   "content": {
      "domain": "example.com",
      "policyCount": 1,
      "policySearchQuery": "policy: example.com",
      "matchedPolicies" :[
         {
            "resource" :"//cloudresourcemanager.googleapis.com/projects/000000000000",
            "project" :"projects/000000000000",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2024-01-30T00:00:00Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/000000000000"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2024-01-30T00:00:00Z"
}

Como interpretar as respostas dos insights

Além dos atributos de insight padrão, os insights de recursos fornecem vários subtipos e campos especializados.

Subtipos de insights

Os subtipos de insights de recursos são os seguintes:

  • EXTERNAL_MEMBER: detecta políticas do IAM que contêm usuários ou grupos que pertencem a um domínio fora dos domínios da sua organização.

  • EXTERNAL_POLICY_EDITOR: detecta políticas do IAM que contêm usuários ou grupos fora dos domínios da organização e que têm permissão para alterar políticas do IAM.

  • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER: detecta políticas do IAM que contêm usuários ou grupos fora dos domínios da organização que têm permissão para receber ou listar objetos de armazenamento (storage.objects.list ou storage.objects.get permission).

  • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR: detecta políticas do IAM que contêm usuários ou grupos fora dos domínios da organização e que têm permissão para representar contas de serviço.

  • TERMINATED_MEMBER: detecta políticas do IAM que contêm usuários ou grupos com contas desativadas, excluídas ou limpas.

  • PUBLIC_IAM_POLICY: detecta políticas do IAM que contêm todos os usuários ou todos os usuários autenticados.

  • OWNER_TERMINATED_PROJECT: detecta projetos que não contêm usuários ou grupos ativos na política do IAM do projeto.

Outros campos de conteúdo

Além dos campos padrão na resposta, os insights de recursos fornecem vários campos especializados no campo content.

  • user: o endereço de e-mail do usuário detectado nos membros das vinculações de políticas para esse insight. Esse campo está incluído no subtipo TERMINATED_MEMBER.

  • domain: o domínio detectado nos membros das vinculações de políticas desse insight. Esse campo está incluído nos subtipos EXTERNAL_MEMBER, EXTERNAL_POLICY_EDITOR, EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER e EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR.

  • assetName: o nome do recurso para o qual o acesso foi detectado neste insight. Esse campo está incluído nos subtipos OWNER_TERMINATED_PROJECT e PUBLIC_IAM_POLICY.

  • policyCount: o número total de políticas de IAM distintas em que os membros correspondentes foram detectados para esse insight. Esse campo é incluído para todos os subtipos de insights de recursos.

  • matchedPolicies: uma amostra das políticas do IAM correspondentes ao insight detectado. As políticas de correspondência só incluem o subconjunto de vinculações e membros de vinculação que correspondem ao insight detectado. Esse campo é incluído para todos os subtipos de insights de recursos.

  • policySearchQuery: uma consulta que pode ser usada com a API de pesquisa de políticas do IAM do Inventário de recursos do Cloud para recuperar as políticas relevantes em tempo real.