我设置了 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 权限,请完成以下步骤:
- 创建新的客户管理型密钥。
- 使用客户管理型密钥为您的 SNS 主题配置 SSE。
- 配置 AWS KMS 策略,允许 EventBridge 向您的加密主题发布消息。
策略示例:
{
"Sid": "Allow EventBridge to use the key",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}