Busca cuentas de servicio sin usar

En esta página, se muestra cómo administrar las estadísticas de las cuentas de servicio, que son hallazgos sobre qué cuentas de servicio de tu proyecto no se usaron en los últimos 90 días.

Antes de comenzar

Funciones obligatorias

Si quieres obtener los permisos que necesitas para administrar las estadísticas de la cuenta de servicio, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto para el que quieres administrar las estadísticas:

Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para administrar las estadísticas de cuentas de servicio. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para administrar las estadísticas de cuentas de servicio:

  • Para ver las estadísticas de cuentas de servicio:
    • recommender.iamServiceAccountinsights.get
    • recommender.iamServiceAccountinsights.list
  • Para modificar las estadísticas de cuentas de servicio: recommender.iamServiceAccountinsights.update

Es posible que también puedas obtener estos permisos con funciones personalizadas o con otras funciones predefinidas.

Enumera estadísticas de cuentas de servicio

Para enumerar todas las estadísticas de la cuenta de servicio de tu proyecto, usa uno de los siguientes métodos:

gcloud

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

Antes de ejecutar el comando, reemplaza los siguientes valores:

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

En el resultado, se enumeran todas las estadísticas de la cuenta de servicio del 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

Con el método insights.list de la API de recomendador, se enumeran todas las estadísticas de la cuenta de servicio del proyecto.

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

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.

HTTP method and URL:

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

Para enviar tu solicitud, expande una de estas opciones:

En la respuesta, se enumeran todas las estadísticas de la cuenta de servicio del 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: Revisa las estadísticas de la cuenta de servicio en esta página.

Obtén una sola estadística de cuenta de servicio

Para obtener más información sobre una sola estadística, incluida la descripción, el estado y las recomendaciones asociadas, usa uno de los siguientes métodos:

gcloud

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

  • INSIGHT_ID: El ID de la estadística que deseas ver. Para encontrar el ID, enumera las estadísticas en el proyecto.
  • PROJECT_ID: El ID del proyecto para el que deseas administrar las estadísticas
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

En el resultado, se muestra la estadística en detalle. Por ejemplo, la siguiente estadística indica que la cuenta de servicio sa-1@my-project.iam.gserviceaccount.com no se autenticó desde el 11 de octubre de 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: Revisa las estadísticas de la cuenta de servicio en esta página.

REST

Mediante el método insights.get de la API de recomendador, se obtiene una sola estadística.

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

  • PROJECT_ID: el ID del proyecto para el que deseas administrar las estadísticas.
  • INSIGHT_ID: El ID de la estadística que deseas ver. Si no conoces el ID de estadística, puedes enumerar las estadísticas en tu proyecto para encontrarlo. El ID de una estadística es todo lo que se encuentra después de insights/ en el campo name de la estadística

HTTP method and URL:

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

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene las estadísticas. Por ejemplo, la siguiente estadística indica que la cuenta de servicio sa-1@my-project.iam.gserviceaccount.com no se autenticó desde el 11 de octubre de 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: Revisa las estadísticas de la cuenta de servicio en esta página.

Revisa las estadísticas de la cuenta de servicio

Después de obtener una sola estadística, puedes revisar su contenido para comprender el patrón de uso de recursos que destaca.

Los subtipos determinan el contenido de una estadística. Las estadísticas de la cuenta de servicio (google.iam.serviceAccount.Insight) tienen el subtipo SERVICE_ACCOUNT_USAGE.

Las estadísticas de SERVICE_ACCOUNT_USAGE tienen los siguientes componentes (en cualquier orden):

  • associatedRecommendations: Los identificadores de cualquier recomendación asociada con la estadística. Si no hay recomendaciones asociadas con la estadística, este campo estará vacío.
  • category: La categoría para las estadísticas de IAM siempre es SECURITY.
  • content: Informa la última vez que se autenticó la cuenta de servicio. En este campo, se encuentran los siguientes componentes:

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

    Para cambiar el estado de una estadística, debes proporcionar la etag de la estadística existente. Usar etag ayuda a garantizar que cualquier operación se realice solo si la estadística no cambió desde la última recuperación.

  • insightSubtype: el subtipo de estadística.
  • lastRefreshTime: La fecha en la que se actualizó la estadística por última vez, lo que indica la actualidad de los datos que se usaron para generar la estadística
  • name: El nombre de la estadística, en 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: El ID del proyecto en el que se generó la estadística.
    • INSIGHT_ID: Un ID único para la estadística
  • observationPeriod: El período hasta llegar a la estadística. Los datos de origen que se usaron para generar la estadística finalizan en lastRefreshTime y comienzan en lastRefreshTime menos observationPeriod
  • stateInfo: Las estadísticas atraviesan varias transiciones de estado después de la propuesta:

    • ACTIVE: Se generó la estadística, pero no se realizó ninguna acción o se realizó una acción sin actualizar el estado de la estadística. Las estadísticas activas se actualizan cuando cambian los datos subyacentes.
    • ACCEPTED: Se realizaron acciones en función de la estadística. Se aceptan las estadísticas cuando una recomendación asociada se marcó como CLAIMED, SUCCEEDED o FAILED, o la estadística se aceptó directamente. Cuando una estadística se encuentra en el estado ACCEPTED, el contenido de la estadística no puede cambiar. Las estadísticas aceptadas se conservan durante 90 días después de su aceptación.
  • targetResources: El nombre completo del recurso del proyecto para el que se creó la estadística. Por ejemplo, //cloudresourcemanager.googleapis.com/projects/123456789012.

Marca una estadística de cuenta de servicio como ACCEPTED

Si realizas acciones basadas en una estadística activa, puedes marcar esa estadística como ACCEPTED. El estado ACCEPTED le indica a la API de recomendador que realizaste acciones basadas en esta estadística, lo que ayuda a definir mejor las recomendaciones.

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

gcloud

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

  • INSIGHT_ID: El ID de la estadística que deseas ver. Para encontrar el ID, enumera las estadísticas en el proyecto.
  • PROJECT_ID: El ID del proyecto para el que deseas administrar las estadísticas
  • ETAG: Un identificador para una versión de la estadística. Para obtener la etag, haz lo siguiente:

    1. Obtén la estadística mediante el comando gcloud recommender insights describe.
    2. Busca y copia el valor etag del resultado, incluidas las comillas delimitantes. Por ejemplo, "d3cdec23cc712bd0"
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

En el resultado, se 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 la información de estado de una estadística, consulta Revisa las estadísticas de la cuenta de servicio en esta página.

REST

Mediante el método insights.markAccepted de la API de recomendador, se marca una estadística como ACCEPTED.

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

  • PROJECT_ID: el ID del proyecto para el que deseas administrar las estadísticas.
  • INSIGHT_ID: El ID de la estadística que deseas ver. Si no conoces el ID de estadística, puedes enumerar las estadísticas en tu proyecto para encontrarlo. El ID de una estadística es todo lo que se encuentra después de insights/ en el campo name de la estadística
  • ETAG: Un identificador para una versión de la estadística. Para obtener la etag, haz lo siguiente:
    1. Obtén la estadística mediante el método insights.get.
    2. Busca y copia el valor etag de la respuesta.

HTTP method and 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, expande 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 la información de estado de una estadística, consulta Revisa las estadísticas de la cuenta de servicio en esta página.

¿Qué sigue?