我正在尝试使用 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 语句
undefined
mapRoles: |
- groups:
- system:masters
rolearn: arn:aws:iam::123456789012:role/codebuild-project-service-role
username: codebuild-project-service-role
undefined
相关信息
如何解决连接到 Amazon EKS API 服务器时出现的未经授权服务器错误?