monitoring.organization_cis_log_alerts_central — version 1.7
Source: presets
Purpose
Centralized log-based alerting for CIS 2.5-2.12 in 5.0 numbering, 2.4-2.11 in 4.0.
One logging bucket + second org sink + 8 bucket-scoped metrics + 8 alert policies + email channel. Estate wiring: nothing to set when the audit logsink pack is used — the alert project defaults to ITS project. Without that pack, set cis_central_bucket_project.
Filters are verbatim CIS/Prowler strings; alert filters reference metric names (dependency edge) and pin resource.type= "logging_bucket" (bucket-scoped metrics report against it — verified live).
Use it
params {
// the pack's own defaults — copy only the lines you change
cis_central_bucket_project = logsink_project_id
cis_central_bucket_id = "{customer_shortname}-organization-log-alerts"
cis_central_bucket_location = default_region
cis_central_bucket_retention_days = 30
cis_central_sink_name = "cis-central-metrics-sink"
cis_central_email = "gcp-security@{customer_domain}"
cis_central_channel_name = "CIS Security Alerts (org)"
cis_central_alert_window = "300s"
}
use "presets/monitoring/organization-cis-log-alerts-central.satz"
Needs from outside the pack:
customer_domain— declared byestate_core; use one of them alongside, or declare it in the estate.customer_organization_id— declared byestate_core; use one of them alongside, or declare it in the estate.customer_shortname— declared byestate_core; use one of them alongside, or declare it in the estate.default_region— declared byestate_core; use one of them alongside, or declare it in the estate.logsink_project_id— declared bymonitoring; use one of them alongside, or declare it in the estate..organization _audit _logsink
Params
| param | default |
|---|---|
cis_central_bucket_project |
logsink_project_id |
cis_central_bucket_id |
"{customer |
cis_central_bucket_location |
default_region |
cis |
30 |
cis_central_sink_name |
"cis-central-metrics-sink" |
cis_central_email |
"gcp-security@{customer |
cis_central_channel_name |
"CIS Security Alerts (org)" |
cis_central_alert_window |
"300s" |
Questions
What to ask before this pack is configured, and what changing the answer costs.
| asks about | prompt | reversal | blast | recommends |
|---|---|---|---|---|
cis_central_email |
The address the organisation's security alerts are sent to (a group, never a person) | edit | high | — |
cis_central_bucket_project |
The project that hosts the alerting bucket, the metrics and the alert policies | recreate | low | — |
cis_central_email — Monitoring sends from alerting-noreply@google.com, so the mailbox must exist and accept external mail; a group whose members have no mailboxes drops every alert silently, and nothing in the estate can detect that. People leave; groups have owners.
cis_central_bucket_project — Every metric and policy is created in this project; moving them is a recreate and loses alert history. The default is the audit-logsink pack's project, by reference — one logging project for the archive and the alerting — and needs no answer beyond accepting it when that pack is used.
Contributes
| resource type | labels |
|---|---|
google_logging_metric |
cis, cis, cis_central_2_7_custom_role, cis, cis, cis_central_2_10_network, cis, cis |
google |
cis_central_metrics_sink |
google |
cis_central_metrics |
google |
cis, cis, cis_central_2_7_custom_role, cis, cis, cis_central_2_10_network, cis, cis |
google |
cis_central_alerts |
google_project_iam_member |
cis_central_sink_writer |
Claims
| framework | control | title | kind | witnesses | interpretation |
|---|---|---|---|---|---|
| cis-gcp 4.0 | 2.4 | Project ownership change alerts | contributes | googlegoogle |
Central metrics pipeline: org-level sink into the metrics bucket plus a notification channel — the substrate all per-control alerts build on. |
| cis-gcp 5.0 | 2.5 | Project ownership change alerts | contributes | googlegoogle |
As for 4.0 §2.4 (5.0 §2.5): the substrate every alert stands on. |
| cis-gcp 4.0 | 2.4 | Project ownership change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.5 | Project ownership change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.5 | Audit configuration change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.6 | Audit configuration change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.6 | Custom role change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.7 | Custom role change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.7 | VPC firewall rule change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.8 | VPC firewall rule change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.8 | VPC route change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.9 | VPC route change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.9 | VPC network change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.10 | VPC network change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.10 | Storage IAM change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.11 | Storage IAM change alerts | implements | googlegoogle |
|
| cis-gcp 4.0 | 2.11 | SQL instance change alerts | implements | googlegoogle |
|
| cis-gcp 5.0 | 2.12 | SQL instance change alerts | implements | googlegoogle |
What the controls ask (this project's paraphrase from the catalog — never the framework's own text):
- Audit configuration change alerts (cis-gcp 4.0 §2.5, cis-gcp 5.0 §2.6) — Log metric filter and alert on changes to audit logging configuration.
- Custom role change alerts (cis-gcp 4.0 §2.6, cis-gcp 5.0 §2.7) — Log metric filter and alert on IAM custom role creation, modification, deletion.
- Project ownership change alerts (cis-gcp 4.0 §2.4, cis-gcp 5.0 §2.5) — Log metric filter and alert on project ownership assignments/changes across the organization.
- SQL instance change alerts (cis-gcp 4.0 §2.11, cis-gcp 5.0 §2.12) — Log metric filter and alert on Cloud SQL instance configuration changes.
- Storage IAM change alerts (cis-gcp 4.0 §2.10, cis-gcp 5.0 §2.11) — Log metric filter and alert on Cloud Storage bucket IAM permission changes.
- VPC firewall rule change alerts (cis-gcp 4.0 §2.7, cis-gcp 5.0 §2.8) — Log metric filter and alert on firewall rule create/modify/delete.
- VPC network change alerts (cis-gcp 4.0 §2.9, cis-gcp 5.0 §2.10) — Log metric filter and alert on VPC network create/modify/delete.
- VPC route change alerts (cis-gcp 4.0 §2.8, cis-gcp 5.0 §2.9) — Log metric filter and alert on VPC network route changes.
Not every resource this pack contributes is a witness:
google— contributed, but no claim names it._logging _project _bucket _config .cis _central _metrics google— contributed, but no claim names it._project _iam _member .cis _central _sink _writer
History
| version | date | change |
|---|---|---|
| 1.7 | 2026-09-30 | every claim states its measure without satz: gcloud (the commands that meet the control the way the claim's resources do), gcloud_check (the commands that show whether it is met) and risk (what goes wrong without it); require and report-compliance carry them in each control's measures. Nothing emitted changes |
| 1.6 | 2026-09-12 | follows the rename: the alert project defaults to logsink_project_id |
| 1.5 | 2026-09-10 | two question blocks: the alert mailbox (cis_central_email — a wrong one drops every alert silently) and the hosting project (cis_central_bucket_project, default the logsink pack's project by reference). Nothing emitted changes |
| 1.4 | 2026-09-08 | the alert project defaults to logsink_project_name — the audit-logsink pack's own param, BY REFERENCE — so an estate using both packs wires nothing. The old default was the literal {customer, a project nothing creates, so an estate that did not override it pointed eight alert policies at a project that was never there. Used without the logsink pack the name is undeclared and the pack stops with unknown param, which is the honest failure: the alert project is then genuinely undecided |
| 1.3 | 2026-09-03 | CIS 4.0 claim ids were off by one — the eight alert controls are 4.0 §2.4–2.11 (§2.12 is DNS logging), not §2.5–2.12; the invented "§2.4 filters exist" claim is gone and the sink + channel now CONTRIBUTE to the first alert control (4.0 §2.4 / 5.0 §2.5). Resource labels keep the 5.0 numbers. Verified against Prowler, Google's InSpec profile and Tenable |
| 1.2 | 2026-08-24 | the log metric + alert stack for CIS 2.5–2.12 in one central logging project |
| 1.1 | 2026-08-22 | notification channel param; alert policy display names carry the control id |
| 1.0 | 2026-08-21 | first version |
The whole library's history: the changelog in presets/CHANGELOG.md.
Notes
Pairs with monitoring: one logging project holds both the archive and this alerting bucket, and cis_central_bucket_project defaults to that pack's project by reference. Without that pack the estate must set it — the pack stops rather than guess a project nothing creates.
The metrics are bucket-scoped, so every alert filter pins resource. For a project outside the organisation sweep there is project_cis_log_alerts; the two cover the same controls, so an estate uses one of them per project.