Procedimientos recomendados para la seguridad de pods en Azure Kubernetes Service (AKS)Best practices for pod security in Azure Kubernetes Service (AKS)

A la hora de desarrollar y ejecutar aplicaciones en Azure Kubernetes Service (AKS), es importante tener en cuenta la seguridad de los pods.As you develop and run applications in Azure Kubernetes Service (AKS), the security of your pods is a key consideration. Las aplicaciones se deben diseñar con el principio del número mínimo de privilegios necesarios.Your applications should be designed for the principle of least number of privileges required. Mantener seguros los datos privados es prioritario para los clientes.Keeping private data secure is top of mind for customers. No deseará que credenciales como las cadenas de conexión de base de datos, las claves o los secretos y los certificados se vean expuestas al mundo exterior, donde un atacante podría aprovechar esos secretos con propósitos malintencionados.You don't want credentials like database connection strings, keys, or secrets and certificates exposed to the outside world where an attacker could take advantage of those secrets for malicious purposes. No debe incorporarlas al código ni insertarlas en las imágenes de contenedor.Don't add them to your code or embed them in your container images. Este enfoque crearía un riesgo de exposición y limitaría la posibilidad de rotar esas credenciales, ya que las imágenes de contenedor se deberían volver a generar.This approach would create a risk for exposure and limit the ability to rotate those credentials as the container images will need to be rebuilt.

Este artículo de procedimientos recomendados se centra en cómo proteger los pods en AKS.This best practices article focuses on how to secure pods in AKS. Aprenderá a:You learn how to:

  • Usar el contexto de seguridad del pod para limitar el acceso a los procesos y los servicios o una elevación de privilegiosUse pod security context to limit access to processes and services or privilege escalation
  • Autenticarse con otros recursos de Azure mediante identidades administradas del podAuthenticate with other Azure resources using pod managed identities
  • Solicitar y recuperar credenciales de un almacén digital, como Azure Key VaultRequest and retrieve credentials from a digital vault such as Azure Key Vault

También puede consultar los procedimientos recomendados sobre la seguridad del clúster y la administración de imágenes de contenedor.You can also read the best practices for cluster security and for container image management.

Protección del acceso del pod a los recursosSecure pod access to resources

Guía de procedimiento recomendado : para la ejecución como un usuario o grupo diferentes y limitar el acceso a los procesos y servicios del nodo subyacente, defina la configuración del contexto de seguridad del pod.Best practice guidance - To run as a different user or group and limit access to the underlying node processes and services, define pod security context settings. Asigne el menor número de privilegios necesarios.Assign the least number of privileges required.

Para que las aplicaciones se ejecuten correctamente, los pods se deben ejecutar como un usuario o grupo definidos y no como root .For your applications to run correctly, pods should run as a defined user or group and not as root . El elemento securityContext de un pod o un contenedor permite definir valores de configuración como runAsUser o fsGroup para asumir los permisos adecuados.The securityContext for a pod or container lets you define settings such as runAsUser or fsGroup to assume the appropriate permissions. Asigne solo los permisos de usuario o grupo necesarios y no utilice el contexto de seguridad como un medio para asumir permisos adicionales.Only assign the required user or group permissions, and don't use the security context as a means to assume additional permissions. El runAsUser , elevación de privilegios y otros valores de configuración de las capacidades de Linux solo están disponibles en los pods y los nodos de Linux.The runAsUser , privilege escalation, and other Linux capabilities settings are only available on Linux nodes and pods.

Cuando se ejecuta como un usuario que no es root, los contenedores no se pueden enlazar a los puertos con privilegios inferiores al 1024.When you run as a non-root user, containers cannot bind to the privileged ports under 1024. En este escenario, los servicios de Kubernetes se pueden utilizar para ocultar el hecho de que una aplicación se ejecuta en un puerto determinado.In this scenario, Kubernetes Services can be used to disguise the fact that an app is running on a particular port.

Un contexto de seguridad del pod también puede definir funcionalidades o permisos adicionales para el acceso a los procesos y servicios.A pod security context can also define additional capabilities or permissions for accessing processes and services. Se pueden establecer las siguientes definiciones de contexto de seguridad comunes:The following common security context definitions can be set:

  • allowPrivilegeEscalation define si el pod puede asumir privilegios de usuario root .allowPrivilegeEscalation defines if the pod can assume root privileges. Diseñe las aplicaciones de modo que este valor siempre esté establecido en false .Design your applications so this setting is always set to false .
  • Funcionalidades de Linux : permite el acceso del pod a los procesos de nodo subyacente.Linux capabilities let the pod access underlying node processes. Tenga cuidado con la asignación de estas funcionalidades.Take care with assigning these capabilities. Asigne el menor número de privilegios necesarios.Assign the least number of privileges needed. Para más información, consulte las funcionalidades de Linux.For more information, see Linux capabilities.
  • Etiquetas SELinux es un módulo de seguridad del kernel de Linux que le permite definir directivas para el acceso a los servicios, los procesos y el sistema de archivos.SELinux labels is a Linux kernel security module that lets you define access policies for services, processes, and filesystem access. De nuevo, asigne el menor número de privilegios necesarios.Again, assign the least number of privileges needed. Para más información, consulte las opciones de SELinux disponibles en Kubernetes.For more information, see SELinux options in Kubernetes

