Usar las estadísticas de Asset

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

Descripción general

Las estadísticas de Cloud Asset proporcionan estadísticas basadas en las políticas de IAM asociadas con los recursos de tu organización. Es parte del servicio del 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 recurso, debes completar los siguientes pasos.

  1. Habilita la API del 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 Cloud Asset (roles/recommender.cloudAssetInsightsViewer)
    • Función de administrador de Cloud Asset Insights (roles/recommender.cloudAssetInsightsAdmin)

Solicita estadísticas de recurso

Para solicitar estadísticas de recursos, la forma más fácil es enumerar las estadísticas como se muestra en los siguientes pasos. Para otros tipos de interacciones de estadísticas, consulta la guía de estadísticas de la API del recomendador.

Solicita estadísticas de proyecto

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

gcloud

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

Donde:

  • 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 CLI de gcloud, este parámetro no es obligatorio.
  • --filter es opcional, pero se puede usar para filtrar los resultados por subtipo de estadística.
  • FORMAT es un formato de salida compatible para la CLI de gcloud. Por ejemplo, para enumerar el contenido de las estadísticas como una tabla compactada, 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 de 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 de carpeta

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

gcloud

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

Donde:

  • 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 CLI de gcloud, este parámetro no es obligatorio.
  • --filter es opcional, pero se puede usar para filtrar los resultados por subtipo de estadística.
  • FORMAT es un formato de salida compatible para la CLI de gcloud. Por ejemplo, para enumerar el contenido de las estadísticas como una tabla plana, 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 de 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

Si deseas solicitar estadísticas para una organización, completa los siguientes pasos.

gcloud

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

Donde:

  • 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 CLI de gcloud, este parámetro no es obligatorio.
  • --filter es opcional, pero se puede usar para filtrar los resultados por subtipo de estadística.
  • FORMAT es un formato de salida compatible para la CLI de gcloud. Por ejemplo, para enumerar el contenido de las estadísticas como una tabla plana, 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 de curl:

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

Interpreta las respuestas de las estadísticas

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

Subtipos de estadísticas

Existen siete subtipos de Asset Insights distintos.

  • 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 a los que se les otorga 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 a los que se les otorga 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 a los que se les otorga permiso para actuar en nombre de cuentas de servicio.
  • TERMINATED_MEMBER: Detecta políticas de IAM que contienen usuarios o grupos con cuentas desactivadas, borradas o purgadas.
  • PUBLIC_IAM_POLICY: Detecta políticas de IAM que contienen todos los usuarios o todos los usuarios autenticados.
  • OWNER_TERMINATED_PROJECT: Detecta proyectos que no contienen ningún usuario o grupo activo dentro de la política de IAM del proyecto.

Campos content adicionales

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

  • user: La dirección de correo electrónico específica del usuario que se detecta dentro de los miembros de las vinculaciones de políticas para esta estadística en particular. Este campo se incluye en el subtipo TERMINATED_MEMBER.
  • domain: El dominio específico detectado dentro de los miembros de las vinculaciones de políticas 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 recurso para el que se detectó el acceso con 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 coincidentes para esta estadística en particular. Este campo se incluye en todos los subtipos de Estadísticas de recursos.
  • matchedPolicies: Un muestreo de las políticas de IAM que coinciden con la estadística detectada. Las políticas de coincidencia solo incluirán el subconjunto de vinculaciones y miembros de vinculación que coinciden con la estadística detectada. Este campo se incluye en todos los subtipos de estadísticas de recursos.
  • policySearchQuery: 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

En el siguiente fragmento, se muestra el formato de una respuesta de muestra.

[{
   "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 deben considerarse una lista exhaustiva de vulnerabilidades coincidentes.
  • Las estadísticas individuales incluyen una muestra de políticas de IAM coincidentes, que tiene un límite de 100 políticas distintas. Para recuperar todas las políticas coincidentes, llama a la búsqueda de políticas de Cloud Asset Inventory.
  • Las estadísticas de elementos no consideran las cuentas de servicio para la generación de estadísticas.