Aplica el privilegio mínimo con recomendaciones de función

Las recomendaciones de funciones te ayudan a identificar y quitar el exceso de permisos de tus miembros, lo que mejora la configuración de seguridad de tus recursos.

Descripción general de las recomendaciones de funciones

Las recomendaciones de funciones son uno de los tipos de recomendaciones que genera el recomendador.

Cada recomendación de función sugiere que quites o reemplaces una función que otorgue permisos excesivos a los miembros. A gran escala, estas recomendaciones te ayudan a aplicar el principio de privilegio mínimo, ya que garantizan que los miembros solo tengan los permisos que en verdad necesitan.

El recomendador identifica los permisos no usados mediante las estadísticas de las políticas. Las estadísticas de políticas son resultados basados en el AA sobre el uso de permisos en el proyecto, la carpeta o la organización.

Algunas recomendaciones también se asocian con las estadísticas de movimiento lateral. Estas estadísticas identifican funciones que permiten que las cuentas de servicio de un proyecto actúen en nombre de otra en otro proyecto. Para obtener más información, consulta Cómo se generan estadísticas de movimiento lateral.

Cómo se generan las estadísticas de políticas

El recomendador genera estadísticas de políticas mediante la comparación de los permisos que usó cada miembro durante los últimos 90 días con los permisos totales que tiene el miembro. Existen varias formas en las que un miembro puede usar un permiso:

  • De forma directa, si llama a una API que requiere el permiso

    Por ejemplo, el método roles.list en la API de REST de IAM requiere el permiso iam.roles.list. Cuando llamas al método roles.list, usas el permiso iam.roles.list.

    De manera similar, cuando llamas al método testIamPermissions de un recurso, usas todos los permisos que estás probando.

  • De forma indirecta, si usas Google Cloud Console para trabajar con recursos de Google Cloud

    Por ejemplo, en Cloud Console, puedes editar una instancia de máquina virtual (VM) de Compute Engine, lo que requiere permisos diferentes en función de las opciones de configuración que modifiques. Sin embargo, Cloud Console también muestra la configuración existente, para lo que se requiere el permiso compute.instances.get.

    Como resultado, cuando editas una instancia de VM en Cloud Console, debes usar el permiso compute.instances.get.

Este servicio usa el aprendizaje automático para identificar permisos en la función actual de un miembro que puede necesitar en el futuro, incluso si el miembro no usó esos permisos en los últimos 90 días. Si deseas obtener más información, consulta Aprendizaje automático para estadísticas de políticas en esta página.

No se generan estadísticas de políticas para todas las vinculaciones de funciones de IAM. Para obtener más información sobre por qué una vinculación de función puede no tener estadísticas de política, consulta Disponibilidad en esta página.

Para obtener más información sobre cómo administrar las estadísticas de políticas, consulta Administra las estadísticas de políticas.

Aprendizaje automático para estadísticas de políticas

En algunos casos, es probable que un miembro necesite ciertos permisos que están incluidos en sus funciones actuales, pero que no usó recientemente. Para identificar estos permisos, el recomendador usa un modelo de aprendizaje automático (AA) cuando genera estadísticas de políticas.

Este modelo de aprendizaje automático se entrena en función de varios conjuntos de indicadores:

  • Patrones de simultaneidad comunes en el historial observado: el hecho de que un usuario haya usado los permisos A, B y C en el pasado proporciona un indicio de que A, B y C pueden estar relacionados de alguna manera y de que se necesitan en conjunto para llevar a cabo una tarea en Google Cloud. Si el modelo de AA detecta este patrón con suficiente frecuencia, la próxima vez que un usuario diferente use los permisos A y B, el modelo sugerirá que es probable que el usuario también necesite el permiso C.

  • Conocimiento del dominio como se lo codificó en las definiciones de las funciones: IAM proporciona cientos de funciones predefinidas diferentes que son específicas de un servicio. Si una función predefinida contiene un conjunto de permisos, esto indica con claridad que esos permisos deban otorgarse en conjunto.

Además de estos indicadores, el modelo también usa la incorporación de palabras para calcular qué tan similares son los permisos en términos de la semántica. Los permisos similares en términos de la semántica estarán “relacionados” entre sí después de la incorporación y tendrán más probabilidades de ser otorgados en conjunto. Por ejemplo, bigquery.datasets.get y bigquery.tables.list estarán muy cerca entre sí después de la incorporación.

