Accede a registros de auditoría

En esta página, se explica cómo usar el registro de auditoría en tus clústeres de Google Kubernetes Engine (GKE).

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 con los registros de auditoría de Cloud y Cloud Logging. Puedes ver las entradas de registro de auditoría de Kubernetes en el proyecto de Google Cloud.

Además de las entradas que escriba Kubernetes, los registros de auditoría de tu proyecto tienen entradas escritas por GKE.

Los registros de auditoría de Google Analytics están disponibles en GKE 1.11.4 y versiones posteriores.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

Establece la configuración de gcloud predeterminada mediante uno de los siguientes métodos:

  • Usa gcloud init si deseas ver una explicación sobre cómo configurar parámetros predeterminados.
  • Usa gcloud config para establecer el ID, la zona y la región del proyecto de manera individual.

Usa gcloud init

Si recibes el error One of [--zone, --region] must be supplied: Please specify location, completa esta sección.

  1. Ejecuta gcloud init y sigue las instrucciones:

    gcloud init

    Si usas SSH en un servidor remoto, usa la marca --console-only para evitar que el comando abra un navegador:

    gcloud init --console-only
  2. Sigue las instrucciones a fin de autorizar a gcloud para que use tu cuenta de Google Cloud.
  3. Crea una configuración nueva o selecciona una existente.
  4. Elige un proyecto de Google Cloud.
  5. Elige una zona predeterminada de Compute Engine.

Usa gcloud config

  • Establece tu ID del proyecto predeterminado:
    gcloud config set project project-id
  • Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
    gcloud config set compute/zone compute-zone
  • Si trabajas con clústeres regionales, establece 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

Debes tener un clúster de GKE en tu 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 Cloud tiene los siguientes 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 Configura registros de acceso a los datos.

GKE no admite el registro de Transparencia de acceso.

Varios servicios de Google Cloud escriben entradas en los registros de tu proyecto. En el servicio de Kubernetes, también se escriben entradas en los registros de auditoría del proyecto. En los clústeres de GKE, las entradas de registro que escriben estos servicios son las más relevantes:

Servicio Nombre visible Descripción
k8s.io Kubernetes El servicio k8s.io se usa para los registros de auditoría de Kubernetes. El componente del servidor de la API de Kubernetes genera estos registros, que contienen información sobre las acciones realizadas mediante la API de Kubernetes. Por ejemplo, el servicio k8s.io registra cualquier cambio que realices en un recurso de Kubernetes mediante el comando de kubectl. Para obtener más información, consulta Auditing (Auditoría) en la documentación de Kubernetes.
container.googleapis.com Kubernetes Engine El servicio container.googleapis.com se usa para los registros de auditoría del plano de control de GKE. Los componentes internos de GKE generan estos registros, que contienen información sobre las acciones que se realizaron mediante la API de GKE. Por ejemplo, el servicio container.googleapis.com registra todos los cambios que realices en la configuración de un clúster de GKE mediante un comando de gcloud.

Mira el registro de actividad del administrador del proyecto

Console

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

    Ir 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 más antiguos.

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

  8. El cuadro de texto muestra un filtro similar al siguiente:

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

Interfaces de filtro básico y avanzado

En Cloud Console, la página Registros tiene dos interfaces de filtrado: básico y avanzado. Para obtener información sobre las dos interfaces de filtrado, consulta Interfaces de filtro del visor de registros.

Mira los servicios con los que escribe el registro de actividad de administrador

Console

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

    Ir 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 filtros, haz clic en la flecha hacia abajo ubicada a la derecha y selecciona Convertir a 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 enumera todas las entradas en tu registro de actividad de administrador que escribió el servicio k8s.io, es decir, las entradas que escribió el plano de control de Kubernetes.

  4. Busca entradas de registro que haya escrito el servicio que no sean k8s.io. En el cuadro de filtros, cambia serviceName="k8s.io" por serviceName!="k8s.io". Haz clic en Enviar filtro.

    La pantalla enumera las entradas de tu registro de actividad de administrador que no fueron escritas por el servicio k8s.io.

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

  6. Busca entradas de registro que haya escrito el servicio container.googleapis.com, es decir, las entradas que haya escrito el plano de control de Kubernetes Engine. En el cuadro de filtros, cambia serviceName!="k8s.io" por serviceName="container.googleapis.com". Haz clic en Enviar filtro.

gcloud

  1. Enumera las primeras dos entradas de registro en el registro de actividad de administrador de tu proyecto que haya escrito el servicio k8s.io, es decir, las entradas que haya escrito 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
    

    En el ejemplo anterior, project-id es el ID del proyecto.

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

    protoPayload:
     ...
     serviceName: k8s.io
    
  2. Busca entradas de registro que hayan escrito los 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
    

    El resultado enumera las entradas de tu registro de actividad de administrador que no fueron escritas por el servicio k8s.io.

    logName: projects/project-id/logs/cloudaudit.googleapis.com%2Factivity
    ...
    protoPayload:
     ...
     serviceName: compute.googleapis.com
    ...
    
  3. En una de las entradas de registro, mira el valor de protoPayload.serviceName para ver qué servicio la escribió.

  4. Busca entradas de registro que haya escrito el servicio container.googleapis.com, es decir, las entradas que escribió el plano de control de GKE:

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

    En el comando anterior, project-id es el ID del proyecto.

