- Configurar GKE para que ejecute solo cargas de trabajo con privilegios específicas en el modo Autopilot
- Instalar listas de entidades permitidas para cargas de trabajo con privilegios
Este documento está destinado 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 plataformas que desean habilitar cargas de trabajo de terceros en clústeres para desbloquear equipos de aplicaciones
Ya deberías estar familiarizado con los siguientes conceptos:
- Acerca de la admisión de cargas de trabajo con privilegios en el modo Autopilot
- Recursos personalizados de Kubernetes
- Restricciones de seguridad de Autopilot de GKE
- Socios de Autopilot de GKE
Acerca de las cargas de trabajo con privilegios en Autopilot
El modo Autopilot aplica un conjunto predeterminado de restricciones a las cargas de trabajo para mejorar tu postura de seguridad. Puedes modificar estas restricciones para ejecutar cargas de trabajo con privilegios específicas si instalas listas de entidades permitidas que correspondan a esas cargas de trabajo. De forma predeterminada, Autopilot te permite instalar listas de entidades permitidas de socios de Autopilot y proyectos de código abierto específicos. Los clientes aptos de GKE también pueden crear listas de entidades permitidas para cargas de trabajo con privilegios que sean de su propiedad y que suban a buckets de Cloud Storage.
Cada lista de entidades permitidas es un archivo que coincide con una carga de trabajo con privilegios específica. Para ejecutar una carga de trabajo con privilegios, haz lo siguiente:
- Configura el clúster para permitir la instalación de listas de entidades permitidas desde rutas de acceso específicas. De forma predeterminada, se admiten todas las listas de entidades permitidas de socios de Autopilot y proyectos de código abierto aprobados.
- Crea un AllowlistSynchronizer en el clúster que instale la lista de entidades permitidas y la mantenga actualizada.
Errores y solicitudes de funciones para cargas de trabajo con privilegios y listas de entidades permitidas
El propietario de una carga de trabajo con privilegios es responsable de crear, desarrollar y mantener sus cargas de trabajo y listas de entidades permitidas. Si encuentras un error o tienes una solicitud de función para una carga de trabajo con privilegios o una lista de entidades permitidas, comunícate con el propietario correspondiente.
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 updatepara 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.
- Verifica que puedas configurar clústeres para instalar listas de entidades permitidas desde la fuente seleccionada. Los administradores de la organización pueden usar una política de la organización para controlar las rutas de acceso que puedes agregar a un clúster. Para obtener más información, consulta Restricción administrada del servicio de políticas de la organización para listas de entidades permitidas.
Para las cargas de trabajo con privilegios que son propiedad del cliente y que están disponibles para los clientes aptos de GKE, verifica las siguientes condiciones:
- El administrador de tu organización agregó la ruta de acceso del bucket de la lista de entidades permitidas a una política de la organización. Para obtener más información, consulta Restringe las cargas de trabajo con privilegios de GKE en las organizaciones.
- La lista de entidades permitidas que deseas instalar está en el bucket de Cloud Storage. Para obtener más información, consulta Crea listas de entidades permitidas para cargas de trabajo con privilegios de Autopilot.
Requisitos
- El recurso personalizado AllowlistSynchronizer requiere la versión 1.32.2-gke.1652000 de GKE o una posterior.
- Debes saber qué carga de trabajo con privilegios deseas ejecutar en tu clúster.
- Para modificar la configuración de la ruta de acceso de la lista de entidades permitidas de un clúster, este debe ejecutar la versión 1.35 de GKE o una posterior.
Configura las rutas de acceso de la lista de entidades permitidas para un clúster
En esta sección, se muestra cómo configurar un clúster para admitir la instalación de listas de entidades permitidas desde un conjunto de rutas de acceso aprobadas. De forma predeterminada, Autopilot admite la instalación de listas de entidades permitidas de socios de GKE y proyectos de código abierto aprobados. Puedes modificar esta configuración predeterminada para clústeres individuales. También puedes especificar fuentes de listas de entidades permitidas aprobadas para toda una organización, carpeta, o proyecto mediante una política de la organización.
Identifica las rutas de acceso a los archivos de la lista de entidades permitidas que se agregarán al clúster. Puedes especificar varias rutas de acceso cuando creas o actualizas tu clúster. También puedes inhabilitar la instalación de listas de entidades permitidas desde cualquier fuente si especificas una cadena vacía en lugar de una ruta de acceso. Para obtener más información sobre las rutas de acceso que puedes especificar, consulta Rutas de acceso de la lista de entidades permitidas.
Para controlar las fuentes de listas de entidades permitidas aprobadas para un clúster, usa la marca
--autopilot-privileged-admissioncuando crees o actualices un clúster de Autopilot o Standard, como en el siguiente comando:gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...Reemplaza lo siguiente:
CLUSTER_NAME: Un nombre para tu clúster nuevo.LOCATION: La ubicación del plano de control del clúster, comous-central1.ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: Una lista separada por comas de rutas de acceso a archivos o directorios de la lista de entidades permitidas. Por ejemplo,gke://*,gs://my-agent/privileged-logging-agent.yaml. También puedes inhabilitar la instalación de listas de entidades permitidas desde cualquier fuente si especificas una cadena vacía ("").
Si actualizas un clúster existente sin especificar la marca --autopilot-privileged-admission, la configuración de ruta de acceso existente para ese clúster no cambia. No es necesario que especifiques esta marca cada vez que actualices un clúster.
Una vez que se complete la operación de creación o actualización del clúster, puedes instalar listas de entidades permitidas desde las rutas de acceso especificadas mediante la creación de AllowlistSynchronizers.
Crea un AllowlistSynchronizer nuevo
Para ejecutar una carga de trabajo con privilegios, agrega la ruta de acceso al archivo de la lista de entidades permitidas correspondiente a una especificación de AllowlistSynchronizer en un archivo YAML. Luego, implementa el AllowlistSynchronizer en tu clúster.
- En un editor de texto, crea un archivo YAML nuevo.
Agrega el siguiente contenido al archivo YAML:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATHReemplaza lo siguiente:
ALLOWLIST_SYNCHRONIZER_NAME: 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 lista de rutas de acceso a archivos o directorios de la lista de entidades permitidas que deseas instalar, como en el siguiente ejemplo para las listas de entidades permitidas aprobadas por GKE:allowlistPaths: - Gke-Org/accelerators/* - Wiz/wiz-sensor/v1/wiz-sensor-v1.yamlO en el siguiente ejemplo para las listas de entidades permitidas que son propiedad del cliente:
allowlistPaths: - my-agent/log-collector/* - my-agent/privileged-logging-agent.yamlLa configuración del clúster debe admitir las rutas de acceso que especifiques, como se describe en la sección Configura las rutas de acceso de la lista de entidades permitidas para un clúster. Además, cada AllowlistSynchronizer debe contener exclusivamente listas de entidades permitidas aprobadas por GKE o exclusivamente listas de entidades permitidas que sean propiedad del cliente.
Si instalas listas de entidades permitidas desde un bucket de Cloud Storage que es propiedad del cliente, agrega los campos
spec.projectNumberyspec.bucketNamea tu AllowlistSynchronizer. Para obtener más detalles, consulta la AllowlistSynchronizer CustomResourceDefinition.Implementa el archivo YAML en tu clúster:
kubectl apply -f PATH_TO_YAML_FILEReemplaza
PATH_TO_YAML_FILEpor la ruta de acceso al archivo YAML que creaste en el paso anterior.El controlador AllowlistSynchronizer instala archivos de la lista de entidades permitidas desde las rutas de acceso especificadas en tu clúster.
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 instalación de listas de entidades permitidas y la implementación de cargas de trabajo con privilegios en tu canalización de integración continua y entrega 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 propietario de la carga de trabajo agrega un archivo de la lista de entidades permitidas nuevo que tiene un nombre diferente.
- Deseas agregar una nueva lista de entidades permitidas de carga de trabajo a un sincronizador existente que agrupa listas de entidades permitidas relacionadas.
- Deseas 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:
Enumera los sincronizadores existentes en tu clúster:
kubectl get allowlistsynchronizerAbre la especificación del sincronizador que deseas actualizar en un editor de texto.
Actualiza el campo
spec.allowlistPathspara agregar, modificar o quitar rutas de acceso de archivos de la lista de entidades permitidas.Guarda y cierra el editor de texto.
Aplica la configuración actualizada al clúster:
kubectl apply -f PATH_TO_YAML_FILEReemplaza
PATH_TO_YAML_FILEpor 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 tus 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 la 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/example-allowlist-2.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/example-allowlist-1.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
En este resultado de ejemplo, no se pudo sincronizar la lista de entidades permitidas example-allowlist-1.yaml, y se instaló correctamente la lista de entidades permitidas example-allowlist-2.yaml. 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 propietario de la carga de trabajo también debe proporcionarte instrucciones de instalación para la carga de trabajo. Para obtener una lista de socios de Autopilot y vínculos a su documentación, consulta Socios de Autopilot.
Usa repositorios de duplicación de imágenes privadas
Puedes duplicar las imágenes de contenedor de cargas de trabajo con privilegios en repositorios privados que sean de tu propiedad. Para ejecutar estas imágenes duplicadas en una carga de trabajo, debes cumplir con todos los siguientes requisitos:
- El resumen SHA-256 de la imagen duplicada debe coincidir con el resumen de la imagen de la carga de trabajo disponible públicamente.
- El resumen de la imagen SHA-256 que especifiques debe existir en el objeto
WorkloadAllowlistque se sincroniza con tu clúster.
Si la carga de trabajo admite imágenes duplicadas, la especificación de la lista de entidades permitidas para esa carga de trabajo contiene una lista de resúmenes de imágenes en el campo containers.imageDigests de la especificación de la lista de entidades permitidas para esa carga de trabajo. Por lo general, este campo tiene un resumen separado para cada versión disponible de la imagen de contenedor. Para ver esta lista de resúmenes de imágenes, haz lo siguiente:
- Verifica que la lista de entidades permitidas exista en tu clúster.
Obtén la especificación de la lista de entidades permitidas instalada:
kubectl get workloadallowlist ALLOWLIST_NAME -o yamlReemplaza
ALLOWLIST_NAMEpor el nombre de la lista de entidades permitidas instalada. Por ejemplo,company-name-solution-v1.0.0.Para las cargas de trabajo que admiten esta función, el resultado es similar al siguiente. El campo
imageDigeststiene una lista de resúmenes permitidos.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23Si el resultado no incluye un campo
imageDigestso si el resumen de la versión que deseas usar no está en la lista, comunícate directamente con el propietario de la carga de trabajo y pídele que actualice su lista de entidades permitidas. Después de que el propietario de la carga de trabajo agregue resúmenes de imágenes a su lista de entidades permitidas, el sincronizador de la lista de entidades permitidas en tu clúster instalará automáticamente la lista de entidades permitidas actualizada.Agrega uno de los resúmenes de imágenes admitidos a tu manifiesto de carga de trabajo.
Por ejemplo, considera la siguiente imagen en la especificación de Pod disponible públicamente de un socio:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
Puedes usar una imagen duplicada si el resumen coincide con el resumen disponible públicamente, como en el siguiente ejemplo:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
Debes incluir el resumen SHA-256 en tu campo de imagen, de forma similar al ejemplo anterior. Si los resúmenes no coinciden, la imagen duplicada no se ejecutará. Para conservar los resúmenes de imágenes cuando dupliques imágenes de socios, considera usar una herramienta como crane, ORAS, o skopeo.
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 tu AllowlistSynchronizer. El sincronizador desinstala la lista de entidades permitidas.
Si borras un objeto WorkloadAllowlist de tu clúster en lugar de actualizar el sincronizador, el sincronizador vuelve a instalar la lista de entidades permitidas. Asegúrate de quitar la ruta de acceso de AllowlistSynchronizer.
Para desinstalar una lista de entidades permitidas, haz lo siguiente:
- En el manifiesto YAML para el 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.
Para verificar que se desinstaló la lista de entidades permitidas, obtén una lista de objetos
WorkloadAllowlisten tu clúster:kubectl get workloadallowlistEn el resultado, asegúrate de que no aparezca la lista de entidades permitidas que querías quitar.
Borra la carga de trabajo de tu clúster. Para obtener instrucciones, consulta la documentación del proveedor de la carga de trabajo.
Evita la instalación de listas de entidades permitidas en tus clústeres
Para evitar la instalación de listas de entidades permitidas de cargas de trabajo con privilegios en clústeres específicos, especifica una cadena vacía ("") en la
--autopilot-privileged-admission marca cuando crees o actualices un clúster.
Para inhabilitar rutas de acceso de listas de entidades permitidas específicas para un clúster, omite las rutas de acceso a esas listas de entidades permitidas cuando crees o actualices un clúster:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...Reemplaza
ALLOWLIST1_PATH,ALLOWLIST2_PATH,...por una lista separada por comas de rutas de acceso a fuentes de listas de entidades permitidas. Omite las rutas de acceso que deseas inhabilitar.Para inhabilitar todas las listas de entidades permitidas en un clúster existente, especifica una cadena vacía como la ruta de acceso aprobada:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-allowlist-paths=""
Solucionar problemas
Si falla la sincronización o la implementación de la carga de trabajo, consulta Soluciona problemas relacionados con la implementación de cargas de trabajo con privilegios de Autopilot.
¿Qué sigue?
- Obtén información sobre las cargas de trabajo disponibles de los socios de Autopilot de GKE.
- Ejecuta cargas de trabajo de código abierto con privilegios en Autopilot de GKE.
- Obtén información sobre las capacidades de seguridad predeterminadas de Autopilot de GKE.
- Lee la AllowlistSynchronizer CustomResourceDefinition.