跳至内容

为什么我的 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 规则的 InvocationsFailedInvocations 指标

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

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

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

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

**重要事项:**您必须将 events.amazonaws.com 列为 Service(服务)值,将 sns:Publish 列为 Action(操作)值。

允许 EventBridge 向 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"
}

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

分配给您的 EventBridge 规则目标的 IAM 执行角色需要与 EventBridge 服务建立信任关系。确保您的角色信任策略将 EventBridge (events.amazonaws.com) 列为可信实体。如果信任策略不包含所需的权限,请更新信任策略以授予 EventBridge 代入该角色的权限。

允许 EventBridge 代入目标执行角色的 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"
                }
            }
        }
    ]
}

**重要事项:**请将 events.amazonaws.com 列为 Service(服务)值,将 sts:AssumeRole 列为 Action(操作)值。将 ACCOUNT-ID 替换为您的 AWS 账户 ID,将 EVENTBRIDGE_RULE_ARN 替换为您的 ARN。

(对于已激活 SSE 的主题)确认您的主题具有所需的 AWS KMS 权限

您的 Amazon SNS 主题必须使用 AWS Key Management Service (AWS KMS) 客户自主管理型密钥。此 AWS KMS 密钥必须包含自定义密钥策略,以授予 EventBridge 使用该密钥的权限。

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

  1. 创建一个新的客户自主管理型密钥,并确保包含 EventBridge (events.amazonaws.com) 所需的权限
  2. 使用客户自主管理型密钥为您的 Amazon SNS 主题配置服务器端加密 (SSE)
  3. 配置 AWS KMS 权限,以允许 EventBridge 向您的加密主题发布消息 (events.amazonaws.com)

允许 EventBridge 向加密的 Amazon SNS 主题发布消息的 IAM 策略语句示例:

{    "Sid": "Allow CWE to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": "*"
}
AWS 官方已更新 6 个月前