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

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 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 más profundo 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 de un proyecto, realiza una de las siguientes solicitudes.

gcloud

Ejecuta los siguientes comandos de gcloud CLI para obtener una lista de las estadísticas de tu proyecto, organización o carpeta.

Proyectos

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

Ingresa los siguientes valores:

  • PROJECT_ID: El ID del proyecto del que deseas obtener las estadísticas

Otras marcas:

  • --filter: Opcional Filtra los resultados por subtipo de estadística.

  • --format: Opcional Un formato de salida compatible con gcloud CLI Por ejemplo, para enumerar el contenido de las estadísticas en una tabla acoplada, usa el siguiente código:

    gcloud recommender insights list \
        --project=PROJECT_ID \
        --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)"
    

Carpetas

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

Ingresa los siguientes valores:

  • FOLDER_ID: El ID de la carpeta de la que deseas obtener estadísticas.

    Cómo encontrar un ID de carpeta de Google Cloud

    Consola

    Para encontrar un ID de carpeta de Google Cloud, completa los siguientes pasos:

    1. Ve a la consola de Google Cloud.

      Ir a la consola de Google Cloud

    2. Haz clic en el cuadro de cambio en la barra de menú.
    3. Haz clic en el cuadro Seleccionar una opción y, luego, selecciona tu organización.
    4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

    gcloud CLI

    Puedes recuperar un ID de carpeta de Google Cloud que se encuentra a nivel de la organización con el siguiente comando:

    gcloud resource-manager folders list \
        --organization=$(gcloud organizations describe ORGANIZATION_NAME \
          --format="value(name.segment(1))") \
        --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
        --format="value(ID)"

    En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME puede ser una coincidencia completa o parcial de strings. Quita la opción --format para ver más información sobre las carpetas encontradas.

    Para obtener el ID de una carpeta dentro de otra, enumera las subcarpetas:

    gcloud resource-manager folders list --folder=FOLDER_ID

Otras marcas:

  • --filter: Opcional Filtra los resultados por subtipo de estadística.

  • --format: Opcional Un formato de salida compatible con gcloud CLI Por ejemplo, para enumerar el contenido de las estadísticas en una tabla acoplada, usa el siguiente código:

    gcloud recommender insights list \
        --folder=FOLDER_ID \
        --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)"
    

Organizaciones

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

Ingresa los siguientes valores:

  • ORGANIZATION_ID: El ID de la organización para la que deseas obtener estadísticas.

    Cómo encontrar un ID de organización de Google Cloud

    Consola

    Para encontrar un ID de organización de Google Cloud, completa los siguientes pasos:

    1. Ve a la consola de Google Cloud.

      Ir a la consola de Google Cloud

    2. Haz clic en el cuadro de cambio en la barra de menú.
    3. Haz clic en el cuadro Seleccionar una opción y, luego, selecciona tu organización.
    4. Haga clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.

    gcloud CLI

    Puedes recuperar el ID de una organización de Google Cloud con el siguiente comando:

    gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

Otras marcas:

  • --filter: Opcional Filtra los resultados por subtipo de estadística.

  • --format: Opcional Un formato de salida compatible con gcloud CLI Por ejemplo, para enumerar el contenido de las estadísticas en una tabla acoplada, usa el siguiente código:

    gcloud recommender insights list \
        --organization=ORGANIZATION_ID \
        --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)"
    

REST

Ejecuta el siguiente comando de curl para enumerar estadísticas de tu proyecto, organización o carpeta.

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
     https://recommender.googleapis.com/v1/SCOPE/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

Ingresa los siguientes valores:

  • SCOPE: El alcance puede ser un proyecto, una carpeta o una organización.

    Los valores permitidos son los siguientes:

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      Cómo encontrar un número de proyecto de Google Cloud

      Consola

      Para encontrar un número de proyecto de Google Cloud, completa los siguientes pasos:

      1. Ve a la página Panel en la consola de Google Cloud.

        Ir al panel

      2. Haz clic en el cuadro de cambio en la barra de menú.
      3. Elige tu organización en el cuadro Seleccionar una opción y, luego, busca el nombre del proyecto.
      4. Haz clic en el nombre del proyecto para cambiarlo. El número de proyecto se muestra en la tarjeta Información del proyecto.

      gcloud CLI

      Puedes recuperar el número de proyecto de Google Cloud con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Cómo encontrar un ID de carpeta de Google Cloud

      Consola

      Para encontrar un ID de carpeta de Google Cloud, completa los siguientes pasos:

      1. Ve a la consola de Google Cloud.

        Ir a la consola de Google Cloud

      2. Haz clic en el cuadro de cambio en la barra de menú.
      3. Haz clic en el cuadro Seleccionar una opción y, luego, selecciona tu organización.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      gcloud CLI

      Puedes recuperar un ID de carpeta de Google Cloud que se encuentra a nivel de la organización con el siguiente comando:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME puede ser una coincidencia completa o parcial de strings. Quita la opción --format para ver más información sobre las carpetas encontradas.

      Para obtener el ID de una carpeta dentro de otra, enumera las subcarpetas:

      gcloud resource-manager folders list --folder=FOLDER_ID

    • organizations/ORGANIZATION_ID

      Cómo encontrar un ID de organización de Google Cloud

      Consola

      Para encontrar un ID de organización de Google Cloud, completa los siguientes pasos:

      1. Ve a la consola de Google Cloud.

        Ir a la consola de Google Cloud

      2. Haz clic en el cuadro de cambio en la barra de menú.
      3. Haz clic en el cuadro Seleccionar una opción y, luego, selecciona tu organización.
      4. Haga clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.

      gcloud CLI

      Puedes recuperar el ID de una organización de Google Cloud con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

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 usuarios o grupos activos en la política de IAM del proyecto.

Campos de contenido adicionales

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

  • user: La dirección de correo electrónico del usuario específica detectada en los miembros de las vinculaciones de la política para esta estadística en particular. Este campo se incluye en el subtipo TERMINATED_MEMBER.

  • domain: El dominio específico detectado en 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 incluye 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 coincidencias solo incluyen 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: 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

En el siguiente fragmento de código, 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. Todas las políticas que coincidan se pueden recuperar con una llamada 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.