我如何排查 GuardDuty 自定义 Amazon SNS 通知未送达的问题?

上次更新时间:2021 年 6 月 28 日

为什么我的 Amazon GuardDuty 自定义 Amazon Simple Notification Service (Amazon SNS) 通知未送达?

简短描述

解决方法

按照下面的说明确认以下设置正确:

  • Amazon SNS 订阅确认
  • Amazon SNS 主题的 AWS Identity and Access Management (IAM) 访问策略
  • AWS Key Management Service (AWS KMS) 权限
  • CloudWatch 事件模式 JSON 对象结果类型

确认 Amazon SNS 订阅

  1. 打开 Amazon SNS 控制台,然后选择Subscriptions(订阅)。
  2. 对于您的 Amazon SNS 订阅 ID,请验证状态为已确认
  3. 如果状态为 Pending confirmation(等待确认),请按照确认订阅的说明操作。

确认 SNS 主题访问策略的权限

  1. 打开 Amazon SNS 控制台,然后选择 Topics(主题)。
  2. Name(名称)中,选择您的 Amazon SNS 主题。
  3. Details(详细信息)中,选择 Access policy(访问策略)选项卡。
  4. 验证 IAM 策略允许发布与以下内容类似的 events.amazonaws.com 委托人的权限:
{
      "Sid": "AWSEvents",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:YOUR-REGION:YOUR-ACCOUNT-ID:YOUR-SNS-TOPIC"
}

确认 AWS Key Management Service (AWS KMS) 权限

  1. 打开 AWS KMS 控制台,然后选择 Customer managed keys(客户管理的密钥)。
  2. Key ID(密钥 ID)中,选择您的 AWS KMS 密钥。
  3. Key policy(密钥策略)中,选择 Switch to policy view(切换到策略视图)。
  4. 验证 KMS 策略允许发布与以下内容类似的 events.amazonaws.com 委托人的权限:
{
    "Sid": "AWSEvents",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
    ],
    "Resource": "*"
}

确认 CloudWatch 事件模式 JSON 对象结果类型

  1. 打开 CloudWatch 控制台,然后选择 Rules(规则)。
  2. Name(名称)中,选择您的 CloudWatch 规则。
  3. Event pattern(事件模式)中,验证 JSON 对象结果类型与类似以下内容的特定 AWS 服务匹配:
{
  "source": [
    "aws.guardduty"
  ],
  "detail-type": [
    "GuardDuty Finding"
  ]
}