Open menu
-->

Enable CloudWatch Alarm for AWS IAM Policy Changes

Cloud Conformity allows you to automate the auditing process of this resolution page. Register for a 14 day evaluation and check your compliance level for free!

Start a Free Trial Product features
Security

Risk level: High (not acceptable risk)

Ensure there is a CloudWatch alarm created and configured in your AWS account that is triggered each time an IAM policy configuration change is made. This CloudWatch alarm must fire every time an API call is performed to create, update, attach, detach or delete an AWS IAM policy.

This rule resolution is part of the Cloud Conformity Security Package

Using CloudWatch alarms to detect AWS IAM authorization (policy) configuration changes will help you maintain the necessary access permissions for each IAM user, role and group created in your AWS account in order to prevent any accidental or intentional changes that may lead to unauthorized access. Note 1: For this rule Cloud Conformity assumes that the CloudTrail service is already enabled to stream event log data to CloudWatch within your AWS account, otherwise see this rule to enable AWS Cloudtrail – CloudWatch integration.
Note 2: You have also the option to implement this conformity rule with AWS CloudFormation. Download the required CloudFormation template from this URL and follow the AWS instructions available here.

Audit

To determine if there are any CloudWatch alarms that are currently monitoring AWS IAM authorization configuration changes within your AWS account, perform the following:

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to Cloudwatch dashboard at https://console.aws.amazon.com/cloudwatch/.

03 In the left navigation panel select Alarms.

04 Open the dashboard Show/Hide Columns dialog box by clicking the configuration icon:

Open the dashboard Show/Hide Columns dialog box by clicking the configuration icon

then select the Metric Name checkbox.

05 In the Metric Name column, verify each alarm available for the IAMPolicyEventCount metric parameter name. If the IAMPolicyEventCount metric is not used by any of your alarms, the AWS IAM authorization (policy) configuration changes are not currently monitored using AWS CloudWatch.

Using AWS CLI

01 Run describe-alarms-for-metric command (OSX/Linux/UNIX) to list all AWS CloudWatch alarms that are currently associated with the IAMPolicyEventCount metric, available in the selected region:

aws cloudwatch describe-alarms-for-metric
    --region us-east-1
    --metric-name IAMPolicyEventCount
    --namespace AWS/CloudTrailMetrics

02The command output should return an array with the requested CloudWatch alarm(s) metadata:IAMPolicyEventCount metric, available in the selected region:

{
    "MetricAlarms": []
}

If the command output returns an empty array as the value for the MetricAlarms property (as shown in the example above), there are no CloudWatch alarms currently set to monitor AWS IAM authorization (policy) configuration changes.

Remediation / Resolution

Step 1: Create a Simple Notification Service (SNS) topic and the necessary subscription to send notifications whenever an AWS CloudWatch alarm is triggered by an IAM policy configuration change.

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to SNS dashboard at https://console.aws.amazon.com/sns/v2/.

03 In the navigation panel, select Topics and click the Create new topic button.

04 In the Create new topic dialog box, enter a name and a display name for your topic then click Create Topic.

05 Open the newly created SNS topic configuration page by clicking on its Amazon Resource Name (ARN):

Open the newly created SNS topic configuration page by clicking on its Amazon Resource Name.

06 Under Subscription section click Create Subscription.

07 Select Email as subscription protocol from the Protocol dropdown list.

08 In the Endpoint box, enter the email address where you want to receive the CloudWatch alarm notifications then click Create Subscription to generate the email subscription.

09 Use your preferred email client application to open the email sent automatically by AWS Notifications then click on the appropriate link to confirm your subscription.

Using AWS CLI

01 Run create-topic command (OSX/Linux/UNIX) to create a new SNS topic for sending email notifications whenever an AWS CloudWatch alarm is triggered:

aws sns create-topic
    --name CloudWatchAlarmSNSTopic

02 The command output should return the new SNS topic ARN:

{
  "TopicArn": "arn:aws:sns:us-east-1:123456789012:CloudWatchAlarmSNSTopic"
}

03 Run subscribe command (OSX/Linux/UNIX) to send the subscription confirmation message to the notification endpoint (in this case the endpoint is an email address):

aws sns subscribe
    --topic-arn arn:aws:sns:us-east-1:123456789012:CloudWatchAlarmSNSTopic
    --protocol email
    --notification-endpoint no-reply@cloudconformity.com

04 Run confirm-subscription command (OSX/Linux/UNIX) to confirm the email subscription by validating the token sent to the notification endpoint selected (the command does not return an output):

aws sns confirm-subscription
    --topic-arn arn:aws:sns:us-east-1:123456789012:CloudWatchAlarmSNSTopic
    --token 1355092f37fb687f5d51e6e241d7700ae02f7124d8268910b858cb4db727ceeb2474bb937929d3bdd7ce5d0cce19325d036bc858d3c217426bcafa9c501a2cace93b83f1dd3797627467553dc438a8c974119496fc3eff026eaa5d14472ded6f9a5c43aec62d83ef5f49109da710410