Todos los datos que se usaron en la canalización de aprendizaje automático del recomendador cuentan con k-anonimato, lo que significa que las personas del conjunto de datos anonimizado no se pueden volver a identificar. Para lograr este nivel de anonimato, descartamos toda la información de identificación personal (PII), como el ID del usuario relacionado con cada patrón de uso de permisos. Luego, descartamos todos los patrones de uso que no aparezcan con suficiente frecuencia en Google Cloud. El modelo global se entrena en función de estos datos anonimizados.

El modelo global se puede personalizar aún más para cada organización mediante el aprendizaje federado, un proceso de aprendizaje automático mediante el cual se entrenan modelos de aprendizaje automático sin exportar datos.

Cómo se generan las recomendaciones de funciones

Si las estadísticas de una política indican que un miembro no necesita todos los permisos en su función, el recomendador evalúa la función para determinar si podría revocarse o si hay otra función que mejor se adapte. Si se puede revocar la función, el recomendador generará una recomendación de función para revocarla. Si hay otra función que es más adecuada, genera una recomendación de función para reemplazarla por una función sugerida. Este reemplazo sugerido podría ser una función personalizada nueva o existente, o una o más funciones predefinidas. Excepto en el caso de las recomendaciones para las cuentas de servicio administradas por Google, una recomendación de función nunca sugiere un cambio que aumente el nivel de acceso de un miembro.

Las recomendaciones de funciones se generan solo en función de los controles de acceso de IAM. No tienen en cuenta otros tipos de controles de acceso, como las listas de control de acceso (LCA) y el control de acceso según la función (RBAC) de Kubernetes. Si usas otros tipos de controles de acceso, debes tener especial cuidado a la hora de revisar las recomendaciones y debes considerar cómo se relacionan esos controles de acceso con tus políticas de IAM.

Además, las recomendaciones de función no se generan para todas las vinculaciones de funciones de IAM. Para obtener más información sobre por qué una vinculación de función puede no tener una recomendación de función, consulta Disponibilidad en esta página.

Nuevas funciones personalizadas en las recomendaciones de funciones

Cuando el recomendador sugiere reemplazos para una función, siempre sugiere una función personalizada existente, o una o más funciones predefinidas, que parece ser la opción más adecuada para las necesidades del miembro.

Si el recomendador identifica un patrón de uso de permisos común en tu organización que no se asigna a una función predefinida o personalizada existente, también puede recomendar que crees una nueva función personalizada a nivel de proyecto. Esta función personalizada incluye solo los permisos recomendados. Para modificar la recomendación de la función personalizada, puedes agregar o quitar permisos.

Si quieres aplicar el principio de privilegio mínimo de la manera más estricta posible, elige la nueva función personalizada. El recomendador crea la función personalizada a nivel de proyecto. Eres responsable de mantener y actualizar las funciones personalizadas de tus proyectos.

Si prefieres usar una función administrada por Google, elige la función predefinida. Google Cloud agrega o quita permisos para actualizar estas funciones con regularidad. Para recibir notificaciones sobre estas actualizaciones, suscríbete al feed de noticias del registro de cambios de los permisos. Si eliges la función predefinida, el miembro seguirá teniendo por lo menos algunos permisos y es posible que tenga una gran cantidad de ellos que no haya usado.

El recomendador no recomienda funciones personalizadas nuevas en los siguientes casos:

  • La recomendación es para una función a nivel de carpeta u organización.
  • Tu organización ya tiene 100 funciones personalizadas o más.
  • Tu proyecto ya tiene 25 funciones personalizadas o más.

Además, el recomendador no recomienda más de 5 funciones personalizadas nuevas por día en cada proyecto ni más de 15 funciones personalizadas nuevas en toda la organización.

Cómo se generan las estadísticas de movimiento lateral

El movimiento lateral hace referencia a la capacidad de una cuenta de servicio de actuar como otras cuentas de servicio en los proyectos de una organización. Por ejemplo, es posible que se haya creado una cuenta de servicio en el proyecto A, pero que tenga permisos para actuar en nombre de una cuenta de servicio en el proyecto B.

Los movimientos laterales pueden aumentar el riesgo con respecto a los usuarios con información privilegiada, ya que permiten que un atacante se desplace lateralmente por los proyectos de una organización.

