Como usar insights de recursos

Neste tópico, veja como usar insights de recursos para detectar possíveis riscos nas configurações do recurso e melhorar a postura de segurança.

Informações gerais

O Cloud Asset Insights fornece insights com base nas políticas do IAM associadas aos recursos da sua organização. Ele faz parte do serviço Recomendador e é fornecido como o tipo de insight google.cloudasset.asset.Insight. Os insights são anomalias específicas que exigem análise mais aprofundada para determinar a ação apropriada. Eles são gerados diariamente com base em um snapshot dos dados armazenados no Inventário de recursos do Cloud.

Antes de começar

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

  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)

Como solicitar insights de recursos

A solicitação de insights de recursos é a maneira mais fácil de listar os insights. Veja nas etapas a seguir. Veja outros tipos de interações de insights no guia de insights para a API Recommender.

Como solicitar insights do projeto

Para solicitar insights para um projeto, faça uma das solicitações a seguir.

gcloud

Execute os seguintes comandos da CLI gcloud para listar insights do projeto, da pasta ou da organização.

Projetos

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

Forneça os valores a seguir:

  • PROJECT_ID: o ID do projeto para o qual você quer insights.

Outras sinalizações:

  • --filter: opcional. Filtra os resultados por subtipo de insight.

  • --format: opcional. Um formato de saída compatível com a CLI gcloud. Por exemplo, para listar o conteúdo de insights como uma tabela nivelada:

    gcloud recommender insights list \
        --project=PROJECT_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

Pastas

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

Forneça os valores a seguir:

  • FOLDER_ID: o ID da pasta para as quais você quer insights.

    Como encontrar um ID de pasta do Google Cloud

    Console

    Para encontrar um ID da pasta do Google Cloud, siga estas etapas:

    1. Acesse o console do Google Cloud.

      Acesse o console do Google Cloud

    2. Clique na caixa do seletor na barra de menus.
    3. Clique na caixa Selecionar de e escolha sua organização.
    4. Pesquise o nome da pasta. O ID é exibido ao lado do nome da pasta.

    CLI da gcloud

    Para recuperar um ID de pasta do Google Cloud localizado no nível da organização, use 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 pode ser uma correspondência de string completa ou parcial. Remova a opção --format para ver mais informações sobre as pastas encontradas.

    Para obter o ID de uma pasta dentro de outra pasta, liste as subpastas:

    gcloud resource-manager folders list --folder=FOLDER_ID

Outras sinalizações:

  • --filter: opcional. Filtra os resultados por subtipo de insight.

  • --format: opcional. Um formato de saída compatível com a CLI gcloud. Por exemplo, para listar o conteúdo de insights como uma tabela nivelada:

    gcloud recommender insights list \
        --folder=FOLDER_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

Organizações

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

Forneça os valores a seguir:

  • ORGANIZATION_ID: o ID da organização para as quais você quer insights.

    Como encontrar um ID da organização do Google Cloud

    Console

    Para encontrar um ID da organização do Google Cloud, siga estas etapas:

    1. Acesse o console do Google Cloud.

      Acesse o console do Google Cloud

    2. Clique na caixa do seletor na barra de menus.
    3. Clique na caixa Selecionar de e escolha sua organização.
    4. Selecione a guia Todos. O ID é exibido ao lado do nome da organização.

    CLI da gcloud

    É possível recuperar um ID da organização do Google Cloud com o seguinte comando:

    gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

Outras sinalizações:

  • --filter: opcional. Filtra os resultados por subtipo de insight.

  • --format: opcional. Um formato de saída compatível com a CLI gcloud. Por exemplo, para listar o conteúdo de insights como uma tabela nivelada:

    gcloud recommender insights list \
        --organization=ORGANIZATION_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

REST

Execute o comando curl a seguir para listar insights do seu projeto, pasta ou organização.

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

Forneça os valores a seguir:

  • SCOPE: um escopo pode ser um projeto, uma pasta ou uma organização.

    Os valores permitidos são:

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      Como encontrar um número de projeto do Google Cloud

      Console

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

      1. Acesse a página Painel no console do Google Cloud.

        Ir para o painel

      2. Clique na caixa do seletor na barra de menus.
      3. Escolha a organização na caixa Selecionar de e pesquise o nome do projeto.
      4. Clique no nome do projeto para alternar para ele. O número do projeto é mostrado no card Informações do projeto.

      CLI da gcloud

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

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Como encontrar um ID de pasta do Google Cloud

      Console

      Para encontrar um ID da pasta do Google Cloud, siga estas etapas:

      1. Acesse o console do Google Cloud.

        Acesse o console do Google Cloud

      2. Clique na caixa do seletor na barra de menus.
      3. Clique na caixa Selecionar de e escolha sua organização.
      4. Pesquise o nome da pasta. O ID é exibido ao lado do nome da pasta.

      CLI da gcloud

      Para recuperar um ID de pasta do Google Cloud localizado no nível da organização, use 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 pode ser uma correspondência de string completa ou parcial. Remova a opção --format para ver mais informações sobre as pastas encontradas.

      Para obter o ID de uma pasta dentro de outra pasta, liste as subpastas:

      gcloud resource-manager folders list --folder=FOLDER_ID

    • organizations/ORGANIZATION_ID

      Como encontrar um ID da organização do Google Cloud

      Console

      Para encontrar um ID da organização do Google Cloud, siga estas etapas:

      1. Acesse o console do Google Cloud.

        Acesse o console do Google Cloud

      2. Clique na caixa do seletor na barra de menus.
      3. Clique na caixa Selecionar de e escolha sua organização.
      4. Selecione a guia Todos. O ID é exibido ao lado do nome da organização.

      CLI da gcloud

      É possível recuperar um ID da organização do Google Cloud com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

Como interpretar as respostas dos insights

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

Subtipos de insights

Existem sete subtipos distintos de insights de recursos

  • 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, o Asset Insights oferece vários campos especializados no campo content.

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

  • domain: o domínio específico detectado nos membros das vinculações de política desse insight específico. 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 específico. 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 específico. 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 incluem apenas o subconjunto de vinculações e membros de vinculação que correspondem ao insight detectado. Esse campo está incluído em todos os subtipos de Insights de recursos.

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

Exemplo de resposta

O snippet de código a seguir mostra o formato de um exemplo de resposta.

{
   "name": "organizations/1234567/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/0ab35ae7-afa8-42a3-a173-92da8771a489",
   "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/5678910",
            "project" :"projects/5678910",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2020-12-04T06:59:04Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/1234567"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2020-12-01T06:58:03Z"
}

Limitações

  • Esses insights não consideram as associações a grupos 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, que são limitadas a 100 políticas distintas. Todas as políticas correspondentes podem ser recuperadas chamando a pesquisa de políticas do Cloud Asset Inventory.

  • Os insights de recursos não consideram contas de serviço para fins de geração de insights.