Cuatro pasos para reforzar la seguridad de Amazon EKS
Kamil Potrec
21 de julio de 2021
0 minutos de lecturaEn la primera parte de esta serie de blogs, exploramos cómo implementar Amazon EKS con Terraform y analizamos cómo proteger la implementación inicial de RBAC y el Servicio de metadatos de instancias. En esta segunda publicación, veremos más prácticas recomendadas para reforzar la seguridad de Amazon EKS, incluida la importancia de usar roles de IAM dedicados para la entrega continua, una arquitectura multicuenta para aislar los clústeres de Amazon EKS y cifrar los secretos en el plano de control. Por último, mostraremos cómo incorporar herramientas de análisis estático en tus pipelines de CD para detectar estos problemas antes de que lleguen a los entornos de producción.
Lleva un registro de quién implementó el clúster
El servicio Amazon EKS se integra con el servicio de administración de identidades y acceso para autenticar a los usuarios en el clúster. Las decisiones de autorización se toman mediante el modelo nativo de RBAC de Kubernetes. La configuración de RBAC se asigna a las identidades de IAM a través de aws-auth ConfigMap. Sin embargo, existe una asignación especial que no aparece en ningún archivo de configuración ni ajuste. La entidad de IAM utilizada para crear el clúster se asigna automáticamente al grupo integrado de Kubernetes system:masters. Esto está bien documentado en la documentación para usuarios. Sin embargo, tiene implicaciones importantes para la auditabilidad de los permisos del clúster.
Para mostrar el impacto de esta configuración, eliminaremos todos los Roles y ClusterRoles de nuestro clúster de demostración.
Amazon EKS usa autenticación de tokens mediante webhook para integrarse con IAM. Podemos ver la configuración en los argumentos del servidor de API.
AWS IAM tiene el concepto de identificadores únicos, que se pueden usar en servicios específicos para evitar errores de configuración por reutilización de nombres. La documentación de Amazon EKS no aclara si el permiso system:masters está vinculado al identificador único de la entidad o a su nombre descriptivo. Para validar si eliminar la entidad original revoca todos los permisos del clúster, eliminamos el rol temporal y lo volvimos a crear.
Como puedes ver, tenemos un rol completamente nuevo, identificado por un RoleId diferente. Sin embargo, el servicio de autenticación de Amazon EKS usa el nombre descriptivo del rol para concedernos los mismos permisos de system:masters.
La forma más eficaz de mitigar este problema es usar un sistema de implementación centralizado, asignar un rol dedicado a las implementaciones y evitar a toda costa el uso de credenciales personales. Herramientas como aws-vault pueden ayudarte a administrar de forma segura el cambio entre distintos roles.
Ahora veamos cómo se autentican los nodos en el plano de control.
Usa la separación multicuenta para los clústeres
Amazon EKS requiere que todos los nodos tengan asociado un perfil de instancia con las siguientes dos políticas: AmazonEKSWorkerNodePolicy y AmazonEC2ContainerRegistryReadOnly.
De forma predeterminada, las políticas otorgan privilegios sobre todos los recursos de la cuenta de AWS. Esto significa que un pod comprometido en este clúster podrá enumerar información sobre cualquier recurso, VPC, subred e imagen de la cuenta.
El nodo de Amazon EKS también necesita acceso a otra política administrada llamada AmazonEKS_CNI_Policy. Esta política permite que el nodo asigne direcciones IP y realice cualquier función relacionada con la red.
Esta política permite que quien la invoca modifique la configuración de red de cualquier instancia de la cuenta. De hecho, Amazon recomienda asociar esta política directamente a la cuenta de servicio de Kubernetes aws-node. De forma predeterminada, el módulo de Terraform asocia esta política al perfil de IAM. Podemos cambiar este comportamiento si establecemos el atributo attach_worker_cni_policy en false.
Cifra tus secretos
Uno de los componentes del plano de control administrados por el servicio Amazon EKS es el almacén de clave-valor etcd. El servidor de API de Kubernetes lo usa para almacenar todos los objetos y las configuraciones. De forma predeterminada, Kubernetes no cifra los datos almacenados en este almacén de clave-valor. AWS es responsable de la seguridad de los componentes del plano de control; aun así, podemos aplicar una estrategia de defensa en profundidad para reforzar aún más la seguridad de nuestros datos.
El servicio AWS KMS es uno de los proveedores de cifrado que puede ofrecer cifrado de sobre para los objetos Secret almacenados en nuestro clúster. Si establecemos la opción `cluster_encryption_config`, podemos especificar una clave de KMS que se usará para cifrar las claves de cifrado de datos intermedias; estas, a su vez, se usarán para cifrar objetos específicos. Esta publicación del blog de Amazon EKS de AWS ofrece un excelente resumen del proceso subyacente. A partir de este momento, cualquier persona con acceso a un clúster de etcd no podrá leer nuestros secretos sin tener también acceso a nuestra clave de KMS. Todo el proceso es completamente transparente para el usuario final.
Detecta problemas en el pipeline de implementación
La infraestructura como código nos permite describir de forma declarativa el estado deseado del clúster de Amazon EKS. Así, podemos detectar estáticamente algunos de estos problemas antes de implementar cualquier recurso.
En Terraform podemos generar un plan de la configuración que se implementará.
Este plan se puede convertir al formato JSON, lo que nos permite realizar un análisis estático de todos los atributos.
Una vez que entendemos la estructura del plan de Terraform, podemos usar Open Policy Agent y su lenguaje declarativo para escribir pruebas sencillas.
Puedes probar este sencillo ejemplo en Rego Playground, una herramienta en línea.
Escribir estas reglas puede volverse engorroso. Requiere analizar las estructuras de salida de Terraform, procesar los archivos, mantener las bibliotecas y presentar los resultados de forma clara. Aquí es donde pueden ayudar productos como Snyk IaC. Este es un ejemplo del análisis de seguridad que se realiza en nuestra implementación predeterminada.
Con el análisis de IaC de Snyk, puedes detectar problemas en tu configuración de Terraform antes de implementarla en producción y mantener seguros tus entornos de producción. ¡Crea una cuenta gratis en https://app.snyk.io! Además, puedes probar la herramienta gratuita de revisión de código de Snyk para evaluar rápidamente la seguridad de tu código.
Protege la infraestructura desde el origen
Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.



