integrations.microsoft_sentinel — version 1.1
Source: presets
Purpose
Microsoft Sentinel's GCP connector — the federation half, once per customer.
Sentinel reads Google Cloud logs by PULLING them from a Pub/Sub subscription,
authenticating through workload identity federation: no service-account key
leaves the organisation. This file creates what the federation needs — the pool,
the OIDC provider that trusts Microsoft, the service account Sentinel acts as,
and the binding that lets the federated principal become it. What it does NOT
create is anything to read: each log source is its own topic, subscription and
sink, and microsoft-sentinel-auditlogs is the first of them.
TRANSCRIBED FROM MICROSOFT, NOT IMPORTED. The shape is
Azure/Azure-Sentinel, DataConnectors.
That configuration pins the Google provider at 3.73.0 and uses authoritative
google_project_iam_binding, which REPLACES every other member of a role in the
project — run as published beside an estate, it silently removes grants the estate
made. Everything here is non-authoritative _iam_member.
THE TWO MICROSOFT IDENTIFIERS ARE VENDOR CONSTANTS, not this customer's: the
audience is Sentinel's application id and the issuer is Microsoft's commercial
tenant, both published in Microsoft's connector documentation and identical for
every customer (docs/examples.md lists them). The customer's OWN tenant id is
sentinel_workload_pool_id — the pool is named after it, without dashes, which is
what Microsoft's script does.
TWO ORGANISATION POLICIES CAN REFUSE THIS, and neither is set by this library:
- a deny-all on
iamblocks the provider below — the estate must allow the.workload Identity Pool Providers sts.windows.net/<microsoft tenant>issuer; - where
iamis enforced, the principal set has to be allowed before the binding is applied. The constraints AND together, and an incomplete subject list refuses the grant rather than warning. Both are landing-zone policies an estate inherits; a first apply that fails on either is that policy, not this pack..managed .allowedPolicyMembers
RUNNING DEFENDER FOR CLOUD TOO? The two are separate integrations with separate
pools, service accounts and topics, and nothing here is shared with
microsoft-defender-for-cloud. If both are pointed at ONE project, give them
different pool ids: a pool id is unique per project, and the second apply fails on
the first pool's name. Different projects need nothing.
ONBOARDING IS TWO-SIDED. This is the Google half; the Sentinel connector in Azure is configured with the pool, provider and service account this creates, and the connector does not work until both sides are done.
NO CLAIM. Sentinel is a SIEM that reads the estate. Exporting logs to it does not
satisfy a retention control — monitoring is what
claims those — and Sentinel is itself in no catalog.
Use it
params {
// the pack's own defaults — copy only the lines you change
sentinel_project_id = logsink_project_id
sentinel_project_number = ""
sentinel_workload_pool_id = ""
sentinel_sa_account = "sentinel-service-account"
sentinel_application_id = "2041288c-b303-4ca0-9076-9612db3beeb2"
microsoft_tenant_id = "33e01921-4d64-4f8c-a055-5bdaffd5e33d"
}
use "presets/integrations/microsoft-sentinel.satz"
Needs from outside the pack:
logsink_project_id— declared bymonitoring; use one of them alongside, or declare it in the estate..organization _audit _logsink
Params
| param | default |
|---|---|
sentinel_project_id |
logsink_project_id |
sentinel_project_number |
"" |
sentinel_workload_pool_id |
"" |
sentinel_sa_account |
"sentinel-service-account" |
sentinel_application_id |
"2041288c-b303-4ca0-9076-9612db3beeb2" |
microsoft_tenant_id |
"33e01921-4d64-4f8c-a055-5bdaffd5e33d" |
Questions
What to ask before this pack is configured, and what changing the answer costs.
| asks about | prompt | reversal | blast | recommends |
|---|---|---|---|---|
sentinel_workload_pool_id |
The customer's Microsoft Entra tenant id without dashes — the workload identity pool id Sentinel's setup names | recreate | high | — |
sentinel_project_number |
The number of the project that holds the Sentinel federation (not its id) | edit | high | — |
sentinel_project_id |
Which project holds the Sentinel federation and its topics? | recreate | low | — |
sentinel_workload_pool_id — It is per customer and cannot be guessed. The pool is created with this id; changing it later is a new pool, a new provider and a connector that has to be onboarded again on the Azure side.
sentinel_project_number — Google assigns it at creation and the federated principal set is built from it, so it cannot be derived from the project id: gcloud projects describe <id> --format='value(project. A wrong number makes a binding that grants nothing, and the connector authenticates against a principal that does not exist.
sentinel_project_id — Whoever administers this project controls what Sentinel can read. The default is the audit-log archive's project, which is where the sinks and topics belong. Moving it later means a new pool, new topics and a re-onboarded connector.
Contributes
| resource type | labels |
|---|---|
google |
sentinel_pool |
google |
sentinel_identity_provider |
google_project_service |
sentinel_iam, sentinel_crm |
google_service_account |
sentinel |
google |
service_account_id (grant map), principalSet: |
Claims
None — this pack proves no control by itself.
History
| version | date | change |
|---|---|---|
| 1.1 | 2026-09-12 | follows the rename: the Sentinel project defaults to logsink_project_id |
| 1.0 | 2026-09-12 | first version: Sentinel's GCP federation — pool, the provider trusting Microsoft's commercial tenant with the api:// audience, the connector's service account and roles for the pool's principal set. Transcribed from Microsoft's own Terraform against the pinned provider: upstream pins google 3.73.0 and uses authoritative google_project_iam_binding, which removes grants an estate made |
The whole library's history: the changelog in presets/CHANGELOG.md.
Notes
No notes yet.