Buscar cuentas de servicio no utilizadas

En esta página se explica cómo gestionar las estadísticas de las cuentas de servicio, que son conclusiones sobre las cuentas de servicio de tu proyecto que no se han usado en los últimos 90 días.

Las solicitudes autenticadas por claves de API asociadas a cuentas de servicio no se registran en las métricas de uso de cuentas de servicio. Por lo tanto, es posible que estas cuentas de servicio se notifiquen como no utilizadas.

Antes de empezar

  • Enable the Recommender API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • Opcional: Consulta información sobre las estadísticas de Recomendador.

Roles obligatorios

Para obtener los permisos que necesitas para gestionar las estadísticas de las cuentas de servicio, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto en el que quieras gestionar las estadísticas:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para gestionar las estadísticas de las cuentas de servicio. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para gestionar las estadísticas de las cuentas de servicio, se necesitan los siguientes permisos:

  • Para ver las estadísticas de las cuentas de servicio, sigue estos pasos:
    • recommender.iamServiceAccountinsights.get
    • recommender.iamServiceAccountinsights.list
  • Para modificar la información valiosa sobre cuentas de servicio, siga estos pasos: recommender.iamServiceAccountinsights.update

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Mostrar información valiosa sobre cuentas de servicio

Para obtener una lista con todas las estadísticas de las cuentas de servicio de tu proyecto, utiliza uno de los siguientes métodos:

gcloud

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

Antes de ejecutar el comando, sustituye los siguientes valores:

  • PROJECT_ID: ID del proyecto del que quieres obtener una lista de estadísticas.
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

En el resultado se muestran todos los detalles de las cuentas de servicio de tu proyecto. Por ejemplo:

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE        DESCRIPTION
446303ba-2a14-49cc-b9fa-e2d2499d4f82  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-1@my-project.iam.gserviceaccount.com was inactive.
4cfd82c3-7320-4dc6-9b67-ca0756bbd54c  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-2@my-project.iam.gserviceaccount.com was inactive.
a627bed7-c8f4-4611-89c9-2a9a8618ca1b  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-3@my-project.iam.gserviceaccount.com was inactive.
a922dd59-df0a-422d-a2a4-096195e1dae5  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-4@my-project.iam.gserviceaccount.com was inactive.

REST

El método insights.list de la API Recommender muestra todas las estadísticas de las cuentas de servicio de tu proyecto.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: ID del proyecto del que quieres obtener una lista de estadísticas.

Método HTTP y URL:

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

Para enviar tu solicitud, despliega una de estas opciones:

La respuesta muestra todas las estadísticas de las cuentas de servicio de tu proyecto. Por ejemplo:

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
      "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "103185812403937829397",
        "email": "sa-1@my-project.iam.gserviceaccount.com",
        "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "19008000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"9d797dd04263c855\"",
      "severity": "LOW"
    },
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/4cfd82c3-7320-4dc6-9b67-ca0756bbd54c",
      "description": "Service account sa-2@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "105496400997178042131",
        "email": "sa-2@my-project.iam.gserviceaccount.com"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "16070400s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"783a32b635d79a4e\"",
      "severity": "LOW"
    }
  ]
}

Para obtener más información sobre los componentes de una estadística, consulta la sección Revisar estadísticas de cuentas de servicio de esta página.

Obtener información valiosa sobre una cuenta de servicio

Para obtener más información sobre una estadística concreta, como su descripción, su estado y las recomendaciones asociadas, utilice uno de los siguientes métodos:

gcloud

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

  • INSIGHT_ID: ID de la estadística que quieres ver. Para encontrar el ID, lista las estadísticas de tu proyecto.
  • PROJECT_ID: el ID del proyecto del que quieres gestionar las estadísticas.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

El resultado muestra la estadística detallada. Por ejemplo, la siguiente estadística indica que la cuenta de servicio sa-1@my-project.iam.gserviceaccount.com no se ha autenticado desde el 11 de octubre del 2020.

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"9d797dd04263c855"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

Para obtener más información sobre los componentes de una estadística, consulta la sección Revisar estadísticas de cuentas de servicio de esta página.

REST

El método insights.get de la API Recommender obtiene una sola estadística.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto del que quieres gestionar las estadísticas.
  • INSIGHT_ID: el ID de la estadística que quieres ver. Si no sabes cuál es el ID de la estadística, puedes encontrarlo consultando la lista de estadísticas de tu proyecto. El ID de una estadística es todo lo que hay 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.serviceAccount.Insight/insights/INSIGHT_ID

Para enviar tu solicitud, despliega una de estas opciones:

La respuesta contiene la estadística. Por ejemplo, la siguiente estadística indica que la cuenta de servicio sa-1@my-project.iam.gserviceaccount.com no se ha autenticado desde el 11 de octubre del 2020.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"9d797dd04263c855\"",
  "severity": "LOW"
}

Para obtener más información sobre los componentes de una estadística, consulta la sección Revisar estadísticas de cuentas de servicio de esta página.

Consultar información valiosa sobre cuentas de servicio

