Revisa y aplica recomendaciones

En esta página, se explica cómo ver, comprender y aplicar las recomendaciones del recomendador de IAM. El recomendador de IAM te ayuda a aplicar el principio de privilegio mínimo, ya que garantiza que los miembros solo tengan los permisos que en verdad necesitan.

Antes de comenzar

Revisa y aplica recomendaciones

La forma más fácil de revisar y aplicar tus recomendaciones es usar Google Cloud Console. Debes usar Cloud Console para completar algunas tareas:

  • Visualiza los detalles sobre por qué recibiste una recomendación
  • Descarta las recomendaciones
  • Crea una función personalizada de forma automática cuando aplicas una recomendación

También puedes revisar y aplicar recomendaciones con la herramienta de línea de comandos de gcloud y la API del Recomendador.

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. En la lista de miembros de tu proyecto, busca la columna Permisos en exceso.

    Para cada función otorgada a un miembro, esta columna muestra la cantidad de permisos sin uso durante los últimos 90 días en la función, seguidos de la cantidad total de permisos en la función:

    El ícono Recomendación disponible  indica que hay una recomendación disponible para una función, ya sea a fin de revocar la función o reemplazarla por una función que incluya menos permisos.

    El ícono Recomendación no disponible  indica que no hay cambios recomendados para la función. Para averiguar por qué, mantén el puntero sobre el ícono.

  3. Si hay recomendaciones para revisar, haz clic en el ícono Recomendación disponible  a fin de obtener detalles sobre la recomendación.

    Si la recomendación es reemplazar la función, el recomendador de IAM siempre sugiere un conjunto de funciones predefinidas que puedes aplicar.

    En algunos casos, el recomendador de IAM también sugiere crear una nueva función personalizada a nivel de proyecto. Si hay una recomendación de función personalizada disponible, Cloud Console la muestra de forma predeterminada. Para cambiar a la recomendación de función predefinida, haz clic en Ver función predefinida recomendada.

  4. Revisa la recomendación con atención y asegúrate de comprender cómo cambiará el acceso de los miembros a los recursos de Google Cloud. Consulta Revisa recomendaciones para comprender los tipos de cambios que puede incluir una recomendación.

  5. Si la recomendación es crear una función personalizada, actualiza el Título, la Descripción, el ID y la Etapa de lanzamiento de la función según sea necesario (opcional).

    Si necesitas agregar permisos a la función personalizada, haz clic en Agregar permisos.

    Si necesitas quitar permisos de la función personalizada, desmarca la casilla de verificación de cada permiso que deseas quitar.

  6. Toma medidas con respecto a la recomendación.

    Para aplicar la recomendación, haz clic en Aplicar o en Crear y aplicar. Luego, confirma tu elección. Si cambias de opinión en los siguientes 90 días, usa los registros del recomendador de IAM para revertir tu elección.

    Para descartar la recomendación, haz clic en Descartar y, luego, confirma tu elección. Puedes restablecer una recomendación descartada siempre y cuando la recomendación siga siendo válida.

  7. Repite los pasos anteriores hasta que hayas revisado todas las recomendaciones.

gcloud

Para enumerar tus recomendaciones, ejecuta el comando gcloud recommender recommendations list:

gcloud recommender recommendations list \
    --location=global \
    --recommender=google.iam.policy.Recommender \
    --project=project-id \
    --format=format

Reemplaza los siguientes valores:

  • project-id: El identificador del proyecto, como project-123
  • format: El formato de la respuesta. Usa json o yaml

La respuesta es similar al ejemplo a continuación. En este ejemplo, una cuenta de servicio no usó ningún permiso de la función de administrador de Compute (roles/compute.admin) en los últimos 90 días. Como resultado, el recomendador de IAM sugiere que revoques la función:

