En esta página, se muestra cómo ejecutar cargas de trabajo con privilegios de socios de Autopilot de Google Kubernetes Engine (GKE). Aprenderás a configurar una carga de trabajo de sincronización que instala una lista de entidades permitidas en tu clúster y la mantiene actualizada.
Esta página es para 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 sus 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
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 los siguientes temas:
- Recursos personalizados de Kubernetes
- Restricciones de seguridad de GKE Autopilot
- Socios de GKE Autopilot
Acerca de las cargas de trabajo de socios con privilegios en Autopilot
GKE permite que un subconjunto de socios aprobados ejecuten 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 capacidades específicas de Linux o que requiera un contenedor privilegiado.
Los socios crean y mantienen listas de entidades permitidas para sus cargas de trabajo privilegiadas. Cada lista de entidades permitidas es un archivo que coincide con una carga de trabajo de socio privilegiado 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 la lista de entidades permitidas en un repositorio administrado por Google.
Para ejecutar una carga de trabajo del socio, debes instalar el archivo de lista de anunciantes permitidos 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 instala correctamente una lista de entidades permitidas, puedes implementar la carga de trabajo del socio privilegiado correspondiente.
Errores y solicitudes de funciones para cargas de trabajo con privilegios y listas de entidades permitidas
Los socios son responsables de crear, desarrollar y mantener sus cargas de trabajo privilegiadas y listas de entidades permitidas. 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.
Acerca del controlador AllowlistSynchronizer
El AllowlistSynchronizer
es un controlador que se ejecuta en tu plano de control de GKE. Implementas un nuevo AllowlistSynchronizer
como un manifiesto YAML, de manera similar a como implementas cualquier otra carga de trabajo de Kubernetes. En el manifiesto, especifica 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 la lista de entidades permitidas del socio en un repositorio administrado por Google y lo instala en tu clúster.
Cada 10 minutos, el sincronizador verifica si hay actualizaciones en el archivo de la 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 a los 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 volverá 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.2-gke.1652000 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 privilegiada.
Crea un AllowlistSynchronizer
nuevo
Para ejecutar una carga de trabajo privilegiada 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.
- 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_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 archivos de la lista de entidades permitidas del socio 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.
Implementa el archivo YAML en tu 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 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 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 se instale correctamente la lista de entidades permitidas 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 con 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:
Enumera los sincronizadores existentes en tu clúster:
kubectl get allowlistsynchronizer
Abre la especificación del sincronizador que deseas actualizar en un editor de texto.
Actualiza el campo
spec.allowlistPaths
para 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_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 del 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 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 los errores que puedan 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 debe brindarte instrucciones para instalarla. Para obtener una lista de los socios de Autopilot y vínculos a su documentación, consulta Socios de Autopilot.
Usa repositorios de duplicación de imágenes privados
Puedes duplicar las imágenes de contenedor de las cargas de trabajo de socios en repositorios privados que te pertenezcan. 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 del socio disponible públicamente.
- El resumen de la imagen SHA-256 que especifiques debe existir en el objeto
WorkloadAllowlist
que proporciona el socio y que se sincroniza con tu clúster.
Si la carga de trabajo del socio admite imágenes duplicadas, la especificación de la lista de anunciantes permitidos 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 anunciantes permitidos para esa carga de trabajo. Por lo general, este campo tiene un resumen independiente para cada versión disponible de la imagen del 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 yaml
Reemplaza
ALLOWLIST_NAME
por 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
imageDigests
tiene una lista de resúmenes permitidos.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
Si el resultado no incluye un campo
imageDigests
o si el resumen del lanzamiento que quieres usar no está en la lista, comunícate directamente con el socio y pídele que actualice su lista de entidades permitidas. Después de que el socio agrega resúmenes de imágenes a su lista de entidades permitidas y envía los cambios a GKE, el sincronizador de la lista de entidades permitidas de tu clúster instala 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 una 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 el campo de la imagen, de manera 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 creas duplicados de imágenes de socios, considera usar una herramienta como crane, ORAS o skopeo.
Borra una carga de trabajo privilegiada
Para dejar de permitir que una carga de trabajo privilegiada se ejecute 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, 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:
- 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 objeto AllowlistSynchronizer existente. 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.
Borra la carga de trabajo de tu clúster. Para obtener instrucciones, consulta la documentación del proveedor de la carga de trabajo.
Cómo evitar 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 con privilegios en clústeres específicos, usa una ValidatingAdmissionPolicy. Las políticas de admisión de validación garantizan que los recursos de Kubernetes cumplan con criterios específicos antes de que se les permita ejecutarse en el clúster. Por ejemplo, puedes validar que una etiqueta tenga un valor específico.
Para evitar la instalación de listas de entidades permitidas en un clúster, haz lo siguiente:
Guarda el siguiente manifiesto de 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'
Guarda el siguiente manifiesto de ValidatingAdmissionPolicyBinding como
disallow-allowlists-binding.yaml
:apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicyBinding metadata: name: "disallow-allowlists-binding" spec: policyName: "disallow-allowlists" validationActions: [Deny]
Implementa ValidatingAdmissionPolicy en tu clúster:
kubectl apply -f disallow-allowlists.yaml kubectl apply -f disallow-allowlists-binding.yaml
Esta política impide la creación de nuevos AllowlistSynchronizers en el clúster.
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 privilegiadas de Autopilot.
¿Qué sigue?
- Socios de GKE Autopilot
- Ejecuta cargas de trabajo de código abierto con privilegios en GKE Autopilot
- Capacidades de seguridad de GKE Autopilot
- Definición de recurso personalizado AllowlistSynchronizer