RBAC(基于角色的访问控制)
RBAC是Kubernetes中用于精细化管理用户和服务账户权限的核心机制。通过定义Role(命名空间内权限)或ClusterRole(集群范围权限),再通过RoleBinding或ClusterRoleBinding将权限绑定到用户、组或服务账户。RBAC权限模型遵循最小特权原则,避免过度授权。
角色定义示例:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
绑定示例:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: ServiceAccount
name: monitoring-sa
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
Service Account(服务账户)
服务账户是为Pod中运行的进程设计的特殊身份标识,默认挂载到/var/run/secrets/kubernetes.io/serviceaccount。每个命名空间自动创建default服务账户,可通过自动化令牌卷投影(TokenRequest API)生成短期有效的JWT令牌。
自定义服务账户配置:
yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: custom-sa
automountServiceAccountToken: false # 禁用自动挂载
Pod关联服务账户:
yaml
apiVersion: v1
kind: Pod
metadata:
name: secured-pod
spec:
serviceAccountName: custom-sa
containers:
- name: main
image: nginx
Security Context(安全上下文)
安全上下文通过内核级安全机制限制容器行为,包括Linux Capabilities、SELinux/AppArmor、Seccomp、只读根文件系统等。可在Pod或Container级别设置,优先级为容器级配置覆盖Pod级配置。
Pod安全上下文示例:
yaml
apiVersion: v1
kind: Pod
metadata:
name: security-demo
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
seccompProfile:
type: RuntimeDefault
containers:
- name: secured
image: alpine
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
集成最佳实践
启用PSP(PodSecurityPolicy)替代方案PodSecurity Admission,通过命名空间标签定义安全标准:
yaml
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/audit: restricted
定期审计服务账户权限:
bash
kubectl get rolebindings,clusterrolebindings --all-namespaces -o custom-columns='KIND:kind,NAMESPACE:metadata.namespace,NAME:metadata.name,SERVICE_ACCOUNTS:subjects[?(@.kind=="ServiceAccount")].name'
使用kube-bench等工具检查集群安全配置是否符合CIS基准,结合NetworkPolicy实现网络层零信任隔离。关键生产环境建议启用审计日志并集成OPA/Gatekeeper进行策略即代码管理。