Registro de auditoría

Esta página explica cómo usar el registro de auditoría en los clústeres de Google Kubernetes Engine.

Descripción general

Todos los clústeres con la tecnología de Kubernetes cuentan con el registro de auditoría de Kubernetes, que conserva un registro cronológico de las llamadas que se realizaron al servidor de API de Kubernetes. Las entradas de registro de auditoría de Kubernetes son útiles a fin de investigar solicitudes sospechosas a la API, recopilar estadísticas o crear alertas de supervisión para llamadas no deseadas a la API.

Los clústeres de GKE integran el registro de auditoría de Kubernetes a Cloud Audit Logging y Stackdriver Logging. Puedes ver las entradas de registro de auditoría de Kubernetes en el proyecto de Google Cloud Platform.

Además de las entradas escritas mediante Kubernetes, los registros de auditoría del proyecto cuentan con entradas escritas mediante Kubernetes Engine.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de habilitar la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de instalar el SDK de Cloud.
  • Configura el ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, configura tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, configura tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Es necesario tener un clúster de Kubernetes Engine en el proyecto. Puedes usar un clúster existente o crear uno nuevo para realizar los ejercicios de este tema. Si eliges un clúster existente, asegúrate de que haya tenido alguna actividad reciente. Por ejemplo, si no has creado una implementación recientemente, ahora puedes crear una si ingresas este comando:

kubectl run log-exercise --image nginx

Obtén más información sobre el registro de auditoría de Kubernetes.

Registros de auditoría en el proyecto

Tu proyecto de GCP tiene estos registros de auditoría:

  • Registro de actividad de administrador
  • Registro de acceso a los datos

Según la configuración predeterminada, el registro de actividad de administrador está habilitado y no tiene costo adicional.

Según la configuración predeterminada, el registro de acceso a los datos está inhabilitado y habilitarlo puede causar una facturación adicional. Para obtener más información sobre cómo habilitar el registro de acceso a los datos y los costos asociados, consulta Configurar registros de acceso a los datos.

Kubernetes Engine no admite el registro de Transparencia de acceso.

Se pueden escribir entradas en los registros del proyecto con varios servicios de Google Cloud Platform. En el servicio de Kubernetes, también se escriben entradas en los registros de auditoría del proyecto. Para los clústeres de Kubernetes Engine, las entradas de registro escritas con estos servicios son las más relevantes:

Servicio Nombre visible
k8s.io Kubernetes
container.googleapis.com Kubernetes Engine

Cómo ver el registro de actividad de administrador del proyecto

Console

  1. En GCP Console, ve a la página Registros en el menú de Registro.

    Ve a la página Registros.

  2. Cerca de la parte superior de la página, ubica el menú desplegable para seleccionar un tipo de recurso. En el menú desplegable, selecciona Clúster de Kubernetes.

  3. Como alternativa, especifica la Ubicación o elige Todas las ubicaciones. Si seleccionas una ubicación, puedes seleccionar un clúster específico en esa ubicación.

  4. El menú a la derecha es para seleccionar un registro. En el menú desplegable, selecciona la actividad y haz clic en Aceptar.

  5. La pantalla muestra todos los niveles de registro según la configuración predeterminada. Para especificar un nivel de registro, como Advertencia, selecciónalo en el menú desplegable que representa los niveles de registro.

  6. Es posible que la pantalla solo muestre las entradas de registro de la última hora. Si no ves ninguna entrada de registro de la última hora, haz clic en Cargar registros anteriores.

  7. En el cuadro de Filtrar por etiqueta o búsqueda de texto, arriba de los menús desplegables mencionados anteriormente, haz clic en la flecha hacia abajo para abrir el menú desplegable. En el menú, selecciona Convertir en filtro avanzado.

  8. El cuadro de texto muestra un filtro similar a este:

    resource.type="k8s_cluster"
    logName="projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"
    
  9. Haz clic en la flecha al comienzo de la línea para abrir una de las entradas de registro. El campo logName de la entrada tiene el valor projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity.

gcloud

Enumera las primeras dos entradas de registro en el registro de actividad de administrador del proyecto:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"' \
    --limit 2 \
    --freshness 300d

