公网暴露的EKS集群ALB入口添加基础认证的最简方案咨询
最简适配方案:ALB + 轻量Lambda Basic Auth 实现
无需修改现有应用部署配置、无需额外维护反向代理服务,仅需新增1个Lambda函数+修改Ingress注解即可完成,全程5分钟即可配置完成。
实现步骤
- 创建Basic Auth Lambda函数
选择Python 3.x运行时,使用如下代码,替换自定义的用户名密码即可:
def lambda_handler(event, context): # 替换为你自定义的账号密码 username = "your_custom_user" password = "your_custom_pass" # 校验Authorization请求头 auth_header = event.get('headers', {}).get('authorization', '') if auth_header.startswith('Basic '): import base64 try: auth_decoded = base64.b64decode(auth_header.split(' ')[1]).decode('utf-8') req_user, req_pass = auth_decoded.split(':', 1) if req_user == username and req_pass == password: # 认证通过放行请求 return { "isAuthenticated": True, "context": {} } except: pass # 认证失败返回Basic Auth校验弹窗 return { "isAuthenticated": False, "statusCode": 401, "headers": { "WWW-Authenticate": "Basic realm=\"Restricted Access\"" }, "body": "Unauthorized" }
部署完成后记录该Lambda函数的ARN。
- 为ALB Ingress Controller服务角色添加Lambda调用权限
在IAM控制台找到你的AWS Load Balancer Controller对应的IAM角色,添加如下内联权限,替换为上一步创建的Lambda ARN即可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<你的AWS区域>:<你的AWS账号ID>:function:<你的Lambda函数名>" } ] }
- 修改现有Ingress的annotations配置,保留原有配置,新增4条认证相关配置即可:
annotations: # 原有配置保持不变 kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' alb.ingress.kubernetes.io/certificate-arn: ... # 新增以下4行认证配置 alb.ingress.kubernetes.io/auth-type: lambda alb.ingress.kubernetes.io/auth-idp-lambda-arn: <你创建的Lambda函数ARN> alb.ingress.kubernetes.io/auth-on-unauthenticated-request: authenticate alb.ingress.kubernetes.io/auth-scope: '*'
重新apply Ingress配置后等待1~2分钟ALB规则更新,访问应用就会弹出Basic Auth校验窗口,输入你设置的账号密码即可正常访问。
方案优势
- 完全无需修改现有应用的Deployment、Service等业务资源,无额外长期运维成本
- 临时场景用完可直接删除新增的4条annotations和Lambda函数,快速回退无残留
- 满足低安全要求的基础访问校验需求,可完全避免无关人员直接访问应用
内容的提问来源于stack exchange,提问作者Garion S.
相关产品推荐
相关产品推荐

