跳至内容

为什么我的 Amazon SNS 主题未收到 EventBridge 通知?

2 分钟阅读
0

我设置了 Amazon EventBridge 规则来向我的 Amazon Simple Notification Service (Amazon SNS) 主题发送通知。但是,我的 Amazon SNS 主题未收到事件通知。

解决方法

验证 EventBridge 规则的目标是否与该规则位于同一区域

与规则关联的目标必须与该规则位于同一 AWS 区域。

**注意:**要查找 AWS 资源所在的区域,请查看该资源的 Amazon 资源名称 (ARN)。

查看 EventBridge 规则的 Invocations 和 FailedInvocations 指标以确定问题

使用 Amazon CloudWatch 控制台查看您的 EventBridge 规则的 Invocations 和 FailedInvocations 指标。

如果只有 Invocations 指标存在数据点,则表明 EventBridge 规则通知未到达目标。要解决此问题,请为目标重新配置规则。

如果这两个指标都有数据点,则表明 EventBridge 规则通知尝试调用目标,但调用失败。要解决此问题,请确保 EventBridge 具有向您的主题发布消息所需的权限。

确认您已授予 EventBridge 向您的主题发布消息所需的权限

您的 SNS 主题的基于资源的策略必须允许 EventBridge 向该主题发布消息。查看您的主题的 AWS Identity and Access Management (IAM) 策略,确认其具备所需的权限。

策略示例:

{    
    "Sid": "AWSEvents_ArticleEvent_Id4950650036948",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": "sns:Publish",
    "Resource": "SNS_TOPIC_ARN"
}

**重要事项:**您必须输入 events.amazonaws.com 作为 Service(服务)值,输入 sns:Publish 作为 Action(操作)值。将 SNS_TOPIC_ARN 替换为您的主题的 ARN。

如果您使用执行角色,请确保附加到 EventBridge 规则的 IAM 角色正确无误。要查看 IAM 角色,请打开 EventBridge 控制台,然后选择 Rules(规则)。选择您的规则,然后选择 Targets(目标)以查看附加的 IAM 角色。

验证执行角色是否允许 EventBridge 向目标发布

执行角色需要与 EventBridge 建立信任关系。确保您的角色的信任策略将 events.amazonaws.com 列为可信实体,以便允许 EventBridge 代入目标的执行角色。此外,请确保该角色有权通过 sts:AssumeRole 操作调用 SNS 主题。

IAM 信任策略示例:

{    
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "ACCOUNT-ID",
                    "aws:SourceArn": "EVENTBRIDGE-RULE-ARN"
                }
            }
        }
    ]
}

**注意:**将 ACCOUNT-ID 替换为您的 AWS 账户 ID,将 EVENTBRIDGE_RULE_ARN 替换为您的规则的 ARN。

IAM 权限示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "SNS_TOPIC_ARN"
            ]
        }
    ]
}

**注意:**将 SNS_TOPIC_ARN 替换为您的 SNS 主题 ARN。

确认您的主题具有所需的 AWS KMS 权限

如果您使用服务器端加密 (SSE),则您的主题必须使用 AWS Key Management Service (AWS KMS) 客户管理型密钥。此 AWS KMS 密钥必须具有自定义密钥策略,以便允许 EventBridge 使用该密钥。

要设置所需的 AWS KMS 权限,请完成以下步骤:

  1. 创建新的客户管理型密钥。
  2. 使用客户管理型密钥为您的 SNS 主题配置 SSE。
  3. 配置 AWS KMS 策略,允许 EventBridge 向您的加密主题发布消息。
    策略示例:
    {    
        "Sid": "Allow EventBridge to use the key",
        "Effect": "Allow",
        "Principal": {
            "Service": "events.amazonaws.com"
        },
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Resource": "*"
    }