Control: 4.7 Ensure a log metric filter and alarm exist for disabling or scheduled deletion of customer created CMKs
Description
Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for customer created CMKs which have changed state to disabled or scheduled deletion.
Data encrypted with disabled or deleted keys will no longer be accessible.
Remediation
The steps to remediate this issue include setting up an Amazon SNS topic, a metric filter, and an alarm for the metric filter.
From Console
To create SNS topic
- Open the Amazon SNS console at SNS.
- Create an Amazon SNS topic that receives all CIS alarms. Create at least one subscriber to the topic. You can follow steps here
- Set up an active CloudTrail that applies to all Regions. To do so, follow the remediation steps in CIS 3.1 – Ensure CloudTrail is enabled in all Regions.
- Make a note of the associated log group name.
To create a metric filter and alarm
- Open the CloudWatch console at CloudWatch.
- In the navigation pane, choose Log groups.
- Select the check box for the log group that you made a note of in the previous step (4).
- From Actions, choose Create Metric Filter.
- Under Define pattern, do the following:
- Copy the following pattern and then paste it into the Filter Pattern field.{($.eventSource = kms.amazonaws.com) && (($.eventName=DisableKey)||($.eventName=ScheduleKeyDeletion))}
- Choose Next.
- Copy the following pattern and then paste it into the Filter Pattern field.
- Under Assign metric, do the following:
- In Filter name, enter a name for your metric filter.
- For Metric namespace, enter
CISBenchmark
. You can use the same namespace for all of your CIS log metric filters. - For Metric name, enter a name for the metric.
- The name of the metric is required to create the alarm.
- For Metric value, enter 1.
- Choose Next.
- Under Review and create, review the details and choose Create metric filter.
- Choose the Metric filters tab, select the metric filter that you just created.
- To choose the metric filter, select the
check box
at the upper right. - Choose Create Alarm.
- Follow the steps provided in Create an alarm
- Under Configure actions, do the following:
- Under Alarm state trigger, choose In alarm.
- Under Select an SNS topic, choose Select an existing SNS topic.
- For Send a notification to, enter the name of the SNS topic that you created in the previous procedure.
- Choose Next.
- Under Add name and description, enter a Name and Description for the alarm. For example, CIS4.7-[SmallDescription]. Then choose Next.
- Under Preview and create, review the alarm configuration. Choose Create alarm.
From Command Line
Perform the following to setup the metric filter, alarm, SNS topic, and subscription
- Create a metric filter based on filter pattern provided and CloudWatch log group.
aws logs put-metric-filter --log-group-name <cloudtrail_log_group_name> --filter-name `<disable_or_delete_cmk_changes_metric>` --metrictransformations metricName= `<disable_or_delete_cmk_changes_metric>`,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{($.eventSource = kms.amazonaws.com) && (($.eventName=DisableKey)||($.eventName=ScheduleKeyDeletion)) }'
Note: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.
- Create an SNS topic that the alarm will notify.
aws sns create-topic --name <sns_topic_name>
Note: you can execute this command once and then re-use the same topic for all monitoring alarms.
- Create an SNS subscription to the topic created in step 2.
aws sns subscribe --topic-arn <sns_topic_arn> --protocol <protocol_for_sns> --notification-endpoint <sns_subscription_endpoints>
Note: you can execute this command once and then re-use the SNS subscription for all.
- Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2.
aws cloudwatch put-metric-alarm --alarm-name `<disable_or_delete_cmk_changes_alarm>` --metric-name `<disable_or_delete_cmk_changes_metric>` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluationperiods 1 --namespace 'CISBenchmark' --alarm-actions <sns_topic_arn>
Usage
Run the control in your terminal:
powerpipe control run aws_compliance.control.cis_v130_4_7
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run aws_compliance.control.cis_v130_4_7 --share
SQL
This control uses a named query:
log_metric_filter_disable_or_delete_cmk