Donde [PROJECT_ID] es el ID del proyecto.

Los resultados muestran dos entradas de registro. Observa que, para cada entrada de registro, el campo logName tiene el valor projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity.

insertId: 18yao5jem14og
labels:
  cluster_version: 1.8.8-gke.0
logName: projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity
...

Modos de filtro básicos y avanzados

En GCP Console, la página Registros tiene dos modos de filtro: básico y avanzado.

En el modo básico, puedes usar los menús desplegables para filtrar la visualización según el tipo de recurso y el nombre y nivel de registro. En el modo avanzado, puedes usar filtros detallados si ingresas un filtro personalizado en un cuadro de texto.

Cómo determinar qué modo está activo

En la página Registros, en el cuadro de filtros, haz clic en la flecha hacia abajo a la derecha. Si ves Convertir en filtro avanzado, significa que la página está en modo básico. Si ves Quitar filtros y volver al modo básico, significa que la página está en modo avanzado.

Cómo cambiar de un modo de filtro a otro

Para cambiar de un modo a otro, haz clic en la flecha hacia abajo a la derecha del cuadro de filtros y selecciona Convertir en filtro avanzado o Quitar filtros y volver al modo básico.

Cómo ver los servicios con los que escribe el registro de actividad de administrador

Console

  1. En GCP Console, ve a la página Registros en el menú de Registro.

    Ve a la página Registros.

  2. Si la página Registros aún no está en modo avanzado, cambia a este modo. En el cuadro de filtro, haz clic en la flecha hacia abajo a la derecha y selecciona Convertir en filtro avanzado.

  3. En el cuadro de filtros, borra cualquier texto existente y luego ingresa este filtro:

    logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="k8s.io"
    

    Donde [PROJECT_ID] es el ID del proyecto.

    Haz clic en Enviar filtro.

    La pantalla muestra todas las entradas en el registro de actividad de administrador que se escribieron con el servicio k8s.io. Es decir, las entradas escritas con el plano de control de Kubernetes.

  4. Ahora, busca entradas de registro que se hayan escrito con servicios que no sean k8s.io. En el cuadro de filtros, cambia serviceName="k8s.io" a serviceName!="k8s.io". Haz clic en Enviar filtro.

    La pantalla muestra las entradas de registro en el registro de actividad de administrador que no se escribieron con el servicio k8s.io.

  5. Abre una de las entradas de registro y expande el campo protoPayload. Mira el valor de serviceName para ver con qué servicio se escribió la entrada de registro.

  6. Ahora, busca entradas de registro que se hayan escrito con el servicio container.googleapis.com. Es decir, las entradas escritas con el plano de control de Kubernetes Engine. En el cuadro de filtros, cambia serviceName!="k8s.io" a serviceName="container.googleapis.com". Haz clic en Enviar filtro.

gcloud

Enumera las primeras dos entradas de registro en el registro de actividad de administrador del proyecto que se escribieron con el servicio k8s.io. Es decir, las entradas escritas con el plano de control de Kubernetes:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
        AND protoPayload.serviceName="k8s.io"' \
    --limit 2 \
    --freshness 300d

Donde [PROJECT_ID] es el ID del proyecto.

En los resultados, puedes ver que protoPayload:serviceName tiene el valor k8s.io:

protoPayload:
  ...
  serviceName: k8s.io

Ahora, busca entradas de registro que se hayan escrito con servicios que no sean k8s.io:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
        AND protoPayload.serviceName!="k8s.io"' \
    --limit 2 \
    --freshness 300d

Los resultados muestran las entradas de registro en el registro de actividad de administrador que no se escribieron con el servicio k8s.io.

logName: projects/steve-70/logs/cloudaudit.googleapis.com%2Factivity
...
protoPayload:
  ...
  serviceName: compute.googleapis.com
...

En una de las entradas de registro, mira el valor de protoPayload.serviceName para ver con qué servicio se escribió la entrada de registro.

Ahora, busca entradas de registro que se hayan escrito con el servicio container.googleapis.com. Es decir, las entradas escritas con el plano de control de Kubernetes Engine:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
        AND protoPayload.serviceName="container.googleapis.com"' \
    --limit 2 \
    --freshness 300d