El siguiente ejemplo de manifiesto YAML de pod establece la configuración del contexto de seguridad para definir:The following example pod YAML manifest sets security context settings to define:

  • El pod se ejecuta con el identificador de usuario 1000 y es parte del grupo con el identificador 2000Pod runs as user ID 1000 and part of group ID 2000
  • No se pueden elevar los privilegios para usar rootCan't escalate privileges to use root
  • Permite a las funcionalidades de Linux acceder a las interfaces de red y al reloj en tiempo real del host (hardware)Allows Linux capabilities to access network interfaces and the host's real-time (hardware) clock
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    fsGroup: 2000
  containers:
    - name: security-context-demo
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      securityContext:
        runAsUser: 1000
        allowPrivilegeEscalation: false
        capabilities:
          add: ["NET_ADMIN", "SYS_TIME"]

Colabore con el operador del clúster para determinar la configuración de contexto de seguridad que necesita.Work with your cluster operator to determine what security context settings you need. Intente diseñar las aplicaciones para minimizar los permisos adicionales y el acceso que requiere el pod.Try to design your applications to minimize additional permissions and access the pod requires. Hay características de seguridad adicionales para limitar el acceso mediante AppArmor y seccomp (informática segura) que los operadores del clúster pueden implementar.There are additional security features to limit access using AppArmor and seccomp (secure computing) that can be implemented by cluster operators. Para más información, consulte Protección del acceso del contenedor a los recursos.For more information, see Secure container access to resources.

Limitación de la exposición de credencialesLimit credential exposure

Guía de procedimiento recomendado : no defina las credenciales en el código de aplicación.Best practice guidance - Don't define credentials in your application code. Use identidades administradas para los recursos de Azure para permitir que el pod solicite acceso a otros recursos.Use managed identities for Azure resources to let your pod request access to other resources. Se debería usar también un almacén digital, como Azure Key Vault, para almacenar y recuperar las credenciales y claves digitales.A digital vault, such as Azure Key Vault, should also be used to store and retrieve digital keys and credentials. Las identidades administradas de pod está pensadas para usar únicamente con pods de Linux y las imágenes de contenedor.Pod managed identities is intended for use with Linux pods and container images only.

Para limitar el riesgo de exposición de las credenciales en el código de la aplicación, evite el uso de credenciales compartidas o fijas.To limit the risk of credentials being exposed in your application code, avoid the use of fixed or shared credentials. Las credenciales y las claves no se deberían incluir directamente en el código.Credentials or keys shouldn't be included directly in your code. Si se exponen estas credenciales, la aplicación se debe actualizar y volver a implementar.If these credentials are exposed, the application needs to be updated and redeployed. Un enfoque mejor es dar a los pods sus propias identidades y formas para autenticarse a sí mismos o recuperar automáticamente las credenciales de un almacén digital.A better approach is to give pods their own identity and way to authenticate themselves, or automatically retrieve credentials from a digital vault.

Uso de proyectos ascendentes de proceso de contenedor de AzureUse Azure Container Compute Upstream projects

Importante

El soporte técnico de Azure no admite los proyectos de código abierto de AKS asociados.Associated AKS open source projects are not supported by Azure technical support. Se proporcionan para que los usuarios se ocupen por sí mismos de su instalación en los clústeres y recopilen comentarios de nuestra comunidad.They are provided for users to self-install into clusters and gather feedback from our community.

Los siguientes proyectos de código abierto de AKS asociados le permiten autenticar automáticamente los pods o las credenciales de la solicitud y las claves desde un almacén digital.The following associated AKS open source projects let you automatically authenticate pods or request credentials and keys from a digital vault. Estos proyectos los mantiene el equipo de flujo ascendente de proceso de contenedor de Azure y forman parte de una lista más amplia de proyectos disponibles para su uso.These projects are maintained by the Azure Container Compute Upstream team and are part of a broader list of projects available for use.

Uso de identidades administradas del podUse pod managed identities