Una vez que obtengas una estadística, puedes revisar su contenido para comprender el patrón de uso de recursos que destaca.

El contenido de una estadística se determina en función de sus subtipos. Las estadísticas de información valiosa sobre las cuentas de servicio (google.iam.serviceAccount.Insight) tienen el subtipo SERVICE_ACCOUNT_USAGE.

Las estadísticas de SERVICE_ACCOUNT_USAGE tienen los siguientes componentes, no necesariamente en este orden:

  • associatedRecommendations: los identificadores de las recomendaciones asociadas a la estadística. Si no hay recomendaciones asociadas a la estadística, este campo estará vacío.
  • category: La categoría de las estadísticas de gestión de identidades y accesos siempre es SECURITY.
  • content: informa de la última vez que se autenticó la cuenta de servicio. Este campo contiene los siguientes componentes:

    • email: la dirección de correo de la cuenta de servicio.
    • lastAuthenticatedTime: la hora más reciente en la que se autenticó la cuenta de servicio. Si la cuenta de servicio no tiene ninguna autenticación registrada, este campo no se incluye.
    • serviceAccountId: ID numérico único de la cuenta de servicio.
  • description: resumen de la estadística legible por humanos.
  • etag: identificador único del estado actual de una estadística. Cada vez que cambia la estadística, se asigna un nuevo valor etag.

    Para cambiar el estado de una estadística, debe proporcionar el etag de la estadística en cuestión. El uso de etag ayuda a asegurarse de que las operaciones solo se realicen si la estadística no ha cambiado desde la última vez que la recuperaste.

  • insightSubtype: el subtipo de estadística.
  • lastRefreshTime: fecha de la última actualización de la estadística, que indica la actualización de los datos utilizados para generarla.
  • name: el nombre de la estadística, con el siguiente formato:

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

    Los marcadores de posición tienen los siguientes valores:

    • PROJECT_ID: ID del proyecto en el que se ha generado la estadística.
    • INSIGHT_ID: ID único de la estadística.
  • observationPeriod: el periodo previo a la estadística. Los datos de origen que se han usado para generar la estadística terminan el lastRefreshTime y empiezan el lastRefreshTime menos observationPeriod.
  • stateInfo: las estadísticas pasan por varias transiciones de estado después de que se proponen:

    • ACTIVE: Se ha generado la estadística, pero no se ha tomado ninguna medida o se ha tomado una medida sin actualizar el estado de la estadística. Los estadísticas activos se actualizan cuando cambian los datos subyacentes.
    • ACCEPTED: se ha tomado alguna medida en función de la estadística. Las estadísticas se aceptan cuando una recomendación asociada se marca como CLAIMED, SUCCEEDED o FAILED, o bien cuando se aceptan directamente. Cuando una estadística está en el estado ACCEPTED, su contenido no puede cambiar. Las estadísticas aceptadas se conservan durante 90 días después de aceptarse.
  • targetResources: el nombre completo del recurso del proyecto al que pertenece la estadística. Por ejemplo, //cloudresourcemanager.googleapis.com/projects/123456789012.

Marcar una estadística de una cuenta de servicio como ACCEPTED

Si tomas medidas basándote en una estadística activa, puedes marcarla como ACCEPTED. El estado ACCEPTED indica a la API Recommender que has tomado medidas en función de esta información valiosa, lo que ayuda a mejorar tus recomendaciones.

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

gcloud

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

  • INSIGHT_ID: ID de la estadística que quieres ver. Para encontrar el ID, lista las estadísticas de tu proyecto.
  • PROJECT_ID: el ID del proyecto del que quieres gestionar las estadísticas.
  • ETAG: identificador de una versión de la estadística. Para obtener el etag, haz lo siguiente:

    1. Obtén la información valiosa con el comando gcloud recommender insights describe.
    2. Busca y copia el valor de etag en el resultado, incluidas las comillas. Por ejemplo, "d3cdec23cc712bd0".
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

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

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"39c4199dcec92848"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

Para obtener más información sobre el estado de una estadística, consulta la sección Revisar estadísticas de cuentas de servicio de esta página.

REST

El método insights.markAccepted de la API Recommender marca una estadística como ACCEPTED.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto del que quieres gestionar las estadísticas.
  • INSIGHT_ID: el ID de la estadística que quieres ver. Si no sabes cuál es el ID de la estadística, puedes encontrarlo consultando la lista de estadísticas de tu proyecto. El ID de una estadística es todo lo que hay después de insights/ en el campo name de la estadística.
  • ETAG: identificador de una versión de la estadística. Para obtener el etag, haz lo siguiente:
    1. Obtén la información valiosa con 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.serviceAccount.Insight/insights/INSIGHT_ID:markAccepted

Cuerpo JSON de la solicitud:

{
  "etag": "ETAG"
}

Para enviar tu solicitud, despliega una de estas opciones:

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

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-10-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"39c4199dcec92848\"",
  "severity": "LOW"
}

Para obtener más información sobre el estado de una estadística, consulta la sección Revisar estadísticas de cuentas de servicio de esta página.

Siguientes pasos