Administra las estadísticas de movimiento lateral

Además de proporcionar recomendaciones, el recomendador usa el aprendizaje automático (AA) para proporcionar estadísticas detalladas. Las estadísticas son hallazgos que destacan patrones notables en el uso de recursos. Por ejemplo, puedes recopilar información adicional sobre el uso de permisos en el proyecto o identificar cuentas de servicio sin usar. Algunas estadísticas también se vinculan a recomendaciones, ya que las estadísticas proporcionan evidencia para ellas.

IAM ofrece varios tipos diferentes de estadísticas. En esta página, se muestra cómo administrar las estadísticas de movimiento lateral (google.iam.policy.LateralMovementInsight), que identifican las funciones que permiten que una cuenta de servicio de un proyecto actúe en nombre de una cuenta de servicio en otro proyecto. Para obtener más información sobre las estadísticas de movimiento lateral, consulta Cómo se generan las estadísticas de movimiento lateral.

Antes de comenzar

Permisos necesarios

Los permisos necesarios para usar las estadísticas de movimiento lateral varían según lo que desees hacer.

Permisos para ver las estadísticas

Para ver las estadísticas de movimiento lateral, necesitas una función que incluya los siguientes permisos:

  • recommender.iamPolicyLateralMovementInsights.get
  • recommender.iamPolicyLateralMovementInsights.list

Para obtener estos permisos y seguir el principio de privilegio mínimo, pídele a tu administrador que te otorgue una de las siguientes funciones:

  • Visualizador del recomendador de IAM (roles/recommender.iamViewer)
  • Revisor de seguridad de IAM (roles/iam.securityReviewer)

Como alternativa, el administrador puede otorgarte una función diferente con los permisos necesarios, como una función personalizada o una función predefinida con más permisos.

Permisos para modificar las estadísticas

Para modificar las estadísticas de movimiento lateral, necesitas una función que incluya los siguientes permisos:

  • recommender.iamPolicyLateralMovementInsights.get
  • recommender.iamPolicyLateralMovementInsights.list
  • recommender.iamPolicyLateralMovementInsights.update

Para obtener estos permisos y seguir el principio de privilegio mínimo, pídele a tu administrador que te otorgue la función de administrador del recomendador de IAM (roles/recommender.iamAdmin).

Como alternativa, el administrador puede otorgarte una función diferente con los permisos necesarios, como una función personalizada o una función predefinida con más permisos.

Enumera la lista de estadísticas de movimiento lateral

Para enumerar todas las estadísticas de movimiento lateral de tu proyecto, usa uno de los siguientes métodos:

gcloud

Usa el comando gcloud recommender insights list para ver todas las estadísticas de movimiento lateral de tu proyecto.

Antes de ejecutar el comando, reemplaza los siguientes valores:

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas. En esta lista, también se incluyen estadísticas de movimiento lateral para las vinculaciones de funciones a nivel de cuenta de servicio en tu proyecto.
gcloud recommender insights list --insight-type=google.iam.policy.LateralMovementInsight \
    --project=PROJECT_ID \
    --location=global

En el resultado, se enumeran todas las estadísticas de movimiento lateral para tu proyecto. Por ejemplo:

INSIGHT_ID                            LOCATION  INSIGHT_TYPE                              CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME
0bd428af-d16c-4ac0-83eb-826dbce8c9bb  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
13088eec-9573-415f-81a7-46e1a260e860  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
1343077a-c1fe-409f-a7d5-3d01349e7651  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
31cc14c0-8c9d-4713-a6e5-de6976b0d778  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
4f0fd42b-5637-47af-9200-e0e55adbf321  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z

REST

El método insights.list de la API de recomendador enumera todas las estadísticas de movimiento lateral para el proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.

Método HTTP y URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights

Para enviar tu solicitud, expande una de estas opciones:

