Usar las estadísticas de Asset

En este tema, se muestra cómo usar Asset Insights para detectar riesgos potenciales en las configuraciones de elementos 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 a los recursos de tu organización. Es parte del servicio Recommender 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 adicional para determinar la acción adecuada. Se generan a diario según una instantánea de los datos almacenados en Cloud Asset Inventory.

Antes de comenzar

Antes de comenzar a usar Asset Insights, 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 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 Asset Insights, 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 para la API de recomendador.

Solicita estadísticas de proyecto

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 de recomendador. Como alternativa, si estableces un proyecto como billing/quota_project en la configuración de la herramienta de gcloud, este parámetro no es obligatorio.
  • --filter es opcional, pero se puede usar para filtrar resultados por subtipo de estadística.
  • FORMAT es un formato de salida compatible para la herramienta gcloud. Por ejemplo, para enumerar el contenido de las estadísticas como una 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 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 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 de recomendador. Como alternativa, si estableces un proyecto como billing/quota_project en la configuración de la herramienta de gcloud, este parámetro no es obligatorio.
  • --filter es opcional, pero se puede usar para filtrar resultados por subtipo de estadística.
  • FORMAT es un formato de salida compatible para la herramienta gcloud. Por ejemplo, para enumerar el contenido de las 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 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

Para solicitar estadísticas de 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 de recomendador. Como alternativa, si estableces un proyecto como billing/quota_project en la configuración de la herramienta de gcloud, este parámetro no es obligatorio.
  • --filter es opcional, pero se puede usar para filtrar resultados por subtipo de estadística.
  • FORMAT es un formato de salida compatible para la herramienta gcloud. Por ejemplo, para enumerar el contenido de las 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 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 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 las 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 las 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 las 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 las 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 las 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 las políticas de IAM que contienen a todos los usuarios o a 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 del usuario específica detectada 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í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 de recurso para el que se detectó acceso a esta estadística en particular. Este campo se incluirá en los subtipos OWNER_TERMINATED_PROJECT y PUBLIC_IAM_POLICY.
  • policyCount: Es 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 para todos los subtipos de Asset Insights.
  • matchedPolicies: Una muestra de las políticas de IAM que coinciden con la estadística detectada Las políticas de coincidencias solo incluirán el subconjunto de vinculaciones y miembros de vinculación que coinciden con la estadística detectada. Este campo se incluye para todos los subtipos de Asset Insights.
  • 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 los 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 se limita a 100 políticas distintas. Se pueden recuperar todas las políticas de coincidencias si llamas a la búsqueda de políticas de Cloud Asset Inventory.
  • Las estadísticas de elementos no tienen en cuenta las cuentas de servicio para la generación de estadísticas.