A metric filter and alarm should exist for AWS organizations changes


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 AWS organization changes made in the master AWS Account.


Monitoring AWS organization changes can help you prevent any unwanted, accidental, or intentional modifications that may lead to unauthorized access or other security breaches. This monitoring technique helps ensure that any unexpected changes performed within your AWS organization can be investigated and any unwanted changes can be rolled back.


Perform the following to set up the metric filter, alarm, SNS topic, and subscription:

From the command line

  1. Retrieve cloudtrail log group name

    aws cloudtrail describe-trails
  2. Create a metric filter based on the filter pattern provided, which checks for IAM policy changes and the <cloudtrail_log_group_name>.

    aws logs put-metric-filter --log-group-name <cloudtrail_log_group_name> --filter-name `<organizations_changes>` --metric-transformations metricName=`<organizations_changes>` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventSource = organizations.amazonaws.com) &&(($.eventName = "AcceptHandshake") || ($.eventName = "AttachPolicy") ||($.eventName = "CreateAccount") || ($.eventName = "CreateOrganizationalUnit")|| ($.eventName = "CreatePolicy") || ($.eventName = "DeclineHandshake") ||($.eventName = "DeleteOrganization") || ($.eventName = "DeleteOrganizationalUnit") || ($.eventName = "DeletePolicy") || ($.eventName = "DetachPolicy") || ($.eventName = "DisablePolicyType") || ($.eventName = "EnablePolicyType") || ($.eventName = "InviteAccountToOrganization") || ($.eventName = "LeaveOrganization") || ($.eventName = "MoveAccount") || ($.eventName = "RemoveAccountFromOrganization") || ($.eventName = "UpdatePolicy") || ($.eventName = "UpdateOrganizationalUnit")) }'
    • Ensure CloudTrail is set to multi-region and isLogging is set True.
    • Ensure there is at least one Event Selector with IncludeManagementEvents set to True and ReadWriteType set to All.

    Note: You can choose your own metricName and metricNamespace strings. Use the same metricNamespace for all Foundations Benchmark metrics to group them together.

  3. Create an SNS topic that the alarm notifies.

    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.

  4. 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.

  5. Create an alarm that is associated with the CloudWatch Logs metric filter created in step 1 and the SNS topic created in step 2.

    aws cloudwatch put-metric-alarm --alarm-name `<organizations_changes>` --metric-name `<organizations_changes>` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions <sns_topic_arn>


  1. [https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html][]
  2. [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_security_incident-response.html][]