Partekatu honen bidez:


Uso de medidas de seguridad para implementación para aplicar los procedimientos recomendados en Azure Kubernetes Service (AKS) (versión preliminar)

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:

Requisitos previos

Instalación de la extensión aks-preview de la CLI

  1. Instale la extensión aks-preview de la CLI mediante el comando az extension add.

    az extension add --name aks-preview
    
  2. Actualice la extensión para asegurarse de que tiene instalada la última versión mediante el comando az extension update.

    az extension update --name aks-preview
    

Registro de la marca de características de las medidas de seguridad para implementación

  1. Registre la marca de características de SafeguardsPreview mediante el comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Tarda unos minutos en que el estado muestre Registrado.

  2. Comprobar el estado del registro mediante el comando az feature show.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    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 Deployment, StatefulSet, ReplicationController, ReplicaSet N/D
[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]: los contenedores de clúster de Kubernetes solo deben extraer imágenes cuando haya secretos de extracción de imágenes presentes Pod 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 Deployment, StatefulSet, ReplicationController, ReplicaSet N/D
[Vista previa]: Las imágenes de contenedor de clúster de Kubernetes deben incluir la tecla para colgar y descolgar preStop Deployment, StatefulSet, ReplicationController, ReplicaSet N/D

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.

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.

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.

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:

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:

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.

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.

Para obtener más información, consulte la validación de cargas de trabajo en Gatekeeper.

Pasos siguientes