2020-01-07 10:33:28 -08:00
|
|
|
apiVersion: kyverno.io/v1
|
|
|
|
kind: ClusterPolicy
|
|
|
|
metadata:
|
|
|
|
name: add-ns-access-controls
|
|
|
|
annotations:
|
|
|
|
policies.kyverno.io/category: Workload Isolation
|
|
|
|
policies.kyverno.io/description: Create roles and role bindings for a new namespace
|
|
|
|
spec:
|
2020-01-13 11:21:14 -08:00
|
|
|
background: false
|
2020-01-07 10:33:28 -08:00
|
|
|
rules:
|
2020-01-13 17:43:13 -08:00
|
|
|
- name: add-sa-annotation
|
|
|
|
match:
|
|
|
|
resources:
|
|
|
|
kinds:
|
|
|
|
- Namespace
|
|
|
|
mutate:
|
|
|
|
overlay:
|
|
|
|
metadata:
|
|
|
|
annotations:
|
|
|
|
nirmata.io/ns-creator: "{{serviceAccountName}}"
|
2020-01-07 10:33:28 -08:00
|
|
|
- name: generate-owner-role
|
|
|
|
match:
|
|
|
|
resources:
|
|
|
|
kinds:
|
|
|
|
- Namespace
|
2020-01-13 11:21:14 -08:00
|
|
|
preconditions:
|
|
|
|
- key: "{{request.userInfo.username}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
|
|
|
- key: "{{serviceAccountName}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
|
|
|
- key: "{{serviceAccountNamespace}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
2020-01-07 10:33:28 -08:00
|
|
|
generate:
|
|
|
|
kind: ClusterRole
|
2020-01-07 15:13:57 -08:00
|
|
|
name: "ns-owner-{{request.object.metadata.name}}-{{request.userInfo.username}}"
|
2020-01-07 10:33:28 -08:00
|
|
|
data:
|
2020-01-11 11:14:47 -08:00
|
|
|
metadata:
|
|
|
|
annotations:
|
|
|
|
nirmata.io/ns-creator: "{{serviceAccountName}}"
|
2020-01-07 10:33:28 -08:00
|
|
|
rules:
|
|
|
|
- apiGroups: [""]
|
|
|
|
resources: ["namespaces"]
|
2020-01-07 15:13:57 -08:00
|
|
|
verbs: ["delete"]
|
2020-01-07 10:33:28 -08:00
|
|
|
resourceNames:
|
|
|
|
- "{{request.object.metadata.name}}"
|
|
|
|
- name: generate-owner-role-binding
|
|
|
|
match:
|
|
|
|
resources:
|
|
|
|
kinds:
|
|
|
|
- Namespace
|
2020-01-13 11:21:14 -08:00
|
|
|
preconditions:
|
|
|
|
- key: "{{request.userInfo.username}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
|
|
|
- key: "{{serviceAccountName}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
|
|
|
- key: "{{serviceAccountNamespace}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
2020-01-07 10:33:28 -08:00
|
|
|
generate:
|
|
|
|
kind: ClusterRoleBinding
|
2020-01-07 15:13:57 -08:00
|
|
|
name: "ns-owner-{{request.object.metadata.name}}-{{request.userInfo.username}}-binding"
|
2020-01-07 10:33:28 -08:00
|
|
|
data:
|
2020-01-11 11:14:47 -08:00
|
|
|
metadata:
|
|
|
|
annotations:
|
|
|
|
nirmata.io/ns-creator: "{{serviceAccountName}}"
|
2020-01-07 10:33:28 -08:00
|
|
|
roleRef:
|
|
|
|
apiGroup: rbac.authorization.k8s.io
|
|
|
|
kind: ClusterRole
|
2020-01-07 15:13:57 -08:00
|
|
|
name: "ns-owner-{{request.object.metadata.name}}-{{request.userInfo.username}}"
|
2020-01-07 10:33:28 -08:00
|
|
|
subjects:
|
|
|
|
- kind: ServiceAccount
|
2020-01-07 15:13:57 -08:00
|
|
|
# pre-defined context value (removes the suffix system:serviceaccount:<namespace>:<name> from userName)
|
|
|
|
name: "{{serviceAccountName}}" # <name>
|
|
|
|
namespace: "{{serviceAccountNamespace}}" # <namespace>
|
2020-01-07 10:33:28 -08:00
|
|
|
- name: generate-admin-role-binding
|
|
|
|
match:
|
|
|
|
resources:
|
|
|
|
kinds:
|
|
|
|
- Namespace
|
2020-01-13 11:21:14 -08:00
|
|
|
preconditions:
|
|
|
|
- key: "{{request.userInfo.username}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
|
|
|
- key: "{{serviceAccountName}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
|
|
|
- key: "{{serviceAccountNamespace}}"
|
|
|
|
operator: NotEqual
|
|
|
|
value: ""
|
2020-01-07 10:33:28 -08:00
|
|
|
generate:
|
|
|
|
kind: RoleBinding
|
2020-01-07 15:13:57 -08:00
|
|
|
name: "ns-admin-{{request.object.metadata.name}}-{{request.userInfo.username}}-binding"
|
2020-01-07 10:33:28 -08:00
|
|
|
namespace: "{{request.object.metadata.name}}"
|
|
|
|
data:
|
2020-01-11 11:14:47 -08:00
|
|
|
metadata:
|
|
|
|
annotations:
|
|
|
|
nirmata.io/ns-creator: "{{serviceAccountName}}"
|
2020-01-07 10:33:28 -08:00
|
|
|
roleRef:
|
|
|
|
apiGroup: rbac.authorization.k8s.io
|
|
|
|
kind: ClusterRole
|
|
|
|
name: admin
|
|
|
|
subjects:
|
|
|
|
- kind: ServiceAccount
|
2020-01-07 15:13:57 -08:00
|
|
|
name: "{{serviceAccountName}}"
|
2020-01-11 11:14:47 -08:00
|
|
|
namespace: "{{serviceAccountNamespace}}"
|