Usar la API: estadísticas

En esta página se explica cómo ver y gestionar estadísticas en Recommender mediante comandos de gcloud o la API REST.

Una interacción habitual con la API Recommender es la siguiente:

Para obtener información sobre cómo cambiar el estado de las estadísticas en la consola de Google Cloud , consulta la documentación del centro de recomendaciones o del tipo de estadística correspondiente.

Definir el proyecto predeterminado

Si aún no lo has hecho, define el proyecto predeterminado:

gcloud config set project PROJECT_ID

donde PROJECT_ID es el ID de tu proyecto.

Establece variables de entorno:

Define las variables de entorno de las interacciones de Recommender:

PROJECT=TARGET_PROJECT_ID
LOCATION=LOCATION_ID
INSIGHT_TYPE=INSIGHT_TYPE_ID

donde:

  • TARGET_PROJECT_ID es el proyecto cuyos estadísticas quieres consultar. Puede ser un proyecto diferente al actual.

    • Para los comandos de gcloud, debes usar el ID de proyecto.
    • En las solicitudes a la API, puedes usar el número o el ID del proyecto. Se recomienda indicar el número de proyecto.

    El número de proyecto se devuelve en las respuestas de la API y de los comandos gcloud.

  • LOCATION_ID es la Google Cloud ubicación donde se encuentran los recursos asociados a las estadísticas (por ejemplo, global o us-central1-a).

  • INSIGHT_TYPE_ID es el ID de tipo de estadística completo (por ejemplo, google.iam.policy.Insight).

Consulta la sección Tipos de estadísticas para ver una tabla con enlaces a información sobre cada tipo de estadística, incluidas las ubicaciones admitidas y los IDs de los tipos de estadísticas.

Definir permisos

Debes tener permisos para acceder a las estadísticas del proyecto de destino.

  • Para los solicitantes que incluyan un proyecto de facturación en su solicitud. El proyecto utilizado en la solicitud debe estar en buen estado y el usuario debe tener un rol en el proyecto que contenga el permiso serviceusage.services.use. El rol Consumidor de uso de servicios contiene el permiso necesario.
  • Cada tipo de estadística requiere permisos específicos. Consulta la sección Tipos de estadísticas para ver una tabla con enlaces a información sobre cada tipo de estadística, incluidos los permisos necesarios.

Lista de estadísticas

Como se muestra en la pestaña gcloud Beta, puedes enumerar todas las estadísticas de tu proyecto sin tener que especificar una ubicación ni un recomendador. Esta función está en versión preliminar.

La función de GA requiere que especifiques un proyecto, una ubicación y un recomendador. Para obtener más información, consulta la pestaña gcloud.

gcloud Beta

Introduce lo siguiente:

gcloud beta recommender insights list \
    --project=${PROJECT} \
    --format=FORMAT

donde FORMAT es un Google Cloud CLI formato de salida admitido, como json.

Por ejemplo:

gcloud beta recommender insights list \
    --project=example-project \
    --format=json

gcloud

Introduce lo siguiente:

gcloud recommender insights list \
    --project=${PROJECT} \
    --location=${LOCATION} \
    --insight-type=${INSIGHT_TYPE} \
    --format=FORMAT

donde FORMAT es un gcloud formato de salida admitido (por ejemplo, json).

Por ejemplo:

gcloud recommender insights list \
    --project=example-project \
    --location=global \
    --insight-type=google.iam.policy.Insight \
    --format=json

REST

Introduce lo siguiente:

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: ${PROJECT}" \
    "https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/insightTypes/${INSIGHT_TYPE}/insights"

Por ejemplo:

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: example-project" \
    "https://recommender.googleapis.com/v1/projects/example-project/locations/us-central1-a/insightTypes/google.iam.policy.Insight/insights"

Esta operación genera las estadísticas de la política de gestión de identidades y accesos actual del proyecto de destino como una lista de entidades Insight en el formato especificado.

El resultado debería ser similar al siguiente:

[
  {
    "category": "SECURITY",
    "content": {
      "condition": {
        "description": "",
        "expression": "",
        "location": "",
        "title": ""
      },
      "exercisedPermissions": [],
      "inferredPermissions": [],
      "member": "user:my-service-account@example-project.iam.gserviceaccount.com",
      "role": "roles/iam.securityReviewer"
    },
    "description": "0 permission checks were authorized by this policy binding tuple.",
    "etag": "\"45f4e2c63f6952e8\"",
    "insightSubtype": "PERMISSIONS_USAGE",
    "lastRefreshTime": "2020-03-06T08:00:00Z",
    "name": "projects/32428390823/locations/global/insightTypes/google.iam.policy.Insight/insights/a523ff7e-ed03-4143-a3a5-5b396b99cba9",
    "observationPeriod": "7776000s",
    "stateInfo": {
      "state": "ACTIVE",
    },
    "targetResources": [
      "//cloudresourcemanager.googleapis.com/projects/32428390823"
    ],
  }
]

