diff --git a/doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml b/doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fdaada38c14628fdb7394b6ebfc512ba7af3ebd5
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-viewer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakclient-viewer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-viewer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakclients
+      - ozgkeycloakclients/status
+      - ozgkeycloakclients/finalizers
+    verbs:
+      - get
+      - list
+      - watch
diff --git a/doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml b/doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f8bf6b17dc77922ecbe0ae10284e72ed0ac5c34e
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml
@@ -0,0 +1,57 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-writer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakclient-writer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-writer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakclients/status
+      - ozgkeycloakclients/finalizers
+      - ozgkeycloakclients
+    verbs:
+      - get
+      - list
+      - create
+      - delete
+      - patch
+      - update
+      - watch
diff --git a/doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml b/doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b783031f0f6c8df069184c97946b75ec880efcaa
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-viewer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakgroup-viewer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-viewer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakgroups
+      - ozgkeycloakgroups/status
+      - ozgkeycloakgroups/finalizers
+    verbs:
+      - get
+      - list
+      - watch
diff --git a/doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml b/doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4ec04886b445184a964c066fe106d6749441caf0
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml
@@ -0,0 +1,57 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-writer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakgroup-writer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-writer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakgroups/status
+      - ozgkeycloakgroups/finalizers
+      - ozgkeycloakgroups
+    verbs:
+      - get
+      - list
+      - create
+      - delete
+      - patch
+      - update
+      - watch
diff --git a/doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml b/doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..52393bef17ac4668f7433d7ba64b2b75f4b5490e
--- /dev/null
+++ b/doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml
@@ -0,0 +1,44 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: ozgkeycloakclients.operator.ozgcloud.de
+spec:
+  group: operator.ozgcloud.de
+  names:
+    kind: OzgKeycloakClient
+    listKind: OzgKeycloakClientList
+    plural: ozgkeycloakclients
+    singular: ozgkeycloakclient
+  scope: Namespaced
+  versions:
+  - name: v1
+    schema:
+      openAPIV3Schema:
+        description: OzgKeycloakClient is the Schema for the keycloaks API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: Spec defines the desired state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+          status:
+            description: Status defines the observed state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
diff --git a/doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml b/doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ee88ea0051af823a7b7e9913f6c6d8615bb84500
--- /dev/null
+++ b/doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml
@@ -0,0 +1,44 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: ozgkeycloakgroups.operator.ozgcloud.de
+spec:
+  group: operator.ozgcloud.de
+  names:
+    kind: OzgKeycloakGroup
+    listKind: OzgKeycloakGroupList
+    plural: ozgkeycloakgroups
+    singular: ozgkeycloakgroup
+  scope: Namespaced
+  versions:
+  - name: v1
+    schema:
+      openAPIV3Schema:
+        description: OzgKeycloakGroup is the Schema for the keycloaks API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: Spec defines the desired state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+          status:
+            description: Status defines the observed state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
index a576ebaaf7af152b87607dd924965f3e44a419e2..dc6f67408e183f9c3213ef32a753217aea02b132 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
@@ -29,7 +29,7 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
 
 			String realmName = resource.getMetadata().getNamespace();
 
-			log.info("Create KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")");
+			log.info("Reconcile KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")");
 
 			service.createRealm(resource.getSpec(), realmName);
 
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java b/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java
index 84aff390af04b1c6774ae24c0f996f4a7d7ca330..2cbc39f9dd7ffda12205007b3c93c099f54920e1 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java
@@ -87,10 +87,10 @@ class OzgKeycloakUserSpec {
 	@AllArgsConstructor
 	static class KeycloakUserSpecClientRole {
 
-		@JsonProperty("client_name")
+		@JsonProperty("name")
 		private String clientName;
 
-		@JsonProperty("role_name")
+		@JsonProperty("role")
 		private String roleName;
 	}
 }