Conceptos de seguridad de las aplicaciones y los clústeres en Azure Kubernetes Service (AKS)Security concepts for applications and clusters in Azure Kubernetes Service (AKS)

Para proteger los datos de los clientes a medida que ejecuta cargas de trabajo de aplicaciones en Azure Kubernetes Service (AKS), es importante tener en cuenta la seguridad del clúster.To protect your customer data as you run application workloads in Azure Kubernetes Service (AKS), the security of your cluster is a key consideration. Kubernetes incluye componentes de seguridad tales como directivas de red y secretos.Kubernetes includes security components such as network policies and Secrets. Posteriormente, Azure agrega componentes, como grupos de seguridad de red y actualizaciones de clúster organizadas.Azure then adds in components such as network security groups and orchestrated cluster upgrades. Estos componentes de seguridad se combinan para que el clúster de AKS siga ejecutando las actualizaciones de seguridad del sistema operativo y las versiones de Kubernetes más recientes, con tráfico de pods seguro y acceso a credenciales confidenciales.These security components are combined to keep your AKS cluster running the latest OS security updates and Kubernetes releases, and with secure pod traffic and access to sensitive credentials.

En este artículo se presentan los conceptos básicos para proteger sus aplicaciones en AKS:This article introduces the core concepts that secure your applications in AKS:

Seguridad de componentes maestrosMaster security

En AKS, los componentes maestros de Kubernetes forman parte del servicio administrado que proporciona Microsoft.In AKS, the Kubernetes master components are part of the managed service provided by Microsoft. Cada clúster de AKS tiene su propio maestro de Kubernetes dedicado con un solo inquilino para proporcionar el servidor de API, Scheduler, etc. Microsoft administra y mantiene este maestro.Each AKS cluster has its own single-tenanted, dedicated Kubernetes master to provide the API Server, Scheduler, etc. This master is managed and maintained by Microsoft.

De forma predeterminada, el servidor de API de Kubernetes utiliza una dirección IP pública y un nombre de dominio completo (FQDN).By default, the Kubernetes API server uses a public IP address and a fully qualified domain name (FQDN). Puede limitar el acceso al punto de conexión del servidor de API mediante los intervalos IP autorizados.You can limit access to the API server endpoint using authorized IP ranges. También puede crear un clúster privado por completo para limitar el acceso del servidor de la API a la red virtual.You can also create a fully private cluster to limit API server access to your virtual network.

Puede regular el acceso al servidor de API mediante control de acceso basado en rol de Kubernetes (RBAC de Kubernetes) y RBAC de Azure.You can control access to the API server using Kubernetes role-based access control (Kubernetes RBAC) and Azure RBAC. Para más información, consulte el artículo de integración de Azure AD con AKS.For more information, see Azure AD integration with AKS.

Seguridad de nodosNode security

Los nodos de AKS son máquinas virtuales de Azure de los que usted realiza la administración y el mantenimiento.AKS nodes are Azure virtual machines that you manage and maintain. Los nodos de Linux ejecutan una distribución Ubuntu optimizada con el tiempo de ejecución del contenedor de Moby.Linux nodes run an optimized Ubuntu distribution using the Moby container runtime. Los nodos de Windows Server ejecutan una versión de Windows Server 2019 y también, el entorno de ejecución del contenedor de Moby.Windows Server nodes run an optimized Windows Server 2019 release and also use the Moby container runtime. Cuando se crea o se escala verticalmente un clúster de AKS, los nodos se implementan automáticamente con las actualizaciones de seguridad del sistema operativo y las configuraciones más recientes.When an AKS cluster is created or scaled up, the nodes are automatically deployed with the latest OS security updates and configurations.

La plataforma Azure aplica automáticamente las revisiones de seguridad del sistema operativo a los nodos de Linux del clúster durante la noche.The Azure platform automatically applies OS security patches to Linux nodes on a nightly basis. Si una actualización de seguridad del sistema operativo de Linux requiere un reinicio del host, este no se realiza automáticamente.If a Linux OS security update requires a host reboot, that reboot is not automatically performed. Puede reiniciar manualmente los nodos de Linux o bien optar por un enfoque común que consiste en usar Kured, un demonio de reinicio de código abierto para Kubernetes.You can manually reboot the Linux nodes, or a common approach is to use Kured, an open-source reboot daemon for Kubernetes. Kured se ejecuta como un elemento DaemonSet y supervisa cada nodo para comprobar la presencia de un archivo que indique que hace falta un reinicio.Kured runs as a DaemonSet and monitors each node for the presence of a file indicating that a reboot is required. Los reinicios se administran en el clúster con el mismo proceso de acordonar y purgar que una actualización de clúster.Reboots are managed across the cluster using the same cordon and drain process as a cluster upgrade.

