我有两个PodSecurityPolicy:
我对他们分配到吊舱有疑问。
第一个策略绑定:
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系统中一切正常。
但是,在其他命名空间中,它无法按预期工作:
如果我创建一个Deployment(kubectl apply -f deployment.yml),则其pod会被标记为psp 100受限。
如果我创建一个Pod(kubectl apply -f pod.yml),它将被标记为psp 000-privileged。 我真的不明白为什么它没有100个限制。
我的kubectl配置有来自OpenID Connect(OIDC)的外部身份验证令牌。
我验证了访问权限,一切似乎都很好:
kubectl auth can-i use psp/100-restricted
yes
kubectl auth can-i use psp/000-privileged
no
有任何线索吗?
答案 0 :(得分:0)
问题是我的用户可以在其角色中访问“扩展” 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。一件有趣的事,它还阻止用户修改(创建/删除/更新/等)podsecuritypolicy。
看起来“ use”动词毕竟很特别.....