如何解决在从 CodeBuild 连接到 Amazon EKS 集群时返回的错误“error: You must be logged in to the server (Unauthorized) [错误:您必须登录到服务器(未经授权)]”?

上次更新日期:2021-11-04

我正在尝试使用 CodeBuild 服务角色,从 AWS CodeBuild 连接到 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。为什么我的 kubectl 命令返回“error: You must be logged in to the server (Unauthorized) [错误:您必须登录到服务器(未经授权)]”,我该如何解决此问题?

简短描述

AWS Identity and Access Management (IAM) 身份验证器不允许配置映射中所用的 Amazon Resource Name (ARN) 角色中包含路径。如果您的 aws-auth ConfigMap 中的角色 ARN (rolearn) 包含路径,则 Amazon EKS 会返回以下错误:

“error: You must be logged in to the server (Unauthorized) [错误:您必须登录到服务器(未经授权)]”

CodeBuild 服务角色 ARN 包含以下路径:/service-role。当您在 aws-auth ConfigMap 中指定 rolearn 值时,必须删除 /service-role 路径或任何其他路径(若您使用了其他角色)。有关更多信息,请参阅管理集群的用户或 IAM 角色

如果您在从 aws-auth ConfigMap 中的角色 ARN 中删除任何路径后收到错误,请按照以下文章中的说明进行操作:如何解决连接到 Amazon EKS API 服务器时出现的未经授权服务器错误?

解决方法

确定您的 CodeBuild 服务角色的 ARN 并删除 /service-role 路径

1.    打开 CodeBuild 控制台

2.    在左侧导航窗格中选择 Build(构建)。然后,选择 Build projects(构建项目)

3.    选择您的项目名称。然后,选择 Build details(构建详细信息)

4.    在 Environment(环境)部分的 Build details(构建详细信息)窗格中,复制 CodeBuild 服务角色 ARN。

5.    在文本编辑器中,粘贴入 CodeBuild 服务角色 ARN 并删除 /service-role 路径。然后,复制编辑后的 ARN。

示例 CodeBuild 服务角色 ARN

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

删除了 /service-role 路径的 CodeBuild 服务角色 ARN 示例

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

将编辑后的 CodeBuild 服务角色 ARN 添加到您的 aws-auth ConfigMap 中

1.    要在文本编辑器中编辑 aws-auth ConfigMap,集群拥有者或管理员必须运行以下 kubectl 命令:

注意:您可以从本地计算机,或是从有权访问 EKS 集群的 Amazon Elastic Compute Cloud (Amazon EC2) 实例运行此命令。默认情况下,创建集群的用户有权访问该集群。

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

aws-auth ConfigMap 在 vi 编辑器中打开。

注意:如果您收到错误 Error from server (NotFound): configmaps "aws-auth" not found [来自服务器的错误(未找到):configmaps “aws-auth” 未找到],请使用以下文章中提供的示例 aws-auth ConfigMap:管理集群的用户或 IAM 角色

2.    在 vi 编辑器中,通过执行以下操作,将编辑后的 CodeBuild 服务角色 ARN 添加到 aws-auth ConfigMap 中:
i 激活插入模式。
mapRoles 语句的 system:masters 下,对于 rolearn 值,输入编辑后的 CodeBuild 服务角色 ARN。
Esc 激活命令模式。然后,通过输入 :wq 保存并关闭文件。

包含正确格式的 CodeBuild 服务角色 ARN 的示例 mapRoles 语句

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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?