En la respuesta, se enumeran todas las estadísticas de movimiento lateral del proyecto. Por ejemplo:

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860",
      "description": "Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.",
      "content": {
        "impersonator": {
          "serviceAccount": "service-account@another-project.iam.gserviceaccount.com",
          "serviceAccountOwner": "//cloudresourcemanager.googleapis.com/projects/987654321098",
          "isGoogleManaged": false
        },
        "targetServiceAccounts": [
          "target-service-account-1@this-project.iam.gserviceaccount.com",
          "target-service-account-2@this-project.iam.gserviceaccount.com"
        ],
        "impersonationPolicy": {
          "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
          "role": "roles/editor",
          "member": "serviceAccount:service-account@another-project.iam.gserviceaccount.com",
          "condition": {
            "expression": "",
            "title": "",
            "description": "",
            "location": ""
          }
        },
        "impersonationPermissionUsage": [
          {
            "permission": "iam.serviceAccounts.actAs"
            "used": false
          }
        ],
        "hasPermissionUsageData": true
      },
      "lastRefreshTime": "2021-03-13T08:00:00Z",
      "observationPeriod": "7776000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f"
        }
      ],
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "CROSS_PROJECT_IMPERSONATION",
      "etag": "\"f48fa6a1b15c7741\""
    }
  ]
}

Para obtener más información sobre los componentes de una estadística, consulta Revisa las estadísticas de movimiento lateral en esta página.

Obtén una sola estadística de movimiento lateral

Para obtener más información sobre una sola estadística, incluida la descripción, el estado y las recomendaciones asociadas, usa uno de los siguientes métodos:

gcloud

Usa el comando gcloud recommender insights describe con tu ID de estadística para ver información sobre una sola estadística de IAM.

  • INSIGHT_ID: El ID de la estadística que deseas ver. Para encontrar el ID, enumera las estadísticas en el proyecto.
  • PROJECT_ID: El ID del proyecto para el que deseas administrar las estadísticas
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.policy.LateralMovementInsight \
    --project=PROJECT_ID \
    --location=global

En el resultado, se muestra la estadística en detalle. Por ejemplo, la siguiente estadística indica que la política de IAM en el proyecto 123456789012 permite que service-account@another-project.iam.gserviceaccount.com actúe en nombre de target-service-account-1@this-project.iam.gserviceaccount.com y target-service-account-2@this-project.iam.gserviceaccount.com.

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f
category: SECURITY
content:
  hasPermissionUsageData: true
  impersonationPermissionUsage:
  - permission: iam.serviceAccounts.actAs
    used: false
  impersonationPolicy:
    condition:
      description: ''
      expression: ''
      location: ''
      title: ''
    member: serviceAccount:service-account@another-project.iam.gserviceaccount.com
    resource: //cloudresourcemanager.googleapis.com/projects/123456789012
    role: roles/editor
  impersonator:
    isGoogleManaged: false
    serviceAccount: service-account@another-project.iam.gserviceaccount.com
    serviceAccountOwner: //cloudresourcemanager.googleapis.com/projects/987654321098
  targetServiceAccounts:
  - target-service-account-1@this-project.iam.gserviceaccount.com
  - target-service-account-2@this-project.iam.gserviceaccount.com
description: Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.
etag: '"f48fa6a1b15c7741"'
insightSubtype: CROSS_PROJECT_IMPERSONATION
lastRefreshTime: '2021-03-13T08:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

Para obtener más información sobre los componentes de una estadística, consulta Revisa las estadísticas de movimiento lateral en esta página.

REST

Con el método insights.get de la API de recomendador, se obtiene una sola estadística.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID del proyecto para el que deseas administrar las estadísticas.
  • INSIGHT_ID: El ID de la estadística que deseas ver. Si no conoces el ID de estadística, puedes enumerar las estadísticas en tu proyecto para encontrarlo. El ID de una estadística es todo lo que se encuentra después de insights/ en el campo name de la estadística

Método HTTP y URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/INSIGHT_ID

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene las estadísticas. Por ejemplo, la siguiente estadística indica que la política de IAM en el proyecto 123456789012 permite que service-account@another-project.iam.gserviceaccount.com actúe en nombre de target-service-account-1@this-project.iam.gserviceaccount.com y target-service-account-2@this-project.iam.gserviceaccount.com.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860",
  "description": "Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.",
  "content": {
    "impersonator": {
      "serviceAccount": "service-account@another-project.iam.gserviceaccount.com",
      "serviceAccountOwner": "//cloudresourcemanager.googleapis.com/projects/987654321098",
      "isGoogleManaged": false
    },
    "targetServiceAccounts": [
      "target-service-account-1@this-project.iam.gserviceaccount.com",
      "target-service-account-2@this-project.iam.gserviceaccount.com"
    ],
    "impersonationPolicy": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "role": "roles/editor",
      "member": "serviceAccount:service-account@another-project.iam.gserviceaccount.com",
      "condition": {
        "expression": "",
        "title": "",
        "description": "",
        "location": ""
      }
    },
    "impersonationPermissionUsage": [
      {
        "permission": "iam.serviceAccounts.actAs"
        "used": false
      }
    ],
    "hasPermissionUsageData": true
  },
  "lastRefreshTime": "2021-03-13T08:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "CROSS_PROJECT_IMPERSONATION",
  "etag": "\"f48fa6a1b15c7741\""
}

