Ejecuta cargas de trabajo con privilegios de socios de GKE Autopilot


En esta página, se muestra cómo ejecutar cargas de trabajo con privilegios de socios de Autopilot de Google Kubernetes Engine (GKE). Obtendrás información para configurar una carga de trabajo de sincronización que instale una lista de entidades permitidas en tu clúster y la mantenga actualizada.

Esta página está destinada a los siguientes tipos de roles:

  • Ingenieros de seguridad que desean asegurarse de que las cargas de trabajo de terceros necesiten una lista de entidades permitidas para ejecutarse en tus clústeres y provengan de fuentes aprobadas por GKE.
  • Ingenieros de plataforma que desean habilitar cargas de trabajo de terceros en clústeres para desbloquear equipos de aplicaciones

Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en nuestra documentación, consulta Tareas y roles comunes de los usuarios de GKE Enterprise.

Antes de leer esta página, asegúrate de estar familiarizado con lo siguiente:

Información acerca de las cargas de trabajo de socios con privilegios en Autopilot

GKE permite que un subconjunto de socios aprobados ejecute cargas de trabajo con privilegios en clústeres de Autopilot. Estas cargas de trabajo privilegiadas pueden omitir algunas de las restricciones de seguridad que aplica Autopilot. Por ejemplo, un socio puede necesitar ejecutar una carga de trabajo que use funciones específicas de Linux o requiera un contenedor con privilegios.

Los socios crean y mantienen listas de entidades permitidas para sus cargas de trabajo con privilegios. Cada lista de entidades permitidas es un archivo que coincide con una carga de trabajo de socio privilegiada específica. Los socios envían estos archivos de lista de entidades permitidas a GKE para su aprobación. Después de la aprobación, GKE aloja el archivo de lista de entidades permitidas en un repositorio administrado por Google.

Para ejecutar una carga de trabajo de socio, instala el archivo de lista de entidades permitidas correspondiente en tu clúster. GKE proporciona un recurso personalizado de Kubernetes llamado AllowlistSynchronizer que instala listas de entidades permitidas y las mantiene actualizadas. Después de que se instale correctamente una lista de entidades permitidas, puedes implementar la carga de trabajo de socio privilegiada correspondiente.

Errores y solicitudes de funciones para cargas de trabajo y listas de entidades permitidas con privilegios

Los socios son responsables de crear, desarrollar y mantener sus cargas de trabajo y listas de entidades permitidas con privilegios. Si encuentras un error o tienes una solicitud de función para una carga de trabajo privilegiada o una lista de entidades permitidas, comunícate con el socio correspondiente.

Información acerca del controlador AllowlistSynchronizer

AllowlistSynchronizer es un controlador que se ejecuta en tu plano de control de GKE. Implementas un AllowlistSynchronizer nuevo como un manifiesto YAML, similar a la forma en que implementas cualquier otra carga de trabajo de Kubernetes. En el manifiesto, especificas la ruta de acceso al archivo de lista de entidades permitidas que deseas instalar, que obtienes del socio externo. El sincronizador encuentra el archivo de lista de entidades permitidas del socio en un repositorio administrado por Google y lo instala en tu clúster.

Cada 10 minutos, el sincronizador busca actualizaciones en el archivo de lista de entidades permitidas. Si existe una actualización, el sincronizador instala la lista de entidades permitidas actualizada en tu clúster.

Para dejar de permitir cargas de trabajo específicas, actualiza los AllowlistSynchronizers existentes para quitar las rutas de acceso de archivos de la lista de entidades permitidas correspondientes y, luego, borra el objeto WorkloadAllowlist de tu clúster. Si borras un objeto WorkloadAllowlist instalado sin quitar la ruta de acceso del sincronizador de la lista de entidades permitidas, el sincronizador vuelve a instalar la lista de entidades permitidas. Los socios no pueden borrar archivos de la lista de entidades permitidas del repositorio administrado por Google.

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.

Requisitos

  • El recurso personalizado AllowlistSynchronizer requiere la versión 1.32.1-gke.1729000 de GKE o una posterior.
  • Debes saber qué carga de trabajo de socio deseas ejecutar en tu clúster. Consulta la documentación de tu socio para obtener instrucciones para instalar la carga de trabajo con privilegios.

Crea un AllowlistSynchronizer nuevo

Para ejecutar una carga de trabajo con privilegios de un socio, agrega la ruta de acceso al archivo de lista de entidades permitidas correspondiente a un recurso personalizado AllowlistSynchronizer. Luego, implementa AllowlistSynchronizer en tu clúster.

  1. En un editor de texto, crea un nuevo archivo YAML.
  2. Agrega el siguiente contenido al archivo YAML:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Reemplaza lo siguiente:

    • ALLOWLIST_SYNCHRONIZER_NAME: Es el nombre del nuevo sincronizador. Elige un nombre descriptivo que identifique la carga de trabajo o el equipo que admite la lista de entidades permitidas.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: Una o más rutas de acceso a los archivos de la lista de entidades permitidas de los socios para instalar. Consulta la documentación de la carga de trabajo del socio que elegiste para esta ruta. Puedes especificar directorios completos o archivos individuales.
  3. Implementa el archivo YAML en el clúster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Reemplaza PATH_TO_YAML_FILE por la ruta de acceso al archivo YAML que creaste en el paso anterior.

    El controlador AllowlistSynchronizer instala archivos de lista de entidades permitidas de las rutas de acceso especificadas en tu clúster.

  4. Espera hasta que el sincronizador informe un estado Ready:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
      --timeout=60s
    

También puedes integrar la implementación de cargas de trabajo de socios en tu canalización de integración continua y de implementación continua (CI/CD). Configura tu flujo de trabajo para que espere hasta que la lista de entidades permitidas se instale correctamente antes de implementar la carga de trabajo correspondiente.

