简介

Kubernetes安全始于控制谁能做什么以及Pod可以运行什么。在本教程中,我们将实现RBAC(基于角色的访问控制)和Pod安全标准来保护Kubernetes集群。

前提条件

  • 运行中的Kubernetes集群(minikube、kind或托管集群)
  • 已安装并配置kubectl
  • Kubernetes基础知识(Pod、Namespace、Deployment)
  • 1. 理解RBAC组件

    Kubernetes RBAC有四个关键对象:

    | 对象 | 作用域 | 用途 |

    |------|--------|------|

    | Role | Namespace | 定义命名空间内的权限 |

    | ClusterRole | 集群 | 定义集群范围的权限 |

    | RoleBinding | Namespace | 将Role授予用户/组 |

    | ClusterRoleBinding | 集群 | 在集群范围授予ClusterRole |

    2. 创建实验用Namespace

    # 创建专用命名空间
    

    kubectl create namespace security-lab

    # 验证

    kubectl get namespaces | grep security-lab

    3. 创建RBAC角色

    只读角色

    创建仅允许查看资源的角色:

    # read-only-role.yaml
    

    apiVersion: rbac.authorization.k8s.io/v1

    kind: Role

    metadata:

    namespace: security-lab

    name: pod-reader

    rules:

  • apiGroups: [""]
  • resources: ["pods", "pods/log"]

    verbs: ["get", "list", "watch"]

  • apiGroups: [""]
  • resources: ["services", "configmaps"]

    verbs: ["get", "list"]

    具有有限写权限的开发者角色

    # developer-role.yaml
    

    apiVersion: rbac.authorization.k8s.io/v1

    kind: Role

    metadata:

    namespace: security-lab

    name: developer

    rules:

  • apiGroups: [""]
  • resources: ["pods", "services", "configmaps", "secrets"]

    verbs: ["get", "list", "watch", "create", "update", "patch"]

  • apiGroups: ["apps"]
  • resources: ["deployments", "replicasets"]

    verbs: ["get", "list", "watch", "create", "update", "patch"]

  • apiGroups: [""]
  • resources: ["pods/exec", "pods/portforward"]

    verbs: ["create"]

  • apiGroups: [""]
  • resources: ["persistentvolumeclaims"]

    verbs: ["get", "list"]

    # 应用两个角色
    

    kubectl apply -f read-only-role.yaml

    kubectl apply -f developer-role.yaml

    4. 创建ServiceAccount和绑定

    # service-accounts.yaml
    

    apiVersion: v1

    kind: ServiceAccount

    metadata:

    name: viewer-sa

    namespace: security-lab

    ---

    apiVersion: v1

    kind: ServiceAccount

    metadata:

    name: developer-sa

    namespace: security-lab

    # role-bindings.yaml
    

    apiVersion: rbac.authorization.k8s.io/v1

    kind: RoleBinding

    metadata:

    name: viewer-binding

    namespace: security-lab

    subjects:

  • kind: ServiceAccount
  • name: viewer-sa

    namespace: security-lab

    roleRef:

    kind: Role

    name: pod-reader

    apiGroup: rbac.authorization.k8s.io

    ---

    apiVersion: rbac.authorization.k8s.io/v1

    kind: RoleBinding

    metadata:

    name: developer-binding

    namespace: security-lab

    subjects:

  • kind: ServiceAccount
  • name: developer-sa

    namespace: security-lab

    roleRef:

    kind: Role

    name: developer

    apiGroup: rbac.authorization.k8s.io

    5. 测试RBAC权限

    使用kubectl auth can-i验证权限:

    # 测试viewer权限
    

    kubectl auth can-i get pods \

    --namespace security-lab \

    --as system:serviceaccount:security-lab:viewer-sa

    # 输出: yes

    kubectl auth can-i create pods \

    --namespace security-lab \

    --as system:serviceaccount:security-lab:viewer-sa

    # 输出: no

    6. Pod安全标准(PSS)

    Kubernetes 1.25+用Pod安全标准替代了PodSecurityPolicy。

    三个安全级别

    | 级别 | 描述 |

    |------|------|

    | Privileged | 无限制(默认) |

    | Baseline | 防止已知的权限提升 |

    | Restricted | 严格限制,安全最佳实践 |

    7. 应用Pod安全标准

    # 对命名空间应用受限安全标准
    

    kubectl label namespace security-lab \

    pod-security.kubernetes.io/enforce=restricted \

    pod-security.kubernetes.io/audit=restricted \

    pod-security.kubernetes.io/warn=restricted

    8. 测试安全执行

    特权Pod会被拒绝,符合restricted标准的Pod才能运行。关键配置包括:runAsNonRoot: trueallowPrivilegeEscalation: falsereadOnlyRootFilesystem: truecapabilities.drop: ["ALL"]

    9. 生产级安全Deployment

    完整的安全Deployment模板包含:ServiceAccount配置、安全上下文、资源限制和NetworkPolicy。实现RBAC(API层面)、Pod安全(运行时层面)和NetworkPolicy(网络层面)的纵深防御。

    总结

    本教程涵盖了:

    1. 创建最小权限的RBAC角色

    2. 将角色绑定到ServiceAccount

    3. 使用脚本和can-i进行权限审计

    4. 在Namespace级别实施Pod安全标准

    5. 编写符合restricted策略的安全Pod规范

    6. 添加NetworkPolicy控制流量

    7. 使用审计脚本自动化安全检查

    参考资料

  • Kubernetes RBAC文档
  • Pod安全标准
  • NetworkPolicy指南