发生 IAM 更改时发送 SNS 通知

Sending SNS notifications when there is an IAM Change

我设置了 SNS 通知,以便在 IAM 政策发生变化时向我发送电子邮件。发生更改时,CloudTrail 会向 CloudWatch 发送日志,从而触发附加到 SNS 主题的警报。此 link 中有更多详细信息。

这是我通过邮件收到的示例:

Alarm Details:
- Name:                       PolicyAlarm
- Description:                This alarm is to monitor IAM Changes
- State Change:               INSUFFICIENT_DATA -> ALARM
- Reason for State Change:    Threshold Crossed: 1 datapoint [1.0 (31/08/17 09:15:00)] was greater than or equal to the threshold (1.0).
- Timestamp:                  Thursday 31 August, 2017 09:20:39 UTC
- AWS Account:                00011100000

Threshold:
- The alarm is in the ALARM state when the metric is GreaterThanOrEqualToThreshold 1.0 for 300 seconds.

此处唯一相关的信息是 AWS Account ID。有没有办法也包含更改?谁在何时何地制造的?或者可能从 cloudwatch 日志中发送很少的信息,例如 "eventName" ?

有两种方法可以从 AWS CloudTrail 触发通知:

  1. 配置 Amazon CloudWatch Logs 以查找特定字符串。找到后,它会递增 metric。然后,创建一个警报,当指标在特定时间段内超过特定值时触发。发送通知时,只发送有关警报的信息。或者...

  2. Amazon CloudWatch Events 中创建规则以查找事件。将 Amazon SNS 主题设置为目标。发送通知时,会传递事件的完整详细信息

您应该使用 #2,因为它提供了事件的完整详细信息。

这是我所做的测试:

  • us-east-1(所有 IAM 事件发生的地方)
  • 中创建了一个 Amazon SQS 队列
  • us-east-1 中创建了一个 Amazon CloudWatch Events 规则
    • 服务名称: IAM
    • 事件类型: AWS API 通过 CloudTrail 调用
    • 具体操作: PutUserPolicy
  • 编辑了 IAM 策略

在很短的时间内,事件出现在 SQS 中:

这是通过的政策的相关部分:

{
  "detail-type": "AWS API Call via CloudTrail",
  "source": "aws.iam",
  "region": "us-east-1",
  "detail": {
    "eventSource": "iam.amazonaws.com",
    "eventName": "PutUserPolicy",
    "awsRegion": "us-east-1",
    "requestParameters": {
      "policyDocument": "{\n    \"Version\": \"2012-10-17\",\n  ...  }",
      "policyName": "my-policy",
      "userName": "my-user"
    },
    "eventType": "AwsApiCall"
  }
}

我把消息发到了SQS,你也可以发到SNS,然后通过邮件转发。