Remediation
If you are using CloudTrails and CloudWatch, perform the following to setup the metric filter, alarm, SNS topic, and subscription:
-
Create a metric filter based on filter pattern provided which checks for AWS Management Console sign-in without MFA and the
{{cloudtrail_log_group_name}}taken from audit step 1.Use Command:
aws logs put-metric-filter \
--log-group-name {{cloudtrail_log_group_name}} \
--filter-name {{no_mfa_console_signin_metric}} \
--metric-transformations metricName={{no_mfa_console_signin_metric}},metricNamespace='CISBenchmark', metricValue=1 \
--filter-pattern '{ ($.eventName = "ConsoleLogin") && ($.additionalEventData.MFAUsed != "Yes") }'Or (To reduce false positives incase Single Sign-On (SSO) is used in organization):
aws logs put-metric-filter \
--log-group-name {{cloudtrail_log_group_name}} \
--filter-name {{no_mfa_console_signin_metric}} \
--metric-transformations metricName={{no_mfa_console_signin_metric}}, metricNamespace='CISBenchmark', metricValue=1 \
--filter-pattern '{ ($.eventName = "ConsoleLogin") && ($.additionalEventData.MFAUsed != "Yes") && ($.userIdentity.type = "IAMUser") && ($.responseElements.ConsoleLogin = "Success") }'Note: You can choose your own
metricNameandmetricNamespacestrings. Using the samemetricNamespacefor 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 reuse the same topic for all monitoring alarms. Note: Capture the TopicArn that is displayed when creating the SNS topic in step 2.
-
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 monitoring alarms.
-
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 {{no_mfa_console_signin_alarm}} \
--metric-name {{no_mfa_console_signin_metric}} \
--statistic Sum \
--period 300 \
--threshold 1 \
--comparison-operator GreaterThanOrEqualToThreshold \
--evaluation-periods 1 \
--namespace 'CISBenchmark' \
--alarm-actions {{sns_topic_arn}}