Para obtener más información sobre los componentes de una estadística, consulta Revisa las estadísticas de movimiento lateral en esta página.

Revisa las estadísticas de movimiento lateral

Después de obtener una sola estadística, puedes revisar su contenido para comprender el patrón de uso de recursos que destaca.

Los subtipos determinan el contenido de una estadística. Las estadísticas de movimiento lateral (google.iam.policy.LateralMovementInsight) admiten estadísticas con el subtipo CROSS_PROJECT_IMPERSONATION.

Las estadísticas de CROSS_PROJECT_IMPERSONATION tienen los siguientes componentes (en cualquier orden):

  • associatedRecommendations: Los identificadores de cualquier recomendación asociada con la estadística. Si no hay recomendaciones asociadas con la estadística, este campo estará vacío.
  • category: La categoría de las estadísticas de SECURITY y siempre es .
  • content: informa los detalles de la capacidad de la cuenta de servicio para actuar en nombre de cuentas de servicio en otros proyectos. En este campo, se encuentran los siguientes componentes:

    • hasPermissionUsageData: un valor booleano que indica si hay datos de uso de permisos para esta vinculación de función. Los datos de uso de permisos indican si se usaron los permisos en la vinculación de la función. Estos datos no están disponibles para las vinculaciones de funciones condicionales.
    • impersonationPermissionUsage: una lista de permisos de robo de identidad y la información de uso. Si hasPermissionUsageData es falso, este campo está vacío.
    • impersonationPolicy: información sobre la vinculación de función que otorga permisos de robo de identidad a la cuenta de servicio.
    • impersonator: la cuenta de servicio que tiene permiso para actuar en nombre de las cuentas de servicio de tu proyecto.
    • targetServiceAccounts: una lista de las cuentas de servicio a las que la cuenta de servicio en el campo impersonator tiene permiso para actuar en nombre de una cuenta. Si el ladrón de identidad puede robar la identidad de más de 1,500 cuentas de servicio, la lista está vacía. Para saber a cuántas cuentas de servicio puede suplantar el ladrón de identidad, consulta el campo description.
  • description: Un resumen legible de la estadística
  • etag: un identificador único para el estado actual de una estadística. Cada vez que se modifica la estadística, se asigna un valor etag nuevo.

    Para cambiar el estado de una estadística, debes proporcionar la etag de la estadística existente. Usar etag ayuda a garantizar que cualquier operación se realice solo si la estadística no cambió desde la última recuperación.

  • insightSubtype: el subtipo de estadística.
  • lastRefreshTime: La fecha en la que se actualizó la estadística por última vez, lo que indica la actualidad de los datos que se usaron para generar la estadística
  • name: El nombre de la estadística, en el siguiente formato:

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/INSIGHT_ID

    Los marcadores de posición tienen los siguientes valores:

    • PROJECT_ID: El ID del proyecto en el que se generó la estadística
    • INSIGHT_ID: Un ID único para la estadística
  • observationPeriod: El período hasta llegar a la estadística. Los datos de origen que se usaron para generar la estadística finalizan en lastRefreshTime y comienzan en lastRefreshTime menos observationPeriod.
  • severity: la gravedad de la estadística. Todas las estadísticas de movimiento lateral tienen una gravedad de LOW.
  • stateInfo: Las estadísticas atraviesan varias transiciones de estado después de la propuesta:

    • ACTIVE: Se generó la estadística, pero no se realizó ninguna acción o se realizó una acción sin actualizar el estado de la estadística. Las estadísticas activas se actualizan cuando cambian los datos subyacentes.
    • ACCEPTED: Se realizaron acciones en función de la estadística. Se aceptan las estadísticas cuando una recomendación asociada se marcó como CLAIMED, SUCCEEDED o FAILED, o la estadística se aceptó directamente. Cuando una estadística se encuentra en el estado ACCEPTED, el contenido de la estadística no puede cambiar. Las estadísticas aceptadas se conservan durante 90 días después de su aceptación.
  • targetResources: El nombre completo del recurso del proyecto o la cuenta de servicio para el que se creó la estadística. Por ejemplo, //cloudresourcemanager.googleapis.com/projects/1234567890.

