diff --git a/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/EventFactory.java b/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/EventFactory.java
index 8246301..42912ab 100644
--- a/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/EventFactory.java
+++ b/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/EventFactory.java
@@ -16,6 +16,8 @@
  */
 package org.apache.nifi.registry.event;
 
+import org.apache.nifi.registry.authorization.User;
+import org.apache.nifi.registry.authorization.UserGroup;
 import org.apache.nifi.registry.bucket.Bucket;
 import org.apache.nifi.registry.extension.bundle.Bundle;
 import org.apache.nifi.registry.extension.bundle.BundleVersion;
@@ -133,4 +135,52 @@
                 .addField(EventFieldName.USER, NiFiUserUtils.getNiFiUserIdentity())
                 .build();
     }
+
+    public static Event userCreated(final User user) {
+        return new StandardEvent.Builder()
+                .eventType(EventType.CREATE_USER)
+                .addField(EventFieldName.USER_ID, user.getIdentifier())
+                .addField(EventFieldName.USER_IDENTITY, user.getIdentity())
+                .build();
+    }
+
+    public static Event userUpdated(final User user) {
+        return new StandardEvent.Builder()
+                .eventType(EventType.UPDATE_USER)
+                .addField(EventFieldName.USER_ID, user.getIdentifier())
+                .addField(EventFieldName.USER_IDENTITY, user.getIdentity())
+                .build();
+    }
+
+    public static Event userDeleted(final User user) {
+        return new StandardEvent.Builder()
+                .eventType(EventType.DELETE_USER)
+                .addField(EventFieldName.USER_ID, user.getIdentifier())
+                .addField(EventFieldName.USER_IDENTITY, user.getIdentity())
+                .build();
+    }
+
+    public static Event userGroupCreated(final UserGroup userGroup) {
+        return new StandardEvent.Builder()
+                .eventType(EventType.CREATE_USER_GROUP)
+                .addField(EventFieldName.USER_GROUP_ID, userGroup.getIdentifier())
+                .addField(EventFieldName.USER_GROUP_IDENTITY, userGroup.getIdentity())
+                .build();
+    }
+
+    public static Event userGroupUpdated(final UserGroup userGroup) {
+        return new StandardEvent.Builder()
+                .eventType(EventType.UPDATE_USER_GROUP)
+                .addField(EventFieldName.USER_GROUP_ID, userGroup.getIdentifier())
+                .addField(EventFieldName.USER_GROUP_IDENTITY, userGroup.getIdentity())
+                .build();
+    }
+
+    public static Event userGroupDeleted(final UserGroup userGroup) {
+        return new StandardEvent.Builder()
+                .eventType(EventType.DELETE_USER_GROUP)
+                .addField(EventFieldName.USER_GROUP_ID, userGroup.getIdentifier())
+                .addField(EventFieldName.USER_GROUP_IDENTITY, userGroup.getIdentity())
+                .build();
+    }
 }
diff --git a/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEvent.java b/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEvent.java
index 4ad459d..26ca93c 100644
--- a/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEvent.java
+++ b/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEvent.java
@@ -26,6 +26,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Standard implementation of Event.
@@ -121,4 +122,26 @@
             return new StandardEvent(this);
         }
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        StandardEvent that = (StandardEvent) o;
+        return eventType == that.eventType && Objects.equals(eventFields, that.eventFields);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(eventType, eventFields);
+    }
+
+    @Override
+    public String toString() {
+        return "StandardEvent{eventType=" + eventType + ", eventFields=" + eventFields + '}';
+    }
 }
diff --git a/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEventField.java b/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEventField.java
index 21266bb..978d6fe 100644
--- a/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEventField.java
+++ b/nifi-registry-core/nifi-registry-framework/src/main/java/org/apache/nifi/registry/event/StandardEventField.java
@@ -20,6 +20,8 @@
 import org.apache.nifi.registry.hook.EventField;
 import org.apache.nifi.registry.hook.EventFieldName;
 
+import java.util.Objects;
+
 /**
  * Standard implementation of EventField.
  */
@@ -46,4 +48,25 @@
         return value;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        StandardEventField that = (StandardEventField) o;
+        return name == that.name && Objects.equals(value, that.value);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name, value);
+    }
+
+    @Override
+    public String toString() {
+        return "StandardEventField{name=" + name + ", value='" + value + '\'' + '}';
+    }
 }
diff --git a/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventFieldName.java b/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventFieldName.java
index 3f2fa6e..3e35058 100644
--- a/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventFieldName.java
+++ b/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventFieldName.java
@@ -26,6 +26,9 @@
     EXTENSION_BUNDLE_ID,
     VERSION,
     USER,