Para los nodos de Windows Server, Windows Update no ejecuta ni aplica las actualizaciones más recientes de manera automática.For Windows Server nodes, Windows Update does not automatically run and apply the latest updates. En una programación normal del ciclo de versiones de Windows Update y su proceso de validación propio, debe realizar una actualización de los grupos de nodos de Windows Server en el clúster de AKS.On a regular schedule around the Windows Update release cycle and your own validation process, you should perform an upgrade on the Windows Server node pool(s) in your AKS cluster. Este proceso de actualización crea nodos que ejecutan la imagen y las revisiones más recientes de Windows Server y elimina los nodos anteriores.This upgrade process creates nodes that run the latest Windows Server image and patches, then removes the older nodes. Para obtener más información sobre este proceso, consulte Actualización de un grupo de nodos en AKS.For more information on this process, see Upgrade a node pool in AKS.

Los nodos se implementan en una subred de una red privada virtual, sin ninguna dirección IP pública asignada.Nodes are deployed into a private virtual network subnet, with no public IP addresses assigned. Para fines de administración y solución de problemas, SSH está habilitado de forma predeterminada.For troubleshooting and management purposes, SSH is enabled by default. El acceso de SSH solo está disponible mediante la dirección IP interna.This SSH access is only available using the internal IP address.

Para proporcionar almacenamiento, los nodos usan Azure Managed Disks.To provide storage, the nodes use Azure Managed Disks. Para la mayoría de los tamaños de nodo de máquina virtual, estos son los discos Premium respaldados por SSD de alto rendimiento.For most VM node sizes, these are Premium disks backed by high-performance SSDs. Los datos almacenados en discos administrados se cifran automáticamente en reposo dentro de la plataforma Azure.The data stored on managed disks is automatically encrypted at rest within the Azure platform. Para mejorar la redundancia, estos discos también se replican de forma segura en el centro de datos de Azure.To improve redundancy, these disks are also securely replicated within the Azure datacenter.

Los entornos de Kubernetes en AKS o en cualquier otro lugar no están completamente seguros en este momento ante la utilización de multiinquilinos hostiles.Kubernetes environments, in AKS or elsewhere, currently aren't completely safe for hostile multi-tenant usage. Otras características de seguridad, como las directivas de seguridad de pod o un control de acceso basado en rol de Kubernetes (RBAC de Kubernetes) más específico para los nodos, dificultan las vulnerabilidades de seguridad.Additional security features like Pod Security Policies, or more fine-grained Kubernetes role-based access control (Kubernetes RBAC) for nodes, make exploits more difficult. Sin embargo, para que la seguridad resulte efectiva cuando se ejecutan cargas de trabajo multiinquilino hostiles, el hipervisor es el único nivel de seguridad en el que debe confiar.However, for true security when running hostile multi-tenant workloads, a hypervisor is the only level of security that you should trust. El dominio de seguridad de Kubernetes se convierte en todo el clúster, no en un nodo específico.The security domain for Kubernetes becomes the entire cluster, not an individual node. En el caso de estos tipos de cargas de trabajo multiinquilino hostiles, debe usar clústeres que estén físicamente aislados.For these types of hostile multi-tenant workloads, you should use physically isolated clusters. Para obtener más información sobre las formas de aislar las cargas de trabajo, consulte Procedimientos recomendados para el aislamiento de clústeres en AKS.For more information on ways to isolate workloads, see Best practices for cluster isolation in AKS.

Aislamiento de procesoCompute isolation

Ciertas cargas de trabajo pueden requerir un alto grado de aislamiento de otras cargas de trabajo del cliente debido a los requisitos normativos o de cumplimiento.Certain workloads may require a high degree of isolation from other customer workloads due to compliance or regulatory requirements. Para estas cargas de trabajo, Azure proporciona máquinas virtuales aisladas, que se pueden usar como nodos de agente en un clúster de AKS.For these workloads, Azure provides isolated virtual machines, which can be used as the agent nodes in an AKS cluster. Estas máquinas virtuales aisladas están aisladas de un tipo de hardware específico y están dedicadas a un solo cliente.These isolated virtual machines are isolated to a specific hardware type and dedicated to a single customer.

