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

Python Lambda连接EKS集群报403权限错误求助

问题分析与解决方案

1. 先解决"[Errno 2] No such file or directory: 'aws'"错误

Lambda默认运行环境不带AWS CLI,如果你代码里直接调用aws eks get-token这类CLI命令,必然会报错。推荐两种替代方案:

  • 用boto3直接生成EKS认证token:不需要依赖CLI,代码更轻量。示例片段:
import boto3
from kubernetes import client, config

def get_eks_auth_token(cluster_name):
    eks_client = boto3.client('eks')
    # 调用EKS API获取token(要求boto3版本>=1.20.0)
    token_result = eks_client.get_token(clusterName=cluster_name)
    return token_result['status']['token']

def setup_k8s_client(cluster_name, cluster_endpoint):
    token = get_eks_auth_token(cluster_name)
    k8s_config = client.Configuration()
    k8s_config.host = cluster_endpoint
    k8s_config.verify_ssl = True  # 根据你的集群SSL配置调整
    k8s_config.api_key = {"authorization": f"Bearer {token}"}
    client.Configuration.set_default(k8s_config)
  • 附加包含AWS CLI的Lambda层:如果一定要用CLI,可以打包AWS CLI成Lambda层挂载到函数上,但不如boto3方案高效。

2. 解决403 Forbidden(system:anonymous)错误

这个错误核心是Lambda角色没被EKS正确识别,即使更新了aws-auth ConfigMap,也可能存在以下问题:

  • 检查aws-auth ConfigMap配置是否正确:确保Lambda角色ARN完全匹配,格式不能错。示例正确配置片段:
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - groups:
      - system:masters
      rolearn: arn:aws:iam::123456789012:role/你的Lambda执行角色ARN
      username: lambda-eks-admin

更新后执行kubectl apply -f aws-auth.yaml,等待1-2分钟让配置生效。

  • 确认Lambda角色的信任策略:必须允许Lambda服务承担该角色,信任策略示例:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • 验证token对应的身份:用Lambda角色生成token后,测试是否能正常认证:
# 用Lambda角色ARN生成token
aws eks get-token --cluster-name 你的集群名 --role-arn Lambda角色ARN
# 用token访问集群API,检查是否返回正确身份
curl -H "Authorization: Bearer <生成的token>" https://你的集群端点/api/v1/namespaces/f-design/pods
  • 检查VPC安全组规则:Lambda安全组要允许出站访问EKS API的443端口;EKS集群的安全组要允许来自Lambda安全组的443端口入站流量。

3. 额外排查点

  • 确保Lambda执行角色有eks:DescribeCluster权限,否则无法获取集群信息和生成token。
  • 确认K8s RBAC没有覆盖system:masters的权限(默认该组有全集群权限,除非自定义了更严格的规则)。
  • 检查Kubernetes Python客户端版本和EKS集群版本是否兼容,避免API版本不匹配导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:10