Donde [PROJECT_ID] es el ID del proyecto.

Cómo filtrar el registro de actividad de administrador por tipo de recurso

Cada entrada de registro en el registro de actividad de administrador se aplica a un tipo determinado de recurso. Estos son los tipos de recursos más relevantes para los clústeres de Kubernetes:

Tipo de recurso Nombre visible
k8s_cluster Clúster de Kubernetes
gke_cluster Operaciones del clúster de GKE

Las entradas de registro escritas con el servidor de API de Kubernetes se aplican al tipo de recurso k8s_cluster. En estas entradas de registro, se describen operaciones en los recursos de Kubernetes del clúster, por ejemplo, pods, implementaciones y secretos.

Las entradas de registro escritas con el servidor de API de Kubernetes Engine se aplican al recurso gke_cluster. En estas entradas de registro, se describen operaciones como la creación y eliminación de clústeres.

Console

  1. En GCP Console, ve a la página Registros en el menú de Registro.

    Ve a la página Registros.

  2. Si la página Registros aún no está en modo básico, cambia a este modo. En el cuadro de filtros, haz clic en la flecha hacia abajo a la derecha y selecciona Quitar filtros y volver al modo básico.

  3. En el menú desplegable para seleccionar un tipo de recurso, selecciona Clúster de Kubernetes. Este es el nombre que se muestra para el tipo de recurso k8s_cluster.

  4. En el menú desplegable para seleccionar un registro, selecciona la actividad y haz clic en Aceptar.

    La pantalla muestra todas las entradas de registro en el registro de actividad de administrador que se aplican al tipo de recurso k8s_cluster.

  5. Abre una de las entradas de registro y expande el campo resource. Verifica que el campo type tenga el valor k8s_cluster.

  6. Ahora, en el menú desplegable, selecciona Operaciones del clúster de GKE. Este es el nombre que se muestra para el tipo de recurso gke_cluster. En el menú desplegable para seleccionar un registro, selecciona la actividad y haz clic en Aceptar.

    La pantalla muestra todas las entradas de registro en el registro de actividad de administrador que se aplican al tipo de recurso gke_cluster.

gcloud

Enumera las primeras dos entradas de registro en el registro de actividad de administrador del proyecto que se aplican al tipo de recurso k8s_cluster:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
        AND resource.type="k8s_cluster"' \
    --limit 2 \
    --freshness 300d

Donde [PROJECT_ID] es el ID del proyecto.

En los resultados, puedes ver que el campo resource:type tiene el valor k8s_cluster:

resource:
  ...
  type: k8s_cluster

A continuación, enumera las primeras dos entradas de registro en el registro de actividad de administrador del proyecto que se aplican al tipo de recurso gke_cluster:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
        AND resource.type="gke_cluster"' \
    --limit 2 \
    --freshness 300d

En los resultados, puedes ver que el campo resource:type tiene el valor gke_cluster:

resource:
  ...
  type: gke_cluster

Ejemplos de filtros para el registro de actividad de administrador

Estos son algunos ejemplos de los filtros que puedes probar en GCP Console. En cada caso, reemplaza [PROJECT_ID] por el ID del proyecto.

Busca entradas en el registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y describan cómo crear una implementación.

logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"deployments.create"

Busca entradas en el registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y tengan un valor principalEmail de system:anonymous. Estas entradas probablemente representan intentos fallidos de autenticación.

logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail="system:anonymous"

Busca entradas en el registro de actividad de administrador que se apliquen al tipo de recurso gke_cluster y describan cómo crear un clúster:

logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="gke_cluster"
protoPayload.methodName="google.container.v1.ClusterManager.CreateCluster"

Busca entradas en el registro de actividad de administrador que se apliquen al tipo de recurso gke_cluster y tengan un valor severity de ERROR.

logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="gke_cluster"
severity="ERROR"

Busca entradas en el registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y describan una solicitud de escritura a un secreto:

logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.core.v1.secrets"
NOT protoPayload.methodName:"get"
NOT protoPayload.methodName:"list"
NOT protoPayload.methodName:"watch"

