¿Cómo resuelvo los errores “error: You must be logged in to the server (Unauthorized)” al conectar a un clúster de Amazon EKS desde CodeBuild?

Última actualización: 04/11/2021

Estoy intentando conectarme a un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) desde AWS CodeBuild mediante el rol de servicio de CodeBuild. ¿Por qué los comandos kubectl devuelven errores “error: You must be logged in to the server (Unauthorized)” y cómo soluciono el problema?

Descripción corta

AWS Identity and Access Management (IAM) Authenticator no permite una ruta en el rol Nombre de recurso de Amazon (ARN) utilizado en el mapa de configuración. Si el ARN del rol (rolearn) del ConfigMap de aws-auth incluye una ruta, Amazon EKS devuelve el siguiente error:

“error: You must be logged in to the server (Unauthorized)”

El ARN del rol de servicio de CodeBuild incluye la siguiente ruta: /service-role. Cuando se especifica el valor rolearn en el ConfigMap de aws-auth, se debe eliminar la ruta /service-role, o cualquier otra ruta, si se utiliza otro rol. Para obtener más información, consulte Administración de usuarios o roles de IAM para su clúster.

Si recibe errores después de eliminar cualquier ruta del ARN del rol en el ConfigMap de aws-auth, siga las instrucciones del artículo siguiente: ¿Cómo resuelvo un error de servidor no autorizado cuando me conecto al servidor de la API de Amazon EKS?

Resolución

Identifique el ARN del rol de servicio de CodeBuild y elimine la ruta /service-role

1.    Abra la consola de CodeBuild.

2.    En el panel de navegación izquierdo, elija Build (Crear). Luego, elija Build projects (Crear proyectos).

3.    Seleccione el nombre del proyecto. Luego, elija Build details (Detalles de creación).

4.    En la sección Environment (Entorno), en el panel Build details (Detalles de creación), copie el ARN del rol de servicio de CodeBuild.

5.    En un editor de texto, pegue el ARN del rol de servicio de CodeBuild y elimine la ruta /service-role. Luego, copie el ARN editado.

Ejemplo de ARN del rol de servicio de CodeBuild

arn:aws:iam::123456789012:role/service-role/codebuild-project-service-role

Ejemplo de ARN del rol de servicio de CodeBuild con la ruta /service-role eliminada

arn:aws:iam::123456789012:role/codebuild-project-service-role

Agregue el ARN del rol de servicio editado de CodeBuild al ConfigMap de aws-auth

1.    Para editar el ConfigMap de aws-auth en un editor de texto, el propietario o administrador del clúster debe ejecutar el siguiente comando kubectl:

Nota: Puede ejecutar el comando desde su ordenador local o desde una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que tenga acceso al clúster de EKS. El usuario que haya creado el clúster tiene acceso a él de manera predeterminada.

$ kubectl edit -n kube-system cm aws-auth

El ConfigMap de aws-auth se abre en el editor vi.

Nota: Si recibe un error Error from server (NotFound): configmaps "aws-auth" not found, utilice el ejemplo de ConfigMap de aws-auth que se proporciona en el siguiente artículo: Administración de usuarios o roles de IAM para su clúster.

2.    En el editor vi, agregue el ARN del rol de servicio de CodeBuild editado en el ConfigMap de aws-auth haciendo lo siguiente:
Active el modo de inserción pulsando i.
En la instrucción mapRoles, en system:masters, ingrese el ARN del rol de servicio de CodeBuild editado para el valor rolearn.
Active el modo de comando pulsando Esc. Luego, guarde y cierre el archivo ingresando :wq.

Ejemplo de instrucción mapRoles que incluye un ARN del rol de servicio de CodeBuild con un formato correcto

```
mapRoles: |
   - groups:
     - system:masters
     rolearn: arn:aws:iam::123456789012:role/codebuild-project-service-role
     username: codebuild-project-service-role
```

¿Le ha resultado útil este artículo?


¿Necesita asistencia técnica o con la facturación?