Filtra 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 Descripción
k8s_cluster Clúster de Kubernetes Las entradas de registro escritas por el servidor de la 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, objetos Deployment y objetos Secret.
gke_cluster Operaciones del clúster de GKE Las entradas de registro escritas por el servidor de la API de Kubernetes Engine se aplican al recurso gke_cluster. En estas entradas de registro, se describen operaciones, como la creación y la eliminación de clústeres.

Puedes usar estos filtros en Cloud Console o mediante la herramienta de línea de comandos de gcloud.

Console

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

    Ir 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 ubicada 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 comercial del tipo de recurso k8s_cluster.

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

    La pantalla enumera todas las entradas de tu registro de actividad de administrador que corresponden 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. En el menú desplegable, selecciona Operaciones del clúster de GKE. Este es el nombre visible del tipo de recurso gke_cluster. En el menú desplegable para elegir un registro, selecciona la actividad y haz clic en Aceptar.

    La pantalla enumera todas las entradas de tu registro de actividad de administrador que corresponden al tipo de recurso gke_cluster.

gcloud

  1. Enumera las dos primeras entradas en el registro de actividad de administrador de tu 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
    

    En el ejemplo anterior, project-id es el ID del proyecto.

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

    resource:
     ...
     type: k8s_cluster
    
  2. Enumera las dos primeras entradas en el registro de actividad de administrador de tu 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 el resultado, 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 Cloud Console. En cada caso, reemplaza project-id por el ID del proyecto.

Busca cambios en el Control de acceso según la función, excepto los cambios automatizados del sistema.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.authorization.rbac.v1"
NOT protoPayload.authenticationInfo.principalEmail:"system"
logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.authorization.rbac.v1.roles"
NOT protoPayload.authenticationInfo.principalEmail:"system"
logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.authorization.rbac.v1.rolebindings"
NOT protoPayload.authenticationInfo.principalEmail:"system"

Puedes usar consultas similares para buscar cambios en clusterroles y clusterrolebindings.

Busca solicitudes de firma de certificados.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.resourceName:"certificates.k8s.io/v1beta1/certificatesigningrequests"

Busca solicitudes web no autenticadas.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail:"system:anonymous"

Busca llamadas de identidad de bootstrap de Kubelet.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail:"kubelet"

Busca solicitudes autenticadas de nodo.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail:"system:node"

Busca llamadas fuera de un rango de IP.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.requestMetadata.callerIp!="127.0.0.1"
protoPayload.requestMetadata.callerIp!="::1"
NOT protoPayload.requestMetadata.callerIp:"ip-prefix"

Busca entradas en tu registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y que describan la creación de una implementación.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"deployments.create"

Busca entradas en tu registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y que 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 tu registro de actividad de administrador que se apliquen al tipo de recurso gke_cluster y que describa la creación del 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 tu registro de actividad de administrador que se apliquen al tipo de recurso gke_cluster y que tengan un valor severity de ERROR:

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="gke_cluster"
severity="ERROR"

Busca entradas en tu registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y que describan una solicitud de escritura para 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 tu registro de actividad de administrador que se apliquen al tipo de recurso k8s_cluster y que 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 de registros avanzados.

Estructura de una entrada de registro

Cada entrada de registro es un objeto del tipo LogEntry. Para obtener más información, ve a Información sobre los registros de auditoría.

Habilita los registros de acceso a los datos

  1. 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
    

    En el comando anterior, project-id es el ID del proyecto.

  2. Abre my-policy.yaml para ver la política de IAM. Es probable que la política contenga un objeto bindings similar al siguiente:

    bindings:
    - members:
      - serviceAccount:xxx.gserviceaccount.com
      - serviceAccount:yyy.gserviceaccount.com
      role: roles/container.clusterAdmin
    - members:
      ...
    
  3. En my-policy.yaml, crea un objeto auditConfigs, o agrégalo a tu objeto auditConfigs existente, para que ADMIN_READ, DATA_WRITE Y DATA_READ aparezcan enumerados en auditLogConfigs.

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

    No cambies el valor de etag.

  4. Guarda tu archivo actualizado como my-policy-2.yaml.

  5. 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.

Mira el registro de acceso a los datos del proyecto

Console

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

    Ir 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 ubicada 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 a filtro avanzado.

  6. El cuadro de texto muestra un filtro similar al siguiente:

    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 tiene 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"
...

Exporta y almacena entradas de registro

Las entradas de registro se conservan en Cloud Logging durante un tiempo limitado conocido como período de retención. Una vez pasado ese período, se borran.

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

Configura métricas y alertas

Puedes usar Cloud Monitoring para configurar métricas basadas 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.

Próximos pasos