|
1 | 1 | { |
2 | 2 | "Provider": "aws", |
3 | 3 | "CheckID": "cloudwatch_alarm_actions_alarm_state_configured", |
4 | | - "CheckTitle": "Check if CloudWatch alarms have specified actions configured for the ALARM state.", |
| 4 | + "CheckTitle": "CloudWatch metric alarm has actions configured for the ALARM state", |
5 | 5 | "CheckType": [ |
6 | 6 | "Software and Configuration Checks/AWS Security Best Practices" |
7 | 7 | ], |
8 | 8 | "ServiceName": "cloudwatch", |
9 | 9 | "SubServiceName": "", |
10 | | - "ResourceIdTemplate": "arn:aws:cloudwatch:region:account-id:alarm/alarm-name", |
| 10 | + "ResourceIdTemplate": "", |
11 | 11 | "Severity": "high", |
12 | 12 | "ResourceType": "AwsCloudWatchAlarm", |
13 | | - "Description": "This control checks whether an Amazon CloudWatch alarm has at least one action configured for the ALARM state. The control fails if the alarm doesn't have an action configured for the ALARM state.", |
14 | | - "Risk": "Without an action configured for the ALARM state, the CloudWatch alarm will not notify you or take any predefined action when a monitored metric goes beyond the defined threshold, potentially delaying responses to critical events.", |
15 | | - "RelatedUrl": "https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-actions", |
| 13 | + "Description": "Amazon CloudWatch metric alarms are evaluated for **actions** configured for the `ALARM` state. The finding flags alarms that have no action to execute when their monitored metric crosses its threshold.", |
| 14 | + "Risk": "Without an **ALARM action**, threshold breaches trigger no **notification** or **automated response**. This delays detection and containment, risking:\n- Availability: prolonged outages or missed scale-out\n- Integrity/confidentiality: unchecked anomalies enabling tampering or data loss", |
| 15 | + "RelatedUrl": "", |
| 16 | + "AdditionalURLs": [ |
| 17 | + "https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-actions", |
| 18 | + "https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch/client/put_metric_alarm.html", |
| 19 | + "https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_metric_alarm", |
| 20 | + "https://docs.aws.amazon.com/securityhub/latest/userguide/cloudwatch-controls.html#cloudwatch-15", |
| 21 | + "https://support.icompaas.com/support/solutions/articles/62000233431-ensure-cloudwatch-alarms-have-specified-actions-configured-for-the-alarm-state", |
| 22 | + "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/CloudWatch/cloudwatch-alarm-action.html", |
| 23 | + "https://awscli.amazonaws.com/v2/documentation/api/2.0.34/reference/cloudwatch/put-metric-alarm.html" |
| 24 | + ], |
16 | 25 | "Remediation": { |
17 | 26 | "Code": { |
18 | | - "CLI": "aws cloudwatch put-metric-alarm --alarm-name <alarm-name> --alarm-actions <action-arn>", |
19 | | - "NativeIaC": "", |
20 | | - "Other": "https://docs.aws.amazon.com/securityhub/latest/userguide/cloudwatch-controls.html#cloudwatch-15", |
21 | | - "Terraform": "" |
| 27 | + "CLI": "aws cloudwatch put-metric-alarm --alarm-name <alarm-name> --metric-name <metric-name> --namespace <namespace> --statistic <statistic> --period <period-seconds> --evaluation-periods <evaluation-periods> --threshold <threshold> --comparison-operator <comparison-operator> --alarm-actions <action-arn>", |
| 28 | + "NativeIaC": "```yaml\n# CloudFormation: add an ALARM action to a metric alarm\nResources:\n <example_resource_name>:\n Type: AWS::CloudWatch::Alarm\n Properties:\n AlarmName: <example_resource_name>\n MetricName: <metric-name>\n Namespace: <namespace>\n Statistic: Average\n Period: 60\n EvaluationPeriods: 1\n Threshold: 1\n ComparisonOperator: GreaterThanThreshold\n AlarmActions:\n - <action-arn> # CRITICAL: adds an action for ALARM state so the check passes\n```", |
| 29 | + "Other": "1. Open the AWS Console and go to CloudWatch > Alarms\n2. Select the target alarm and choose Edit (or Modify alarm)\n3. In Actions, under When alarm state is ALARM, add an action (e.g., select an SNS topic or other supported action)\n4. Click Save changes", |
| 30 | + "Terraform": "```hcl\n# Terraform: add an ALARM action to a metric alarm\nresource \"aws_cloudwatch_metric_alarm\" \"<example_resource_name>\" {\n alarm_name = \"<example_resource_name>\"\n metric_name = \"<metric-name>\"\n namespace = \"<namespace>\"\n statistic = \"Average\"\n period = 60\n evaluation_periods = 1\n threshold = 1\n comparison_operator = \"GreaterThanThreshold\"\n alarm_actions = [\"<action-arn>\"] # CRITICAL: ensures an action is configured for ALARM state\n}\n```" |
22 | 31 | }, |
23 | 32 | "Recommendation": { |
24 | | - "Text": "Configure your CloudWatch alarms to trigger actions, such as sending notifications via Amazon SNS, when the alarm state changes to ALARM.", |
25 | | - "Url": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/CloudWatch/cloudwatch-alarm-action.html" |
| 33 | + "Text": "Assign at least one **ALARM-state action** per alarm (e.g., notify via SNS or run automated remediation with Lambda/SSM). Keep actions enabled, apply **least privilege** to targets, and regularly test. *For critical metrics*, add redundant paths (EventBridge) for **defense in depth**.", |
| 34 | + "Url": "https://hub.prowler.com/check/cloudwatch_alarm_actions_alarm_state_configured" |
26 | 35 | } |
27 | 36 | }, |
28 | | - "Categories": [], |
| 37 | + "Categories": [ |
| 38 | + "resilience" |
| 39 | + ], |
29 | 40 | "DependsOn": [], |
30 | 41 | "RelatedTo": [], |
31 | 42 | "Notes": "" |
|
0 commit comments