Las identidades administradas de los recursos de Azure permiten a un pod autenticarse a sí mismo en cualquier servicio de Azure que lo permita, como Storage o SQL.A managed identity for Azure resources lets a pod authenticate itself against Azure services that support it, such as Storage or SQL. Se asigna al pod una identidad de Azure que le permite autenticarse en Azure Active Directory y recibir un token digital.The pod is assigned an Azure Identity that lets them authenticate to Azure Active Directory and receive a digital token. Este token digital se puede presentar a otros servicios de Azure que comprueban si el pod está autorizado para acceder al servicio y realizar las acciones necesarias.This digital token can be presented to other Azure services that check if the pod is authorized to access the service and perform the required actions. Este enfoque significa que no es necesario ningún secreto para las cadenas de conexión de base de datos, por ejemplo.This approach means that no secrets are required for database connection strings, for example. El flujo de trabajo simplificado de la identidad administrada del pod se muestra en el diagrama siguiente:The simplified workflow for pod managed identity is shown in the following diagram:

Flujo de trabajo simplificado de la identidad administrada del pod en Azure

Con una identidad administrada, el código de la aplicación no necesita incluir credenciales para acceder a un servicio como Azure Storage.With a managed identity, your application code doesn't need to include credentials to access a service, such as Azure Storage. Como cada pod se autentica con su propia identidad, puede auditar y revisar el acceso.As each pod authenticates with its own identity, so you can audit and review access. Si la aplicación se conecta con otros servicios de Azure, utilice identidades administradas para limitar la reutilización de credenciales y el riesgo de exposición.If your application connects with other Azure services, use managed identities to limit credential reuse and risk of exposure.

Para más información acerca de las identidades de los pods, consulte Configuración de un clúster de AKS para usar identidades administradas de pods con las aplicaciones.For more information about pod identities, see Configure an AKS cluster to use pod managed identities and with your applications

Uso de Azure Key Vault con el controlador de CSI del almacén de secretosUse Azure Key Vault with Secrets Store CSI Driver

El uso del proyecto de identidades de pods permite la autenticación en los servicios compatibles de Azure.Using the pod identity project enables authentication against supporting Azure services. Para sus propios servicios o aplicaciones sin identidades administradas para recursos de Azure, puede seguir autenticándose mediante credenciales o claves.For your own services or applications without managed identities for Azure resources, you can still authenticate using credentials or keys. Se puede utilizar un almacén digital para almacenar el contenido de estos secretos.A digital vault can be used to store these secret contents.

Cuando las aplicaciones necesitan una credencial, se comunican con el almacén digital, recuperan el contenido de los secretos más reciente y luego se conectan al servicio solicitado.When applications need a credential, they communicate with the digital vault, retrieve the latest secret contents, and then connect to the required service. Azure Key Vault puede ser este almacén digital.Azure Key Vault can be this digital vault. El flujo de trabajo simplificado para recuperar una credencial de Azure Key Vault mediante identidades administradas de pods se muestra en el diagrama siguiente:The simplified workflow for retrieving a credential from Azure Key Vault using pod managed identities is shown in the following diagram:

Flujo de trabajo simplificado para recuperar una credencial de Key Vault mediante una identidad administrada de pods

Con Key Vault, puede almacenar y rotar periódicamente secretos como credenciales, claves de cuenta de almacenamiento o certificados.With Key Vault, you store and regularly rotate secrets such as credentials, storage account keys, or certificates. Puede integrar Azure Key Vault con un clúster de AKS mediante el proveedor de Azure Key Vault para el controlador de CSI del almacén de secretos.You can integrate Azure Key Vault with an AKS cluster using the Azure Key Vault provider for the Secrets Store CSI Driver. El controlador de CSI del almacén de secretos permite que el clúster de AKS pueda recuperar de forma nativa el contenido de los secretos de Key Vault y proporcionárselo de forma segura solo al pod solicitante.The Secrets Store CSI driver enables the AKS cluster to natively retrieve secret contents from Key Vault and securely provide them only to the requesting pod. Trabaje con el operador de clúster para implementar el controlador de CSI del almacén de secretos en los nodos de trabajo de AKS.Work with your cluster operator to deploy the Secrets Store CSI Driver onto AKS worker nodes. Puede usar una identidad administrada de pods para solicitar acceso a Key Vault y recuperar el contenido de los secretos que necesita mediante el controlador de CSI del almacén de secretos.You can use a pod managed identity to request access to Key Vault and retrieve the secret contents needed through the Secrets Store CSI Driver.

Azure Key Vault con el controlador de CSI del almacén de secretos se puede usar para pods y nodos de Linux que requieren una versión la versión 1.16, o superior, de Kubernetes.Azure Key Vault with Secrets Store CSI Driver can be used for Linux nodes and pods which require a Kubernetes version of 1.16 or greater. Para pods y nodos de Windows, se requiere la versión 1.18, o superior, de Kubernetes 1.18.For Windows nodes and pods a Kubernetes version of 1.18 or greater is required.

Pasos siguientesNext steps

Este artículo se centra en cómo proteger los pods.This article focused on how to secure your pods. Para implementar algunas de estas áreas, consulte los artículos siguientes:To implement some of these areas, see the following articles: