En esta página, se describe cómo verificar las conexiones que realiza el personal de Google con el plano de control de tu clúster de Google Kubernetes Engine (GKE) correlacionando los registros de GKE con los registros de transparencia de acceso.
Los registros de Transparencia de acceso registran las acciones que realiza el personal de Google cuando accede a tu contenido. Esta guía está destinada a los administradores de seguridad que desean verificar de forma adicional el contenido de los registros de Transparencia de acceso y las aprobaciones de Acceso asociadas mediante la correlación con fuentes de registro adicionales de GKE. Esta verificación es completamente opcional y no es necesaria para proteger tu plano de control.
Asegúrate de conocer los siguientes conceptos:
- Transparencia de acceso
- Registros de Transparencia de acceso
- Aprobación de acceso
- Conexiones SSH en Compute Engine
En esta página, se describe una parte de un conjunto de funciones opcionales del plano de control en GKE que te permiten realizar tareas como verificar la postura de seguridad del plano de control o configurar la encriptación y la firma de credenciales en el plano de control con las claves que administras. Para obtener más detalles, consulta Acerca de la autoridad del plano de control de GKE.
De forma predeterminada, Google Cloud aplica varias medidas de seguridad al plano de control administrado. En esta página, se describen las funciones opcionales que te brindan más visibilidad o control sobre el plano de control de GKE.
Acerca del acceso de Google a las instancias del plano de control del clúster
Durante las sesiones de solución de problemas o por otros motivos comerciales justificados, es posible que el personal de Google, como los ingenieros de confiabilidad del sitio y los empleados del equipo de Atención al cliente de Cloud, necesiten acceso administrativo a las instancias de Compute Engine que alojan tu plano de control. Según el paquete de asistencia de Customer Care y la configuración, la Transparencia de acceso proporciona un registro de auditoría detallado para este acceso administrativo. La aprobación de acceso te permite solicitar una aprobación explícita antes de que cualquier personal de Google pueda acceder a tus recursos. Para obtener más información sobre el acceso de administrador y las herramientas que puedes usar para autorizar el acceso y registrar los cambios, consulta Acceso de administrador para empleados de Google.
Registros de acceso del plano de control
Cuando habilitas la autoridad del plano de control de GKE, GKE genera registros de acceso del plano de control que puedes usar de forma opcional para hacer una referencia cruzada con los registros de auditoría que generan la Transparencia de acceso y la Aprobación de acceso. GKE agrega registros de acceso al
plano de control al
bucket _Default
en Logging
para registrar las conexiones de red entrantes y los eventos SSH específicos
en tus instancias del plano de control. Debes habilitar la autoridad del plano de control de GKE en tu proyecto para generar registros de acceso del plano de control para tus clústeres.
GKE genera los siguientes registros de acceso para el plano de control:
El volumen de registros de conexión del plano de control depende de factores como la cantidad de nodos en el clúster, la cantidad de instancias del plano de control (los clústeres regionales tienen más instancias del plano de control que los clústeres zonales) y la frecuencia con la que tus cargas de trabajo llaman al servidor de la API de Kubernetes. El volumen de registros de SSH es pequeño y depende de la cantidad de reinicios de nodos.
Para verificar las conexiones con tu plano de control, busca los registros de acceso del plano de control de tu clúster y haz coincidir esos registros con los registros de auditoría de la Transparencia de acceso y la Aprobación de acceso. Esto te permite confirmar que todas las conexiones SSH a tus instancias del plano de control se debieron al acceso administrativo autorizado por parte del personal de Google. Cuando habilitas la autoridad del plano de control de GKE para tu clúster, todo el acceso SSH del personal de Google a tu plano de control es no interactivo, lo que significa que cada conexión SSH ejecuta un solo comando que autorizas.
Precios
Se aplican las siguientes consideraciones sobre los precios:
- Los registros de acceso del plano de control están sujetos a los precios de Logging.
- La Transparencia de acceso se incluye en suscripciones específicas de Atención al cliente. Para obtener más información, consulta Precios de la Transparencia de acceso.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Habilita la API de Cloud Logging.
Habilita la Transparencia de acceso en tu organización. Para obtener instrucciones, consulta Habilita la Transparencia de acceso.
De manera opcional, habilita la Aprobación de acceso para tu proyecto y selecciona el servicio de GKE. Para obtener instrucciones, consulta Cómo revisar y aprobar solicitudes de acceso con la clave de firma administrada por Google.
Asegúrate de que tu entorno sea apto para usar las funciones de autoridad del plano de control de GKE. Para habilitar estas funciones, comunícate con el equipo de ventas de Google Cloud.
Requisitos
Los registros de acceso del plano de control requieren la versión 1.31.1-gke.1846000 o posterior de GKE.
Roles y permisos requeridos
Para obtener los permisos que necesitas para habilitar la generación de registros y acceder a ellos y procesarlos, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Habilita el registro de conexiones del plano de control en tu clúster:
Administrador de clústeres de Kubernetes Engine (
roles/container.clusterAdmin
) en tu proyecto -
Para acceder a los registros y usar el Explorador de registros y Estadísticas de registros, obtén el rol Visor de registros (
roles/logging.viewer
) en tu proyecto. -
Habilita la Transparencia de acceso en la organización:
Administrador de Transparencia de acceso (
roles/axt.admin
) en tu organización
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Habilita los registros de acceso del plano de control del clúster de GKE
Puedes habilitar la generación de registros de acceso del plano de control para los clústeres del modo Autopilot y del modo estándar habilitando el componente de registro correspondiente. Para obtener más información sobre los tipos de registros del plano de control, consulta Cómo ver los registros de GKE.
Los nombres de componentes de registro admitidos para los registros de acceso del plano de control son los siguientes:
- Registros de SSH del plano de control:
KCP_SSHD
- Registros de conexión del plano de control:
KCP_CONNECTION
Habilita los registros de acceso del plano de control en un clúster nuevo
En el siguiente ejemplo, se crea un clúster en modo Autopilot con ambos tipos de registros de acceso del plano de control habilitados. Para habilitar solo un tipo de registro de acceso del plano de control, omíte el nombre del componente correspondiente del comando.
gcloud container clusters create-auto CLUSTER_NAME \
--location=LOCATION \
--logging=SYSTEM,KCP_SSHD,KCP_CONNECTION
Reemplaza lo siguiente:
CLUSTER_NAME
: Es el nombre del clúster nuevo.LOCATION
: Es la ubicación en la que se creará el clúster.
Para especificar los componentes de registro cuando creas un clúster con la API de GKE, en el método projects.locations.clusters.create
, establece los valores correspondientes en el objeto LoggingConfig
del recurso Cluster
.
Habilita los registros de acceso del plano de control en un clúster existente
Para actualizar la configuración de registro de un clúster existente y habilitar los registros de acceso del plano de control, debes hacer lo siguiente:
- Busca los componentes de registro existentes que usa tu clúster.
- Identifica los valores correspondientes que debes especificar en la marca
--logging
en gcloud CLI para mantener habilitados esos componentes de registro. - Actualiza la configuración de registro del clúster para habilitar los registros de acceso del plano de control junto con la configuración de registro existente.
Los valores que especificas para la marca --logging
en el comando gcloud container clusters update
son diferentes de los valores que ves cuando describes tu clúster.
Verifica la configuración de registro existente del clúster:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --flatten=loggingConfig \ --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
El resultado es similar a este:
SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
Identifica los valores de gcloud CLI para la marca
--logging
que corresponden a la configuración del componente de registro a partir del resultado del paso anterior. Para obtener una lista de los valores de gcloud CLI que corresponden a componentes de registro específicos, consulta la tabla Registros disponibles.Actualiza la configuración de registro con los registros de acceso del plano de control:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --logging=SYSTEM,EXISTING_LOGS,KCP_ACCESS_LOGS
Reemplaza lo siguiente:
EXISTING_LOGS
: Es una lista separada por comas de los componentes de registro que ya usa tu clúster. Asegúrate de especificar los valores de gcloud CLI que corresponden a estos componentes de registro, tomados de la tabla Registros disponibles.KCP_ACCESS_LOGS
: Es una lista separada por comas de los tipos de registros de acceso del plano de control que se habilitarán para el clúster, de la siguiente manera:- Para los registros de SSH del plano de control, especifica
KCP_SSHD
. - Para los registros de conexión del plano de control, especifica
KCP_CONNECTION
.
- Para los registros de SSH del plano de control, especifica
Para especificar los componentes de registro cuando actualizas un clúster con la API de GKE, en el método projects.locations.clusters.update
, establece los valores existentes y nuevos del componente de registro en el objeto LoggingConfig
del recurso ClusterUpdate
.
Ejemplo de actualización del clúster para habilitar los registros de acceso del plano de control
Considera un clúster para el que el comando gcloud container clusters describe
tiene la siguiente configuración de registro:
SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
El siguiente comando de actualización del clúster habilita ambos tipos de registros de acceso al plano de control y, al mismo tiempo, conserva la configuración de registro existente para este clúster de ejemplo:
gcloud container clusters update example-cluster \
--location=us-central1 \
--logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
Cómo hacer una referencia cruzada de los registros de acceso del plano de control con los registros de Transparencia de acceso
Para verificar el acceso al plano de control de un clúster, obtén los registros de conexión del plano de control, los registros de SSH del plano de control y los registros de transparencia de acceso de ese clúster:
En la consola de Google Cloud, abre la página Explorador de registros.
Para obtener todos los registros de un clúster específico, incluidos los registros de acceso del plano de control y los registros de transparencia de acceso, ejecuta la siguiente consulta:
(logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection" resource.labels.cluster_name="CLUSTER_NAME" jsonPayload.connection.dest_port="22") OR (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-sshd" resource.labels.cluster_name="CLUSTER_NAME") OR (logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Faccess_transparency" json_payload.accesses.methodName="GoogleInternal.SSH.Master" json_payload.accesses.resourceName="//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME")
El resultado debería mostrar todos los siguientes tipos de registros de tu clúster:
- Registro de transparencia de acceso
- Registro de conexión del plano de control
- Registros de SSH para cada sesión de SSH
Realiza verificaciones de verificación
La verificación principal es si ves todos los tipos de registro de las conexiones SSH cuando ejecutas la consulta de registro de la sección anterior. Cada registro de transparencia de acceso debe tener un registro de conexión del plano de control correspondiente y uno o más registros de SSH. Estos registros son para acciones que las personas realizan en tus instancias del plano de control, por lo que el volumen de registro debe ser pequeño.
De manera opcional, puedes realizar las siguientes verificaciones adicionales del contenido del registro:
- Para cada registro de SSH del plano de control, verifica si existe un registro de transparencia de acceso en un período de 15 minutos antes de la marca de tiempo del registro de SSH. Este período de tiempo explica el cierre final de la sesión de SSH que ocurre varios minutos después de que Transparencia de acceso registra la conexión inicial.
- Para cada registro de conexión del plano de control, verifica si existe un registro de transparencia de acceso en un período de 5 minutos antes de la marca de tiempo del registro de conexión del plano de control.
Si usas la Aprobación de acceso para tu clúster, verifica si cada registro de Transparencia de acceso tiene un campo
accessApprovals
correspondiente. Compara este campo con las solicitudes de aprobación de acceso de tu clúster.Para obtener solicitudes de aprobación de acceso para tu proyecto, consulta Cómo ver el historial de solicitudes de aprobación de acceso. La aprobación de acceso puede estar sujeta a exclusiones.
De manera opcional, valida la firma de la Aprobación de acceso firmada asociada con el registro de Transparencia de acceso.
Detalles del registro de acceso del plano de control
En esta sección, se proporcionan detalles y ejemplos de los registros de acceso del plano de control que genera GKE cuando el personal de Google se conecta a tus instancias del plano de control.
Registros de conexión del plano de control
GKE agrega un registro de conexión del plano de control para cada nueva conexión de red entrante a una instancia del plano de control. Estos registros incluyen detalles específicos, como los siguientes:
- Direcciones IP y puertos de origen y destino
- Dirección y protocolo de conexión
El siguiente ejemplo es de un registro de conexión del plano de control:
{
insertId: "z1eq8wonio335a5h",
jsonPayload: {
instance: {
vm_name: "gke-dee49f0d6fa34ce3a2ac-f513-d195-vm",
zone: "us-central1-c"
},
cluster: {
cluster_id: "CLUSTER_ID",
cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1-c/clusters/CLUSTER_NAME"
},
connection: {
state: "NEW",
src_ip: "192.0.2.100",
src_port: 32774,
dest_ip: "203.0.113.12",
dest_port: 22,
direction: "INGRESS"
protocol: "TCP"
},
}
logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection",
receiveTimestamp: "2024-04-11T04:08:01.883070399Z",
resource: {
labels: {
cluster_name: "CLUSTER_NAME",
location: "us-central1-c",
project_id: "PROJECT_ID"
}
type: "gke_cluster",
}
severity: "NOTICE",
timestamp: "2024-04-11T04:07:59.019330Z"
}
Los siguientes campos de la entrada de registro son relevantes para verificar las acciones de Google:
cluster.cluster_urn
: El identificador de recursos completamente calificado del clúster. Este identificador tiene el formato//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME
, con las siguientes variables:PROJECT_NUMBER
: Es el número de proyecto numérico de tu proyecto de clústeres.LOCATION
: Es la ubicación de Google Cloud de tu clúster.CLUSTER_NAME
: El nombre de tu clúster.
connection
: Detalles sobre el intento de conexión. Este campo contiene la siguiente información:state
: Es el estado de la conexión. Para las conexiones nuevas, el valor esNEW
.src_ip
: Es la dirección IP de la fuente de conexión.src_port
: Es el número de puerto de la fuente de conexión.dest_ip
: Es la dirección IP interna de la VM del plano de control.dest_port
: Es el número de puerto de destino.direction
: Es la dirección de la conexión. El valor siempre esINGRESS
.protocol
: Es el protocolo IP, comoTCP
.
Registros de SSH del plano de control
GKE agrega registros SSH del plano de control para eventos relacionados con conexiones SSH a instancias del plano de control. GKE registra los siguientes eventos:
- Se aceptó la clave SSH de un usuario
- El estado de la sesión cambió de 0 a 1, lo que indica que el usuario accedió correctamente.
- Se abrió la sesión de SSH
- Se cerró la sesión de SSH
- El estado de la sesión cambió de 1 a 0, lo que indica que el usuario salió
- Falló la sesión de SSH
Por ejemplo, el siguiente registro de SSH del plano de control es de una sesión de SSH que se abre:
{
insertId: "8llczemdulwbbwpa",
jsonPayload: {
instance: {
vm_name: "gke-06cb920c609941c0a5ce-6840-40e9-vm",
zone: "us-central1-c"
},
cluster: {
cluster_id: "891e6d12889747748c1ac16ffcc6cb7c0a96450b36864eb680917c119fd801d0",
cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1/clusters/CLUSTER_NAME",
},
message: "pam_unix(sshd:session): session opened for user REDACTED by (uid=0)",
},
logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-ssh",
receiveTimestamp: "2024-04-09T13:21:55.231436462Z"
resource: {
type: "gke_cluster",
labels: {
cluster_name: "CLUSTER_NAME",
location: "us-central1",
project_id: "PROJECT_ID"
}
},
severity: "NOTICE",
timestamp: "2024-04-09T13:21:50.742246Z"
}
Los siguientes campos de la entrada de registro son relevantes para verificar las acciones de Google:
cluster.cluster_urn
: El identificador de recursos completamente calificado del clúster. Este identificador tiene el formato//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME
, con las siguientes variables:PROJECT_NUMBER
: Es el número de proyecto numérico de tu proyecto de clúster.LOCATION
: Es la ubicación de Google Cloud de tu clúster.CLUSTER_NAME
: El nombre de tu clúster.
message
: Detalles sobre la conexión SSH.
Inhabilita los registros de acceso del plano de control
Para ver los tipos de registros específicos que usa tu clúster, ejecuta el siguiente comando:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --flatten=loggingConfig \ --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
El resultado es similar a este:
SYSTEM_COMPONENTS,WORKLOADS,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
Para inhabilitar los registros de acceso del plano de control de un clúster, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
En la marca --logging
, especifica los componentes de registro del resultado del comando anterior. Este comando de ejemplo inhabilita los registros de acceso del plano de control, pero mantiene habilitados otros registros de componentes del plano de control.
Para inhabilitar los componentes de registro con la API de GKE, establece los valores correspondientes en el objeto LoggingConfig
del recurso ClusterUpdate
en el método projects.locations.clusters.update
.
¿Qué sigue?
- Obtén información sobre la seguridad del plano de control.
- Obtén más información sobre el acceso de administrador para empleados de Google.
- Obtén más información para configurar el registro y la supervisión para GKE.
- Obtén más información para configurar el acceso a los registros a nivel del campo.
- Obtén información sobre los límites de uso de Logging.