Marca una estadística de movimiento lateral como ACCEPTED

Si realizas acciones basadas en una estadística activa, puedes marcar esa estadística como ACCEPTED. El estado ACCEPTED le indica a la API de recomendador que realizaste acciones basadas en esta estadística, lo que ayuda a definir mejor las recomendaciones.

Las estadísticas aceptadas se conservan durante 90 días después de que se marcan como ACCEPTED.

gcloud

Usa el comando gcloud recommender insights mark-accepted con el ID de estadística para marcar una estadística como ACCEPTED.

  • INSIGHT_ID: El ID de la estadística que deseas ver. Para encontrar el ID, enumera las estadísticas en el proyecto.
  • PROJECT_ID: El ID del proyecto para el que deseas administrar las estadísticas
  • ETAG: Un identificador para una versión de la estadística. Para obtener la etag, haz lo siguiente:

    1. Obtén la estadística mediante el comando gcloud recommender insights describe.
    2. Busca y copia el valor etag del resultado, incluidas las comillas delimitantes. Por ejemplo, "d3cdec23cc712bd0"
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.policy.LateralMovementInsight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

En el resultado, se muestra la estadística, ahora con el estado ACCEPTED:

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f
category: SECURITY
content:
  hasPermissionUsageData: true
  impersonationPermissionUsage:
  - permission: iam.serviceAccounts.actAs
    used: false
  impersonationPolicy:
    condition:
      description: ''
      expression: ''
      location: ''
      title: ''
    member: serviceAccount:service-account@another-project.iam.gserviceaccount.com
    resource: //cloudresourcemanager.googleapis.com/projects/123456789012
    role: roles/editor
  impersonator:
    isGoogleManaged: false
    serviceAccount: service-account@another-project.iam.gserviceaccount.com
    serviceAccountOwner: //cloudresourcemanager.googleapis.com/projects/987654321098
  targetServiceAccounts:
  - target-service-account-1@this-project.iam.gserviceaccount.com
  - target-service-account-2@this-project.iam.gserviceaccount.com
description: Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.
etag: '"f48fa6a1b15c7741"'
insightSubtype: CROSS_PROJECT_IMPERSONATION
lastRefreshTime: '2021-03-13T08:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860
observationPeriod: 7776000s
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

Para obtener más información sobre el estado de una estadística, consulta Revisa las estadísticas de movimiento lateral en esta página.

REST

Mediante el método insights.markAccepted de la API de recomendador, se marca una estadística como ACCEPTED.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID del proyecto para el que deseas administrar las estadísticas.
  • INSIGHT_ID: El ID de la estadística que deseas ver. Si no conoces el ID de estadística, puedes enumerar las estadísticas en tu proyecto para encontrarlo. El ID de una estadística es todo lo que se encuentra después de insights/ en el campo name de la estadística
  • ETAG: Un identificador para una versión de la estadística. Para obtener la etag, haz lo siguiente:
    1. Obtén la estadística mediante el método insights.get.
    2. Busca y copia el valor etag de la respuesta.

Método HTTP y URL:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/INSIGHT_ID:markAccepted

Cuerpo JSON de la solicitud:

{
  "etag": "ETAG"
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la estadística, ahora con el estado ACCEPTED:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860",
  "description": "Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.",
  "content": {
    "impersonator": {
      "serviceAccount": "service-account@another-project.iam.gserviceaccount.com",
      "serviceAccountOwner": "//cloudresourcemanager.googleapis.com/projects/987654321098",
      "isGoogleManaged": false
    },
    "targetServiceAccounts": [
      "target-service-account-1@this-project.iam.gserviceaccount.com",
      "target-service-account-2@this-project.iam.gserviceaccount.com"
    ],
    "impersonationPolicy": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "role": "roles/editor",
      "member": "serviceAccount:service-account@another-project.iam.gserviceaccount.com",
      "condition": {
        "expression": "",
        "title": "",
        "description": "",
        "location": ""
      }
    },
    "impersonationPermissionUsage": [
      {
        "permission": "iam.serviceAccounts.actAs"
        "used": false
      }
    ],
    "hasPermissionUsageData": true
  },
  "lastRefreshTime": "2021-03-13T08:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACCEPTED"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "CROSS_PROJECT_IMPERSONATION",
  "etag": "\"f48fa6a1b15c7741\""
}

Para obtener más información sobre el estado de una estadística, consulta Revisa las estadísticas de movimiento lateral en esta página.

¿Qué sigue?