Cómo usar las estadísticas de recursos

En este tema, se muestra cómo usar las Estadísticas de recursos para detectar posibles riesgos en la configuración del recurso y ayudarte a mejorar tu posición de seguridad.

Descripción general

Cloud Asset Insights proporciona estadísticas basadas en las políticas de IAM asociadas con los recursos de tu organización. Es parte del servicio de Recomendador y se proporciona como el tipo de estadística google.cloudasset.asset.Insight. Las estadísticas son anomalías específicas que requieren un análisis más detallado para determinar la acción adecuada. Se generan a diario, en función de una instantánea de los datos almacenados en Cloud Asset Inventory.

Antes de comenzar

Antes de comenzar a usar las Estadísticas de elementos, debes completar los siguientes pasos.

  1. Habilita la API de recomendador.

  2. Asegúrate de que tu cuenta tenga los siguientes permisos.

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

    Puedes otorgar estos permisos de forma individual o puedes otorgar una de las siguientes funciones.

    • Función de visualizador de estadísticas de recursos de Cloud (roles/recommender.cloudAssetInsightsViewer)
    • Función de administrador de Cloud Asset Insights (roles/recommender.cloudAssetInsightsAdmin)

Cómo solicitar estadísticas de elementos

Para solicitar Estadísticas de elementos, la manera más sencilla es detallar las estadísticas como se muestra en los siguientes pasos. Para obtener información sobre otros tipos de interacciones de estadísticas, consulta la guía de estadísticas de la API del recomendador.

Solicita estadísticas de proyectos

Para solicitar estadísticas de un proyecto, completa los siguientes pasos.

gcloud

Ejecuta el siguiente comando de la herramienta de gcloud.

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

Aquí:

  • BILLING_PROJECT es el proyecto que habilitó la API del recomendador. Como alternativa, si estableces un proyecto como billing/quota_project en la configuración de la herramienta gcloud, este parámetro no es necesario.
  • --filter es opcional, pero se puede usar para filtrar los resultados por subtipo de estadística.
  • FORMAT es un formato de salida admitido para la herramienta de gcloud. Por ejemplo, para enumerar contenido de estadísticas como tabla compacta, haz lo siguiente:
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

Ejecuta el siguiente 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"

Solicita estadísticas sobre carpetas

Para solicitar las estadísticas de una carpeta, completa los siguientes pasos.

gcloud

Ejecuta el siguiente comando de la herramienta de 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

Aquí:

  • BILLING_PROJECT es el proyecto que habilitó la API del recomendador. Como alternativa, si estableces un proyecto como billing/quota_project en la configuración de la herramienta gcloud, este parámetro no es necesario.
  • --filter es opcional, pero se puede usar para filtrar los resultados por subtipo de estadística.
  • FORMAT es un formato de salida admitido para la herramienta de gcloud. Por ejemplo, para enumerar contenido de estadísticas como una tabla compacta, haz lo siguiente:
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

Ejecuta el siguiente 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"

Solicita estadísticas de organización

Para solicitar estadísticas a una organización, completa los siguientes pasos.

gcloud

Ejecuta el siguiente comando de la herramienta de gcloud.

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

Aquí:

  • BILLING_PROJECT es el proyecto que habilitó la API del recomendador. Como alternativa, si estableces un proyecto como billing/quota_project en la configuración de la herramienta gcloud, este parámetro no es necesario.
  • --filter es opcional, pero se puede usar para filtrar los resultados por subtipo de estadística.
  • FORMAT es un formato de salida admitido para la herramienta de gcloud. Por ejemplo, para enumerar contenido de estadísticas como una tabla compacta, haz lo siguiente:
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

Ejecuta el siguiente comando curl.

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

Cómo interpretar las respuestas de las estadísticas

Además de los atributos de estadísticas estándar, Insight Insights proporciona varios subtipos y campos especializados.

Subtipos de estadísticas

Existen siete subtipos distintos en Insight Insight.

  • EXTERNAL_MEMBER: detecta políticas de IAM que contienen usuarios o grupos que pertenecen a un dominio fuera de los dominios de tu organización.
  • EXTERNAL_POLICY_EDITOR: detecta políticas de IAM que contienen usuarios o grupos fuera de los dominios de tu organización que tienen permiso para modificar las políticas de IAM.
  • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER: detecta políticas de IAM que contienen usuarios o grupos fuera de los dominios de tu organización que tienen permiso para obtener o enumerar objetos de almacenamiento (storage.objects.list o storage.objects.get permission).
  • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR: detecta políticas de IAM que contienen usuarios o grupos fuera de los dominios de tu organización que tienen permiso para actuar como cuentas de servicio.
  • TERMINATED_MEMBER: detecta políticas de IAM que contienen usuarios o grupos con cuentas inactivas o finalizadas.
  • PUBLIC_IAM_POLICY: detecta políticas de IAM que contienen todos los usuarios autenticados o todos los usuarios autenticados.
  • OWNER_TERMINATED_PROJECT: detecta proyectos que no contienen usuarios o grupos activos dentro de la política de IAM del proyecto.

Campos content adicionales

Además de los campos estándar en la respuesta, Insight Insights proporciona varios campos especializados en el campo content.

  • user: La dirección de correo electrónico del usuario específica detectada dentro de los miembros de las vinculaciones de política para esta estadística específica. Este campo se incluye en el subtipo TERMINATED_MEMBER.
  • domain: El dominio específico detectado dentro de los miembros de las vinculaciones de política de esta estadística en particular. Este campo se incluye en los subtipos EXTERNAL_MEMBER, EXTERNAL_POLICY_EDITOR, EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER y EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR.
  • assetName: El nombre del activo para el que se detectó el acceso para esta estadística en particular. Este campo se incluirá en los subtipos OWNER_TERMINATED_PROJECT y PUBLIC_IAM_POLICY.
  • policyCount: La cantidad total de políticas de IAM distintas en las que se detectaron miembros que coinciden en esta estadística específica. Este campo se incluye para todos los subtipos de Asset Insights.
  • matchedPolicies: Muestras de las políticas de IAM que coinciden con las estadísticas detectadas. Las políticas coincidentes solo incluirán el subconjunto de vinculaciones y los miembros de vinculación que coincidan con las estadísticas detectadas. Este campo se incluye para todos los subtipos de Asset Insights.
  • policySearchQuery: Es una consulta que se puede usar con la API de búsqueda de políticas de IAM de Cloud Asset Inventory para recuperar todas las políticas relevantes en tiempo real.

Respuesta de muestra

El siguiente fragmento muestra el formato de una respuesta de ejemplo.

[{
   "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"
}]

Limitaciones

  • Estas estadísticas no consideran las membresías de grupo como parte de sus hallazgos y no se deben considerar una lista exhaustiva de vulnerabilidades coincidentes.
  • Las estadísticas individuales incluyen un muestreo de políticas de IAM coincidentes que están limitadas a 100 políticas distintas. Todas las políticas coincidentes se pueden recuperar llamando a búsqueda de políticas de Cloud Asset Inventory.
  • A fin de generar estadísticas, no se tienen en cuenta las cuentas de servicio para la generación de estadísticas.