如何通过特定IP(VPN连接)限制持有Kubeconfig的用户访问Amazon EKS集群
如何通过特定IP(VPN连接)限制持有Kubeconfig的用户访问Amazon EKS集群
嘿,这个问题提得太关键了——EKS集群的访问安全可容不得半点马虎!要实现只允许特定IP(比如你的VPN出口IP)的用户拿着指定kubeconfig访问集群,咱们可以从网络层入口控制和身份+IP双重验证两个层面入手,双管齐下才能把权限锁得死死的。
一、先从网络层面掐断非授权访问(最直接的第一道防线)
EKS的控制平面是通过安全组来管控网络访问的,咱先把这道关把好:
- 登录AWS控制台,找到你的EKS集群详情页,在「配置」→「网络」里找到控制平面安全组(就是那个
eks-cluster-sg-xxx开头的安全组)。 - 编辑这个安全组的入站规则:
- 找到针对443端口(Kubernetes API Server的端口)的规则,把来源IP改成你的VPN出口IP/IP段(比如
192.168.1.0/24)。 - 要是原来有允许
0.0.0.0/0全开放的规则,赶紧删掉!只留你信任的VPN IP段就行。
- 找到针对443端口(Kubernetes API Server的端口)的规则,把来源IP改成你的VPN出口IP/IP段(比如
- 这么一来,哪怕有人偷到了kubeconfig,不在这个IP段里的话,连EKS的API Server都连不上,彻底没戏。
二、给IAM身份加IP限制(身份+IP双重保险)
你的「lens user」应该是用IAM身份来验证EKS访问的吧?那咱可以在IAM权限策略里再加一层IP限制,确保只有从指定IP发起的请求才被允许:
- 找到给「lens user」授权的IAM策略(就是那些包含
eks:DescribeCluster、eks:AccessKubernetesApi权限的策略)。 - 编辑策略,在Statement里添加一个
Condition块,限制请求的来源IP:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:AccessKubernetesApi" ], "Resource": "arn:aws:eks:你的区域ID:你的账号ID:cluster/你的集群名称", "Condition": { "IpAddress": { "aws:SourceIp": ["192.168.1.0/24"] } } } ] } - 保存策略后,就算「lens user」的kubeconfig被泄露,只要不在指定IP段里,IAM会直接拒绝身份验证请求,根本进不了集群。
三、进阶玩法:Kubernetes RBAC+准入控制器实现细粒度IP限制
如果需要更细的控制(比如某个Kubernetes角色只能从特定IP操作Pod),可以用Open Policy Agent (OPA) 来做准入控制,编写规则检查客户端IP是否在允许的范围内。不过这个玩法相对复杂,一般前两种方法已经能满足大部分场景的安全需求了。
总结一下:优先用安全组做网络层面的拦截,再配合IAM策略做身份+IP的双重验证,这俩组合起来就足够把集群访问权限锁得严严实实的了!
备注:内容来源于stack exchange,提问作者vivek
相关产品推荐
相关产品推荐

