Como usar insights de recursos

Este tópico mostra como usar o Insights de recursos para detectar possíveis riscos nas configurações de seus recursos e ajudar a melhorar sua postura de segurança.

Visão geral

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 Recommender e é fornecido como o tipo de insight google.cloudasset.asset.Insight. Os insights são anomalias específicas que exigem mais análises para determinar a ação apropriada. Elas são geradas diariamente com base em um snapshot dos dados armazenados no Cloud Asset Inventory.

Antes de começar

Antes de começar a usar o Asset Insights, você precisa concluir as etapas a seguir.

  1. Ative a API Recommender.

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

    • recommender.cloudAssetInsights.get
    • recommender.cloudAssetInsights.list
    • recommender.cloudAssetInsights.update

    É possível conceder essas permissões individualmente ou um dos seguintes papéis.

    • Papel do Visualizador do Cloud Asset Insights (roles/recommender.cloudAssetInsightsViewer)
    • Papel de administrador do Cloud Asset Insights (roles/recommender.cloudAssetInsightsAdmin)

Como solicitar insights de recursos

Para solicitar Insights de recursos, a maneira mais fácil é listar insights, conforme mostrado nas etapas a seguir. Para outros tipos de interação de insights, consulte o guia de insights da API Recommender.

Como solicitar insights do projeto

Para solicitar insights para 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á necessário.
  • --filter é opcional, mas pode ser usado para filtrar resultados por subtipo de insight.
  • FORMAT é um formato de saída compatível com a ferramenta gcloud. Por exemplo, para listar o conteúdo de insights como uma tabela nivelada:
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 seguinte comando curl.

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 de pasta

Para solicitar insights para 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á necessário.
  • --filter é opcional, mas pode ser usado para filtrar resultados por subtipo de insight.
  • FORMAT é um formato de saída compatível com a ferramenta gcloud. Por exemplo, para listar o conteúdo de insights como uma tabela nivelada:
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 seguinte comando curl.

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"

Solicitar insights da organização

Para solicitar insights para 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á necessário.
  • --filter é opcional, mas pode ser usado para filtrar resultados por subtipo de insight.
  • FORMAT é um formato de saída compatível com a ferramenta gcloud. Por exemplo, para listar o conteúdo de insights como uma tabela nivelada:
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 seguinte comando curl.

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 do insight

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

Subtipos de insights

Há sete subtipos Insight Insight.

  • EXTERNAL_MEMBER: detecta políticas de 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 de IAM que contêm usuários ou grupos fora dos domínios da organização que têm permissão para modificar as 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 de IAM que contêm usuários ou grupos fora dos domínios da organização que têm permissão para personificar contas de serviço.
  • TERMINATED_MEMBER: detecta políticas de IAM que contêm usuários ou grupos com contas inativas ou encerradas.
  • PUBLIC_IAM_POLICY: detecta políticas de 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 de IAM do projeto.

Campos content adicionais

Além dos campos padrão na resposta, o Asset Insights fornece vários recursos especializados no campo content.

  • user: o endereço de e-mail específico do usuário detectado nos membros das vinculações de política para esse insight específico. Esse 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 em que o acesso foi detectado para esse insight específico. Esse campo 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 está incluído para todos os subtipos Asset Insights.
  • matchedPolicies: uma amostragem das políticas de IAM correspondentes ao insight detectado. As políticas correspondentes incluirão apenas o subconjunto de vinculações e membros associados que corresponderem ao insight detectado. Esse campo está incluído em todos os subtipos Asset Insights.
  • policySearchQuery: uma consulta que pode ser usada com a API de pesquisa de políticas do IAM do Cloud Asset Inventory para recuperar todas as políticas relevantes em tempo real.

Exemplo de resposta

O snippet a seguir mostra o formato de uma resposta de amostra.

[{
   "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 devem ser consideradas uma lista completa de vulnerabilidades correspondentes.
  • Os insights individuais incluem uma amostra de 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 as contas de serviço para fins de geração de insights.