Remediation / Resolution

Step 2: Create the necessary metric filter and the CloudWatch alarm that will fire and send SNS notifications whenever AWS IAM authorization configuration is changed.

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to Cloudwatch dashboard at https://console.aws.amazon.com/cloudwatch/.

03 In the left navigation panel, select Logs.

04 Select the log group created for your CloudTrail trail event logs and click Create Metric Filter button.

05 On the Define Logs Metric Filter page, paste the following pattern inside the Filter Pattern box: { ($.eventName = DeleteGroupPolicy) || ($.eventName = DeleteRolePolicy) || ($.eventName = DeleteUserPolicy) || ($.eventName = PutGroupPolicy) || ($.eventName = PutRolePolicy) || ($.eventName = PutUserPolicy) || ($.eventName = CreatePolicy) || ($.eventName = DeletePolicy) || ($.eventName = CreatePolicyVersion) || ($.eventName = DeletePolicyVersion) || ($.eventName = AttachRolePolicy) || ($.eventName = DetachRolePolicy) || ($.eventName = AttachUserPolicy) || ($.eventName = DetachUserPolicy) || ($.eventName = AttachGroupPolicy) || ($.eventName = DetachGroupPolicy) }. This pattern will be used for scanning the AWS CloudTrail logs for event names like “CreatePolicy”, “AttachUserPolicy”, “DetachUserPolicy” or “DeletePolicy”.

06 Review the metric filter details then click Assign Metric.

07 On the Create Metric Filter and Assign a Metric page, perform the following:

  1. In the Filter Name box, enter a unique name for the new filter, e.g. IAMAuthConfigChanges.
  2. In the Metric Namespace box, type CloudTrailMetrics.
  3. In the Metric Name box, type IAMPolicyEventCount for the metric identifier.
  4. Click Show advanced metric settings to uncover the advanced settings section.
  5. In the Metric Value box, enter 1.

08 Review the details then click Create Filter to generate your new CloudWatch Logs metric filter.

09 On the current page click Create Alarm:

Create Alarm

10 In the Create Alarm dialog box, provide the following information:

  1. Within the Alarm Threshold section, in the Name and Description fields, enter a unique name and a short description for the new CloudWatch alarm.
  2. Under Whenever: <Metric Name>, select >= (greater than or equal to) from the is dropdown list and enter 1 as the threshold value in the box next to the dropdown list to trigger the alarm every time a change is made within IAM authorization (policy) configuration.
  3. In the Actions section, click the + Notification button, select State is ALARM from the Whenever this alarm dropdown menu and choose the AWS SNS topic name created at Step 1 from Send notification to.
  4. In the Alarm Preview section, select 5 Minutes from the Period dropdown list and Sum from the Statistic list.
  5. Review the CloudWatch alarm configuration details then click Create Alarm. Once created, the new alarm will be listed on the Alarms page.

Using AWS CLI

01 Run put-metric-filter command (OSX/Linux/UNIX) to create the necessary CloudWatch metric filter and associate it with the appropriate CloudTrail log group (the command does not return an output):

aws logs put-metric-filter
    --region us-east-1
    --log-group-name CloudTrail/CloudWatchLogGroup
    --filter-name IAMAuthConfigChanges
    --filter-pattern '{ ($.eventName = DeleteGroupPolicy) || ($.eventName = DeleteRolePolicy) || ($.eventName = DeleteUserPolicy) || ($.eventName = PutGroupPolicy) || ($.eventName = PutRolePolicy) || ($.eventName = PutUserPolicy) || ($.eventName = CreatePolicy) || ($.eventName = DeletePolicy) || ($.eventName = CreatePolicyVersion) || ($.eventName = DeletePolicyVersion) || ($.eventName = AttachRolePolicy) || ($.eventName = DetachRolePolicy) || ($.eventName = AttachUserPolicy) || ($.eventName = DetachUserPolicy) || ($.eventName = AttachGroupPolicy) || ($.eventName = DetachGroupPolicy) }'
    --metric-transformations metricName=IAMPolicyEventCount,metricNamespace=CloudTrailMetrics,metricValue=1

02Run put-metric-alarm command (OSX/Linux/UNIX) to create the AWS CloudWatch alarm that will fire whenever the IAM authorization (policy) configuration will change (if successful, the command does not return an output):

aws cloudwatch put-metric-alarm
    --region us-east-1
    --alarm-name IAMAuthorizationActivityAlarm
    --alarm-description "Triggered by AWS IAM authorization config changes."
    --metric-name IAMPolicyEventCount
    --namespace CloudTrailMetrics
    --statistic Sum
    --comparison-operator GreaterThanOrEqualToThreshold
    --evaluation-periods 1
    --period 300
    --threshold 1
    --actions-enabled
    --alarm-actions arn:aws:sns:us-east-1:123456789012:CloudWatchAlarmSNSTopic

References

Publication date Sep 16, 2016