Busca entradas en el registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y describan una solicitud de pod de un usuario en particular:

logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.core.v1.pods"
protoPayload.authenticationInfo.principalEmail="dev@example.com"

Para obtener más información sobre cómo crear filtros, consulta Filtros avanzados de registro.

Estructura de una entrada de registro

Cada entrada de registro es un objecto del tipo LogEntry. Para obtener más información, consulta los tipos de datos de registro de auditoría.

Cómo habilitar los registros de acceso a los datos

Obtén la política de administración de identidades y accesos (IAM) para tu proyecto:

gcloud projects get-iam-policy [PROJECT_ID] > my-policy.yaml

Donde [PROJECT_ID] es el ID del proyecto.

Abre my-policy.yaml para ver tu política de IAM. Tu política probablemente contiene un objeto bindings similar a este:

bindings:
- members:
  - serviceAccount:xxx.gserviceaccount.com
  - serviceAccount:yyy.gserviceaccount.com
  role: roles/container.clusterAdmin
- members:
  ...

En my-policy.yaml, crea un objeto auditConfigs o agrega al objeto auditConfigs existente para que ADMIN_READ, DATA_WRITE y DATA_READ aparezcan en auditLogConfigs.

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices

No cambies el valor de etag.

Guarda el archivo actualizado como my-policy-2.yaml.

Establece la política de IAM para tu proyecto:

gcloud projects set-iam-policy [PROJECT_ID] my-policy-2.yaml

Donde [PROJECT_ID] es el ID del proyecto.

Cómo ver el registro de acceso a los datos del proyecto

Console

  1. En GCP Console, ve a la página Registros en el menú de Registro.

    Ve a la página Registros.

  2. Si la página Registros aún no está en modo básico, cambia a este modo. En el cuadro de filtros, haz clic en la flecha hacia abajo a la derecha y selecciona Quitar filtros y volver al modo básico.

  3. Cerca de la parte superior de la página, ubica el menú desplegable para seleccionar un tipo de recurso. En el menú desplegable, selecciona Clúster de Kubernetes.

  4. En el menú para seleccionar un registro, selecciona data_access y haz clic en Aceptar.

  5. En el cuadro de Filtrar por etiqueta o búsqueda de texto, a la derecha, haz clic en la flecha hacia abajo para abrir el menú desplegable. En el menú, selecciona Convertir en filtro avanzado.

  6. El cuadro de texto muestra un filtro similar a este:

    resource.type="k8s_cluster"
    logName="projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access"
  7. Abre una de las entradas de registro y observa que el campo logName de la entrada tenga el valor projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Fdata_access.

gcloud

Enumera las dos primeras entradas de registro en el registro de acceso a los datos del proyecto:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Fdata_access"' \
    --limit 2 \
    --freshness 30d

Donde [PROJECT_ID] es el ID del proyecto.

Los resultados muestran dos entradas de registro. Observa que, para cada entrada de registro, el campo logName tiene el valor projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Fdata_access.

insertId:  "x0vy9eej0j54"
labels: {…}
logName:  "projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Fdata_access"
...

Cómo exportar y almacenar entradas de registro

Las entradas de registro se alojan en Stackdriver Logging durante un tiempo limitado conocido como período de retención. Después de eso, se borran las entradas.

Si deseas conservar tus entradas de registro por más tiempo, puedes exportarlas a un servicio de Google como Cloud Storage, BigQuery o Cloud Pub/Sub.

Cómo configurar métricas y alertas

Puedes usar Stackdriver Monitoring para configurar métricas con base en las entradas de registro. También puedes usar métricas basadas en registros para configurar gráficos y alertas.

Política de auditorías

La política de auditoría de Kubernetes determina qué entradas de registro exporta el servidor de API de Kubernetes. La política de auditoría de Kubernetes Engine determina qué entradas van al registro de actividad de administrador y cuáles van al registro de acceso a los datos.

Para obtener más información sobre las políticas de auditoría en Kubernetes Engine, consulta la Política de auditoría de Kubernetes Engine.

¿Qué sigue?

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...