怎么理解GKE Role-Based Access Control (RBAC) 和 Pod Security Policies (PSP)
理解 Google Kubernetes Engine (GKE) 中的角色基于访问控制(RBAC)和 Pod 安全策略(PSP)对于确保集群安全性至关重要。以下是对这两个概念的详细解释,以及如何在实际场景中应用它们:
Role-Based Access Control (RBAC)
RBAC 是一种机制,用于管理用户和服务帐户对 Kubernetes 资源的访问权限。通过定义角色和绑定角色到用户或组,RBAC 提供了精细的权限控制。
关键概念
-
Role 和 ClusterRole:
-
Role:定义在命名空间级别的权限,只适用于该命名空间中的资源。
-
ClusterRole:定义在集群级别的权限,适用于所有命名空间中的资源。
-
-
RoleBinding 和 ClusterRoleBinding:
-
RoleBinding:将 Role 绑定到特定命名空间中的用户或组。
-
ClusterRoleBinding:将 ClusterRole 绑定到集群范围内的用户或组。
-
示例
假设您希望授予用户 alice
在命名空间 development
中管理 Pods 的权限:
-
创建一个 Role:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: development
name: pod-manager
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "create", "delete"]
-
创建一个 RoleBinding:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bind-alice-pod-manager
namespace: development
subjects:
- kind: User
name: alice
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-manager
apiGroup: rbac.authorization.k8s.io
通过这两个 YAML 文件,用户 alice
在 development
命名空间中将获得管理 Pods 的权限。
Pod Security Policies (PSP)
PSP 是 Kubernetes 中的一种安全策略,用于控制 Pods 的安全配置。PSP 可以限制 Pods 的配置选项,如是否允许特权容器、使用特定的文件系统类型等。
关键概念
-
Pod Security Policy:
-
定义一组策略,控制 Pods 的创建和更新。
-
可以限制 Pods 的特权级别、主机网络访问、特定卷类型等。
-
-
PSP 绑定:
-
将特定用户、组或服务帐户绑定到 PSP,以便他们创建的 Pods 必须符合这些策略。
-
示例
假设您希望确保所有 Pods 都不允许特权容器:
-
创建一个 PSP:
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
- '*'
-
创建一个 ClusterRole 和 ClusterRoleBinding,将 PSP 应用于所有用户:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: use-psp
rules:
- apiGroups: ["policy"]
resources: ["podsecuritypolicies"]
verbs: ["use"]
resourceNames: ["restricted"]
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind-psp
subjects:
- kind: Group
name: system:authenticated
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: use-psp
apiGroup: rbac.authorization.k8s.io
通过这两个 YAML 文件,所有经过身份验证的用户创建的 Pods 都必须符合 restricted
PSP 的限制。
总结
-
RBAC 通过角色和角色绑定控制用户和服务帐户对 Kubernetes 资源的访问权限。
-
PSP 通过策略控制 Pods 的安全配置,确保 Pods 符合安全要求。
理解这两个概念并有效配置它们,可以帮助您增强 GKE 集群的安全性和管理能力。