The pipe is measured; the reading is a record
“What do we scan to prove we operate a SIEM?” splits into limbs a rule settles — the trail exists and is tamper-evident — one an inventory hands to a reviewer, one the log itself answers, and one the indicator turns on: “persistently reviewed”, which lives in a case record no API returns. Two logging recipes, same plane, same rule engine, different ratings, show where the line falls.
The indicator is called Operating SIEM Capability, and its text asks that a security information and event management system — NIST’s glossary defines one, plainly, as a program that provides centralised logging for many log types — “is used and persistently reviewed for centralized, tamper-resistant logging of events, activities, and changes.” The question your team will be asked is “what do we scan to prove that?” Read the sentence again and notice it has two verbs. Used is a property of a pipe, and every piece of the pipe is a rule. Reviewed is something a person does, and no API in the estate returns it.
The pipe is unusually well served. A trail is on or it is not; it covers every Region or it does not; it delivers hashed files and a signed digest every hour or it does not; an alarm has an action or it does not. Each of those is an AWS Config managed rule with an empty non-compliant set as the pass. For once the indicator’s own adjective — tamper-resistant— is the measured part: AWS documents log-file validation as SHA-256 hashing with RSA-signed digests, which makes editing, deleting or forging a delivered file detectable. The word the machine cannot reach is the verb after it.
“Do we operate a SIEM?”
Records are generated, account-wide
A trail is on and at least one trail is multi-region, so management events are captured in every Region rather than the one someone remembered — two empty NON_COMPLIANT sets.
measured · answered by A rule with an empty set
The records are tamper-resistant
Log-file validation is on, so every delivered file is hashed and every hour's digest is signed — modifying, deleting or forging a file becomes detectable — and the logs are encrypted at rest. Two more empty sets.
measured · answered by A rule with an empty set
The right events are watched, and kept long enough
Which log patterns publish a metric, which alarms sit on them, and how many days each log group retains — complete listings whose verdict is a comparison against the events you meant to watch and the retention you promised.
cited · answered by An inventory to compare
The events actually land in the central store
That a console login or a policy change made at a known time appears in the trail with that time on it — a query whose rows prove the pipe carried a real event, and nothing about what happened next.
cited · answered by The log itself, queried
Someone persistently reviews
That a person read what the pipe delivered, decided whether it mattered, and reported the finding — the second verb in the indicator, held by the ticket the alert opened and the note that closed it.
cited · answered by No scan — a review record
The two measured limbs are properties of the trail. The three unmeasured ones fail in three different ways, and the step turns on keeping them apart. An inventory— which patterns are watched, how long each log group is kept — is complete and silent on whether it is the set you meant. A query over the log proves an event landed, at a time: a fact about the past, and not the fact you were asked for. And the review was never in the estate at all.
Here is the distinction in two recipes from this site’s own corpus. Same plane, the same rule engine, neighbouring subject matter — and different ratings:
AWS Config compliance results proving the audit trail exists and is protected — CloudTrail enabled and multi-region so management events are captured account-wide, log-file validation on so records are tamper-evident, and SSE-KMS encryption on so the logs themselves are protected at rest
fetch
$ aws configservice get-compliance-details-by-config-rule --config-rule-name cloudtrail-enabled --compliance-types NON_COMPLIANT$ aws configservice get-compliance-details-by-config-rule --config-rule-name multi-region-cloudtrail-enabled --compliance-types NON_COMPLIANT$ aws configservice get-compliance-details-by-config-rule --config-rule-name cloud-trail-log-file-validation-enabled --compliance-types NON_COMPLIANT$ aws configservice get-compliance-details-by-config-rule --config-rule-name cloud-trail-encryption-enabled --compliance-types NON_COMPLIANT$ aws configservice describe-configuration-recorder-status$ aws configservice describe-config-rule-evaluation-status --config-rule-names cloudtrail-enabled$ aws configservice describe-config-rule-evaluation-status --config-rule-names multi-region-cloudtrail-enabled$ aws configservice describe-config-rule-evaluation-status --config-rule-names cloud-trail-log-file-validation-enabled$ aws configservice describe-config-rule-evaluation-status --config-rule-names cloud-trail-encryption-enabled$ aws ec2 describe-regions --query 'Regions[].RegionName' --output text$ aws organizations list-accounts --query 'Accounts[].Id' --output textmaps to: au-2, au-9, au-12 · cadence: continuous · full recipe: /collect/config-cloudtrail-audit-logging
Four managed rules, four empty sets. A trail exists, it is multi-region, its files are validated, its logs are encrypted — and every one of those is a verdict the rule engine carries per trail. That is why it rates as it does. Notice what its own notes refuse to claim: this is the trail's existence and protection, not review of its contents. The recipe knows which verb it proves.
The metric filters that turn audit log events into metrics, the alarms built on them, and Config's confirmation that those alarms actually notify someone — the automated-mechanism half of audit review
fetch
$ aws logs describe-metric-filters --query 'metricFilters[].{Filter:filterName,LogGroup:logGroupName,Pattern:filterPattern,Metric:metricTransformations[0].metricName}'$ aws cloudwatch describe-alarms --alarm-types MetricAlarm CompositeAlarm --query 'MetricAlarms[].{Name:AlarmName,Metric:MetricName,State:StateValue,Actions:AlarmActions}'$ aws configservice get-compliance-details-by-config-rule --config-rule-name cloudwatch-alarm-action-check --compliance-types NON_COMPLIANTmaps to: au-6, au-6.1 · cadence: weekly · full recipe: /collect/cloudwatch-log-review-alerting
This recipe ends in a managed rule too — no alarm without an action, an empty set as the pass — and its first two commands are listings of the filters and alarms that make up the alerting pipe. It rates lower anyway, and its notes say why: no API proves a person read the alert, judged it, and reported the finding. The pipe reaches a human; that is the last thing the machine can witness. It even warns you about the inventory: a metric filter only publishes for events after it was created, so a filter made yesterday says nothing about last month.
Now look at what neither recipe claims. Neither reads a single event out of the log. That is a third thing a machine can do — lookup-events, a Logs Insights query, Athena over the trail bucket — and it is worth knowing what it proves: that a particular event landed, with a timestamp, or that the signed digest chain has no missing hour. AWS’s own documentation says validation lets you “assert positively that no log files were delivered to your account during a given period.” Those are facts about the past. A row in a query result is not a review of that row.
So the judgement, stated plainly: the pipeis measured — generated, tamper-evident, alarmed, routed to a person, each as a rule with an empty set. What is watched and kept is an inventory: a listing whose verdict is your comparison against the events you meant to watch and the retention you promised. That events landedis the log’s own testimony about the past. And the reviewis a record — the ticket an alert opened, the judgement written in it, the person it was reported to. A team that answers the question with the four managed rules has proved that the SIEM is used. It has not proved that it is reviewed, and the indicator asks for both.
Eight questions follow. Sort each into the thing that answers it. Two belong to the log itself and two to a review record, and one of the record’s two is designed to feel like an alarm-history lookup.
The deliverable this step points at is a join. On one side, the alarm list for the period, dated, from the estate. On the other, the case record: one entry per alert that fired, with who looked, what they decided, and where a real finding went. Where the two sides match one-for-one, the review is evidenced. Where an alarm fired and no entry exists, the honest finding is the one the indicator anticipates — the pipe is used; the reading has a gap — and the fix is a process, not a rule.
Every recipe named here is at /collect, and the controls behind this indicator — including the one about someone else’s estate that closes as an agreement rather than a scan — are on /frontier.
Exit check — a customer asks “what do we scan to prove we operate a SIEM?” What do you say first?
Split the sentence at its two verbs. That the trail is on everywhere, tamper-evident, and that every alarm reaches someone, are rules with an empty set — collected continuously, verdict in the output. Which patterns are watched and how long logs are kept is an inventory whose verdict is your comparison. That an event actually landed is the log’s testimony about the past. That a person read it, judged it and reported it is a record. If you can also say why the alerting recipe and the trail recipe both rate partial— both read by AWS Config, one with its check written and one without — and why a delivered notification is not a review, the step held.