跳至內容

為什麼我的 Amazon SNS 主題沒有收到 EventBridge 通知?

2 分的閱讀內容
0

我設定了 Amazon EventBridge 規則,將通知傳送到我的 Amazon Simple Notification Service (Amazon SNS) 主題。但是,我的 Amazon SNS 主題沒有收到事件通知。

解決方法

確認 EventBridge 規則的目標與規則位於相同區域

您與規則建立關聯的目標必須與規則位於相同的 AWS 區域

**注意:**若要尋找 AWS 資源所在的區域,請檢查資源的 Amazon Resource Name (ARN)

檢閱 EventBridge 規則的 Invocations 和 FailedInvocations 指標以識別問題

使用 Amazon CloudWatch 主控台檢閱 EventBridge 規則的 InvocationsFailedInvocations 指標

如果只有 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 console (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 key 必須具有自訂金鑰政策,以允許 EventBridge 使用該金鑰。

若要設定必要的 AWS KMS 權限,請完成以下步驟:

  1. 建立新的客戶管理金鑰
  2. 使用客戶自管金鑰為 SNS 主題設定 SSE
  3. 設定允許 EventBridge 將訊息發佈至加密主題的 AWS KMS 政策
    政策範例:
    {    
        "Sid": "Allow EventBridge to use the key",
        "Effect": "Allow",
        "Principal": {
            "Service": "events.amazonaws.com"
        },
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Resource": "*"
    }