El recomendador genera estadísticas de movimiento lateral mediante la identificación de vinculaciones de funciones a nivel de proyecto y de cuenta de servicio que se ajustan a los siguientes criterios:

  • El miembro en la vinculación de función es una cuenta de servicio que no se creó en el proyecto.
  • La función incluye uno de los siguientes permisos, que permiten que un miembro actúe en nombre de una cuenta de servicio:

    • iam.serviceAccounts.actAs
    • iam.serviceAccounts.getAccessToken
    • iam.serviceAccounts.getOpenIdToken
    • iam.serviceAccounts.implicitDelegation
    • iam.serviceAccounts.signBlob
    • iam.serviceAccounts.signJwt

Si una vinculación de función se ajusta a estos criterios, el recomendador genera una estadística de movimiento lateral para la vinculación. Esta estadística contiene información sobre las capacidades de uso de identidad de la cuenta de servicio, incluso qué cuentas de servicio puede usar y si utilizó algún permiso de uso de identidad en los últimos 90 días.

El recomendador no usa las estadísticas de movimiento lateral por sí solas para generar nuevas recomendaciones de funciones. Esto se debe a que, si una cuenta de servicio usa sus permisos de uso de identidad, el recomendador no puede sugerir de forma segura su eliminación. Sin embargo, si una recomendación de función sugiere quitar estos permisos porque no se usan, el recomendador vinculará la estadística de movimiento lateral a esa recomendación. Esta vinculación te ayuda a priorizar las recomendaciones de funciones para las cuentas de servicio que tienen permisos de uso de identidad potentes y sin usar en todos los proyectos.

Para obtener información sobre cómo administrar las estadísticas de movimiento lateral, consulta Administra las estadísticas de movimiento lateral.

Disponibilidad

Las estadísticas de políticas y las recomendaciones de funciones no se generan para cada vinculación de función. Lee las siguientes secciones para comprender las vinculaciones de funciones para las que se generan estadísticas y recomendaciones de políticas.

Disponibilidad de estadísticas de la política

A fin de que el recomendador genere una estadística de política para una vinculación de función, se debe cumplir lo siguiente:

  • La vinculación de la función debe existir a nivel del proyecto, de la carpeta o de la organización. El recomendador no genera estadísticas de políticas para las funciones que se otorgan en los recursos específicos del servicio dentro de un proyecto.
  • La vinculación de función no debe tener una condición. El recomendador no genera estadísticas de políticas para las vinculaciones de funciones condicionales.

El recomendador puede tardar hasta 10 días en generar estadísticas de políticas para una nueva vinculación de función.

Disponibilidad de estadísticas de movimiento lateral

A fin de que el recomendador genere una estadística de movimiento lateral para una vinculación de función, la vinculación de función debe existir a nivel del proyecto o a nivel de la cuenta de servicio.

Disponibilidad de la recomendación de función

A fin de que el recomendador genere una recomendación de función para una vinculación de función, se deben cumplir los siguientes requisitos:

  • La vinculación de función debe tener una estadística de políticas asociada. Esta estadística de la política sirve como base para la recomendación.
  • La vinculación de función debe tener más de 90 días. Esto garantiza que el recomendador tenga suficientes datos de uso para hacer una recomendación.
  • Si el miembro en la vinculación de la función es una cuenta de servicio administrada por Google, la vinculación de la función debe ser propietario, editor o visualizador. El recomendador no genera recomendaciones de funciones para las cuentas de servicio administradas por Google con otras funciones. Para obtener más información, consulta Recomendaciones de funciones para cuentas de servicio administradas por Google.

Si una vinculación de función no tiene ninguna estadística o no existe durante 90 días, los permisos analizados en Cloud Console muestra un ícono.

Hay algunos casos en los que el recomendador no genera recomendaciones de funciones para una vinculación de función que tiene más de 90 días y tiene una estadística asociada. Esto puede suceder por los siguientes motivos:

  • No hay funciones predefinidas de IAM que sean más apropiadas que la función actual. Si un miembro ya tiene una función predefinida que minimiza sus permisos o que incluye menos permisos que otras funciones predefinidas, el recomendador no puede recomendar una función predefinida diferente.

    Es posible que seas capaz de reducir los permisos del miembro mediante la creación de una función personalizada para él.

  • El miembro es una cuenta de servicio administrada por Google y la función no es una función básica. El recomendador solo genera recomendaciones de funciones para las cuentas de servicio administradas por Google si la cuenta de servicio tiene una función básica (propietario, editor o visualizador). Para obtener más información, consulta Recomendaciones de funciones para cuentas de servicio administradas por Google.

  • Ningún otro miembro tiene la función básica de propietario para el proyecto. En cada proyecto debe haber al menos un miembro que tenga la función de propietario (roles/owner). Si solo un miembro tiene esta función, el recomendador no recomendará revocarla ni reemplazarla.

