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
Debe habilitar el complemento de Azure Policy para AKS. Para más información, consulte Habilitar Azure Policy en el clúster de AKS.
Para configurar las medidas de seguridad de implementación, debe tener la versión
2.0.0b1
o posterior de la extensión deaks-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:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
Debe registrar la marca de características de las medidas de seguridad para implementación. Para registrar la marca de características, consulte Registrar la marca de características para medidas de seguridad para implementación.
Instalación de la extensión aks-preview de la CLI
Instale la extensión
aks-preview
de la CLI mediante el comandoaz extension add
.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
.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 comandoaz feature register
.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
.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
.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
- Obtenga más información sobre los procedimientos recomendados para operar un clúster de AKS.
Azure Kubernetes Service