Ten en cuenta que las estadísticas devueltas incluyen los siguientes campos:

  • Un campo name con el siguiente formato:

    projects/PROJECT_ID/locations/LOCATION/insightTypes/INSIGHT_TYPE_ID/insights/INSIGHT_ID

    donde INSIGHT_ID identifica de forma única la estadística

  • Un campo etag asociado al estado actual de la estadística.

Cuando haces referencia a una estadística con comandos gcloud posteriores o llamadas a la API REST, haces referencia tanto al ID de la estadística como al etag, lo que asegura que las operaciones solo se realicen si la estadística no se ha modificado desde la última vez que la recuperaste.

Marcar una estadística como aceptada

Puedes marcar una estadística como aceptada para indicar que tienes intención de tomar medidas o que ya las has tomado en un recurso asociado en función de la información proporcionada en la estadística. Cuando se acepta una estadística, tu nombre de usuario se asigna como el actor de la estadística y Recommender no actualizará la estadística con contenido más reciente.

Para marcar una estadística como aceptada, sigue estos pasos:

gcloud

Introduce lo siguiente:

gcloud recommender insights mark-accepted \
    INSIGHT_ID \
    --project=${PROJECT} \
    --location=${LOCATION} \
    --insight-type=${INSIGHT_TYPE} \
    --etag=etag \
    --state-metadata=STATE_METADATA
    --format=FORMAT

donde:

  • INSIGHT_ID es el ID de una estadística obtenida de una llamada anterior para enumerar estadísticas.
  • etag es el etag devuelto que representa el estado de la estadística.
  • STATE_METADATA son metadatos opcionales sobre la operación. Especifica los metadatos como una lista separada por comas de pares KEY=VALUE.

Por ejemplo:

gcloud recommender insights mark-accepted \
    a523ff7e-ed03-4143-a3a5-5b396b99cba9 \
    --project=example-project \
    --location=global \
    --insight-type=google.iam.policy.Insight \
    --etag='"280b34810bba8a1a"' \
    --state-metadata=priority=high,tracking_number=12345
    --format=json

REST

Introduce lo siguiente:

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: ${PROJECT}" \
    --data-binary @- \
    https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/insightTypes/${INSIGHT_TYPE}/insights/INSIGHT_ID:markAccepted \
<< EOM
{
  "etag": "etag",
  "stateMetadata": STATE_METADATA
}
EOM

donde:

  • INSIGHT_ID es el ID de una estadística obtenida de una llamada anterior para enumerar estadísticas.
  • etag es el etag devuelto que representa el estado de la estadística.
  • STATE_METADATA es un campo opcional con metadatos adicionales sobre la operación. Especifica los metadatos como pares key:value.

Por ejemplo:

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: example-project" \
    --data-binary @- \
    https://recommender.googleapis.com/v1/projects/example-project/locations/global/insightTypes/google.iam.policy.Insight/insights/a523ff7e-ed03-4143-a3a5-5b396b99cba9:markAccepted \
<< EOM
{
  "etag": "\"280b34810bba8a1a\""
  "stateMetadata": {
    "priority" : "high",
    "tracking_number": "12345"
  }
}
EOM

Esta operación devuelve la entidad Insight en el formato especificado una vez que se ha llevado a cabo.

El resultado debería ser similar al siguiente:

{
  "category": "SECURITY",
  "content": { ...  },
  "description": "0 permission checks were authorized by this policy binding tuple.",
  "etag": "\"356ae51165729f38\"",
  "insightSubtype": "PERMISSIONS_USAGE",
  "lastModifiedUser": "admin123@example-project.iam.gserviceaccount.com",
  "lastRefreshTime": "2020-03-06T08:00:00Z",
  "name": "projects/32428390823/locations/global/insightTypes/google.iam.policy.Insight/insights/a523ff7e-ed03-4143-a3a5-5b396b99cba9",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACCEPTED",
    "stateMetadata": {
      "priority" : "high",
      "tracking_number": "12345"
    }
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/32428390823"
  ],
  "userLastUpdateTime": "2020-03-31T20:57:50.509855Z"
}

Ten en cuenta que el valor del campo state ha cambiado a ACCEPTED.