我设置了 Amazon EventBridge 规则来向我的 Amazon Simple Notification Service (Amazon SNS) 主题发送通知。但是,我的 Amazon SNS 主题未收到事件通知。
解决方法
验证 EventBridge 规则的目标是否与该规则位于同一区域
与规则关联的目标必须与该规则位于同一 AWS 区域。
**注意:**要查找 AWS 资源所在的区域,请查看该资源的 Amazon 资源名称 (ARN)。
查看 EventBridge 规则的“Invocations”和“FailedInvocations”指标以确定问题
使用 Amazon CloudWatch 控制台查看您的 EventBridge 规则的 Invocations 和 FailedInvocations 指标。
如果这两个指标都有数据点,则表明 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 权限,请完成以下步骤:
- 创建一个新的客户自主管理型密钥,并确保包含 EventBridge (events.amazonaws.com) 所需的权限。
- 使用客户自主管理型密钥为您的 Amazon SNS 主题配置服务器端加密 (SSE)。
- 配置 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": "*"
}