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.

Visão geral

Os insights de recursos do Cloud fornecem insights com base nas políticas do IAM associadas aos recursos da sua organização. Isso 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 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.

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 os insights de um projeto, conclua as etapas a seguir.

gcloud

Execute o seguinte comando da ferramenta gcloud.

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

Em que:

  • BILLING_PROJECT é o projeto que ativou a API Recommender. Como alternativa, se você definir um projeto como billing/quota_project na configuração da ferramenta gcloud, esse parâmetro não será obrigatório.
  • --filter é opcional, mas pode ser usado para filtrar resultados por subtipo de insight.
  • FORMAT é um formato de saída aceito pela ferramenta gcloud. Por exemplo, para listar o conteúdo do insight como uma tabela simplificada:
gcloud recommender insights list \
    --project=PROJECT \
    --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)"

API

Execute o comando curl a seguir.

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
  -H "x-goog-user-project: WHITELISTED_PROJECT" \
  "https://recommender.googleapis.com/v1/projects/PROJECT/locations/global/insightTypes/google.cloudasset.asset.Insight/insights"

Como solicitar insights da pasta

Para solicitar os insights de uma pasta, conclua as etapas a seguir.

gcloud

Execute o seguinte comando da ferramenta gcloud.

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

Em que:

  • BILLING_PROJECT é o projeto que ativou a API Recommender. Como alternativa, se você definir um projeto como billing/quota_project na configuração da ferramenta gcloud, esse parâmetro não será obrigatório.
  • --filter é opcional, mas pode ser usado para filtrar resultados por subtipo de insight.
  • FORMAT é um formato de saída aceito pela ferramenta gcloud. Por exemplo, para listar o conteúdo do insight como uma tabela simplificada:
gcloud recommender insights list \
    --folder=FOLDER_NUMBER \
    --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)"

API

Execute o comando curl a seguir.

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
  -H "x-goog-user-project: PROJECT" \
  "https://recommender.googleapis.com/v1/folders/FOLDER_NUMBER/locations/global/insightTypes/google.cloudasset.asset.Insight/insights"

Como solicitar insights da organização

Para solicitar os insights de uma organização, conclua as etapas a seguir.

gcloud

Execute o seguinte comando da ferramenta gcloud.

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

Em que:

  • BILLING_PROJECT é o projeto que ativou a API Recommender. Como alternativa, se você definir um projeto como billing/quota_project na configuração da ferramenta gcloud, esse parâmetro não será obrigatório.
  • --filter é opcional, mas pode ser usado para filtrar resultados por subtipo de insight.
  • FORMAT é um formato de saída aceito pela ferramenta gcloud. Por exemplo, para listar o conteúdo do insight como uma tabela simplificada:
gcloud recommender insights list \
    --organization=ORGANIZATION \
    --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)"

API

Execute o comando curl a seguir.

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)"  \
-H "x-goog-user-project: PROJECT" \
"https://recommender.googleapis.com/v1/organizations/ORGANIZATION

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

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 content

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

  • user: o endereço de e-mail do usuário específico detectado entre os membros das vinculações de políticas desse insight específico. Este campo está incluído no subtipo TERMINATED_MEMBER.
  • domain: o domínio específico detectado entre os membros das vinculações de políticas 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 vai ser 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 só vão incluir o subconjunto de vinculações e membros de vinculações que corresponderem 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 todas as políticas relevantes em tempo real.

Exemplo de resposta

O snippet 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 Inventário de recursos do Cloud.
  • Os insights de recursos não consideram contas de serviço para fins de geração de insights.