Identidades
- El certificado de cliente mTLS del conector, que lleva el ID de su organización como nombre común, autentica cada demonio ante su endpoint del conector.
clicklink clctl instances createutiliza el mismo certificado y la misma clave HMAC cuando llama al endpoint. pcm_scraperypcm_troubleshooterson los usuarios de ClickHouse de solo lectura con los que se conectan el scraper y el solucionador de problemas. El executor no tiene ningún usuario de ClickHouse.- Los ServiceAccounts del Troubleshooter, uno por cada implementación aprovisionada, disponen de las vistas de Kubernetes de solo lectura que puede utilizar una sesión de soporte.
pcm-executores el ServiceAccount de Kubernetes del executor para el ciclo de vida de los servicios gestionados. Una ValidatingAdmissionPolicy limita sus escrituras a los espacios de nombres de los servicios.pcm-platformes la identity del executor para las actualizaciones de la plataforma. Su comandoclicklink clctl platform approveemite un token válido durante 2 horas y nunca lo renueva; entre aprobaciones, el executor no tiene acceso de escritura a la capa de la plataforma.- El rol de IAM por servicio (
CH-S3-<service>-<region>-00-Rolede forma predeterminada) lo creaclicklink clctl executor preparecon sus credenciales. Está acotado a los buckets de datos y de copia de seguridad de ese servicio y solo goza de la confianza del ServiceAccount de Kubernetes de ese servicio, de modo que ni el executor ni ClickHouse pueden asumirlo. - El perfil de instancia de la VM EC2 del conector asume el rol de pull de ECR de solo lectura de su entorno para el acceso directo a la plataforma, tanto para el inicio de sesión de charts como para las comprobaciones de imágenes. La CLI de aprobación emplea la misma ruta de perfil de instancia; los perfiles de AWS de la estación de trabajo o las credenciales de SSO no lo sustituyen. Otros registries de charts de ECR utilizan credenciales ambiente de AWS. Las descargas de imágenes se realizan en sus nodos con su propio rol de pull. El executor no guarda credenciales para sus buckets ni para IAM, y no realiza llamadas a S3 ni a IAM. Consulte credenciales del registry.
- Sus propias credenciales aplican todos los permisos: el permiso de acceso del executor en
init --managed, los buckets y el rol enprepare, la mitad correspondiente a los permisos de cada actualización de plataforma enapprovey la limpieza enteardown.
Qué puede hacer el conector
Conexiones salientes
Todas las conexiones que abre el conector se originan dentro de su entorno. La lista completa:
En sentido entrante, cada demonio expone un único puerto local de salud, que también sirve sus métricas de Prometheus, además del gateway de sesión opcional. La API de comandos local del executor se enlaza únicamente a loopback. Nada más queda a la escucha. ClickHouse Cloud nunca inicia conexiones hacia su entorno: solo puede responder a los dos WebSockets salientes.
Privilegios de ClickHouse
El aprovisionamiento crea un usuario de solo lectura por cada componente de observación. Los usuarios se crean conIDENTIFIED WITH bcrypt_hash, por lo que en el SQL de aprovisionamiento solo existe un hash bcrypt con sal. La contraseña en texto plano solo se encuentra en el archivo de credenciales que el demonio lee en tiempo de ejecución. La línea ALTER USER que sigue a cada CREATE USER rota el hash con --force. El executor no tiene usuario de ClickHouse y nunca se conecta a ClickHouse. Los privilegios son exactamente los siguientes, con los conjuntos de tablas predeterminados:
READ ON REMOTE es necesario porque las consultas de scrape encapsulan cada tabla del sistema en clusterAllReplicas(). SYSTEM FLUSH LOGS es el único privilegio a nivel de sistema. Hace que las tablas del sistema *_log persistan las entradas que ya tienen en búfer para que los scrapes vean datos actuales; no permite leer ni modificar nada. ClickHouse acepta ese privilegio únicamente con alcance global y solo lo aplica a las tablas de logs, por lo que el privilegio concedido es más amplio que la capacidad real.
system.user_directories para ambos usuarios sirve para un único diagnóstico. clicklink clctl preflight se ejecuta con las credenciales del propio conector y comprueba si la instancia almacena sus usuarios de ClickHouse de forma replicada o local. La tabla contiene metadatos de configuración del almacenamiento de usuarios, no datos de usuario. No está incluida ni en el conjunto de scrape ni en la lista de permitidos de la tabla de sesión, por lo que ninguna ruta de salida de scrape o sesión la lee. Sin este privilegio, esa comprobación preflight se marca como omitida y todo lo demás continúa.
No hay privilegios de INSERT, DDL, administración de usuarios, configuración ni control de procesos. Cuando una segunda implementación del conector comparte una instancia, sus usuarios llevan un sufijo (pcm_scraper_<suffix>) con los mismos conjuntos de privilegios.
RBAC de Kubernetes
Scraper y solucionador de problemas
El scraper y el solucionador de problemas no tienen ningún Rol de clúster ni ClusterRoleBinding. El chart crea Roles con ámbito de espacio de nombres en el espacio de nombres del connector, y cada paquete de acceso por instancia crea un Role en el espacio de nombres de ClickHouse o del service de esa instancia.Executor
En modo gestionado,clicklink clctl init --managed (o clicklink clctl executor access grant --cluster seguido de apply --cluster) aplica la concesión del Executor con tus credenciales. La concesión consta de la ServiceAccount pcm-executor (en el espacio de nombres del conector en Kubernetes, o en clicklink-system en una instalación en VM), un Rol de clúster vinculado a ella y la ValidatingAdmissionPolicy pcm-executor-prefix-guard.
Los verbos se conceden a nivel de clúster porque RBAC no puede expresar un prefijo de espacio de nombres. La política de admisión deniega entonces toda escritura de pcm-executor dirigida a un espacio de nombres fuera del prefijo del servicio (ns- por defecto). Su espacio de nombres de origen admite tres escrituras: la renovación de su propio token, el ConfigMap clicklink-instance-registry que lee el scraper y, en Kubernetes, el certificado de client renovado que se vuelve a escribir en el Secret clicklink-mtls. La política se aplica únicamente a esa ServiceAccount y usa failurePolicy: Fail y validationActions: [Deny]. El ClusterRoleBinding se aplica al final, después de la política y su vinculación, de modo que una concesión aplicada parcialmente deja al Executor sin permisos, en lugar de con permisos sin protección.
En una VM, clicklink clctl executor prepare también aplica un paquete por servicio. El paquete consta de una ServiceAccount pcm-executor dentro de ns-<name>, un Role con las mismas familias de recursos y un Rol de clúster limitado a get y delete sobre ese único espacio de nombres. El Executor usa ese paquete para el servicio cuando está presente y, en caso contrario, la concesión a nivel de clúster. En Kubernetes, el pod de Kubernetes siempre actúa como la ServiceAccount pcm-executor del espacio de nombres del conector.
La admisión no se ejecuta en
get, list ni watch, por lo que las lecturas que el Executor realiza sobre estas familias de recursos no están limitadas al prefijo.
Identity de la plataforma
clicklink clctl platform approve aplica la mitad correspondiente a los permisos de una actualización de plataforma con tus credenciales: espacios de nombres, CustomResourceDefinitions, ServiceAccounts, roles de clúster y ClusterRoleBindings, Roles y RoleBindings, configuraciones de webhook y de admisión, PriorityClasses y la clase de almacenamiento. Después, aplica el ServiceAccount pcm-platform, su rol de clúster, la ValidatingAdmissionPolicy pcm-platform-scope-guard y la vinculación, y emite un token vinculado con una validez de 2 horas.
Con ese token, el executor solo puede escribir deployments, services, configmaps, secrets, jobs y poddisruptionbudgets, y únicamente en los espacios de nombres de plataforma que permita el scope guard. Puede leer pods, events, namespaces, serviceaccounts, CustomResourceDefinitions, objetos RBAC, configuraciones de webhook, clases de almacenamiento y PriorityClasses para comprobar que la mitad de los permisos ya está aplicada antes de aplicar nada. Nunca dispone de escalate, bind ni impersonate, nunca escribe un tipo de ámbito de clúster ni un objeto RBAC, y no puede emitir ni renovar su propio token. El token autoriza exactamente un paquete: el resumen que aprobaste queda registrado en el ServiceAccount, y el executor rechaza cualquier otro.
Lo que el conector no puede hacer
- Ninguna escritura sobre los datos o el estado de ClickHouse. Los grants anteriores no contienen ningún
INSERT, ninguna DDL ni privilegios de gestión de usuarios, de configuración o de control de procesos. El único grant de clase de sistema, elSYSTEM FLUSH LOGSdel scraper, solo hace que las log tables persistan lo que ya tienen en búfer. El executor no tiene ningún ClickHouse user. Ningún componente puede modificar datos, esquemas, usuarios ni configuración a través de ClickHouse. - Sin exec. Ningún RBAC contiene
pods/exec; ningún componente puede ejecutar comandos en tus pods. - Ninguna escritura fuera de los espacios de nombres del service y de la plataforma. El scraper y el solucionador de problemas no tienen
deletenipatch. Sus únicas mutaciones son elupdatecon nombre exacto sobre el propio secreto de mTLS del conector y elcreatesobreserviceaccounts/token, que emite tokens de corta duración para sus propias ServiceAccounts y no modifica ningún objeto almacenado. La admission deniega las escrituras del executor fuera del prefijo del service, y sus escrituras en la plataforma solo existen mientras sea válido un token emitido por ti. - Sin permiso para otorgar permisos. Tus credenciales aplican los espacios de nombres, las CRD, las ServiceAccounts, el RBAC, las configuraciones de webhook y de admission, las PriorityClasses y la clase de almacenamiento de la plataforma durante
approve. La identidad de plataforma del executor no puede escalar privilegios, vincular ni suplantar. Dentro de un espacio de nombres de service, el executor solo puede crear Roles que otorguen permisos que ya posee. - Ninguna credencial para tus buckets ni para IAM.
clicklink clctl executor preparecrea los buckets y el role por service, yclicklink clctl executor teardownlos elimina; ambos comandos se ejecutan con tus credenciales. El role solo puede ser asumido por los pods de ese service. Para el acceso directo a la plataforma, el executor usa el perfil de instancia de la VM EC2 del conector para asumir el role de pull de solo lectura de ECR, tanto para el inicio de sesión del chart como para las comprobaciones de imagen. Otros registros de charts de ECR usan credenciales de AWS ambientales; consulta identities. Sus únicas llamadas a APIs de la nube van a ECR y STS; no puede leer ni eliminar tus datos. - Ningún conocimiento de la contraseña de tu usuario
default.clicklink clctl executor preparela genera en tu lado y la muestra una sola vez (o lo haceclicklink clctl instances create, cuando pasas las entradas como flags). Solo se envían sus hashes, de modo que ni el conector ni ClickHouse Cloud pueden recuperarla. - Nada entrante. ClickHouse Cloud nunca abre una connection hacia tu entorno. Las únicas rutas de comandos son los dos WebSockets salientes. El solucionador de problemas rechaza todos los comandos salvo que esté activa una sesión de soporte que hayas habilitado. El executor acepta comandos de ciclo de vida solo para los services cuya gestión hayas solicitado a ClickHouse, dentro de los ámbitos anteriores. Incluso durante una sesión, el solucionador de problemas está limitado por ambos lados. Las consultas a ClickHouse se restringen a la lista de permitidos de tablas, que rechaza
query_logytext_log, por lo que nunca se otorgan. El acceso a Kubernetes se limita a las vistas de solo lectura y a los logs de pods que otorgan los Roles acotados al espacio de nombres.
Qué requiere su intervención
- Habilitar el modo gestionado. El executor se ejecuta, y su grant de Kubernetes existe, solo después de que habilite el modo gestionado en
init; el grant se aplica con permisos de administrador del cluster. Consulte servicios gestionados. - Crear un servicio.
clicklink clctl executor preparese ejecuta con sus credenciales de AWS para crear los buckets y el rol de IAM, yclicklink clctl instances createenvía la definición. ClickHouse Cloud no puede crear un servicio en su cluster sin ambos. Consulte crear un servicio. - Actualizaciones de la plataforma. Cada actualización de los componentes de la plataforma se aplica solo después de que ejecute
clicklink clctl platform approvepara ese paquete exacto; el token que genera expira a las 2 horas y nunca se renueva. Consulte actualizaciones de la plataforma. - Limpieza tras una eliminación. Eliminar un servicio elimina únicamente sus recursos de Kubernetes.
clicklink clctl executor teardown, ejecutado con sus credenciales, elimina el rol de IAM y, solo con indicadores explícitos, los datos y los backups. Consulte eliminar un servicio. - Sesiones de soporte. La resolución interactiva de problemas solo se realiza dentro de una sesión que habilite, con una duración predeterminada de 4 horas y máxima de 24 horas. Deshabilitarla surte efecto de inmediato. Consulte las sesiones de soporte.
- La lista de permitidos de operadores. Cada solicitud al gateway debe incluir un token OIDC cuyo correo electrónico certificado figure en su lista de permitidos. Una lista de permitidos vacía no permite el acceso. Usted administra la lista; consulte la guía de configuración.
- Exposición del gateway. El gateway de sesión está desactivado salvo que lo habilite y solo es accesible mediante reenvío de puertos, a menos que opte por un Ingreso. En una VM, cada operador debe fijar la huella digital de su certificado autofirmado, o verificarlo con un CA bundle pasado como
--gateway-ca, antes de que los comandos de sesión se comuniquen con él. - Salida de red. Con un CNI que aplica las políticas de red, ningún demonio alcanza el endpoint del conector hasta que indique sus CIDR en
networkPolicy.allowEgressCIDRs. El executor también necesita los CIDR del Kubernetes API server (networkPolicy.apiserverCIDRs), queinit --managedderiva de la VPC del cluster. Si los charts de la plataforma provienen de Amazon ECR, añada también los rangos de ECR y STS.
Cómo se atribuye el acceso
- Identity de la implementación. El common name del certificado de client mTLS es el ID de tu org, y su único DNS name está vinculado al host de tu endpoint. Eso hace que toda connection a la API sea atribuible a tu org. La renewal es automática y se realiza dentro del demonio; ningún operador manipula el material de la clave.
- Integridad de las solicitudes. Cada API request incluye además una firma HMAC-SHA256 (
Authorization: HMAC-SHA256 AccessKey=..., Signature=..., Timestamp=...) sobre el method, el path, la marca de tiempo y el hash del cuerpo, usando el par de claves emitido durante la inscripción. - Identidad del operador. Las llamadas al gateway se atribuyen al correo electrónico atestiguado por el OIDC ID token del operador, verificado frente al JWKS de tu identity provider. Nunca se confía en un nombre autodeclarado cuando hay un token disponible.
- Comandos de ciclo de vida. El executor registra en su almacén local cada comando que recibe, junto con su origin (ClickHouse Cloud o una llamada local a
clicklink clctl), su stage y su resultado, e informa del resultado por el canal de comandos. Consulta el registro conclicklink clctl commands listyclicklink clctl commands get; véase la CLI reference. - Aprobaciones de plataforma. El digest del paquete que aprobaste queda registrado en el ServiceAccount
pcm-platform. Cada object aplicado con tus credenciales lleva un hash de contenido, que el executor verifica antes de escribir nada. Cualquier paquete con un digest distinto se rechaza. - Registro de auditoría. Cada comando de sesión, aceptado o bloqueado, se añade al audit log NDJSON con la identity de la org obtenida del canal de comandos. Las llamadas al gateway se registran como líneas
clctl.gatewayestructuradas en el log del solucionador de problemas, con el correo electrónico atestiguado del operador. Los cambios de sesión locales en la VM registran el usuario del host ensession.json. Consulta el audit log conclicklink clctl troubleshoot audit tail; véase la CLI reference.
Valores predeterminados de minimización de datos
query_logse excluye de los scrapes de forma predeterminada. Sus columnas contienen SQL sin procesar con valores literales, que pueden incluir datos personales o secretos. No sale de tu perímetro a menos que lo añadas explícitamente.- El solucionador de problemas solo lee tablas incluidas en la lista de permitidos.
query_logytext_logse rechazan en la propia configuración de la lista de permitidos, de modo que nunca se conceden y el historial de consultas nunca es legible. La lista de permitidos predeterminada sí incluyesystem.processes(texto de las consultas en ejecución); recórtala (troubleshooter.allowedTablesen Kubernetes,troubleshooter.allowed_tablesen una VM) si eso debe permanecer oculto durante las sesiones. - Toda la salida del solucionador de problemas se redacta con patrones integrados y con los que tú definas. Los integrados cubren direcciones IPv4 e IPv6, tokens bearer, claves de acceso de AWS, correos electrónicos, JWT, claves privadas SSH y credenciales de cadenas de conexión. Si el archivo de patrones es inválido, el demonio se niega a iniciarse en lugar de ejecutarse sin redactar.
- El estado del servicio gestionado son solo metadatos. El executor informa del estado de un servicio, el recuento de réplicas, las versiones y los resultados de los comandos. Nunca lee las tablas ni los buckets del servicio.
- Las credenciales se minimizan en reposo. El SQL de aprovisionamiento contiene hash bcrypt, nunca contraseñas en texto plano. La contraseña del usuario
defaultde un servicio gestionado se muestra una sola vez y solo sale en forma de hash. El token de inscripción nunca se escribe en la línea de comandos, el disco ni los logs. Las claves residen en Kubernetes Secrets o en archivos con modo 0600.