Domain 3, Infrastructure Security, finished with Day 5. Now Domain 1, Detection, begins. Today: how to decide what to monitor, health checks with Route 53, ELB and Synthetics, turning CloudTrail logs into metrics with metric filters, smarter alarms with composite alarms and anomaly detection, EventBridge rules and SNS for findings, and bringing events from many accounts into one place.
Skill 1.1.1 monitoring requirementsSkill 1.1.2 health checksSkill 1.1.3 aggregate eventsSkill 1.1.4 metrics, alerts, dashboards~90 min read + 30 min lab
01
Analyzing workloads for monitoring requirements
Domain 1, Detection, is about seeing trouble early. Skill 1.1.1 asks you to look at a workload and decide what to monitor. The exam rarely asks “which service exists?”. It asks “which signal answers this requirement with the least effort?”. So start from the requirement, not from the tool.
Every requirement maps to one of five kinds of signal: metrics (numbers over time), logs (records of what happened), events (something just changed), health checks (is it reachable and working?) and findings (a security service thinks something is wrong). Today covers the first four and how to alert on them. Findings get a full day tomorrow.
Concept profile
Requirement-driven monitoring
often confused with Collecting every log and metric
?What is it?
A way of planning detection: list the assets, threats, compliance rules and response times for a workload, then pick the smallest set of signals, alarms and notifications that covers them.
⚙How does it work?
List assets and data sensitivity: public website, API with personal data, admin consoles, keys.
List threats: root use, stolen credentials, unauthorized API calls, outages, DDoS, data leaks.
Add compliance needs: CIS AWS Foundations controls expect specific metric filters and alarms.
Decide who must know and how fast: an email, an on-call page, or an automatic fix.
Choose the signal: metric → alarm; log → metric filter → alarm; event → EventBridge rule; reachability → health check or canary.
{ }Structure
Requirements first, then the five kinds of signal.
⇄Requirement-driven monitoring vs Collecting every log and metric
Requirement-driven
Collect everything
Starting point
Threats, assets, compliance
Every service’s logs
Alerts
Few, meaningful, owned
Many, noisy, ignored
Cost
Controlled
High ingestion and storage
Gaps
Visible and decided
Hidden in the noise
Exam hint
“most operationally efficient”
Rarely the best answer
!Common mistakes the exam tests
Choosing a log source when the requirement is near real time: an EventBridge rule reacts in seconds; a daily Athena query does not.
Monitoring only CPU and memory: a security workload also needs API activity (CloudTrail) and network signals.
Alerting with no owner: every alarm needs an SNS target or an automated action.
Forgetting that many AWS metrics exist for free, but OS-level memory and disk need the CloudWatch agent.
Building custom scripts when a managed feature exists (health checks, canaries, anomaly detection).
✓Benefits and use cases
Write a monitoring plan before go-live.
Prove compliance with CIS alarm requirements.
Cut alert fatigue so real attacks are noticed.
Think of it like · a shop’s security plan
A shop owner doesn’t put cameras everywhere. They decide what matters first.
AWS concept
Familiar thing
Assets
≈
The till, the safe, the expensive shelf
Metrics
≈
The visitor counter at the door
Logs
≈
The CCTV recording you can rewind
Events
≈
The door sensor that beeps the moment it opens
Health checks
≈
Calling the shop every morning to check someone answers
SNS notification
≈
The text message to the owner’s phone
Real AWS example · find the metrics a service already publishes
Before building anything, check which metrics exist for free. Here: target 5xx errors on an ALB.
Memory and disk use inside an EC2 instance are not in this list by default: install the CloudWatch agent for those.
Exam-style scenario
A company runs an API that stores customer data. The security team must be told within minutes whenever the root user signs in or calls any API, and the solution must meet the CIS AWS Foundations Benchmark. What should the team build?
A. A daily Athena query over CloudTrail logs in S3.
B. A CloudTrail trail that sends to CloudWatch Logs, a metric filter with the CIS root-usage pattern, an alarm with threshold 1, and an SNS topic.
C. A CloudWatch dashboard that the team checks each morning.
D. An ELB health check on the API.
Show the worked answer
Answer: B
This is exactly the CIS pattern that Security Hub CSPM control CloudWatch.1 checks, and it alerts within minutes.
Why not the others
A: Daily is not “within minutes”.
C: Dashboards don’t notify anyone.
D: Health checks test reachability, not who is calling APIs.
How the exam tests this
“Least effort to see an existing AWS metric”→ Use the built-in CloudWatch metric.
“Memory or disk use on EC2”→ CloudWatch agent.
“Alert on a pattern in logs”→ Metric filter → alarm.
“React within seconds to a change”→ EventBridge rule.
Skill 1.1.2 gives one example by name: resource health checks. AWS has three kinds, and the exam tests which one fits. Route 53 health checks test endpoints from outside and can drive DNS failover. ELB health checks decide which targets get traffic. CloudWatch Synthetics canaries run a script that behaves like a real user.
Concept profile
Route 53 health check
often confused with ELB health check
?What is it?
A check run by Route 53 health checkers in many locations around the world. It can test an endpoint, combine other health checks, or follow a CloudWatch alarm’s data. Its status can drive DNS failover and its own CloudWatch metric and alarm.
⚙How does it work?
Endpoint check: HTTP, HTTPS or TCP to an IP or domain name, every 10 or 30 seconds. HTTP(S) needs a 2xx or 3xx status; optional string matching in the first 5,120 bytes of the body.
The endpoint is healthy if more than 18% of health checkers report it healthy.
Calculated check: healthy when enough of its child checks are healthy (up to 255 children).
CloudWatch alarm check: follows the alarm’s data stream. This is how you check resources that health checkers on the internet can’t reach, such as private instances.
HTTPS checks don’t validate the TLS certificate, so an expired certificate doesn’t fail them.
{ }Structure
Three kinds of health check, three different questions.
⇄Route 53 health check vs ELB health check
Route 53 health check
ELB health check
Who checks
Global health checkers on the internet
The load balancer, inside the VPC
Checks
Public endpoints, other checks, alarms
Each registered target
Result used for
DNS failover, alarms, notifications
Routing traffic only to healthy targets
Private targets
Only via a CloudWatch alarm check
Yes
Exam hint
“fail over to another Region”
“stop sending traffic to a failed instance”
!Common mistakes the exam tests
Pointing an endpoint check at a private IP: health checkers on the internet can’t reach it. Use a CloudWatch alarm health check.
Using a CloudWatch alarm from another account in a Route 53 health check: not supported.
Expecting an HTTPS health check to catch an expired certificate: it doesn’t validate certificates. Use a canary or ACM expiry events.
Thinking an ALB stops all traffic when every target fails: it fails open and sends traffic to all targets.
Leaving an Auto Scaling group on EC2 status checks only: turn on ELB health checks so it replaces instances the load balancer marks unhealthy.
✓Benefits and use cases
Active-passive failover between Regions with Route 53.
Alerting when a public site stops answering.
Removing failed instances from service automatically.
ELB health checks and CloudWatch Synthetics
An ALB target group checks each target with HTTP or HTTPS. By default it checks every 30 seconds with a 5-second timeout, takes a target out after 2 failures, puts it back after 5 successes, and expects status 200. A CloudWatch Synthetics canary is a script (Node.js, Python or Java) that runs as a Lambda function on a schedule, as often as once per minute. Browser canaries use Playwright, Puppeteer or Selenium to click through pages, take screenshots and check content, so they also catch defacement or injected scripts. Canaries publish metrics such as SuccessPercent in the CloudWatchSynthetics namespace, and they can run inside a VPC to test internal endpoints.
Think of it like · checking on a restaurant
Three ways to know if a restaurant is working.
AWS concept
Familiar thing
Route 53 endpoint check
≈
Friends in many cities phone the restaurant; if most can’t get through, it’s closed
18% rule
≈
It counts as open if more than a small share of friends get an answer
Calculated check
≈
The chain is “open” if at least 3 of its 5 branches are open
ELB health check
≈
The head waiter checks each cook; a sick cook gets no new orders
Synthetics canary
≈
A mystery shopper who orders a meal every minute and reports the experience
Fail open
≈
If every cook looks sick, the waiter still sends orders to all of them
Real AWS example · Route 53 HTTPS health check with string matching
Check /health every 10 seconds from outside and look for the word OK.
Route 53 publishes a HealthCheckStatus metric in AWS/Route53 (us-east-1). Put an alarm on it to get notified.
Exam-style scenario
A company’s web app runs on EC2 instances in private subnets behind an internal ALB. Users reach it through a VPN. The company wants Route 53 DNS failover to a standby Region when the primary app is unhealthy. What should it configure?
A. A Route 53 HTTP endpoint health check on the private IP of the ALB.
B. A CloudWatch alarm on the ALB HealthyHostCount metric, and a Route 53 health check that monitors that alarm.
C. An ELB health check only.
D. A Synthetics canary in another account with a Route 53 health check on its cross-account alarm.
Show the worked answer
Answer: B
Route 53 health checkers can’t reach private endpoints; a CloudWatch alarm health check follows the alarm’s data instead.
Why not the others
A: Health checkers are on the internet and can’t reach private IPs.
C: ELB checks don’t drive DNS failover.
D: Alarms in another account aren’t supported for Route 53 health checks.
How the exam tests this
“DNS failover between Regions”→ Route 53 health check + failover records.
“Health of a private resource for failover”→ CloudWatch alarm health check.
“Healthy only if 2 of 3 web tiers are up”→ Calculated health check.
“Test the checkout flow every minute”→ Synthetics canary.
“Replace instances that fail the load balancer’s check”→ ASG with ELB health checks.
CloudWatch metrics and metric filters on CloudTrail
Many security signals start as log lines, not numbers. A metric filter turns matching log events into a CloudWatch metric, so you can put an alarm on it. The classic exam case: send CloudTrail to CloudWatch Logs and alert on root user activity, unauthorized API calls and console sign-in without MFA.
Concept profile
CloudWatch Logs metric filter
often confused with Subscription filter / Logs Insights
?What is it?
A pattern on a log group. Each time a new log event matches, CloudWatch Logs publishes a value (usually 1) to a custom metric that alarms and dashboards can use.
⚙How does it work?
The CloudTrail trail must deliver to a CloudWatch Logs log group (with an IAM role for CloudTrail). A trail that writes only to S3 can’t feed a metric filter.
The filter pattern matches JSON fields, for example $.errorCode or $.userIdentity.type.
Set metric value 1 and default value 0, then alarm on Sum ≥ 1.
Metric filters work only on log groups in the Standard log class.
They are not retroactive: only events after the filter is created are counted.
{ }Structure
From an API call to a phone notification.
⇄Metric filter vs Subscription filter / Logs Insights
Metric filter
Subscription filter / Logs Insights
Output
A number (metric)
Stream of log events / query results
Typical next step
Alarm → SNS
Lambda, Firehose, OpenSearch / a person reading
Timing
Continuous
Continuous / on demand
Past data
No, new events only
Insights can query history
Exam hint
“alarm when X appears in logs”
“stream logs to another system” / “investigate”
!Common mistakes the exam tests
Creating the filter and expecting it to count last week’s root logins: it starts from now.
Changing the CIS pattern: Security Hub CSPM fails controls CloudWatch.1 to CloudWatch.3 unless the exact CIS patterns are used.
Trail is single-Region or writes only to S3: use a multi-Region trail that sends to CloudWatch Logs.
In member accounts of an organization trail, these controls can show NO_DATA: check them in the delegated administrator account.
Adding dimensions and also a default value: you can’t set a default value when the metric has dimensions.
✓Benefits and use cases
CIS alarms: root use, unauthorized calls, no-MFA sign-in, IAM policy changes, security group changes.
Counting application errors from logs.
Turning any log text into an alarm.
Metrics basics the exam expects
A metric belongs to a namespace (for example AWS/EC2), has a name and up to several dimensions, and is read with a statistic (Sum, Average, Maximum, percentiles) over a period. AWS services publish many metrics for free; your own app or a metric filter publishes custom metrics (one example is LogMetrics, the namespace the CIS remediation steps use). The two other CIS patterns to recognise are {($.errorCode="*UnauthorizedOperation") || ($.errorCode="AccessDenied*")} for unauthorized API calls, and a ConsoleLogin pattern with $.additionalEventData.MFAUsed != "Yes" for sign-in without MFA.
Think of it like · a school attendance book
Turning written records into numbers someone watches.
AWS concept
Familiar thing
CloudTrail log
≈
The diary where every visit to the office is written
Metric filter
≈
A teacher who puts a tally mark each time “headteacher’s key used” appears
Default value 0
≈
Writing “0” on days with no visits, so the page is never blank
Not retroactive
≈
The teacher only counts from the day they started, not old pages
Alarm Sum ≥ 1
≈
One tally mark is enough to call the parents
SNS
≈
The phone call to the parents
Real AWS example · CIS unauthorized API calls filter and alarm
Create the metric filter on the CloudTrail log group, then an alarm that notifies the security topic.
Real accounts produce some AccessDenied noise. CIS still expects this alarm; teams often route it to a low-priority channel.
Exam-style scenario
A security engineer created a metric filter for root user activity on the CloudTrail log group yesterday. The auditor asks for the number of root logins in the past 30 days. The metric shows only data from yesterday onward. What should the engineer do to answer the auditor?
A. Delete and recreate the metric filter so it reprocesses old logs.
B. Run a CloudWatch Logs Insights query (or CloudTrail event history / Athena) over the past 30 days; the metric filter only counts new events.
C. Change the default value to 1.
D. Add a dimension to the metric.
Show the worked answer
Answer: B
Metric filters are not retroactive; querying the stored logs answers history questions.
Why not the others
A: Recreating doesn’t reprocess old events.
C: The default value only fills periods with no matches.
D: Dimensions don’t add history.
How the exam tests this
“Alarm on root user activity”→ CloudTrail → CW Logs → metric filter → alarm → SNS.
“Metric filter shows no old data”→ Not retroactive; query the logs.
“CIS control fails though alarm exists”→ Use the exact CIS pattern.
“Stream matching logs to Lambda”→ Subscription filter, not metric filter.
“Gaps in the metric”→ Set default value 0.
Must remember
Trail must send to CloudWatch Logs.
Metric filters: new events only, Standard log class.
An alarm watches one metric (or a metric math expression) and changes state. For skill 1.1.4 you need to tune alarms so they catch real problems and stay quiet otherwise. The tools are M out of N evaluation, missing data handling, composite alarms that combine several alarms, and anomaly detection bands that learn what normal looks like.
Concept profile
Composite alarm
often confused with Metric alarm
?What is it?
An alarm whose state comes from a rule over other alarms’ states, using ALARM(), OK(), INSUFFICIENT_DATA(), TRUE, FALSE and the operators AND, OR and NOT.
⚙How does it work?
Create the child metric alarms first, often without actions, so they don’t page anyone on their own.
The composite alarm rule can reference up to 100 child alarms.
Actions: SNS, Lambda, Systems Manager OpsItems or Incident Manager incidents, and CloudWatch investigations. OK and INSUFFICIENT_DATA actions: SNS and Lambda.
ActionsSuppressor: name an alarm (for example “deployment running”). While it is in ALARM, the composite alarm’s actions are muted, with a wait period and an extension period around it.
{ }Structure
Several weak signals combined into one strong alert.
⇄Composite alarm vs Metric alarm
Composite alarm
Metric alarm
Watches
Other alarms’ states
One metric or math expression
Logic
AND / OR / NOT
Threshold or anomaly band
EC2 / Auto Scaling actions
No
Yes
Best for
Reducing alert noise
A single measurable condition
Exam hint
“only when both…”, “reduce alarm fatigue”
“when CPU exceeds 80%”
!Common mistakes the exam tests
Choosing a composite alarm to stop an EC2 instance: composite alarms can’t do EC2 or Auto Scaling actions.
Leaving actions on every child alarm: the team still gets every page. Put actions on the composite.
Creating composite alarms that reference each other in a cycle: evaluation stops; set one rule to FALSE to break it.
Using a static threshold on a metric with strong daily and weekly patterns: use anomaly detection.
Ignoring missing data: an error metric that only reports when errors happen should treat missing data as notBreaching.
✓Benefits and use cases
Page only when errors AND latency are high.
Mute alerts during planned deployments.
One “service health” alarm built from many signals.
Anomaly detection and missing data
Anomaly detection trains on up to two weeks of a metric’s history and learns hourly, daily and weekly patterns and trends. It draws a band of expected values; a higher threshold value makes the band wider. An anomaly detection alarm has no static threshold: it fires when the metric goes above the band, below it, or either. You can exclude time periods such as deployments from training, and use it on metric math expressions. Every alarm has three states: OK, ALARM, INSUFFICIENT_DATA. Datapoints to alarm gives “M out of N” (for example 3 out of 5 periods). TreatMissingData can be missing (the default), notBreaching, breaching or ignore.
Think of it like · a home alarm system
How a smart home decides when to wake you.
AWS concept
Familiar thing
Metric alarm
≈
One sensor: the kitchen smoke detector
Composite alarm
≈
Wake me only if smoke AND heat sensors both trigger
Actions suppressor
≈
Silence alarms while I’m cooking dinner
Anomaly detection
≈
The system learned the door opens at 8 am daily; it alerts at 3 am
M out of N
≈
Only ring if the sensor trips 3 times in 5 minutes, not once
Treat missing as breaching
≈
If a sensor goes silent, assume the worst
Real AWS example · composite alarm muted during deployments
Page the on-call team only if CPU or errors are high, and not while a deployment runs.
$ aws cloudwatch put-composite-alarm --alarm-name shop-health \
--alarm-rule '(ALARM("cpu-high") OR ALARM("api-5xx-high")) AND NOT ALARM("deploy-running")' \
--actions-suppressor deploy-running \
--actions-suppressor-wait-period 120 \
--actions-suppressor-extension-period 300 \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:oncall
The child alarms cpu-high and api-5xx-high have no actions of their own.
Exam-style scenario
An e-commerce site’s login traffic is high every weekday morning and low at night. A static alarm on failed logins either pages every morning or misses a credential-stuffing attack at 2 am. What is the most operationally efficient fix?
A. Create a separate static alarm for each hour of the day.
B. Use a CloudWatch anomaly detection alarm on the failed-login metric that fires when the value is above the band.
C. Lower the static threshold.
D. Use a composite alarm with one child alarm.
Show the worked answer
Answer: B
Anomaly detection learns daily and weekly patterns and alerts on unusual values at any hour.
Why not the others
A: Works, but heavy to maintain; not efficient.
C: More false alarms every morning.
D: A composite alarm with one child adds nothing.
How the exam tests this
“Alert only if two conditions are both true”→ Composite alarm with AND.
“Silence alerts during maintenance”→ ActionsSuppressor.
“Normal changes by hour and weekday”→ Anomaly detection alarm.
“Avoid alerts on one short spike”→ M out of N datapoints.
“Metric only reports on errors”→ TreatMissingData notBreaching.
Must remember
Composite: AND/OR/NOT, up to 100 children.
Composite actions: SNS, Lambda, SSM; no EC2/ASG.
Anomaly band: two weeks of training; above/below/both.
EventBridge rules, SNS notifications and dashboards
Alarms watch numbers over time. Many security signals are single events: a GuardDuty finding, a Security Hub finding, a security group change, a Config rule turning NON_COMPLIANT. An EventBridge rule matches these events by pattern the moment they arrive and sends them to a target, often an SNS topic for people or a Lambda function for automatic response.
Concept profile
EventBridge rule
often confused with CloudWatch alarm
?What is it?
A rule on an event bus with an event pattern (source, detail-type and detail fields) and up to five targets. AWS services send events to the default event bus in the same account and Region.
⚙How does it work?
GuardDuty: source aws.guardduty, detail-type GuardDuty Finding. New findings arrive in near real time; repeat occurrences are grouped, every 6 hours by default (the administrator can set 15 minutes or 1 hour). Suppressed findings are not sent.
Security Hub CSPM: detail-type Security Hub Findings - Imported for every new finding and every update.
In a multi-account setup, the administrator account receives events for member findings too.
CloudTrail API calls appear as AWS API Call via CloudTrail events (a trail is needed for most of them).
Targets: SNS, Lambda, Step Functions, SSM Automation, SQS, an event bus in another account, and more.
{ }Structure
One rule, many sources, many targets.
⇄EventBridge rule vs CloudWatch alarm
EventBridge rule
CloudWatch alarm
Input
Single events
Metric data over periods
Decision
Pattern match
Threshold or anomaly band
Speed
Seconds after the event
After the evaluation periods
Typical source
Findings, API calls, state changes
Metrics, metric filters
Exam hint
“when a finding is created”
“when the count exceeds”
!Common mistakes the exam tests
Building a Lambda that polls GuardDuty every minute: use an EventBridge rule.
Creating the rule in a member account to catch all accounts: put it in the administrator account (or forward events).
Encrypting the SNS topic with the AWS managed key aws/sns: CloudWatch and EventBridge can’t publish. Use a customer managed key whose policy allows cloudwatch.amazonaws.com / events.amazonaws.com.
Forgetting the SNS topic policy must allow the publishing service.
Expecting rules in one Region to see findings from other Regions without aggregation.
✓Benefits and use cases
Email the team for high-severity findings.
Auto-remediate a public S3 bucket with Lambda.
Open a ticket in a third-party tool.
SNS notifications and dashboards
Amazon SNS fans one message out to email, SMS, HTTPS endpoints, Lambda, SQS and chat tools. For an encrypted topic, the KMS key must be customer managed and its key policy must give the publishing service kms:GenerateDataKey* and kms:Decrypt. CloudWatch dashboards show metrics, alarms and log query results on one screen; one dashboard can include metrics from several Regions, and with cross-account sharing, from several accounts. A dashboard is for people looking; it never notifies anyone by itself.
Think of it like · an airport control room
Different tools for different kinds of news.
AWS concept
Familiar thing
Event bus
≈
The radio channel every department speaks on
Rule pattern
≈
A controller listening only for “emergency” calls from runway 2
Target
≈
The person or team the call is forwarded to
SNS topic
≈
The public address system: one message, many speakers
Dashboard
≈
The big wall of screens; useful only if someone looks
Customer managed KMS key
≈
A key to the PA room that you can lend to the radio team
Real AWS example · email high-severity GuardDuty findings
Rule on the default bus with numeric matching; target is an SNS topic.
The topic policy must allow events.amazonaws.com to sns:Publish. The console adds this for you; the CLI does not.
Exam-style scenario
A company encrypts its security-alerts SNS topic with the AWS managed key aws/sns. A new EventBridge rule for Security Hub CSPM findings targets the topic, but no emails arrive. The rule shows matched events and failed invocations. What should the engineer do?
A. Turn off the rule and use a dashboard.
B. Re-encrypt the topic with a customer managed KMS key whose key policy allows events.amazonaws.com kms:GenerateDataKey* and kms:Decrypt.
C. Add the GuardDuty service principal to the topic policy.
D. Change the detail-type to Security Hub Insight Results.
Show the worked answer
Answer: B
EventBridge can’t use the aws/sns key because its policy can’t be edited; a customer managed key with the right key policy fixes delivery.
Why not the others
A: Dashboards don’t notify.
C: The publisher is EventBridge, not GuardDuty.
D: Insight Results is for custom actions; the pattern already matches.
How the exam tests this
“Notify on new GuardDuty findings”→ EventBridge rule → SNS.
“Faster updates for repeat findings”→ Admin sets frequency to 15 minutes.
Real companies have dozens or hundreds of accounts in many Regions. Skill 1.1.3 asks you to aggregate security and monitoring events so one team can see and alert on everything from one place. Three features do most of the work: CloudWatch cross-account observability, cross-account EventBridge event buses and the Security Hub home Region.
Concept profile
CloudWatch cross-account observability
often confused with Cross-account cross-Region console
?What is it?
A feature that links source accounts to a monitoring account in a Region, so the monitoring account can search, graph and alarm on their metrics, logs and traces as if they were its own.
⚙How does it work?
The monitoring account creates a sink (one per Region). Each source account creates a link to it. This is the Observability Access Manager (OAM).
Shared types: CloudWatch metrics, log groups, X-Ray traces, Application Signals, Application Insights and Internet Monitor monitors.
One monitoring account can have up to 100,000 source accounts; one source account can share with up to five monitoring accounts.
Use AWS Organizations so new accounts are onboarded automatically.
You can create alarms and anomaly detectors in the monitoring account on source account metrics.
{ }Structure
Three ways to bring many accounts into one view.
⇄Cross-account observability vs Cross-account cross-Region console
Cross-account observability
Cross-account cross-Region console
Setup
OAM sink + links
CloudWatch-CrossAccountSharingRole in each account
Logs
Yes
No
Alarms on other accounts’ metrics
Yes
No
Regions
Per Region (sink in each)
Across Regions
Exam hint
“central account, metrics, logs and traces”
“cross-Region dashboard”
!Common mistakes the exam tests
Expecting one sink to cover all Regions: a sink is per Region.
Choosing the older cross-account console when the question needs logs or alarms on source metrics.
Thinking a monitoring account re-shares its sources’ data onward: an account shares only its own data.
Selecting more data types in the source link than the sink allows: link creation fails.
Linking accounts one by one when the company uses Organizations: link the organization or OU.
✓Benefits and use cases
A central operations or security account for all workloads.
Alarms in one place for metrics from many accounts.
Searching logs across accounts during an incident.
Cross-account EventBridge buses and the Security Hub home Region
To send events to another account, the receiving account adds a resource-based policy to its event bus that allows specific accounts or the whole organization (for example with aws:PrincipalOrgID). The sending account creates a rule whose target is that bus ARN; new cross-account bus targets need an IAM role in the sender. The sender pays for the events. Events that arrive from another account are not forwarded again to a third account. For findings, Security Hub CSPM cross-Region aggregation (the aggregation Region is now called the home Region) replicates findings, insights, control statuses and security scores from linked Regions to one home Region, both ways, at no extra cost. It only collects from Regions where Security Hub CSPM is already enabled. Combined with a delegated administrator, one account and one Region see the whole organization. Day 2 goes deeper into Security Hub.
Think of it like · a school district office
Many schools, one office that sees everything.
AWS concept
Familiar thing
Monitoring account
≈
The district office
Source account link
≈
Each school agrees to send its attendance sheets to the office
Sink per Region
≈
Each city has its own district office
Event bus policy
≈
The office’s mailbox only accepts letters from district schools
Security Hub home Region
≈
The head office that gets copies of every city’s incident reports
No re-forwarding
≈
The office doesn’t pass your letters on to another district
Real AWS example · central security event bus for the organization
Resource policy on the receiving bus in the security account, then a forwarding rule in each member account.
On the receiving bus, a rule without an account field matches events from every authorized account.
Exam-style scenario
A company has 80 accounts in AWS Organizations. The operations team wants to search application logs and create CloudWatch alarms on metrics from all accounts in eu-west-1 from one central account. New accounts must be included automatically. What is the most operationally efficient solution?
A. Enable the CloudWatch cross-account cross-Region console with a sharing role in each account.
B. Set up CloudWatch cross-account observability: create a sink in the central account in eu-west-1 and link the organization as source accounts.
C. Export all logs to S3 and query with Athena.
D. Create an EventBridge rule in each account that sends metrics to a central bus.
Show the worked answer
Answer: B
Cross-account observability shares logs and metrics, supports alarms on source metrics, and onboards new organization accounts automatically.
Why not the others
A: That console doesn’t support logs or alarms on other accounts’ metrics.
C: Works for history, but no alarms and more effort.
D: EventBridge carries events, not metric streams for alarms.
Cheatsheet extras: target permissions, monitoring intervals and alert recipes
Your cheat sheet spends a whole page on troubleshooting alerts that “don’t fire”. The top cause is permissions on the target, especially the difference between a Lambda function’s function policy and its execution role. It also lists a few classic CloudTrail events every security team should alert on, and the EC2 monitoring intervals.
Concept profile
Lambda function policy
often confused with Lambda execution role
?What is it?
A resource-based policy attached to a Lambda function. It lists which AWS services or accounts may call lambda:InvokeFunction on it, for example an EventBridge rule, an S3 bucket or an SNS topic.
⚙How does it work?
When you add a trigger in the console, Lambda writes the statement for you. With the CLI, CloudFormation or Terraform you must add it yourself (aws lambda add-permission or an AWS::Lambda::Permission resource).
The statement names the service principal (for example events.amazonaws.com) and should limit it with aws:SourceArn (the rule ARN) or aws:SourceAccount.
EventBridge uses resource-based policies for Lambda, SNS, SQS and CloudWatch Logs targets. For other targets (Kinesis, Step Functions, SSM Run Command or Automation, ECS tasks) it assumes an IAM role you give it.
If delivery fails, EventBridge retries for up to 24 hours (up to 185 attempts) and increases the FailedInvocations metric. Add an SQS dead-letter queue to the target to keep failed events.
Older material calls EventBridge “CloudWatch Events”. It is the same service and API; the default event bus is the old CloudWatch Events bus.
{ }Structure
Two different doors: one lets callers in, the other lets the function act.
⇄Lambda function policy vs Lambda execution role
Lambda function policy
Lambda execution role
Type
Resource-based policy on the function
IAM role the function assumes
Answers
“Who may invoke this function?”
“What may this function do?”
Typical content
events.amazonaws.com, s3.amazonaws.com, sns.amazonaws.com, another account
The execution role still needs ec2:TerminateInstances and the logs permissions; this statement only lets the rule call the function.
Exam-style scenario
A security engineer used CloudFormation to create an EventBridge rule that matches RunInstances calls without an approved tag and targets a Lambda function that terminates the instance. CloudWatch shows TriggeredRules and FailedInvocations increasing, but the function has no log streams. What should the engineer fix?
A. Add ec2:TerminateInstances to the function’s execution role.
B. Add a statement to the function’s resource-based policy that allows events.amazonaws.com to invoke it, limited by the rule ARN.
C. Turn on CloudTrail data events for EC2.
D. Give EventBridge an IAM role with lambda:InvokeFunction and attach it to the rule.
Show the worked answer
Answer: B
The rule matches but cannot invoke the function, and the function never ran (no logs). For Lambda targets, EventBridge relies on the function’s resource-based policy.
Why not the others
A: Needed later for the action, but the function never started.
C: RunInstances is a management event; the rule already matches.
D: EventBridge uses roles for targets such as Kinesis or Step Functions, not for Lambda.
Monitoring intervals and what CloudWatch can’t see
EC2 sends metrics to CloudWatch every 5 minutes for free (basic monitoring). Detailed monitoring sends them every 1 minute for an extra charge, and custom high-resolution metrics can go down to 1 second. Faster data means alarms can react sooner. The hypervisor can’t see inside the guest, so memory, disk space and running processes need the CloudWatch agent (the procstat plugin tracks processes). Older material says “CloudWatch can’t record processes”; today the agent can.
Each one works as an EventBridge rule on “AWS API Call via CloudTrail” (fast, per event, needs a trail) or as a metric filter plus alarm on the CloudTrail log group (counts and thresholds). People who only need to look at dashboards and alarms get CloudWatchReadOnlyAccess, not admin rights.
“The EventBridge rule fires but nothing happens” is a permissions question about the target. Lambda, SNS and SQS targets need a resource-based policy (function policy, topic policy, queue policy); an encrypted SNS topic or SQS queue also needs a customer managed KMS key that lets events.amazonaws.com use it.
How the exam tests this
“Rule matched, function never invoked”→ Add lambda:InvokeFunction for events.amazonaws.com to the function policy.
“Function ran, could not terminate the instance”→ Fix the execution role.
“Lambda produces no logs”→ Execution role lacks CreateLogGroup / CreateLogStream / PutLogEvents.
“Alarm must react within 1–2 minutes on EC2 metrics”→ Turn on detailed monitoring (1-minute).
“Alert before an accidental KMS key deletion destroys data”→ EventBridge rule on ScheduleKeyDeletion, then CancelKeyDeletion.
Must remember
Function policy = who may invoke; execution role = what it may do.
EventBridge → Lambda/SNS/SQS uses resource-based policies; → Kinesis/Step Functions uses an IAM role.
Failed delivery: retries up to 24 h; add an SQS DLQ.
All accounts’ logs and metrics, one placeCross-account observability
Day 1 in one sentence
Start from the requirement, turn logs into metrics, combine them into smart alarms, route events to people or automation, and see it all from one account.
09
Must-remember cheat sheet
1. Requirement first; five signals: metrics, logs, events, health, findings.
2. EC2 memory and disk need the CloudWatch agent.
3. Route 53 checks: 10 or 30 s; healthy if > 18% agree.
4. Calculated health check: up to 255 children.
5. Private resource → alarm-based Route 53 health check.
6. HTTPS health checks don’t validate certificates.
7. ALB: all targets unhealthy → fails open.
8. Canary = Lambda script, as often as every minute.
9. Metric filters: new events only; value 1, default 0.
10. CIS controls need the exact filter patterns.
11. Composite alarm: up to 100 children; no EC2/ASG actions.
12. Anomaly detection: two weeks training; above/below band.
13. Missing data default: missing; error-only metrics: notBreaching.
14. GuardDuty repeat findings: 6 h default (15 min / 1 h).
15. Encrypted SNS: customer managed key, not aws/sns.
16. OAM sink is per Region; SH aggregation Region = home Region.
17. Function policy = who invokes; execution role = what it does.
18. EventBridge retries 24 h; keep failures in an SQS DLQ.
19. EC2 metrics: 5 min basic, 1 min detailed.
10
Core quiz
Check the basics first. Pick an answer, then press Check.
11
Hard quiz
Harder than most real exam questions on purpose, with one “choose two” and one matching question. Aim for 9 out of 12 before Day 2.
12
Practice test questions (from your mock exams)
These 9 questions come from your own SCS-C03 mock exams, matched to today’s topics. Wording was modernized where services were renamed (for example CloudWatch Events is now Amazon EventBridge), and each answer was checked against current AWS behavior; where the mock’s answer key was wrong, the explanation says so. The source (mock and question number) is at the end of each explanation.
13
Hands-on lab (30 minutes, low cost)
Create an SNS topic security-alerts with an email subscription and confirm the email.
Edit (or create) a CloudTrail trail so it also sends to a CloudWatch Logs log group. Let the console create the IAM role.
Add the CIS unauthorized API calls metric filter from section 03 (namespace LogMetrics, value 1, default 0) and an alarm with Sum ≥ 1 over 5 minutes that notifies the topic.
Trigger it: as an IAM user with no EC2 permissions, run aws ec2 describe-instances. CloudTrail can take several minutes to deliver; watch the metric, the alarm going to ALARM, and the email.
Create an EventBridge rule with pattern {"source":["aws.guardduty"]} targeting the topic. If GuardDuty is on, use Generate sample findings in its console and watch the emails arrive.
Optional: create a Route 53 health check on a public URL and look at its HealthCheckStatus metric in us-east-1.
Clean up: delete the alarm, metric filter, EventBridge rule, health check and topic. Remove the CloudWatch Logs delivery from the trail or set a short log retention: CloudWatch Logs charges for ingestion and storage, Route 53 health checks bill monthly, and GuardDuty bills after its free trial.