我想保护在Kubernetes(EKS)上运行的Web应用程序的安全。连接到群集的所有节点都在专用子网上运行。
我有一个前端服务和十二个后端服务。
前端服务是运行在端口80上运行的容器的Pod。它被配置为附加到ELB,该ELB仅接受带有https证书的443通信。
apiVersion: v1
kind: Service
metadata:
name: service_name
labels:
app: service_name
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: xxxxxxxxxx
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
ports:
- port: 443 # Exposed port
targetPort: 80 # Container port
selector:
app: service_name
type: LoadBalancer
后端服务是运行容器的Pod,这些容器也运行在端口80上。它们均未配置为可从群集外部访问。后端服务通过使用此模板配置它们时指向http://service_name(不是https)相互通信:
apiVersion: v1
kind: Service
metadata:
name: service_name
spec:
ports:
- port: 80 # Exposed port
targetPort: 80 # Container port
selector:
app: service_name
一切正常,但足够吗?
前端/后端容器是否也应使用带通配符https证书的certificate / 443?应该在容器内部还是在服务的配置上完成此配置?
答案 0 :(得分:1)
我已经做了很多调查,这就是我要做的。
我的所有EKS EC2实例都在专用子网上运行,这意味着它们不能从外部访问。是的,默认情况下,Kubernetes不会对Pod之间的流量进行加密,这意味着可以访问我的VPC的黑客(可能是流氓AWS工程师,可以物理访问AWS数据中心的人,可以访问我的AWS账户的人。 。)将能够嗅探网络流量。同时,我觉得在这种情况下,黑客将可以访问更多内容!如果他可以访问我的AWS账户,则可以自己下载https证书。如果他设法进入一个(高安全性)AWS数据中心并找到了我的服务器,最好将他必须承担的风险与您的数据价值进行比较。如果您的数据包括信用卡/付款或敏感的个人数据(出生日期,健康详细信息...),则必须进行SSL加密。 无论如何,为了确保广告连播的流量安全,有2种选择。
对于负载均衡器,我决定向集群(Ngnix,Traefik ...)添加一个入口,并使用https对其进行设置。当ELB位于公共子网中时,这一点至关重要。