Actualiza un AllowlistSynchronizer existente

Puedes actualizar un AllowlistSynchronizer existente para agregar o quitar archivos de la lista de entidades permitidas. Puedes actualizar los sincronizadores existentes en situaciones como las siguientes:

  • El socio agrega un nuevo archivo de lista de entidades permitidas que tiene un nombre diferente.
  • Quieres agregar una nueva lista de entidades permitidas de cargas de trabajo a un sincronizador existente que agrupa listas de entidades permitidas relacionadas.
  • Quieres quitar una lista de entidades permitidas de un sincronizador porque ya no quieres usar la carga de trabajo correspondiente.

Para actualizar un objeto AllowlistSynchronizer existente, haz lo siguiente:

  1. Enumera los sincronizadores existentes en tu clúster:

    kubectl get allowlistsynchronizer
    
  2. Abre la especificación del sincronizador que deseas actualizar en un editor de texto.

  3. Actualiza el campo spec.allowlistPaths para agregar, modificar o quitar rutas de acceso de archivos de la lista de entidades permitidas.

  4. Guarda y cierra el editor de texto.

  5. Aplica la configuración actualizada al clúster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Reemplaza PATH_TO_YAML_FILE por la ruta de acceso al archivo YAML que actualizaste en el paso anterior.

Cuando implementas una configuración de sincronizador actualizada, el campo managedAllowlistStatus.generation en el estado del objeto AllowlistSynchronizer aumenta en uno. Luego, el controlador AllowlistSynchronizer aplica los cambios.

Supervisa el estado de la sincronización de la lista de entidades permitidas

Después de instalar un AllowlistSynchronizer o actualizar un sincronizador existente, puedes supervisar el estado de sincronización. El estado te ayuda a hacer un seguimiento de la instalación, la eliminación o las modificaciones de los archivos de la lista de entidades permitidas, así como de cualquier error que pueda ocurrir.

Para supervisar el estado general de la sincronización, ejecuta el siguiente comando:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

El resultado es similar a este:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

Para obtener una descripción de estos campos, consulta Estado de AllowlistSynchronizer.

Verifica que exista una lista de entidades permitidas en tu clúster

Para verificar que exista una lista de entidades permitidas en tu clúster, ejecuta el siguiente comando:

kubectl get workloadallowlist

El resultado es una lista de las listas de entidades permitidas instaladas en el clúster. Verifica que el resultado incluya la lista de entidades permitidas que deseas usar.

Implementa la carga de trabajo con privilegios

Después de que se instale correctamente una lista de entidades permitidas, puedes implementar la carga de trabajo correspondiente en tu clúster. El socio que proporciona la carga de trabajo también debería brindarte instrucciones de instalación para esta. Para obtener una lista de los socios de Autopilot y vínculos a su documentación, consulta Socios de Autopilot.

Borra una carga de trabajo con privilegios

Para dejar de permitir que se ejecute una carga de trabajo con privilegios en tus clústeres, quita la ruta de acceso a la lista de entidades permitidas correspondiente de AllowlistSynchronizer. El sincronizador desinstala la lista de entidades permitidas.

Si borras un objeto WorkloadAllowlist de tu clúster en lugar de actualizar el sincronizador, este volverá a instalar la lista de entidades permitidas. Asegúrate de quitar la ruta de AllowlistSynchronizer.

Para desinstalar una lista de entidades permitidas, haz lo siguiente:

  1. En el manifiesto YAML del AllowlistSynchronizer que administra la lista de entidades permitidas, quita la ruta de acceso a la lista de entidades permitidas que deseas desinstalar. Para obtener instrucciones, consulta la sección Actualiza un AllowlistSynchronizer existente.
  2. Para verificar que se desinstaló la lista de entidades permitidas, obtén una lista de los objetos WorkloadAllowlist en tu clúster:

    kubectl get workloadallowlist
    

    En el resultado, asegúrate de que no aparezca la lista de entidades permitidas que querías quitar.

  3. Borra la carga de trabajo de tu clúster. Para obtener instrucciones, consulta la documentación del proveedor de cargas de trabajo.

Evita la instalación de la lista de entidades permitidas en tus clústeres

Para evitar la instalación de listas de entidades permitidas de cargas de trabajo privilegiadas en clústeres específicos, usa una ValidatingAdmissionPolicy. La validación de las políticas de admisión garantiza que los recursos de Kubernetes cumplan con criterios específicos antes de que se les permita ejecutarse en el clúster. Por ejemplo, puedes verificar que una etiqueta tenga un valor específico.

Para evitar instalar listas de entidades permitidas en un clúster, haz lo siguiente:

  1. Guarda el siguiente manifiesto ValidatingAdmissionPolicy como disallow-allowlists.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: "disallow-allowlists"
    spec:
      failurePolicy: Fail
      matchConstraints:
        resourceRules:
        - apiGroups:   ["auto.gke.io"]
          apiVersions: ["*"]
          operations:  ["*"]
          resources:   ["allowlistsynchronizers"]
      validations:
      - expression: "false"
        message: 'AllowlistSynchronizer creation is not allowed'
    
  2. Guarda el siguiente manifiesto ValidatingAdmissionPolicyBinding como disallow-allowlists-binding.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. Implementa ValidatingAdmissionPolicy en tu clúster:

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

Esta política evita la creación de nuevos objetos AllowlistSynchronizers en el clúster.

Solucionar problemas

Si la sincronización o la implementación de la carga de trabajo fallan, consulta Soluciona problemas relacionados con la implementación de cargas de trabajo de Autopilot con privilegios.

¿Qué sigue?