为什么我的 Amazon SNS 主题没有收到 CloudWatch Events 通知?

上次更新日期:2021 年 9 月 10 日

我设置了 Amazon CloudWatch Events 规则来向我的 Amazon Simple Notification Service(Amazon SNS)主题发送通知。为什么我的 Amazon SNS 主题没有收到事件通知?

解决方法

验证 CloudWatch Event 规则的目标是否与规则位于同一 AWS 区域

与规则关联的目标必须与规则位于同一个区域。有关更多信息,请参阅 Amazon CloudWatch Events 入门

注意:要查看 AWS 资源所在的区域,请查看该资源的 Amazon Resource Name(ARN)

通过查看 CloudWatch Event 规则的“Invocations”和“FailedInvocations”指标来验证问题的原因

CloudWatch 控制台中,查看您的 CloudWatch 事件规则的 InvocationsFailedInvocations 指标

如果两个指标有一个共同的数据点,则表示 CloudWatch Events 规则通知尝试调用目标但调用失败。要解决此问题,您必须向 CloudWatch 授予向主题发布消息所需的权限。有关说明,请参阅本文的确认您已授予 CloudWatch 向主题发布消息所需的权限部分。

如果只有 Invocations 指标的数据点,则 CloudWatch Event 规则通知未发送至目标。要解决此问题,请纠正目标上的错误配置

有关更多信息,请参阅 CloudWatch 用户指南中的查看可用指标

确认您已赋予 CloudWatch 必要权限,以发布消息到您的主题

您的 Amazon SNS 主题的基于资源的策略必须允许 CloudWatch 向主题发布消息。检查您的主题的 AWS Identity and Access Management(IAM)策略,以确认它有必要的权限,并按照需要添加所需的权限。

重要提示:“events.amazonaws.com”必须作为“服务”值列出。“SNS: Publish” 必须作为“操作”值列出。

要添加所需的权限,请按照我的规则可以运行,但我没有看到任何消息发布到我的 Amazon SNS 主题中的说明进行操作。

允许 CloudWatch 将消息发布到 Amazon SNS 主题的 IAM 权限声明示例

{
    "Sid": "AWSEvents_ArticleEvent_Id4950650036948",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:us-east-1:123456789012:My_SNS_Topic"
}

(对于激活服务器端加密(SSE)的主题)确认您的主题有必要的 AWS Key Management(AWS KMS)权限

您的 Amazon SNS 主题必须使用客户管理的 AWS KMS 密钥。此 KMS 密钥必须包含自定义密钥策略,此策略授予 CloudWatch 足够的密钥使用权限。

要设置必要的 AWS KMS 权限,请执行以下操作:

1.    创建由客户管理的新 KMS 密钥,并且包含访问 CloudWatch 所需的必要权限

2.    使用刚创建的自定义 KMS 密钥为您的 Amazon SNS 主题配置 SSE

3.    配置 AWS KMS 权限,允许 CloudWatch 向您的已加密主题发布消息

允许 CloudWatch 向已加密的 Amazon SNS 主题发布消息的 IAM 策略声明示例

{
    "Sid": "Allow CWE to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*"
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?