Cuenta de servicio de Kubernetes - Amazon EKS

Cuenta de servicio de Kubernetes

Una cuenta de servicio de Kubernetes proporciona una identidad para los procesos que se ejecutan en un pod. Para obtener más información, consulte Administración de cuentas de servicio en la documentación de Kubernetes. Si su pod necesita acceso a servicios de AWS, puede asignar la cuenta de servicio a una identidad AWS Identity and Access Management para conceder ese acceso. Para obtener más información, consulte Roles de IAM para cuentas de servicio .

Tokens de cuenta de servicio

La característica BoundServiceAccountTokenVolume está habilitada de forma predeterminada en la versión 1.21 de Kubernetes y posterior. Esta función mejora la seguridad de los tokens de cuenta de servicio al permitir que las cargas de trabajo se ejecuten en Kubernetes para solicitar tokens web JSON que estén vinculados a la audiencia, la hora y la clave. Los tokens de cuenta de servicio tienen una caducidad de una hora. En versiones anteriores de Kubernetes, los tokens no tenían caducidad. Esto significa que los clientes que confían en estos tokens deben actualizar los tokens en una hora. Los siguientes ejemplos SDK de cliente de Kubernetes actualizan los tokens automáticamente dentro del plazo requerido:

  • Versión de Go 0.15.7 y posteriores

  • Versión de Python 12.0.0 y posteriores

  • Versión de Java 9.0.0 y posterior

  • Versión de JavaScript 0.10.3 y posterior

  • Rama de Ruby master

  • Versión de Haskell 0.3.0.0

  • Versión C# 7.0.5 y posterior

Si su carga de trabajo utiliza una versión de cliente anterior, debe actualizarla. Para permitir una migración fluida de clientes a los tokens de cuenta de servicio con plazos más recientes, versión Kubernetes 1.21 agregue un período de caducidad prolongado al token de cuenta de servicio durante la hora predeterminada. Para los clústeres de Amazon EKS, el período de caducidad extendido es de 90 días. El servidor API de Kubernetes de los clústeres de Amazon EKS rechaza solicitudes con tokens de más de 90 días. Le recomendamos que compruebe sus aplicaciones y sus dependencias para asegurarse de que los SDK de cliente de Kubernetes son iguales o posteriores a las versiones indicadas anteriormente.

Cuando el servidor API recibe solicitudes con tokens de más de una hora, anota el evento de registro de auditoría de la API con annotations.authentication.k8s.io/stale-token. El valor de la anotación es similar al siguiente ejemplo:

subject: system:serviceaccount:common:fluent-bit, seconds after warning threshold: 4185802.

Si el clúster tiene un registro de plano de control habilitado, entonces las anotaciones se encuentran en los registros de auditoría. Puede utilizar la siguiente consulta de CloudWatch Logs Insights para identificar todos los pods del clúster de Amazon EKS que utilizan tokens obsoletos:

fields @timestamp | filter @logStream like /kube-apiserver-audit/ | filter @message like /seconds after warning threshold/ | parse @message "subject: *, seconds after warning threshold:*\"" as subject, elapsedtime

El subject hace referencia a la cuenta de servicio que utilizó el pod. El elapsedtime indica el tiempo transcurrido (en segundos) tras leer el último token. Las solicitudes al servidor API se denegan cuando el elapsedtime supera los 90 días. Debe actualizar de forma proactiva el SKD del cliente Kubernetes de las aplicaciones para utilizar una de las versiones enumeradas anteriormente que actualiza automáticamente el token. Si el token de cuenta de servicio utilizado dura casi 90 días y no tiene tiempo suficiente para actualizar las versiones del SDK de cliente antes de que el token caduque, puede terminar los pods existentes y crear otros nuevos. Esto da como resultado la reactivación del token de la cuenta de servicio, lo que le da 90 días adicionales para actualizar los SDK de la versión de cliente.

Si el pod forma parte de una implementación, la forma sugerida de finalizar los pods y mantener la alta disponibilidad es realizar un despliegue con el siguiente comando. Reemplace my-deployment con el nombre de la implementación.

kubectl rollout restart deployment/my-deployment

Complementos de clúster

Los siguientes complementos de clúster se han actualizado para utilizar los SDK del cliente Kubernetes que reactivan automáticamente los tokens de cuentas de servicio. Le recomendamos que se asegure de que las versiones enumeradas, o las versiones posteriores, están instaladas en su clúster 1.21 o posterior.