centos k8s容器安全加固
导读:CentOS环境下Kubernetes容器安全加固指南 一、系统基础安全加固(CentOS节点层) 关闭不必要的服务:禁用FTP、邮件服务器等未使用的服务(systemctl disable <service-name>),减...
CentOS环境下Kubernetes容器安全加固指南
一、系统基础安全加固(CentOS节点层)
- 关闭不必要的服务:禁用FTP、邮件服务器等未使用的服务(
systemctl disable < service-name>),减少攻击面。 - 配置防火墙:使用
firewalld或iptables限制仅开放Kubernetes必要端口(如API Server的6443、kubelet的10250/10255),默认拒绝所有其他流量。 - 禁用SELinux:临时执行
setenforce 0,永久修改/etc/selinux/config中SELINUX=disabled(避免权限冲突)。 - 关闭Swap分区:执行
swapoff -a并注释/etc/fstab中的Swap条目(提升容器隔离性)。 - 同步系统时间:安装
chrony并配置NTP服务器(如server ntp.aliyun.com iburst),运行chronyc sources验证同步状态(确保日志、证书有效期等时间一致性)。 - 用户与权限管理:强制使用强密码(修改
/etc/login.defs设置PASS_MIN_LEN 12、PASS_REQUIRE_MIXED_CASE yes);锁定默认多余账户(如usermod -L adm、usermod -L lp);限制su命令(编辑/etc/pam.d/su添加auth required pam_wheel.so use_uid,仅允许wheel组用户切换root)。
二、Kubernetes集群安全配置
1. 认证与授权
- API Server TLS加密:为API Server、etcd、kubelet等关键组件生成CA证书、Server证书和Client证书(使用
openssl),将证书放入/etc/kubernetes/pki,修改/etc/kubernetes/manifests/kube-apiserver.yaml添加--tls-cert-file、--tls-private-key-file、--client-ca-file参数,重启kubelet使配置生效(确保组件间通信全程加密)。 - RBAC最小权限原则:遵循“最小权限”原则,创建命名空间(
kubectl create namespace dev-ns)、服务账户(kubectl create serviceaccount dev-sa -n dev-ns);定义角色(如限制仅能读取Pod的pod-reader角色:kubectl create role pod-reader --verb=get,list,watch --resource=pods -n dev-ns);通过角色绑定(kubectl create rolebinding dev-rb --role=pod-reader --serviceaccount=dev-ns:dev-sa -n dev-ns)将权限分配给用户/组,避免使用cluster-admin角色给开发人员。 - 多因素认证(MFA):集成OIDC(如Keycloak)、LDAP等身份提供商,或使用
kube-bench强制API访问需MFA验证(提升身份认证安全性)。
2. 网络隔离
- NetworkPolicy配置:使用Calico、Cilium等支持NetworkPolicy的CNI插件,配置
deny-all默认策略(拒绝所有Pod间及出入站流量);仅允许必要通信(如允许带app: frontend标签的Pod访问带app: backend标签的Pod的3306端口),示例:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: frontend-database-policy namespace: dev-ns spec: podSelector: matchLabels: app: database policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 3306 - 节点隔离:通过
firewalld/iptables限制对API Server端口(默认6443)的访问(仅允许可信IP段);使用污点(taints)和容忍度(tolerations)控制工作负载调度(如将监控节点标记为NoSchedule,仅允许监控组件调度)。
3. 容器运行时安全
- SecurityContext配置:在Pod或Container级别配置,强制非root运行(
runAsNonRoot: true)、设置明确用户ID(runAsUser: 1000)、组ID(runAsGroup: 3000);启用只读根文件系统(readOnlyRootFilesystem: true);禁止权限提升(allowPrivilegeEscalation: false);限制系统调用(seccompProfile: RuntimeDefault),示例:apiVersion: v1 kind: Pod metadata: name: secure-pod namespace: dev-ns spec: securityContext: runAsUser: 1000 runAsGroup: 3000 fsGroup: 2000 containers: - name: nginx image: nginx:1.25 securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true seccompProfile: RuntimeDefault - Pod安全标准(PSS):使用Kubernetes 1.25+内置的
Baseline(基线)或Restricted(严格)策略(替代已废弃的PSP),通过PodSecurityadmission controller启用(如kubectl label ns dev-ns pod-security.kubernetes.io/enforce=restricted),限制容器特权模式、Linux capabilities、挂载卷类型(禁止hostPath)及宿主机命名空间共享(hostPID: false)。
三、镜像安全防护
- 可信镜像与最小化基础镜像:使用私有镜像仓库(如Harbor)托管镜像,避免从公共仓库(如Docker Hub)拉取未验证的镜像;优先选择Alpine、distroless等最小化基础镜像(减少不必要的组件和漏洞)。
- 镜像扫描与签名:部署前使用Trivy、Clair等工具扫描镜像漏洞(如CVE),阻断高风险镜像入集群;通过Cosign等工具对镜像进行签名,启用
ImagePolicyWebhook验证签名(确保镜像完整性和来源可信)。
四、持续监控与审计
- 审计日志分析:启用Kubernetes审计日志(配置
audit-policy.yaml),记录所有API请求(包括用户身份、操作时间、资源类型),使用ELK、Loki等工具分析日志(关联用户行为与异常操作)。 - 实时入侵检测:部署Falco监控异常容器行为(如容器内访问
/etc/shadow、挂载宿主机敏感路径),配置告警规则(如Sensitive file accessed by container),及时响应安全事件。
五、数据安全与加密
- etcd加密:启用etcd静态加密(修改
/etc/kubernetes/manifests/etcd.yaml,添加--encryption-provider-config参数指向加密配置文件),保护Secret数据的存储安全(如数据库密码、API密钥)。 - Secret管理方案:使用Vault CSI驱动实现动态密钥注入(避免Secret硬编码在Pod或镜像中),通过Vault的访问控制策略限制Secret的访问权限(如仅允许特定命名空间的Pod访问)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s容器安全加固
本文地址: https://pptw.com/jishu/743855.html