Para usar estas máquinas virtuales aisladas con un clúster de AKS, seleccione uno de los tamaños de máquinas virtuales aisladas que aparecen aquí como tamaño de nodo al crear un clúster de AKS o agregar un grupo de nodos.To use these isolated virtual machines with an AKS cluster, select one of the isolated virtual machines sizes listed here as the Node size when creating an AKS cluster or adding a node pool.

Actualizaciones de clústeresCluster upgrades

Por motivos de seguridad y cumplimiento, o para usar las características más recientes, Azure proporciona herramientas para orquestar la actualización de un clúster y de componentes de AKS.For security and compliance, or to use the latest features, Azure provides tools to orchestrate the upgrade of an AKS cluster and components. La orquestación de esta actualización incluye los componentes tanto de maestro como de agente de Kubernetes.This upgrade orchestration includes both the Kubernetes master and agent components. Puede ver una lista de las versiones de Kubernetes disponibles para su clúster de AKS.You can view a list of available Kubernetes versions for your AKS cluster. Para iniciar el proceso de actualización, especifique una de estas versiones disponibles.To start the upgrade process, you specify one of these available versions. A continuación, Azure acordona y purga con seguridad cada uno de los nodos de AKS y lleva a cabo la actualización.Azure then safely cordons and drains each AKS node and performs the upgrade.

Acordonar y purgarCordon and drain

Durante el proceso de actualización, los nodos de AKS se acordonan individualmente desde el clúster de modo que no se programen nuevos pods en ellos.During the upgrade process, AKS nodes are individually cordoned from the cluster so new pods aren't scheduled on them. A continuación, los nodos se purgan y actualizan de la siguiente manera:The nodes are then drained and upgraded as follows:

  • Se implementa un nuevo nodo en el grupo de nodos.A new node is deployed into the node pool. Este nodo ejecuta la imagen de sistema operativo y las revisiones más recientes.This node runs the latest OS image and patches.
  • Se identifica uno de los nodos existentes para la actualización.One of the existing nodes is identified for upgrade. Los pods de este nodo finalizan correctamente y se programan en los otros nodos del grupo.Pods on this node are gracefully terminated and scheduled on the other nodes in the node pool.
  • Este nodo existente se elimina del clúster de AKS.This existing node is deleted from the AKS cluster.
  • El siguiente nodo del clúster se acordona y purga mediante el mismo proceso hasta que todos los nodos se reemplazan correctamente como parte de la actualización.The next node in the cluster is cordoned and drained using the same process until all nodes are successfully replaced as part of the upgrade process.

Para más información, consulte Actualización de un clúster de Azure Kubernetes Service (AKS).For more information, see Upgrade an AKS cluster.

Seguridad de las redesNetwork security

Por motivos de conectividad y seguridad con las redes locales, puede implementar el clúster de AKS en subredes de red virtual de Azure existentes.For connectivity and security with on-premises networks, you can deploy your AKS cluster into existing Azure virtual network subnets. Estas redes virtuales pueden presentar una conexión de VPN de sitio a sitio o ExpressRoute de Azure de vuelta a su red local.These virtual networks may have an Azure Site-to-Site VPN or Express Route connection back to your on-premises network. Los controladores de entrada de Kubernetes pueden definirse con direcciones IP internas privadas, de modo que los servicios solo sean accesibles a través de esta conexión de red interna.Kubernetes ingress controllers can be defined with private, internal IP addresses so services are only accessible over this internal network connection.

Grupos de seguridad de red de AzureAzure network security groups

Para filtrar el flujo del tráfico en las redes virtuales, Azure usa reglas de grupo de seguridad de red.To filter the flow of traffic in virtual networks, Azure uses network security group rules. Estas reglas definen los intervalos, los puertos y los protocolos de IP de origen y destino, a los que se permite o deniega el acceso a los recursos.These rules define the source and destination IP ranges, ports, and protocols that are allowed or denied access to resources. Se crean reglas predeterminadas para permitir el tráfico TLS al servidor de API de Kubernetes.Default rules are created to allow TLS traffic to the Kubernetes API server. A medida que crea servicios con equilibradores de carga, asignaciones de puertos o rutas de entrada, AKS modifica automáticamente el grupo de seguridad de red para que el tráfico fluya adecuadamente.As you create services with load balancers, port mappings, or ingress routes, AKS automatically modifies the network security group for traffic to flow appropriately.