-    COMMENT;
-
+    USER_ID,
+    USER_IDENTITY,
+    USER_GROUP_ID,
+    USER_GROUP_IDENTITY,
+    COMMENT
 }
diff --git a/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventType.java b/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventType.java
index 0af35dc..3568611 100644
--- a/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventType.java
+++ b/nifi-registry-core/nifi-registry-provider-api/src/main/java/org/apache/nifi/registry/hook/EventType.java
@@ -77,6 +77,30 @@
             EventFieldName.EXTENSION_BUNDLE_ID,
             EventFieldName.VERSION,
             EventFieldName.USER
+    ),
+    CREATE_USER(
+            EventFieldName.USER_ID,
+            EventFieldName.USER_IDENTITY
+    ),
+    UPDATE_USER(
+            EventFieldName.USER_ID,
+            EventFieldName.USER_IDENTITY
+    ),
+    DELETE_USER(
+            EventFieldName.USER_ID,
+            EventFieldName.USER_IDENTITY
+    ),
+    CREATE_USER_GROUP(
+            EventFieldName.USER_GROUP_ID,
+            EventFieldName.USER_GROUP_IDENTITY
+    ),
+    UPDATE_USER_GROUP(
+            EventFieldName.USER_GROUP_ID,
+            EventFieldName.USER_GROUP_IDENTITY
+    ),
+    DELETE_USER_GROUP(
+            EventFieldName.USER_GROUP_ID,
+            EventFieldName.USER_GROUP_IDENTITY
     )
     ;
 
diff --git a/nifi-registry-core/nifi-registry-web-api/src/main/java/org/apache/nifi/registry/web/api/TenantResource.java b/nifi-registry-core/nifi-registry-web-api/src/main/java/org/apache/nifi/registry/web/api/TenantResource.java
index 7215ccb..11ed1e1 100644
--- a/nifi-registry-core/nifi-registry-web-api/src/main/java/org/apache/nifi/registry/web/api/TenantResource.java
+++ b/nifi-registry-core/nifi-registry-web-api/src/main/java/org/apache/nifi/registry/web/api/TenantResource.java
@@ -27,6 +27,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.nifi.registry.authorization.User;
 import org.apache.nifi.registry.authorization.UserGroup;
+import org.apache.nifi.registry.event.EventFactory;
 import org.apache.nifi.registry.event.EventService;
 import org.apache.nifi.registry.exception.ResourceNotFoundException;
 import org.apache.nifi.registry.security.authorization.Authorizer;
@@ -127,6 +128,7 @@
         authorizeAccess(RequestAction.WRITE);
 
         User createdUser = authorizationService.createUser(requestUser);
+        publish(EventFactory.userCreated(createdUser));
 
         String locationUri = generateUserUri(createdUser);
         return generateCreatedResponse(URI.create(locationUri), createdUser).build();
@@ -264,6 +266,7 @@
 
             throw new ResourceNotFoundException("The specified user ID does not exist in this registry.");
         }
+        publish(EventFactory.userUpdated(updatedUser));
 
         return generateOkResponse(updatedUser).build();
     }
@@ -311,6 +314,8 @@
 
             throw new ResourceNotFoundException("The specified user ID does not exist in this registry.");
         }
+        publish(EventFactory.userDeleted(user));
+
         return generateOkResponse(user).build();
     }
 
@@ -364,6 +369,7 @@
         }
 
         UserGroup createdGroup = authorizationService.createUserGroup(requestUserGroup);
+        publish(EventFactory.userGroupCreated(createdGroup));
 
         String locationUri = generateUserGroupUri(createdGroup);
         return generateCreatedResponse(URI.create(locationUri), createdGroup).build();
@@ -500,6 +506,7 @@
 
             throw new ResourceNotFoundException("The specified user group ID does not exist in this registry.");
         }
+        publish(EventFactory.userGroupUpdated(updatedUserGroup));
 
         return generateOkResponse(updatedUserGroup).build();
     }
@@ -546,6 +553,7 @@
 
             throw new ResourceNotFoundException("The specified user group ID does not exist in this registry.");
         }
+        publish(EventFactory.userGroupDeleted(userGroup));
 
         return generateOkResponse(userGroup).build();
     }
diff --git a/nifi-registry-core/nifi-registry-web-api/src/test/java/org/apache/nifi/registry/web/api/TenantResourceTest.java b/nifi-registry-core/nifi-registry-web-api/src/test/java/org/apache/nifi/registry/web/api/TenantResourceTest.java
new file mode 100644
index 0000000..2e3f5fd
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-api/src/test/java/org/apache/nifi/registry/web/api/TenantResourceTest.java
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.registry.web.api;
+
+import org.apache.nifi.registry.authorization.User;
+import org.apache.nifi.registry.authorization.UserGroup;
+import org.apache.nifi.registry.event.EventFactory;
+import org.apache.nifi.registry.event.EventService;
+import org.apache.nifi.registry.security.authorization.AuthorizableLookup;
+import org.apache.nifi.registry.security.authorization.Authorizer;
+import org.apache.nifi.registry.security.authorization.ConfigurableAccessPolicyProvider;
+import org.apache.nifi.registry.security.authorization.ConfigurableUserGroupProvider;
+import org.apache.nifi.registry.security.authorization.ManagedAuthorizer;
+import org.apache.nifi.registry.service.AuthorizationService;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class TenantResourceTest {
+
+    private TenantResource tenantResource;
+    private AuthorizationService authorizationService;
+    private Authorizer authorizer;
+    private ConfigurableAccessPolicyProvider accessPolicyProvider;
+    private EventService eventService;
+    private ConfigurableUserGroupProvider userGroupProvider;
+    private AuthorizableLookup authorizableLookup;
+
+    @Before
+    public void setUp() {
+        authorizationService = mock(AuthorizationService.class);
+        authorizer = mock(ManagedAuthorizer.class);
+        authorizableLookup = mock(AuthorizableLookup.class);
+        accessPolicyProvider = mock(ConfigurableAccessPolicyProvider.class);
+        userGroupProvider = mock(ConfigurableUserGroupProvider.class);
+        eventService = mock(EventService.class);
+
+        when(accessPolicyProvider.getUserGroupProvider()).thenReturn(userGroupProvider);
+        when(((ManagedAuthorizer) authorizer).getAccessPolicyProvider()).thenReturn(accessPolicyProvider);
+        when(authorizationService.getAuthorizer()).thenReturn(authorizer);
+        when(authorizationService.getAuthorizableLookup()).thenReturn(authorizableLookup);
+
+        tenantResource = new TenantResource(authorizationService, eventService) {
+
+            @Override
+            protected URI getBaseUri() {
+                try {
+                    return new URI("http://registry.nifi.apache.org/nifi-registry");
+                } catch (URISyntaxException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        };
+    }
+
+    @Test
+    public void testCreateUser() {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        User user = new User(null, "identity");
+        User result = new User("identifier", user.getIdentity());
+
+        when(authorizationService.createUser(user)).thenReturn(result);
+
+        tenantResource.createUser(request, user);
+
+        verify(authorizationService).createUser(user);
+        verify(eventService).publish(eq(EventFactory.userCreated(result)));
+    }
+
+    @Test
+    public void testUpdateUser() {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        User user = new User("identifier", "new-identity");
+
+        when(authorizationService.updateUser(user)).thenReturn(user);
+
+        tenantResource.updateUser(request, user.getIdentifier(), user);
+
+        verify(authorizationService).updateUser(user);
+        verify(eventService).publish(eq(EventFactory.userUpdated(user)));
+    }
+
+    @Test
+    public void testDeleteUser() {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        User user = new User("identifier", "identity");
+
+        when(authorizationService.deleteUser(user.getIdentifier())).thenReturn(user);
+
+        tenantResource.removeUser(request, user.getIdentifier());
+
+        verify(authorizationService).deleteUser(user.getIdentifier());
+        verify(eventService).publish(eq(EventFactory.userDeleted(user)));
+    }
+
+    @Test
+    public void testCreateUserGroup() {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        UserGroup userGroup = new UserGroup(null, "identity");
+        UserGroup result = new UserGroup("identifier", userGroup.getIdentity());
+
+        when(authorizationService.createUserGroup(userGroup)).thenReturn(result);
+
+        tenantResource.createUserGroup(request, userGroup);
+
+        verify(authorizationService).createUserGroup(userGroup);
+        verify(eventService).publish(eq(EventFactory.userGroupCreated(result)));
+    }
+
+    @Test
+    public void testUpdateUserGroup() {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        UserGroup userGroup = new UserGroup("identifier", "new-identity");
+
+        when(authorizationService.updateUserGroup(userGroup)).thenReturn(userGroup);
+
+        tenantResource.updateUserGroup(request, userGroup.getIdentifier(), userGroup);
+
+        verify(authorizationService).updateUserGroup(userGroup);
+        verify(eventService).publish(eq(EventFactory.userGroupUpdated(userGroup)));
+    }
+
+    @Test
+    public void testDeleteUserGroup() {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        UserGroup userGroup = new UserGroup("identifier", "identity");
+
+        when(authorizationService.deleteUserGroup(userGroup.getIdentifier())).thenReturn(userGroup);
+
+        tenantResource.removeUserGroup(request, userGroup.getIdentifier());
+
+        verify(authorizationService).deleteUserGroup(userGroup.getIdentifier());
+        verify(eventService).publish(eq(EventFactory.userGroupDeleted(userGroup)));
+    }
+}
