首页 > 解决方案 > 为什么即使我没有访问权限,我的 PodSecurityPolicy 也会被应用?

问题描述

我有两个 PodSecurityPolicy:

我对他们分配给 pod 有疑问。

第一个策略绑定:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp:privileged
rules:
- apiGroups:
  - extensions
  resources:
  - podsecuritypolicies
  resourceNames:
  - 000-privileged
  verbs:
  - use
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp:privileged-kube-system
  namespace: kube-system
subjects:
- kind: Group
  name: system:serviceaccounts
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: psp:privileged
  apiGroup: rbac.authorization.k8s.io

第二个策略绑定:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp:restricted
rules:
- apiGroups:
  - extensions
  resources:
  - podsecuritypolicies
  resourceNames:
  - 100-restricted
  verbs:
  - use
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp:restricted
subjects:
- kind: Group
  name: system:authenticated
  apiGroup: rbac.authorization.k8s.io
- kind: Group
  name: system:serviceaccounts
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: psp:restricted
  apiGroup: rbac.authorization.k8s.io

在 kube 系统中一切正常。

但是,在其他命名空间中,它不能按预期工作:

我的 kubectl 配置了来自 OpenID Connect (OIDC) 的外部身份验证令牌。

我验证了访问权限,一切似乎都正常:

kubectl auth can-i use psp/100-restricted
yes
kubectl auth can-i use psp/000-privileged
no

有什么线索吗?

标签: kuberneteskubernetes-podkubernetes-psp

解决方案


问题是我的用户可以访问其Role中“扩展”apiGroup 的所有资源 (*) 的所有动词 (*) 。

文档有点不清楚(https://github.com/kubernetes/examples/tree/master/staging/podsecuritypolicy/rbac):

use 动词是一种特殊动词,它授予使用策略的访问权限,同时不允许任何其他访问。请注意,在命名空间内具有超级用户权限的用户(访问 * 资源上的 * 动词)将被允许使用该命名空间内的任何 PodSecurityPolicy。

我对提到“在该名称空间内”感到困惑。由于 PodSecurityGroup 不是“命名空间”,我假设如果没有命名空间中的 ClusterRole/RoleBinding 提供显式访问,它们就无法使用。好像我错了...

我修改了我的角色以指定以下内容:

rules:
- apiGroups: ["", "apps", "autoscaling", "batch"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups: ["extensions"]
  resources: ["*"]
  # Avoid using * here to prevent use of 'use' verb for podsecuritypolicies resource
  verbs: ["create", "get", "watch", "list", "patch", "delete", "deletecollection", "update"]

现在它选择了正确的 PSP。一件有趣的事情,它还阻止用户修改(创建/删除/更新/等)podsecuritypolicies。

毕竟'use'动词似乎很特别......


推荐阅读