Configuración del punto de conexión de AWS Security Token Service para una cuenta de servicio - Amazon EKS

Configuración del punto de conexión de AWS Security Token Service para una cuenta de servicio

Si utiliza una cuenta de servicio de Kubernetes con Roles de IAM para cuentas de servicio, puede configurar el tipo de punto de conexión de AWS Security Token Service utilizado por la cuenta de servicio si el clúster y la versión de la plataforma son iguales o posteriores a las enumeradas en la tabla siguiente. Si su versión de Kubernetes o plataforma son anteriores a las enumeradas en la tabla, sus cuentas de servicio solo pueden utilizar el punto de conexión global.

Versión de Kubernetes Versión de la plataforma Tipo de punto de conexión predeterminado
1.29 eks.1 Regional
1.28 eks.1 Regional
1.27 eks.1 Regional
1.26 eks.1 Regional
1.25 eks.1 Regional
1.24 eks.2 Regional
1.23 eks.1 Regional

AWS recomienda usar el sistema regional de puntos de conexión de AWS STS en lugar del global. Esto reduce la latencia, proporciona redundancia integrada y aumenta la validez de los tokens de sesión. La AWS Security Token Service debe estar activa en la Región de AWS donde Pod se ejecuta. Además, su aplicación debe tener incorporada una redundancia para una Región de AWS diferente en caso de error del servicio en la Región de AWS. Para obtener más información, consulte Administración de AWS STS en una Región de AWS en la guía del usuario de IAM.

Requisitos previos
Para configurar el tipo de punto de conexión utilizado por una cuenta de servicio de Kubernetes

Todos los siguientes ejemplos utilizan la cuenta de servicio de aws-node de Kubernetes utilizada por el Complemento CNI de Amazon VPC. Puede reemplazar los example values con sus propias cuentas de servicio, Pods, espacios de nombres y otros recursos.

  1. Seleccione un Pod que utilice una cuenta de servicio para la que desee cambiar el punto de conexión. Determine en qué Región de AWS se ejecuta el Pod. Reemplace aws-node-6mfgv con su nombre de Pod y kube-system con el espacio de nombres de Pod.

    kubectl describe pod aws-node-6mfgv -n kube-system |grep Node:

    Un ejemplo de salida sería el siguiente.

    ip-192-168-79-166.us-west-2/192.168.79.166

    En la salida anterior, el Pod se ejecuta en un nodo de la us-west-2 Región de AWS.

  2. Determine el tipo de punto de conexión que utiliza la cuenta de servicio del Pod's.

    kubectl describe pod aws-node-6mfgv -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS

    Un ejemplo de salida sería el siguiente.

    AWS_STS_REGIONAL_ENDPOINTS: regional

    Si el punto de conexión actual es global, global se devuelven en la salida. Si no se devuelve ningún resultado, el tipo de punto de conexión predeterminado está en uso y no se ha anulado.

  3. Si la versión de clúster o plataforma es la misma o posterior a las enumeradas en la tabla, puede cambiar el tipo de punto de conexión utilizado por la cuenta de servicio del tipo predeterminado a otro con uno de los siguientes comandos. Reemplace aws-node con el nombre de su cuenta de servicio y kube-system con el espacio de nombres de su cuenta de servicio.

    • Si el tipo de punto de conexión predeterminado o actual es global y desea cambiarlo a regional:

      kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/sts-regional-endpoints=true

      Si utiliza Roles de IAM para cuentas de servicio para generar URL de S3 prefirmadas en la aplicación que se ejecuta en los contenedores de los Pods, el formato de la URL de los puntos de conexión regionales es similar al siguiente ejemplo:

      https://bucket.s3.us-west-2.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&...
    • Si el tipo de punto de conexión predeterminado o actual es regional y desea cambiarlo a global:

      kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/sts-regional-endpoints=false

      Si su aplicación realiza solicitudes explícitamente a puntos de enlace globales de AWS STS y no anula el comportamiento predeterminado de usar puntos de enlace regionales en clústeres de Amazon EKS, las solicitudes fallarán y mostrarán un error. Para obtener más información, consulte Los contenedores de pods muestran el siguiente error: An error occurred (SignatureDoesNotMatch) when calling the GetCallerIdentity operation: Credential should be scoped to a valid region.

      Si utiliza Roles de IAM para cuentas de servicio para generar URL de S3 prefirmadas en la aplicación que se ejecuta en los contenedores de los Pods, el formato de la URL de los puntos de conexión globales es similar al siguiente ejemplo:

      https://bucket.s3.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&...

    Si tiene una automatización que espera la URL prefirmada en un formato determinado o si su aplicación o dependencias posteriores que utilizan URL prefirmadas tienen expectativas para la Región de AWSsegmentada, luego realice los cambios necesarios para utilizar el punto de conexión AWS STS.

  4. Elimine y vuelva a crear todos los Pods existentes asociados a la cuenta de servicio para aplicar las variables de entorno de credenciales. El enlace web que muta no se aplica a los Pods que ya están en ejecución. Puede reemplazar Pods, kube-system y -l k8s-app=aws-node con la información del Pods para el que configuró la anotación.

    kubectl delete Pods -n kube-system -l k8s-app=aws-node
  5. Confirme que todos los Pods se reiniciaron.

    kubectl get Pods -n kube-system -l k8s-app=aws-node
  6. Consulte las variables de entorno de uno de los Pods. Compruebe que el valor AWS_STS_REGIONAL_ENDPOINTS sea el que estableció en un paso anterior.

    kubectl describe pod aws-node-kzbtr -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS

    Un ejemplo de salida sería el siguiente.

    AWS_STS_REGIONAL_ENDPOINTS=regional