How to get Microsoft 365 audit activity into Wazuh
Wazuh reads Microsoft 365 audit activity through the Office 365 Management Activity API. An Entra ID app registration handles authentication, and content subscriptions tell Microsoft which audit streams to publish. The Wazuh server then decodes the records and applies rules to them, so Exchange, SharePoint, OneDrive and Teams activity lands in the same indexer and dashboard as your endpoint alerts. An analyst can follow a suspicious sign-in on a laptop into a later mailbox rule change without moving between consoles. This section covers that sequence and the decisions that shape it, for a team that will run the integration itself or for one comparing its effort with a partner's written scope.
The scope is the four workloads named in this topic: Exchange, SharePoint, OneDrive and Teams. Each produces its own kind of audit record, and each needs its own subscription and its own review of noise. Expect the work to be configuration on a Wazuh deployment you control, followed by rule tuning once real events arrive. Confirm which Wazuh release line you run before you start. The current line is 4.14, but the module name, the configuration keys for tenant and client identifiers, the subscription settings and the decoder and rule file names must be checked against the Wazuh documentation for your exact release, because these details change between versions.
Start on the Entra ID side, because the Wazuh configuration cannot succeed without it. Decide which tenant or tenants will be read, who owns the app registration, and how its client secret or certificate will be stored, rotated and revoked. Confirm in Microsoft's current documentation which API permissions the Office 365 Management Activity API requires for each content type and whether admin consent is needed. Also verify that auditing is already enabled for each workload in the tenant. A subscription with no audit records to publish looks healthy while showing nothing, so write these decisions down, since a later rotation or tenant change will depend on them.
Next, enable content subscriptions for the audit content types that cover the four workloads, and confirm that the Wazuh server receives events from each one. Rule tuning is where most of the ongoing effort sits. The rules you start with may fire on routine activity, such as ordinary file access by staff, so plan a review cycle in which the security team states which operations are expected for which groups, sets alert levels and removes noise before anyone is paged. Test with known actions, for example a sharing link created on a test SharePoint site (illustrative), and check that the decoded fields appear in the dashboard as expected. Record every rule change so the set can be reviewed during Wazuh upgrades.
What you need before configuring the Microsoft 365 connection
Five items must be settled before anyone changes the Wazuh server configuration. Each has a different owner, and a gap in any one of them either stops collection or limits what the alerts can see. Confirm them in the order listed so the app registration, the licensing check and the network tests can happen in the same change window.
Verified Wazuh release line
Wazuh 4.14 is the current release line, so the connection should be built and tested against that family. Confirm the exact 4.14 patch the team will run by checking the Wazuh release notes on the day of the build, because patch releases arrive roughly every one to two months. Record the version in the change ticket so the integration is retested after every upgrade. The Wazuh server owner usually makes this decision.
Tenant rights to register apps
Setup means registering an application in Microsoft Entra and granting it API permissions for the Office 365 Management Activity API. Confirm that the person doing the work holds a role that allows app registration, or arrange for a tenant administrator to perform the registration and grant admin consent. Without admin consent, the Wazuh server's subscription and content calls will fail. The Microsoft 365 global administrator or identity team usually owns this step.
Licensing sets available audit logs
The audit records Wazuh can collect depend on the licensing and audit configuration of the Microsoft 365 tenant, so coverage can differ between subscriptions. Ask the tenant administrator which workloads (Exchange, SharePoint, OneDrive and Teams) produce audit data under your plan, whether auditing is switched on for each, and how long those logs are retained. Confirm this before promising coverage to the security team. Procurement and the Microsoft 365 administrator usually confirm it together.
Outbound HTTPS to Microsoft
The Wazuh server must reach Microsoft sign-in and Office 365 Management Activity API endpoints over HTTPS, either directly or through an approved proxy. Take the current endpoint list from Microsoft's documentation, open those destinations from the segment where the Wazuh server runs, and test them from that host rather than from a workstation. If a proxy inspects traffic, confirm it passes token and content requests without altering them. The network or firewall team usually owns this.
Named owner for the credential
The app authenticates with a client secret or a certificate, and whoever holds that credential controls the connection and the audit data it can read. Name one accountable owner before configuration, record where the secret or certificate is stored, and note its expiry so renewal does not stop collection without warning. Keep it in your approved secrets system and out of shared configuration files. The security team usually assigns this owner.
How the Management Activity API feed reaches Wazuh
The Wazuh server pulls Microsoft 365 audit data from the Office 365 Management Activity API. Nothing pushes events into Wazuh. The chain has four links: an Entra ID app registration authenticates to the API, the tenant's audit content types are enabled as subscriptions, the Wazuh server retrieves content blobs on a schedule, and decoders and rules convert the raw records into alerts stored in the Wazuh indexer. Each link has a configuration owner. Your identity team owns the app registration and its permissions, your Microsoft 365 administrators own the audit settings in the tenant, and your Wazuh team owns the server, decoders, rules and polling. Confirm the exact permissions, subscription steps and outbound endpoints in the current Wazuh documentation before you open firewall rules, because the Wazuh server needs network paths to Microsoft's endpoints.
The first decision is which workloads to subscribe to. Exchange, SharePoint, OneDrive and Teams are the workloads named for this topic, but each subscription adds a separate content stream with its own event types, volume and alert logic. Start with the workloads that produce your highest-risk signals, such as mailbox access and sharing changes, and confirm with Microsoft's current documentation which content types each workload publishes. Subscribing to everything at once makes it harder to tune rules, because you cannot tell which noise belongs to which source. A narrower first subscription also gives your SOC a short list of alerts to validate before the rule set grows.
The second decision is the polling interval, which sets alert latency. The Wazuh server only checks for new content when it polls, so the interval controls the longest wait between an action in Microsoft 365 and the matching alert in the dashboard. Microsoft also makes audit content available with its own delay after the event occurs, so the end-to-end latency is the combination of both. Ask your SOC which alerts need near-immediate handling and which can wait for a batch review, then test the interval against those expectations. A shorter interval means more API calls and more processing on the server, so check the documented API limits for your tenant and set the interval with those limits in mind.
The third decision is ingestion volume. Volume depends on the subscribed content types, the size of your tenant, how many users generate audit activity, and how many decoders and rules process each record. Plan indexer storage and retention from a measured baseline rather than from assumptions. A practical approach is to enable one workload in a test tenant or a pilot group, measure the records and alerts it produces over a representative period, and then add workloads one at a time. Ask any partner for a sizing method that uses your tenant's real audit volume, and record which assumptions the estimate depends on.
This page covers only the Management Activity API path. It does not cover agent-based collection on Microsoft hosts, such as installing Wazuh agents on Windows servers or endpoints to collect host telemetry. That is a different collection method with different deployment work, and it does not replace tenant-level audit collection. Decide early whether you need both, because the two methods produce different event types, need different permissions, and feed different alert rules.
Configuration sequence from app registration to first alert
This sequence takes a Microsoft 365 tenant from a new Entra ID application to the first tuned alert on risky activity in Wazuh. Each step ends with a check, so the team confirms consent, ingestion, decoding and rules before moving on. Exact file paths, block names and key names change between releases, so confirm them in the current Wazuh documentation for your version.
Register the Entra ID application
A Microsoft 365 administrator or a delegated Entra ID administrator registers an application in the tenant that will read the audit feed. Record the tenant identifier and the client identifier, and store the client secret or certificate in your secrets store, never in configuration files, tickets or shared documents. Confirm which credential type the current Wazuh documentation accepts before creating it. Done means the application appears in Entra ID with its identifiers recorded and the credential retrievable only by the person who will configure the Wazuh server.
Grant Management Activity API permissions
Add only the Office 365 Management APIs permissions that the Wazuh documentation lists for this integration, and leave out broader Graph scopes the documentation does not call for. An administrator with authority to grant tenant-wide consent then approves the permissions. Done means every listed permission shows as granted with admin consent in the application's permissions view, and a test authentication against the Management APIs, made with the method in the documentation, succeeds.
Enable audit content subscriptions
Start the audit content subscriptions for the Exchange, SharePoint, OneDrive and Teams workloads through the Management Activity API, using the method the documentation describes for your tenant. Confirm that audit logging is turned on for each workload you plan to monitor in your Microsoft Purview settings, since the subscriptions depend on it. Done means each subscription reports an enabled status and a content listing request returns entries after a test action, such as a file upload to a test site.
Configure the Wazuh module on the server
On the Wazuh server, add the Office 365 module block to the configuration file the documentation names. Reference the tenant identifier and client identifier, and reference the client secret through the environment variable or secrets mechanism the documentation supports, never as plaintext. Enable only the content types you subscribed to in the previous step. Done means the configuration passes the configuration check your installation documents and the secret does not appear in any file on the server in readable form.
Restart server and confirm connection
Restart or reload the Wazuh server using the method your release documents, then watch the server logs as the module starts and authenticates against the Management Activity API. Look for authentication messages and for errors about permissions, identifiers or unsubscribed workloads. Done means the logs show successful authentication and polling across at least one full polling cycle without repeated errors. If authentication fails, return to the consent and identifier checks, since those issues often cause the failure.
Verify events reach the indexer
Generate a known test action, such as a sign-in by a test user or a file upload to a test SharePoint site, and then search for it in the Wazuh dashboard. Check that the event is stored in the Wazuh indexer and that the decoder fills the fields the documentation lists for this module, such as the operation, the user and the workload. Done means the test event appears in the dashboard with those fields populated. If fields are empty, compare a raw event with the decoder expectations in the documentation before changing anything else.
Enable and tune risky activity rules
Enable the rules shipped with the module that cover the risky activity your organization cares about, after confirming the rule identifiers and levels in the current documentation. For example, if the enabled rules cover mailbox forwarding changes or bulk downloads, test each one with a deliberate action by a test user. Adjust levels and add suppression for known automation accounts during a review window before alerts reach on-call staff. Done means each test action produces an alert with the expected rule identifier and level, and a period of normal activity produces a volume the team can review.
Which Microsoft 365 fields map to Wazuh alert data
This table maps each Microsoft 365 activity concept to the Wazuh alert field that carries it, along with the investigation question it answers. Use it as a checklist against a decoded sample event from your own tenant, because field names depend on the decoder and rule version in your deployment. The main takeaway is that the operation name drives which rules fire, so confirm it first.
| Concept | Wazuh counterpart | Investigation question | What to verify in the sample event |
|---|---|---|---|
| Tenant or workload | Source label and workload field set by the decoder | Which service or tenant produced this event? | Confirm the workload value for Exchange, SharePoint, OneDrive and Teams, and whether a tenant identifier appears separately. |
| User principal or actor | User field on the alert, populated from the audit record actor | Who performed the action, and is it a person, service account or application? | Check whether the user field holds a sign-in name or an internal ID, and whether it is filled for app-only actions. |
| Operation name | Rule trigger: the decoded operation string matched by rule conditions | What did the actor do, such as a file download, mailbox rule creation or sharing change? | Match the exact operation string to the rule condition, then confirm the rule ID that fired. |
| Client IP and location | Source IP context fields for the client address and any geographic data | Where was the session initiated, and does it fit the user's normal pattern? | Confirm which field holds the client IP and whether location fields exist or only the address is present. |
| Object or site identifier | Target of the alert: the item, mailbox, site or file the action touched | Which resource was affected, and how far did access extend? | Check the object identifier and site address fields separately, since file and site events may populate different ones. |
| Result or status | Outcome field, if the audit record includes one | Did the action succeed or fail? | Confirm whether failed attempts are logged and how the rule treats them. |
| Event time | Timestamp field used for ordering and correlation | When did the activity happen relative to sign-in events? | Compare the alert time with the source audit timestamp, since time zone handling can differ between systems. |
Which risky Microsoft 365 activity to alert on first
Start with a first alert set small enough that every alert gets reviewed, and limit it to activity where a single event is already suspicious. Group candidate alerts into four categories: mailbox rule creation and forwarding changes, sharing link creation and external sharing, administrative changes close to sign-in such as authentication method changes and privileged role assignments, and bulk download or mass deletion of SharePoint and OneDrive content. For each category, check which rules already ship with the Wazuh server and which gaps need local rules. Take rule names and IDs from the ruleset installed on your server and from your own tuning files, not from this page or from older examples online.
Test every rule against sample events before it goes live. Pull a real audit record for each operation from your own tenant, generated by a test account performing a harmless action, and run it through the Wazuh log test tool on the server. Confirm that the decoder extracts the fields the rule depends on, that the rule fires at the level you expect, and that a near-miss event from an ordinary user does not fire it. Operation names in the Office 365 Management Activity API must be confirmed from a live tenant, because the names you find in documentation or community posts may not match the records your tenant actually produces. Keep each test sample in version control next to the rule it proves.
Set severity by asking who acts on each category and how quickly. Mailbox forwarding changes usually belong with the security operations queue, while administrative changes near sign-in belong with the identity team on call. Wazuh alert levels decide what appears in the dashboard and what the integrator forwards, so a rule set where most alerts are high severity trains responders to ignore them. Reserve the top levels for events that need action within the hour, and route only those to paging channels using level and group filters. Confirm the paging path works with a controlled test alert before you rely on it, and record who receives each level.
Document the finished rule set as evidence of monitoring scope. For each rule, record its ID, title, whether it ships with Wazuh or was written locally, the Microsoft 365 operation it depends on, its expected level, its owner, the date of its last test and any tuning changes. The register also shows gaps, which assessors often ask about more directly than the rules themselves. Ask your assessor or compliance lead what format they expect. Review the register after each Wazuh upgrade, because shipped rules can change between releases and your local rules may need adjustment.
Protecting the app registration and the audit data
The Microsoft 365 integration holds a credential that can read tenant audit activity, and the logs it collects describe who did what to which files and mailboxes. The cards below cover how to protect the app registration, the Wazuh configuration and the stored data, and they set out the decisions the security, privacy and legal owners need to make before the connector goes live.
Keep the client secret out of config files
The app registration's client secret or certificate should sit in a secrets manager that Wazuh's deployment process reads at runtime, not in a plain text configuration file on the Wazuh server. Confirm with your secrets platform owner how the secret is injected, how access to it is logged, and whether a certificate is a better fit for your credential policy. Check that backups, configuration snapshots and automation logs do not capture the value.
Grant only the read permissions the API needs
Review the application permissions granted to the app registration for the Office 365 Management Activity API and remove anything beyond reading the activity feeds that Wazuh subscribes to. Ask the Microsoft 365 administrator to record who approved the consent and when. Re-check the permission set after any change to the Wazuh integration, because a broader grant made for troubleshooting often stays in place.
Limit who can read the credential and configuration
Restrict read access to the Wazuh configuration file, the secrets store entry and the host running the Wazuh server to a named group of administrators. Anyone who can read the client secret can request audit data from the tenant without going through Wazuh. Review this group on the same cadence as other privileged access reviews in your organization.
Rotate the secret on an owner-set schedule
Agree a rotation interval with the owner of the app registration and record it in your change calendar. Rotation means creating the new secret, updating the secrets manager entry, restarting or reloading the Wazuh integration, confirming that new events arrive, and then removing the old secret. Plan a rotation outside busy reporting windows, and confirm how the Wazuh integration behaves during the overlap period.
Scope Wazuh dashboard access with roles
Decide which teams may open Microsoft 365 alerts in the Wazuh dashboard and which may change rules or the integration. Use the dashboard's role model to separate read-only analysts from administrators, and confirm how those roles map to your single sign-on groups if you use SAML. Alerts about mailbox forwarding or file sharing can expose sensitive business activity, so treat dashboard visibility as a deliberate grant.
Treat audit data as sensitive personal data
Microsoft 365 audit records name users, IP addresses and the files and mailboxes they touched, which usually makes them personal data under privacy law. Agree retention periods, access rules and any legal hold process with your privacy and legal owners before ingestion starts. Also confirm with the Microsoft 365 administrator any conditional access policies and the audit log retention limits that apply to your tenant, since these determine what Wazuh can collect and what the tenant keeps as a fallback.
How to test the feed before relying on it
Before anyone relies on Wazuh alerts from Microsoft 365, run a test plan that proves the feed carries known actions into the Wazuh indexer and that the matching rules fire correctly. Use a non-production or tightly controlled tenant, and perform a small set of actions whose outcome you can predict: create an anonymous or organization sharing link on a test file, add a mailbox forwarding or inbox rule to a test mailbox, and upload a file to a Teams channel. Record the time and the account used for each action. Then confirm in the indexer that each event appears with the fields your rules depend on, such as the operation name, the acting user, the workload, the object identifier and the client address. Field names depend on your deployment, so confirm them against your own indexed events rather than a generic list.
Next, check the alerting behavior. Each test action should produce one alert from the matching rule, not zero and not several. Duplicate or repeated alerts usually point to overlapping collection windows, a rule that matches more than one field, or events being indexed twice, so inspect the alert history for each test ID. Measure the delay between the action and the alert, and compare it with the response-time requirement your security team set before testing began. Write that requirement down first. If the measured delay is longer than the requirement, identify where the time goes, including the latency of the Microsoft audit data itself, which you should confirm in Microsoft's documentation for the log types you collect.
Then test the failure modes that cause silent gaps. Restart the Wazuh server while the collector is running, perform a new test action after the restart, and confirm that events from before the restart are not indexed a second time and that the new action is picked up. Next, rotate the app registration credential in the test tenant following your normal rotation procedure. Confirm that the feed resumes without manual rework and that any action performed during the rotation window either appears after the feed resumes or is recorded as a known gap. Repeat these checks after each upgrade of the Wazuh server or change to the collection settings, because those changes can alter behavior.
Keep the results as evidence. For each test, record the test identifier, the action performed, the time and actor, the expected and observed fields, the alert identifier, the measured delay, the pass or fail result, the tester and the configuration version in use. Attach these records to the change ticket for the deployment, and store them where your compliance lead can retrieve them. A compliance assessor who asks how the monitoring was validated will expect this kind of record. DeployOpen can prepare the test plan and the evidence pack, but the independent assessor decides whether the evidence meets the framework requirement.
Common failures when Microsoft 365 events do not reach Wazuh
This table lists six failures that stop or distort Microsoft 365 events in Wazuh, with the likely cause and the first check for each. Work through the rows in order, because a missing subscription or consent problem hides every symptom below it. Where a row points to a log message, confirm the exact wording in the documentation for your installed release before you write alert logic against it.
| Failure | Likely cause | Check first and where to confirm |
|---|---|---|
| No events after setup | The subscription is not enabled for the content type, or admin consent was not granted to the app registration. | Confirm the subscription status and API permissions in Entra ID, then check the Wazuh server logs for the message text in the current release documentation. |
| Authentication errors | Wrong tenant identifier, client identifier, or an expired client secret. | Compare the tenant and client identifiers with the app registration and check the secret expiry date. Confirm the error text in the Wazuh server logs. |
| Events arrive without user fields | The decoder does not match the content type, so fields such as the acting user are not extracted. | Compare a raw event sample with the decoder expectations for that content type in the ruleset shipped with your release. |
| Rules do not fire | Operation names in the events differ from the rule expectation, or the rule level is above the event severity. | Pull a raw event for the operation and compare its name and fields with the rule. Confirm operation names against Microsoft's audit log schema. |
| Duplicate alerts after restart | Polling restarts from an earlier point, or the saved checkpoint is not kept across the restart. | Check the stored state for the module and the restart sequence. Confirm restart behavior in the release notes and test with a controlled restart. |
| High ingestion volume | Broad subscriptions pull every content type and workload, including events no rule uses. | Enable only the content types your rules cover first. Review event volume in the indexer and confirm filtering options in the module documentation. |
Questions buyers ask before outsourcing Microsoft 365 monitoring in Wazuh
What drives the cost of outsourcing Microsoft 365 monitoring in Wazuh?
The main cost drivers are the size and licensing of your Microsoft 365 tenant, the number of workloads you want monitored (Exchange, SharePoint, OneDrive and Teams), how deeply the rules are tuned to your users and risk model, and how many environments, such as production and a test tenant, must be covered. Your team's Wazuh experience also matters. A team that already runs Wazuh and Entra administration needs less guidance than one building both skills at once. Self-hosted Wazuh has no license fee, so the cost sits in people's time and the infrastructure you run. The initial app registration, subscriptions and rule validation are one-time work, while alert review, rule maintenance and Wazuh upgrades recur. DeployOpen does not publish a price list. Ask for a written scope that lists each workload, environment and tuning task, and ask the quote to separate one-time build work from any ongoing retainer for support and upgrades.
How long does a Microsoft 365 monitoring engagement in Wazuh take?
No duration is fixed for this work, so the schedule depends on the approvals and environments you can provide. The common delays are administrator consent for the app registration in Microsoft Entra, the release of client secrets to the people who store them, access to a test tenant where rules can be validated safely, and time for a security analyst to review rule output before alerts reach production. Each approval gate can pause the build for as long as your change process takes, so start those requests early. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Ask for that document to show the order of steps, which gates belong to your organization, and which steps DeployOpen runs.
What does the client team need to provide for the work?
The work needs four roles on your side. A tenant administrator registers the application and grants consent in Microsoft Entra. A Wazuh owner approves changes to the Wazuh server configuration and the deployment. A security analyst reviews the rules and decides which alerts matter for your organization. A named secret owner holds the client secret or certificate, stores it securely and handles rotation. One person can hold more than one role in a small organization, but the secret owner should be named explicitly so the credential has an accountable home. Ask the provider to confirm which of these roles it expects you to fill, and how access will be granted during the engagement and removed at the end of it.
Can an internal team set up Microsoft 365 monitoring in Wazuh on its own?
Yes. An internal team can build this alone if it has working knowledge of Microsoft Entra app registration and consent, administration of Wazuh including its server configuration and rules, and enough time to test in a non-production tenant before alerts go live. The Microsoft 365 integration is a configuration and rule project on an existing Wazuh platform, so the hardest part is usually validation. The team must confirm that subscriptions deliver events, that decoders parse them correctly and that rules fire on the activity you care about without flooding analysts. Teams that lack that testing time often bring in help for the build and keep the ongoing tuning in house. Ask whether your team can staff the build and the first round of tuning within the period your security program needs.
How does Wazuh Cloud change the work compared with self-hosting?
Wazuh Cloud is the vendor's managed, cloud-delivered XDR and SIEM service. It moves the operation of the hosted components, along with upgrades and capacity planning, to the vendor. Self-hosting keeps those components in infrastructure you control, which some regulated buyers need, and the self-hosted software carries no license fee, so your cost is the infrastructure and people who run it. Wazuh Cloud is sold in Small, Medium, Large and Custom tiers, and every paid plan includes at least Standard support. A 14-day free trial is offered and needs no credit card. Before you choose, confirm whether the Microsoft 365 collection and the rule set you need are available on the Cloud plan, where your logs are stored, and which parts of the build still fall to your team. DeployOpen implements self-hosted platforms in the client's own infrastructure.
Which Microsoft 365 licensing and tenant details affect the monitoring scope?
The scope depends on which workloads you monitor and what your tenant already logs. Exchange, SharePoint, OneDrive and Teams produce different kinds of activity, and each content type is collected through its own subscription in the Office 365 Management Activity API. Before you start, confirm with your Microsoft administrator that unified audit logging is turned on, that the account and license arrangements meet Microsoft's current requirements for your plan, and how long activity is retained. Retention decides how far back your investigations can reach, so verify it against Microsoft's current documentation before you plan around it. List every tenant in scope, including test tenants, because each one has its own configuration to verify.
How do app registration and secrets get approved before the build starts?
Start with an app registration in Microsoft Entra for the Wazuh connection, then request the application permissions that the Office 365 Management Activity API documents for reading activity feeds. An administrator must consent to those permissions, so raise the request with your identity team early. Next, start a subscription for each content type you want, such as Exchange, SharePoint, OneDrive and Teams activity. Store the client secret or certificate in a secret store your team controls, and record its expiry date. An expired credential stops ingestion, and the failure may look like a quiet source that is easy to miss. Confirm with the vendor documentation which content types and permissions apply to your version, and keep the tenant ID, client ID and secret in the Wazuh configuration only through the mechanism your team has approved.
What breaks most often when Microsoft 365 alerts stop arriving in Wazuh?
The most common failure is an ingestion gap that nobody notices. Typical causes include an expired client secret, a subscription that was never started, a wrong tenant or client identifier, a missing consent grant after a permission change, and a decoder that no longer matches a log format. Check in order: first that the connection authenticates, then that subscriptions show active content types, then that events reach the indexer, and finally that expected rules fire on a controlled test action, such as a test file share or a test mailbox rule. Add a check on event volume per workload so that silence becomes an alert. Rule noise is the second common failure. Broad rules flood analysts and get disabled, so tune with the analyst before go-live and keep a change record for every rule adjustment.
How DeployOpen scopes and delivers Microsoft 365 monitoring in Wazuh
DeployOpen plans, implements, documents and supports Wazuh in infrastructure you control, so the Microsoft 365 collection, rules and alert handling run in your own environment. Each engagement starts from a written scope that sets which Microsoft 365 workloads are covered and how the Wazuh components are deployed and connected.
How we scope
- Confirm which Exchange, SharePoint, OneDrive and Teams activity your security team needs to see in Wazuh.
- Record the tenant, the Wazuh deployment model and where the server and indexer will run.
- Agree in writing the app registration, subscription and rule work included in a fixed-scope engagement.
How we build
- Register the Office 365 Management Activity API application with the permissions your tenant policy allows.
- Enable the content subscriptions in scope and configure the Wazuh integration to read them.
- Tune the rules that alert on risky activity and test them against sample events before go-live.
How we hand over
- Provide documentation of the app registration, subscriptions, secret handling and rule set.
- Walk your operations team through alert triage, rule changes and where each log source is configured.
- Record the verification steps used during testing so your team can repeat them after changes.
How we support
- Support is available as a retainer for monitoring the integration, reviewing rule noise and handling changes.
- Plan Wazuh upgrades and checks that the Microsoft 365 integration still works after each change.
- Confirm with your team how secret rotation and tenant administrator changes will be handled after handover.