En estos casos, en la columna Permisos analizados de Cloud Console, se muestra el uso de permisos del miembro, pero no tiene un ícono de Recomendación disponible .

Prioridad y gravedad

La prioridad de las recomendaciones y la gravedad de las estadísticas te ayudan a comprender la urgencia de una recomendación o estadística, y a priorizarla según corresponda.

Prioridad de recomendación de funciones

A las recomendaciones se les asignan niveles de prioridad según la urgencia percibida. Los niveles de prioridad varían de P0 (prioridad más alta) a P4 (prioridad más baja).

Las recomendaciones de IAM pueden tener niveles de prioridad de P2 o P4. Las recomendaciones para las vinculaciones de funciones con funciones básicas (propietario, editor y visualizador) tienen una prioridad de P2. Estas recomendaciones tienen una prioridad alta, ya que las funciones básicas son muy permisivas y la aplicación de recomendaciones para estas funciones puede reducir en gran medida los permisos excesivos. Todas las demás recomendaciones tienen una prioridad de P4.

Puedes ver los niveles de prioridad de las recomendaciones si enumeras las recomendaciones mediante la herramienta de gcloud o la API de REST.

Gravedad de la estadística

A las estadísticas se les asignan niveles de gravedad según la urgencia percibida. Los niveles de gravedad pueden ser LOW, MEDIUM, HIGH o CRITICAL.

Las estadísticas de las políticas pueden tener un nivel de gravedad de LOW o HIGH. Las estadísticas de las vinculaciones de funciones con funciones básicas (propietario, editor y visualizador) tienen un nivel de gravedad de HIGH. Estas estadísticas tienen una gravedad alta, porque las funciones básicas son muy permisivas, y abordar estadísticas para estas funciones puede reducir en gran medida tus permisos excesivos. Todas las demás estadísticas tienen un nivel de gravedad de LOW.

Todas las estadísticas de movimiento lateral tienen una gravedad de LOW.

Cómo se aplican las recomendaciones de funciones

El recomendador no aplica recomendaciones de forma automática. En su lugar, debes revisar tus recomendaciones y decidir si las aplicas o las descartas. Para aprender a revisar, aplicar y descartar recomendaciones de funciones, consulta Revisa y aplica recomendaciones.

Registros de auditoría

Cuando aplicas o descartas una recomendación, el recomendador de IAM crea una entrada de registro. Puedes ver estas entradas en el historial de recomendaciones del proyecto o puedes verlas en tus registros de auditoría de Google Cloud.

Subtipos de recomendación de función

Las recomendaciones de funciones se dividen en varios subtipos diferentes según la acción que recomiendan. Si usas la herramienta de gcloud o la API de REST, puedes usar estos subtipos para filtrar las recomendaciones.

Subtipo Descripción
REMOVE_ROLE Una recomendación para quitar la función del miembro.
REPLACE_ROLE Una recomendación para reemplazar la función del miembro por una función menos permisiva. El reemplazo recomendado podría ser una función personalizada nueva, una función personalizada existente o una o más funciones predefinidas.
SERVICE_AGENT_WITH_DEFAULT_ROLE Una recomendación para reemplazar la función de propietario, editor o visualizador de una cuenta de servicio administrada por Google por la función que se otorgó de forma automática a la cuenta de servicio cuando se la creó. Para obtener más información, consulta Recomendaciones para las cuentas de servicio administradas por Google.
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Una recomendación para reemplazar la función de propietario, editor o visualizador de una cuenta de servicio administrada por Google por una función menos permisiva. Para obtener más información, consulta Recomendaciones para las cuentas de servicio administradas por Google.

Recomendaciones para las cuentas de servicio administradas por Google

En el caso de las cuentas de servicio administradas por Google, el recomendador de IAM solo proporciona recomendaciones para las vinculaciones de funciones con funciones básicas (propietario, editor o visualizador).