[
  {
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "recommenderSubtype": "REMOVE_ROLE",
    "etag": "\"770237e2c0decf40\"",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

Revisa cada recomendación con atención y considera cómo cambiará el acceso de los miembros a los recursos de Google Cloud.

Para aplicar una recomendación, sigue estos pasos:

  1. Usa el comando gcloud recommender recommendations mark-claimed para cambiar el estado de la recomendación a CLAIMED,, lo que evita que la recomendación cambie mientras la aplicas:

    gcloud recommender recommendations mark-claimed \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    Reemplaza los siguientes valores:

    • recommendation-id: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. En el ejemplo anterior, el ID es fb927dc1-9695-4436-0000-f0f285007c0f
    • project-id: El identificador del proyecto, como project-123
    • format: El formato de la respuesta. Usa json o yaml
    • etag: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Ten en cuenta que este valor puede incluir comillas
    • state-metadata: Opcional. Pares clave-valor separados por comas que contienen la selección de metadatos sobre la recomendación. Por ejemplo: --state-metadata=reviewedBy=alice,priority=high. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Si el comando se ejecuta de forma correcta, la respuesta muestra la recomendación en un estado CLAIMED, como se muestra en el siguiente ejemplo. Para mayor claridad, en el ejemplo, se omiten la mayoría de los campos:

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"df7308cca9719dcc\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "CLAIMED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]
  2. Obtén la política de IAM para el proyecto y, luego, modifica la política a fin de que refleje la recomendación.

  3. Actualiza el estado de la recomendación a SUCCEEDED, si pudiste aplicar la recomendación, o FAILED, si no pudiste aplicarla:

    gcloud recommender recommendations command \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    Reemplaza los siguientes valores:

    • command: Usa mark-succeeded si pudiste aplicar la recomendación o mark-failed si no pudiste aplicarla.
    • recommendation-id: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. En el ejemplo anterior, el ID es fb927dc1-9695-4436-0000-f0f285007c0f
    • project-id: El identificador del proyecto, como project-123
    • format: El formato de la respuesta. Usa json o yaml
    • etag: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Ten en cuenta que este valor puede incluir comillas
    • state-metadata: Opcional. Pares clave-valor separados por comas que contienen la selección de metadatos sobre la recomendación. Por ejemplo: --state-metadata=reviewedBy=alice,priority=high. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Por ejemplo, si marcaste la recomendación como correcta, la respuesta muestra la recomendación en un estado SUCCEEDED. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"dd0686e7136a4cbb\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "SUCCEEDED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

REST

Revisa las recomendaciones

Con el método recommendations.list de la API de recomendador, se enumeran todas las recomendaciones disponibles 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 de Google Cloud.
  • page-size: Opcional. La cantidad máxima de resultados que se mostrarán con esta solicitud. Si no se especifica, el servidor determinará la cantidad de resultados que se mostrarán. Si la cantidad de recomendaciones es mayor que el tamaño de la página, la respuesta contiene un token de paginación que puedes usar para recuperar la siguiente página de resultados.
  • page-token: Opcional. El token de paginación que se mostró en una respuesta anterior de este método. Si se especifica, la lista de recomendaciones comenzará donde finalizó la solicitud anterior.
  • filter: Opcional. Una expresión de filtro para restringir las recomendaciones que se muestran. Puedes filtrar recomendaciones según el campo stateInfo.state. Por ejemplo, stateInfo.state:"DISMISSED" o stateInfo.state:"FAILED".

Método HTTP y URL:

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations?pageSize=page-size&pageToken=page-token&filter=filter

Para enviar tu solicitud, expande una de estas opciones:

La respuesta es similar al ejemplo a continuación. En este ejemplo, una cuenta de servicio no usó ningún permiso de la función de administrador de Compute (roles/compute.admin) en los últimos 90 días. Como resultado, el recomendador de IAM sugiere que revoques la función:

{
  "recommendations": [
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "description": "This role has not been used during the observation window.",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
    "etag": "\"770237e2c0decf40\"",
    "recommenderSubtype": "REMOVE_ROLE"
  ]
}

Revisa cada recomendación con atención y considera cómo cambiará el acceso del miembro a los recursos de Google Cloud.

Para aplicar una recomendación, sigue estos pasos:

  1. Marca la recomendación como CLAIMED:

    Con el método recommendations.markClaimed de la API de recomendador, se marca una recomendación como CLAIMED, lo que evita que la recomendación cambie mientras la aplicas.

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

    • project-id: El ID del proyecto de Google Cloud.
    • recommendation-id: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • etag: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Usa barras inversas para escapar las comillas, por ejemplo, "\"df7308cca9719dcc\"".
    • state-metadata: Opcional. Un objeto que contiene pares clave-valor con tu elección de metadatos sobre la recomendación. Por ejemplo, {"reviewedBy": "alice", "priority": "high"}. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Método HTTP y URL:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markClaimed

    Cuerpo JSON de la solicitud:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta muestra la recomendación en un estado CLAIMED, como se muestra en el siguiente ejemplo. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "CLAIMED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

  2. Obtén la política de IAM para el proyecto y, luego, modifica la política a fin de que refleje la recomendación.

  3. Actualiza el estado de la recomendación a SUCCEEDED, si pudiste aplicar la recomendación, o FAILED, si no pudiste aplicarla:

    SUCCEEDED

    Con el método recommendations.markSucceeded de la API de recomendador, se marca una recomendación como SUCCEEDED, lo que indica que pudiste aplicarla.

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

    • project-id: El ID del proyecto de Google Cloud.
    • recommendation-id: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • etag: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Usa barras inversas para escapar las comillas, por ejemplo, "\"df7308cca9719dcc\"".
    • state-metadata: Opcional. Un objeto que contiene pares clave-valor con tu elección de metadatos sobre la recomendación. Por ejemplo, {"reviewedBy": "alice", "priority": "high"}. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Método HTTP y URL:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markSucceeded

    Cuerpo JSON de la solicitud:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta muestra la recomendación en un estado SUCCEEDED, como se muestra en el siguiente ejemplo. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "SUCCEEDED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

    FAILED

    Con el método recommendations.markFailed de la API de recomendador, se marca una recomendación como FAILED, lo que indica que no pudiste aplicarla.

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

    • project-id: El ID del proyecto de Google Cloud.
    • recommendation-id: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • etag: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Usa barras inversas para escapar las comillas, por ejemplo, "\"df7308cca9719dcc\"".
    • state-metadata: Opcional. Un objeto que contiene pares clave-valor con tu elección de metadatos sobre la recomendación. Por ejemplo, {"reviewedBy": "alice", "priority": "high"}. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Método HTTP y URL:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markFailed

    Cuerpo JSON de la solicitud:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta muestra la recomendación en un estado FAILED, como se muestra en el siguiente ejemplo. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "FAILED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

Visualiza, revierte y restablece cambios

Después de aplicar o descartar una recomendación, esa acción aparece en el registro de recomendaciones. Para ver el registro de recomendaciones, haz lo siguiente:

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. Haz clic en Registro de recomendaciones, cerca de la parte superior de la pantalla.

    Cloud Console muestra una lista de acciones anteriores en tus recomendaciones de IAM.

  3. Para ver los detalles de una recomendación, haz clic en la flecha de expansión .

    Cloud Console muestra detalles sobre la acción que se realizó, incluido el miembro que realizó la acción:

  4. Si es necesario, puedes revertir la recomendación, lo que deshace los cambios en la recomendación o restablece una recomendación que descartaste (opcional).

    Para revertir un cambio aplicado antes a una recomendación, haz clic en Deshacer. Cloud Console revierte los cambios a las funciones del miembro. La recomendación ya no aparece en Cloud Console.

    Para restablecer una recomendación que se descartó, haz clic en Restablecer. La recomendación se hace visible en la página de IAM en Cloud Console. No se cambiaron las funciones ni los permisos.

Próximos pasos