diff --git a/k8s/rbac/ci-tekton-trigger-rbac.yaml b/k8s/rbac/ci-tekton-trigger-rbac.yaml new file mode 100644 index 0000000..524eff0 --- /dev/null +++ b/k8s/rbac/ci-tekton-trigger-rbac.yaml @@ -0,0 +1,136 @@ +--- +# ClusterRole for CI/Tekton triggers to deploy and manage resources across cluster +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: ci-tekton-trigger +rules: +# Tekton resources +- apiGroups: ["tekton.dev"] + resources: ["pipelineruns", "taskruns", "pipelines", "tasks"] + verbs: ["create", "get", "list", "watch", "patch", "update", "delete"] + +# Deployments and pods +- apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "daemonsets"] + verbs: ["get", "list", "watch", "create", "patch", "update"] +- apiGroups: [""] + resources: ["pods", "pods/log", "pods/status"] + verbs: ["get", "list", "watch"] + +# Services and networking +- apiGroups: [""] + resources: ["services", "endpoints"] + verbs: ["get", "list", "watch"] + +# ConfigMaps and Secrets +- apiGroups: [""] + resources: ["configmaps", "secrets"] + verbs: ["get", "list", "watch"] + +# Events +- apiGroups: [""] + resources: ["events"] + verbs: ["create", "patch"] + +# Namespaces +- apiGroups: [""] + resources: ["namespaces"] + verbs: ["get", "list", "watch"] + +# Persistent volumes +- apiGroups: [""] + resources: ["persistentvolumeclaims", "persistentvolumes"] + verbs: ["get", "list", "watch"] + +--- +# ClusterRoleBinding for ci-tekton-trigger service account +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: ci-tekton-trigger +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ci-tekton-trigger +subjects: +- kind: ServiceAccount + name: ci-tekton-trigger + namespace: api + +--- +# Additional ClusterRole for poimen namespace operations +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: ci-tekton-trigger-poimen + namespace: poimen +rules: +# Allow full access in poimen namespace for CI +- apiGroups: ["*"] + resources: ["*"] + verbs: ["*"] + +--- +# RoleBinding in poimen namespace +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ci-tekton-trigger-poimen + namespace: poimen +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ci-tekton-trigger-poimen +subjects: +- kind: ServiceAccount + name: ci-tekton-trigger + namespace: api + +--- +# RoleBinding in tekton-pipelines namespace +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ci-tekton-trigger + namespace: tekton-pipelines +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ci-tekton-trigger +subjects: +- kind: ServiceAccount + name: ci-tekton-trigger + namespace: api + +--- +# RoleBinding in llm-serving namespace (for LLM checks) +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ci-tekton-trigger + namespace: llm-serving +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ci-tekton-trigger +subjects: +- kind: ServiceAccount + name: ci-tekton-trigger + namespace: api + +--- +# RoleBinding in kube-system namespace (for cluster info) +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ci-tekton-trigger + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ci-tekton-trigger +subjects: +- kind: ServiceAccount + name: ci-tekton-trigger + namespace: api