En los casos en los que proporcione su propia subred para el clúster de AKS y quiera modificar el flujo de tráfico, no modifique el grupo de seguridad de red del nivel de subred que administra AKS.In cases where you provide your own subnet for your AKS cluster and you wish to modify the flow of traffic, do not modify the subnet-level network security group managed by AKS. Puede crear grupos de seguridad de red del nivel de subred adicionales para modificar el flujo de tráfico siempre y cuando no interfieran con el tráfico necesario para administrar el clúster, como el acceso al equilibrador de carga, la comunicación con el plano de control y la salida.You may create additional subnet-level network security groups to modify the flow of traffic as long as they do not interfere with traffic needed for managing the cluster, such as load balancer access, communication with the control plane, and egress.

Directiva de red de KubernetesKubernetes network policy

Para limitar el tráfico de red entre los pods del clúster, AKS ofrece compatibilidad con las directivas de red de Kubernetes.To limit network traffic between pods in your cluster, AKS offers support for Kubernetes network policies. Con las directivas de red, puede optar por permitir o denegar rutas de acceso de red específicas en el clúster en función de los espacios de nombres y los selectores de etiquetas.With network policies, you can choose to allow or deny specific network paths within the cluster based on namespaces and label selectors.

Secretos de KubernetesKubernetes Secrets

Un secreto de Kubernetes se usa para insertar datos confidenciales en pods, como credenciales de acceso o claves.A Kubernetes Secret is used to inject sensitive data into pods, such as access credentials or keys. En primer lugar, cree un secreto mediante la API de Kubernetes.You first create a Secret using the Kubernetes API. Al definir el pod o la implementación, puede solicitar un secreto específico.When you define your pod or deployment, a specific Secret can be requested. Los secretos solo se proporcionan a los nodos que tienen un pod programado que lo requiere. El secreto se almacena en el sistema tmpfs, no se escribe en el disco.Secrets are only provided to nodes that have a scheduled pod that requires it, and the Secret is stored in tmpfs, not written to disk. Cuando se elimina el último pod en un nodo que requiere un secreto, el secreto se elimina del sistema tmpfs del nodo.When the last pod on a node that requires a Secret is deleted, the Secret is deleted from the node's tmpfs. Los secretos se almacenan en un espacio de nombres determinado y solo son accesibles para los pods del mismo espacio de nombres.Secrets are stored within a given namespace and can only be accessed by pods within the same namespace.

El uso de secretos reduce la información confidencial que se define en el pod o el manifiesto YAML del servicio.The use of Secrets reduces the sensitive information that is defined in the pod or service YAML manifest. En su lugar, solicite el secreto almacenado en el servidor de API de Kubernetes como parte de su manifiesto YAML.Instead, you request the Secret stored in Kubernetes API Server as part of your YAML manifest. Este enfoque proporciona acceso al secreto solo al pod específico.This approach only provides the specific pod access to the Secret. Nota: Los archivos de manifiesto de secreto sin formato contienen los datos secretos en formato base64 (consulte la documentación oficial para más detalles).Please note: the raw secret manifest files contains the secret data in base64 format (see the official documentation for more details). Por lo tanto, este archivo debe considerarse como información confidencial y no confirmarse en el control de código fuente.Therefore, this file should be treated as sensitive information, and never committed to source control.

Los secretos de Kubernetes se almacenan en etcd, un almacén distribuido de pares clave-valor.Kubernetes secrets are stored in etcd, a distributed key-value store. El almacén etcd está totalmente administrado por AKS y los datos se cifran en reposo dentro de la plataforma de Azure.Etcd store is fully managed by AKS and data is encrypted at rest within the Azure platform.

Pasos siguientesNext steps

Para empezar a proteger los clústeres de AKS, consulte Actualización de un clúster de Azure Kubernetes Service (AKS).To get started with securing your AKS clusters, see Upgrade an AKS cluster.

Para los procedimientos recomendados asociados, consulte Procedimientos recomendados para la seguridad de clústeres y las actualizaciones en AKS y Procedimientos recomendados para la seguridad de pod en AKS.For associated best practices, see Best practices for cluster security and upgrades in AKS and Best practices for pod security in AKS.

Para obtener más información sobre los conceptos básicos de Kubernetes y AKS, consulte los artículos siguientes:For additional information on core Kubernetes and AKS concepts, see the following articles: