diff --git a/changes/28521-host-activity-read-disk-key b/changes/28521-host-activity-read-disk-key
new file mode 100644
index 0000000000..1c3e79fffb
--- /dev/null
+++ b/changes/28521-host-activity-read-disk-key
@@ -0,0 +1 @@
+- Fixed reading disk encryption key not showing up in host activities
diff --git a/frontend/interfaces/activity.ts b/frontend/interfaces/activity.ts
index 75206ec157..0aef383c53 100644
--- a/frontend/interfaces/activity.ts
+++ b/frontend/interfaces/activity.ts
@@ -128,6 +128,7 @@ export type IHostPastActivityType =
| ActivityType.RanScript
| ActivityType.LockedHost
| ActivityType.WipedHost
+ | ActivityType.ReadHostDiskEncryptionKey
| ActivityType.UnlockedHost
| ActivityType.InstalledSoftware
| ActivityType.UninstalledSoftware
diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx b/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx
index fdd17f8410..7d36fffc6c 100644
--- a/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx
+++ b/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx
@@ -14,6 +14,7 @@ import RanScriptActivityItem from "./ActivityItems/RanScriptActivityItem";
import LockedHostActivityItem from "./ActivityItems/LockedHostActivityItem";
import WipedHostActivityItem from "./ActivityItems/WipedHostActivityItem";
import UnlockedHostActivityItem from "./ActivityItems/UnlockedHostActivityItem";
+import ReadHostDiskEncryptionKeyActivityItem from "./ActivityItems/ReadHostDiskEncryptionKey";
import InstalledSoftwareActivityItem from "./ActivityItems/InstalledSoftwareActivityItem";
import CanceledRunScriptActivityItem from "./ActivityItems/CanceledRunScriptActivityItem";
import CanceledInstallSoftwareActivityItem from "./ActivityItems/CanceledInstallSoftwareActivityItem";
@@ -48,6 +49,7 @@ export const pastActivityComponentMap: Record<
[ActivityType.RanScript]: RanScriptActivityItem,
[ActivityType.LockedHost]: LockedHostActivityItem,
[ActivityType.WipedHost]: WipedHostActivityItem,
+ [ActivityType.ReadHostDiskEncryptionKey]: ReadHostDiskEncryptionKeyActivityItem,
[ActivityType.UnlockedHost]: UnlockedHostActivityItem,
[ActivityType.InstalledSoftware]: InstalledSoftwareActivityItem,
[ActivityType.UninstalledSoftware]: InstalledSoftwareActivityItem,
diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx
new file mode 100644
index 0000000000..50f4870391
--- /dev/null
+++ b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx
@@ -0,0 +1,41 @@
+import React from "react";
+import { render, screen } from "@testing-library/react";
+import { createMockHostPastActivity } from "__mocks__/activityMock";
+
+import ReadHostDiskEncryptionKeyActivityItem from "./ReadHostDiskEncryptionKey";
+
+describe("ReadHostDiskEncryptionKeyActivityItem", () => {
+ it("renders the activity content", () => {
+ render(
+
+ );
+
+ expect(screen.getByText("Test User")).toBeVisible();
+ expect(screen.getByText(/viewed the disk encryption key/i)).toBeVisible();
+ });
+
+ it("does not render the cancel icon", () => {
+ render(
+
+ );
+
+ expect(screen.queryByTestId("close-icon")).not.toBeInTheDocument();
+ });
+
+ it("does not render the show details icon", () => {
+ render(
+
+ );
+
+ expect(screen.queryByTestId("info-outline-icon")).not.toBeInTheDocument();
+ });
+});
diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx
new file mode 100644
index 0000000000..dbe4e0cd1e
--- /dev/null
+++ b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+
+import ActivityItem from "components/ActivityItem";
+
+import { IHostActivityItemComponentProps } from "../../ActivityConfig";
+
+const baseClass = "locked-host-activity-item";
+
+const ReadHostDiskEncryptionKeyActivityItem = ({
+ activity,
+}: IHostActivityItemComponentProps) => {
+ return (
+
+ {activity.actor_full_name}
+ viewed the disk encryption key for this host.
+
+ );
+};
+
+export default ReadHostDiskEncryptionKeyActivityItem;
diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts
new file mode 100644
index 0000000000..1251518fdf
--- /dev/null
+++ b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts
@@ -0,0 +1 @@
+export { default } from "./ReadHostDiskEncryptionKey";
diff --git a/server/fleet/activities.go b/server/fleet/activities.go
index 301645c8b2..c0c14a8f98 100644
--- a/server/fleet/activities.go
+++ b/server/fleet/activities.go
@@ -1043,6 +1043,10 @@ func (a ActivityTypeReadHostDiskEncryptionKey) ActivityName() string {
return "read_host_disk_encryption_key"
}
+func (a ActivityTypeReadHostDiskEncryptionKey) HostIDs() []uint {
+ return []uint{a.HostID}
+}
+
func (a ActivityTypeReadHostDiskEncryptionKey) Documentation() (activity string, details string, detailsExample string) {
return `Generated when a user reads the disk encryption key for a host.`,
`This activity contains the following fields:
diff --git a/server/service/hosts_test.go b/server/service/hosts_test.go
index 995e2cfafd..b0a7e3d558 100644
--- a/server/service/hosts_test.go
+++ b/server/service/hosts_test.go
@@ -1483,6 +1483,7 @@ func TestHostEncryptionKey(t *testing.T) {
) error {
act := activity.(fleet.ActivityTypeReadHostDiskEncryptionKey)
require.Equal(t, tt.host.ID, act.HostID)
+ require.Equal(t, []uint{tt.host.ID}, act.HostIDs())
require.EqualValues(t, act.HostDisplayName, tt.host.DisplayName())
return nil
}