Las recomendaciones para las cuentas de servicio administradas por Google se dividen en dos subtipos de recomendación.

SERVICE_AGENT_WITH_DEFAULT_ROLE

Durante la creación, a algunas cuentas de servicio administradas por Google se les otorga automáticamente una función de agente de servicio para garantizar que los servicios de Google Cloud funcionen correctamente. Si reemplazas esta función por una función básica (propietario, editor o visualizador), el recomendador de funciones podría sugerir que restablezcas la función de agente de servicio original para quitar el exceso de permisos, incluso si la función de agente de servicio tiene permisos que no se encuentran en la función básica. Estas recomendaciones tienen el subtipo SERVICE_AGENT_WITH_DEFAULT_ROLE. Te ayudan a quitar de forma segura los permisos no usados, al tiempo que se garantiza que todos los servicios de Google Cloud funcionen de forma correcta.

Las recomendaciones de SERVICE_AGENT_WITH_DEFAULT_ROLE son el único tipo de recomendación que podría sugerir funciones con permisos que no están en la función actual.

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

Si a una cuenta de servicio administrada por Google no se le asigna una función de forma automática durante la creación, las recomendaciones para la cuenta de servicio se basan exclusivamente en los permisos que usa la cuenta de servicio. Estas recomendaciones tienen el subtipo SERVICE_AGENT_WITHOUT_DEFAULT_ROLE.

Ejemplos de recomendaciones de funciones

En los siguientes ejemplos, se muestran los tipos de recomendaciones que puedes recibir.

Revoca una función existente

Al usuario my-user@example.com se le otorgó la función de navegador en un proyecto. La función de navegador incluye seis permisos que le permiten al usuario ver los recursos del proyecto. Sin embargo, durante los últimos 90 días, my-user@example.com no vio ningún recurso.

Por lo tanto, el recomendador genera una recomendación de función que sugiere que revoques la función de navegador de my-user@example.com:

Reemplaza una función existente

A una cuenta de servicio se le otorgó la función de editor (roles/editor) en un proyecto. Esta función básica incluye más de 3,000 permisos y otorga amplio acceso al proyecto. Sin embargo, durante los últimos 90 días, la cuenta de servicio solo usó algunos de esos permisos.

Por lo tanto, el recomendador genera una recomendación de función que sugiere que revoques la función de editor y la reemplaces por una combinación de otras dos funciones, lo que quita miles de permisos excedentes:

Crea una función personalizada

Al usuario my-user@example.com se le otorgó la función de administrador de Cloud Trace (roles/cloudtrace.admin) en un proyecto. La función incluye más de 10 permisos, pero una estadística de la política indica que, durante los últimos 90 días, my-user@example.com solo utilizó 4 de esos permisos.

Por lo tanto, el recomendador genera una recomendación de función que sugiere que crees una función personalizada que incluya solo los permisos que en realidad usó my-user@example.com:

El recomendador de funciones también sugiere otra opción, que consiste en reemplazar la función existente por la función de usuario de Cloud Trace (roles/cloudtrace.user). Esta función predefinida incluye unos pocos permisos menos que la función de administrador de Cloud Trace.

Reemplazo de funciones por permisos que sugiere el aprendizaje automático

A una cuenta de servicio se le otorgó la función de editor (roles/editor) en un proyecto. Esta función básica incluye más de 3,000 permisos y otorga amplio acceso a un proyecto. Sin embargo, una estadística de políticas indica que, durante los últimos 90 días, la cuenta de servicio usó menos de 10 permisos.

Las estadísticas de la política también destacan varios permisos que es probable que la cuenta de servicio necesite en el futuro. El recomendador identificó estos permisos mediante aprendizaje automático.

El recomendador genera una recomendación de función que sugiere que se revoque la función de editor y se reemplace por la función de Administrador de objetos de almacenamiento (roles/storage.objectAdmin), que otorga control total de los objetos en un bucket de Cloud Storage. Este cambio quita miles de permisos no utilizados, a la vez que incluye los permisos que la cuenta de servicio usó y los permisos que es posible que la cuenta de servicio necesite en el futuro.

El recomendador usa un ícono de aprendizaje automático para identificar los permisos que se agregaron en función del aprendizaje automático del recomendador, en lugar del uso de los permisos. En este ejemplo, se recomendó el permiso resourcemanager.projects.get en función del aprendizaje automático:

¿Qué sigue?