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 leer esta página, debes estar familiarizado con la descripción general del recomendador de IAM. Además, asegúrate de tener los permisos de IAM que necesitas para trabajar con el recomendador de IAM.

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 tus recomendaciones.

Comando de 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, el ejemplo omite 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 exitosa, la respuesta muestra la recomendación en un estado SUCCEEDED. Para mayor claridad, este ejemplo omite 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"
          }
        }
      }
    ]

API de REST

A fin de revisar tus recomendaciones, usa la herramienta curl para llamar a la API de REST. Reemplaza project-id por el ID del proyecto:

curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    "https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations"

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. Ejecuta el siguiente comando para cambiar el estado de la recomendación a CLAIMED,, lo que evita que la recomendación cambie mientras la aplicas:

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "X-Goog-User-Project: project-id" \
        --data-binary @- \
        "https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markClaimed" \
    << EOM
    {
      "etag": "etag",
      "stateMetadata": state-metadata
    }
    EOM
    

    Reemplaza cada caso de 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". Usa barras inversas para descartar comillas
    • 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

    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, el ejemplo omite 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:

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "X-Goog-User-Project: project-id" \
        --data-binary @- \
        "https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:command" \
    << EOM
    {
      "etag": "etag",
      "stateMetadata": state-metadata
    }
    EOM
    

    Reemplaza cada caso de los siguientes valores:

    • command: Usa markSucceeded si pudiste aplicar la recomendación o markFailed 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". Usa barras inversas para descartar comillas
    • 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

    Por ejemplo, si marcaste la recomendación como exitosa, la respuesta muestra la recomendación en un estado SUCCEEDED. Para mayor claridad, este ejemplo omite 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"
          }
        }
      }
    ]

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