Uso de medidas de seguridad para implementación para aplicar los procedimientos recomendados en Azure Kubernetes Service (AKS) (versión preliminar)
Artículo
Este artículo le muestra cómo usar las medidas de seguridad para implementación para aplicar los procedimientos recomendados en un clúster del Azure Kubernetes Service (AKS).
Información general
A lo largo del ciclo de vida de desarrollo, es habitual que surjan errores, incidencias y otros problemas si la implementación inicial de los recursos de Kubernetes incluye configuraciones incorrectas. Para facilitar la carga del desarrollo de Kubernetes, Azure Kubernetes Service (AKS) ofrece medidas de seguridad de implementación (versión preliminar). Las medidas de seguridad de implementación aplican los procedimientos recomendados de Kubernetes en el clúster de AKS mediante controles de Azure Policy.
Las medidas de seguridad para implementación ofrecen dos niveles de configuración:
Warning: muestra mensajes de advertencia en el terminal de código para avisarle de las configuraciones de clúster no compatibles, pero aún permite que la solicitud pase.
Enforcement: aplica configuraciones compatibles al denegar y mutar implementaciones si no siguen los procedimientos recomendados.
Después de configurar las medidas de seguridad de implementación de "Advertencia" o "Cumplimiento", las medidas de seguridad de implementación evalúan mediante programación el cumplimiento de los clústeres en tiempo de creación o actualización. Las medidas de seguridad de implementación también muestran información de cumplimiento agregada en las cargas de trabajo en cada nivel de recursos a través del panel de cumplimiento de Azure Policy en Azure Portal o en la CLI o el terminal. La ejecución de una carga de trabajo no compatible indica que el clúster no sigue los procedimientos recomendados y que sus cargas de trabajo corren el riesgo de experimentar problemas debidos a la configuración del clúster.
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Para configurar las medidas de seguridad de implementación, debe tener la versión 2.0.0b1 o posterior de la extensión de aks-preview. Para instalar la extensión, consulte Instalación de la extensión de la CLI de aks-preview. También se recomienda actualizar la CLI de Azure para asegurarse de que tiene instalada la versión más reciente.
Para crear y modificar la configuración de las medidas de seguridad de implementación, necesitará una suscripción con los siguientes permisos en el clúster de AKS:
Instale la extensión aks-preview de la CLI mediante el comando az extension add.
Azure CLI
az extension add --name aks-preview
Actualice la extensión para asegurarse de que tiene instalada la última versión mediante el comando az extension update.
Azure CLI
az extension update --name aks-preview
Registro de la marca de características de las medidas de seguridad para implementación
Registre la marca de características de SafeguardsPreview mediante el comando az feature register.
Azure CLI
az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Tarda unos minutos en que el estado muestre Registrado.
Comprobar el estado del registro mediante el comando az feature show.
Azure CLI
az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.
Azure CLI
az provider register --namespace Microsoft.ContainerService
Directivas de medidas de seguridad de implementación
Nota
Las directivas ReadOnlyRootFilesystem y RootfilesystemInitContainers solo están disponibles actualmente en Linux.
En la tabla siguiente se describen las directivas que se activan y los recursos de Kubernetes a los que se dirigen cuando se habilitan las medidas de seguridad para implementación. Puede ver las medidas de seguridad de implementación disponibles actualmente en Azure Portal como una definición de Azure Policy o en las definiciones integradas de Azure Policy para Azure Kubernetes Service. La intención de esta colección es crear una lista común y genérica de procedimientos recomendados aplicables a la mayoría de usuarios y casos de uso.
Directiva de medida de seguridad para implementación
Recurso de Kubernetes de destino
Resultado de la mutación si está disponible
[Versión preliminar]: No se pueden editar nodos individuales
Nodo
N/D
Los límites de los recursos de memoria y CPU de los contenedores del clúster de Kubernetes no deben superar los límites especificados
Pod
Establece los límites de recursos de la CPU en 500 m si no están configurados y establece los límites de memoria en 500 Mi si no hay ruta de acceso
[Versión preliminar]: Conjunto de reglas antiafinidad imprescindible
[Versión preliminar]: Sin etiquetas específicas AKS
Deployment, StatefulSet, Replicaset
N/D
Asegurarse de que solo se admiten las imágenes de contenedor permitidas en el clúster de Kubernetes
Pod
N/D
[Versión preliminar]: Marcas del grupo del sistema reservado
Nodo
Elimina la marca CriticalAddonsOnly de un grupo de nodos de usuario si no está establecida. AKS usa la marca CriticalAddonsOnly para mantener los grupos de clientes alejados del grupo del sistema. Esta configuración garantiza una separación clara entre los componentes de AKS y los pods de cliente e impide el desalojo de los pods de cliente que no toleren la marca CriticalAddonsOnly.
Asegúrese de que los contenedores de clúster tienen configurados sondeos de comprobación o ejecución
Pod
N/D
Los clústeres de Kubernetes deben usar el controlador StorageClass de Container Storage Interface (CSI)
StorageClass
N/D
[Versión preliminar]: el clúster de Kubernetes debe implementar presupuestos de interrupciones de pods precisos
Deployment, ReplicaSet, StatefulSet
Establece maxUnavailable en el recurso PodDisruptionBudget en 1.
[Versión preliminar]: los servicios de clúster de Kubernetes deben usar selectores únicos
Service
N/D
[Versión preliminar]: ReadOnlyRootFilesystem en la especificación de pod se establece en true
Pod
Establece readOnlyRootFilesystem en la especificación del pod en true si no está establecido. Esta configuración impide que los contenedores escriban en el sistema de archivos raíz.
[Versión preliminar]: RootfilesystemInitContainers en la especificación de pod se establece en true
Pod
Establece rootFilesystemInitContainers en la especificación del pod en true si no está establecido.
[Vista previa]: Las imágenes de contenedor del clúster de Kubernetes no deberían incluir la etiqueta de imagen más reciente
Si quiere enviar una idea o solicitud de medidas de seguridad de implementación, abra un problema en el repositorio de GitHub de AKS y agregue [deployment safeguards request] al principio del título.
Habilitar medidas de seguridad de implementación
Nota
Si ha habilitado Azure Policy por primera vez para usar medidas de seguridad de implementación, es posible que tenga que esperar hasta 20 minutos para que Azure Policy surta efecto.
El uso de las medidas de seguridad para implementación en Enforcement significa que acepta que se bloqueen y muten las implementaciones. Tenga en cuenta cómo estas directivas pueden funcionar con el clúster de AKS antes de habilitar Enforcement.
Habilitación de medidas de seguridad para implementación en un nuevo clúster
Habilite las medidas de seguridad para implementación en un nuevo clúster usando el comando az aks create con las marcas --safeguards-level y --safeguards-version.
Si quiere recibir advertencias de incumplimiento, establezca --safeguards-level en Warning. Si quiere denegar o mutar todas las implementaciones no compatibles, establézcalo en Enforcement. Para recibir advertencias, establezca --safeguards-level en "Advertencia". Para denegar o mutar todas las implementaciones que no cumplan las medidas de seguridad de implementación, establezca --safeguards-level en "Aplicación". Para establecer la versión de las medidas de seguridad para implementación, use la marca --safeguards-version. Actualmente, V2.0.0 es la última versión de las medidas de seguridad para implementación.
Azure CLI
az aks create \
--name myAKSCluster \
--resource-group myResourceGroup \
--enable-addons azure-policy \
--safeguards-level Warning \
--safeguards-version v2.0.0 \
--generate-ssh-keys
Habilitación de las medidas de seguridad para implementación en un clúster existente
Habilite las medidas de seguridad para implementación en un clúster existente que tenga activado el complemento de Azure Policy mediante el comando az aks update con las marcas --safeguards-level y --safeguards-version. Si quiere recibir advertencias de incumplimiento, establezca --safeguards-level en Warning. Si quiere denegar o mutar todas las implementaciones no compatibles, establézcalo en Enforcement.
Azure CLI
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0
Si quiere actualizar el nivel de medidas de seguridad para implementación de un clúster existente, use el comando az aks update con la marca --safeguards-level establecida en Warning o Enforcement.
Azure CLI
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement
Excluir espacios de nombres
También puede excluir determinados espacios de nombres de las medidas de seguridad de implementación. Cuando excluya un espacio de nombres, la actividad en ese espacio de nombres no se verá afectada por las advertencias o la aplicación de las medidas de seguridad para implementación.
Por ejemplo, para excluir los espacios de nombres ns1 y ns2, use una lista de espacios de nombres separados por comas con la marca --safeguards-excluded-ns, como se muestra en el siguiente ejemplo:
Azure CLI
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0--safeguards-excluded-ns ns1,ns2
Actualización de la versión de medidas de seguridad para implementación
Nota
v2.0.0 es la versión más reciente de las medidas de seguridad para implementación.
Actualice la versión de sus medidas de seguridad para implementación usando el comando az aks update con la marca --safeguards-version establecida en la nueva versión. En el ejemplo siguiente se actualiza un clúster existente para usar la versión 2.0.0:
Azure CLI
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0
Comprobación del cumplimiento entre clústeres
Después de implementar su manifiesto de Kubernetes, verá advertencias o un mensaje de posible denegación en su CLI o terminal si el clúster no cumple las medidas de seguridad para implementación, como se muestra en los siguientes ejemplos:
Advertencia
$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created
Aplicación
Con las mutaciones de medidas de seguridad para implementación, el nivel Enforcement muta sus recursos Kubernetes cuando corresponde. Sin embargo, los recursos de Kubernetes todavía necesitan pasar todas las medidas de seguridad para implementarse correctamente. Si se produce un error en las directivas de medidas de seguridad, se deniega el recurso y no se implementará.
$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
Si sus recursos Kubernetes cumplen las medidas de seguridad de mutación aplicables y satisfacen todos los demás requisitos de seguridad, se implementarán con éxito, como se muestra en el siguiente ejemplo:
$ kubectl apply -f pod.yml
pod/my-pod created
Comprobar el cumplimiento en los clústeres mediante el panel de Azure Policy
Para comprobar que se han aplicado las medidas de seguridad de implementación y verificar el cumplimiento del clúster, vaya a la página de Azure Portal del clúster y seleccione Directivas y, a continuación, ir a Azure Policy.
En la lista de directivas e iniciativas, seleccione la iniciativa asociada con las medidas de seguridad de implementación. Verá un panel que muestra el estado de cumplimiento en el clúster de AKS.
Nota
Para evaluar correctamente el cumplimiento en el clúster de AKS, la iniciativa de Azure Policy debe tener el ámbito establecido en el grupo de recursos del clúster.
Deshabilitar medidas de seguridad de implementación
Deshabilite las medidas de seguridad para implementación en su clúster usando el comando az aks update y establezca --safeguards-level en Off.
Azure CLI
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off
--
Preguntas más frecuentes
He habilitado medidas de seguridad de implementación con Azure Policy por primera vez. ¿Por qué no veo ninguna advertencia? ¿Por qué no se rechazan mis pods?
Azure Policy puede tardar hasta 35 minutos en sincronizarse con el clúster después de que se habilite por primera vez.
Acabo de cambiar de Advertencia a Cumplimiento. ¿Entrará en vigor inmediatamente?
Al cambiar los niveles de las medidas de seguridad de implementación, es posible que tenga que esperar hasta 15 minutos a que el nuevo nivel entre en vigor.
¿Puedo crear mis propias mutaciones?
No. Si tiene una idea para una medida de seguridad, abra una incidencia en el repositorio de GitHub de AKS y agregue [deployment safeguards request] al principio del título.
¿Puedo elegir las mutaciones que quiero en Aplicación?
No. La implementación de medidas de seguridad es todo o nada. Una vez que active Advertencia o Aplicación, todas las medidas de seguridad estarán activas.
¿Por qué se ha admitido mi recurso de implementación aunque no sigue los procedimientos recomendados?
Las medidas de seguridad de implementación aplican estándares de procedimientos recomendados a través de controles de Azure Policy, y tienen directivas que se validan con los recursos de Kubernetes. Para evaluar y aplicar componentes de clúster, Azure Policy amplía Gatekeeper. El cumplimiento de Gatekeeper también funciona actualmente en un modelofail-open. Como no hay ninguna garantía de que Gatekeeper responda a nuestra llamada de red, debemos asegurarnos de que, en ese caso, se omita la validación para que la denegación no bloquee las implementaciones.
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.