You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过AWS Lambda认证K8s集群遇401未授权问题求助

问题分析与解决方案

不需要手动生成~/.aws/credentials或config文件,Lambda运行时会自动通过IAM执行角色获取临时凭证,401错误的根源不在本地凭证文件,而是以下几个关键问题:

1. 修复EKSAuth的区域参数传递错误

你的Lambda代码中指定了区域为us-east-2,但初始化EKSAuth时未传入该区域,使用了默认的us-east-1,导致生成的STS签名区域与集群区域不匹配,直接引发认证失败。

修改调用代码:

eks = auth.EKSAuth(CLUSTER_NAME, region=REGION)

2. 配置EKS集群的IAM权限映射(核心)

EKS集群无法自动识别Lambda的执行角色,必须将角色ARN添加到EKS的aws-auth ConfigMap中,完成IAM身份到K8s用户/组的映射:

  1. 获取当前aws-auth配置:
kubectl get configmap aws-auth -n kube-system -o yaml
  1. 添加Lambda执行角色到mapRoles字段(替换占位符为你的实际信息):
mapRoles:
- rolearn: arn:aws:iam::你的AWS账号ID:role/你的Lambda执行角色名称
  username: lambda-eks-user
  groups:
    - system:masters # 或自定义的有权限的组,不建议直接用system:masters,推荐创建专用组
  1. 更新ConfigMap:
kubectl apply -f aws-auth-updated.yaml

3. 配置K8s RBAC权限

即使IAM角色完成映射,还需要给对应的K8s用户/组分配访问Pod的权限:

创建一个ClusterRole和ClusterRoleBinding(保存为lambda-rbac.yaml):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: lambda-pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: lambda-pod-reader-binding
subjects:
- kind: User
  name: lambda-eks-user # 对应aws-auth中配置的username
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: lambda-pod-reader
  apiGroup: rbac.authorization.k8s.io

应用配置:

kubectl apply -f lambda-rbac.yaml

4. 验证Lambda执行角色的基础权限

确保Lambda的IAM执行角色已包含以下权限(通过IAM控制台配置):

  • eks:DescribeCluster:用于获取集群端点和证书信息
  • sts:GetCallerIdentity:用于生成EKS认证token(该权限默认包含在基础执行角色中,若被限制需手动添加)

5. 简化kubeconfig配置(可选)

当前kubeconfig中的users字段配置无效(user: 'lambda'不是合法格式),可以简化为:

kube_content['users'] = [
    {
        'name': 'aws',
        'user': {}
    }
]

因为后续代码已经手动设置了token,kubeconfig的用户配置仅作为占位符即可。

内容的提问来源于stack exchange,提问作者jipot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:00:56