為什麼我沒有 CloudWatch 警報觸發的 SNS 通知?
我建立了 Amazon CloudWatch 警報,以便在警報狀態變更時透過 Amazon Simple Notification Service (Amazon SNS) 主題傳送通知。但是,當 CloudWatch 警報變更狀態時,我並未收到 SNS 通知。
解決方法
SNS 通知傳遞取決於 SNS 主題和 CloudWatch 警報的組態。若要確定您沒有收到 SNS 通知的原因,請檢查 CloudWatch 警報歷程以查看觸發動作的狀態。
如果您的觸發動作因 SNS 存取政策限制而失敗,CloudWatch 警報歷程即會顯示類似於下列訊息的訊息:
「無法執行動作 arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME。收到的錯誤: 『資源:arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME 未經授權執行: SNS:發佈在資源上:arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME』」
SNS 會使用存取政策限制可以將訊息發佈至主題的來源。如果發生權限錯誤,您就必須在 SNS 存取政策的陳述式區段下方新增下列權限。此更新會向 CloudWatch 警報服務授予將訊息發佈至 SNS 主題的權限。
注意: 將 us-east-1 取代為此通知目標區域的 AWS 區域。將 ACCOUNT_ID 取代為帳戶 ID。將 TOPIC_NAME 取代為 SNS 主題名稱:
{ "Sid": "Allow_Publish_Alarms", "Effect": "Allow", "Principal": { "Service": [ "cloudwatch.amazonaws.com" ] }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME" }
這些權限允許使用您帳戶的任何人建立警報,並且將訊息發佈至您的 SNS 主題。若要限制將訊息發佈至特定警報的功能,請新增全域條件金鑰。下列範例會使用 ArnLike 條件運算式和 aws:SourceArn 全域條件金鑰。如需詳細資訊,請參閱 Amazon SNS 存取控制的範例案例。
注意: 注意: 將 us-east-1 取代為此通知目標區域的 AWS 區域。將 ACCOUNT_ID 取代為帳戶 ID。將 TOPIC_NAME 取代為 SNS 主題名稱。將 ALARM_NAME 取代為警報名稱:
{ "Sid": "Allow_Publish_Alarms", "Effect": "Allow", "Principal": { "Service": [ "cloudwatch.amazonaws.com" ] }, "Action": "sns:Publish", "Resource": "arn:aws:sns:REGION:ACCOUNT_ID:TOPIC_NAME", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME" } } }
如果您的觸發動作因 SNS 主題加密而失敗,CloudWatch 警報歷程即會顯示類似於下列訊息的訊息:
「無法執行動作 arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME。收到的錯誤:『null(服務: AWSKMS;狀態碼: 400;錯誤碼: AccessDeniedException;)』」
SNS 允許其主題進行靜態加密。如果 SNS 對此加密使用預設的 AWS Key Management Service (AWS KMS) 金鑰別名/AWS/SNS,則 CloudWatch 警報無法將訊息發佈至 SNS 主題。SNS 的預設 AWS KMS 金鑰政策不允許 CloudWatch 警報執行 kms:Decrypt 和 kms:GenerateDataKey API 調用。因為這是 AWS 受管金鑰,所以您無法手動編輯政策。
如果 SNS 主題必須進行靜態加密,請使用客戶受管金鑰。客戶受管金鑰必須在金鑰政策的陳述式區段下方包括下列權限。這些權限允許 CloudWatch 警報將訊息發佈至加密的 SNS 主題:
{ "Sid": "Allow_CloudWatch_for_CMK", "Effect": "Allow", "Principal": { "Service": [ "cloudwatch.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" }
如果您的觸發動作成功,CloudWatch 警報歷程即會顯示類似於下列訊息的訊息:
「成功執行動作 arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME」
這表示 CloudWatch 警報成功將訊息發佈至 SNS 主題。如果通知不是由 SNS 傳遞,請確認 SNS 主題及其指標是否出現任何傳遞失敗。如需詳細資訊,請參閱如何存取 Amazon SNS 主題傳遞日誌以取得推播通知?
**注意:**CloudWatch 不會測試或驗證您指定的動作。它也不會偵測因嘗試叫用不存在動作而出現的 Amazon EC2 Auto Scaling 或 Amazon SNS 錯誤。請確定您的動作存在。
相關資訊
相關內容
- 已提問 10 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 4 個月前
- AWS 官方已更新 4 個月前
- AWS 官方已更新 7 個月前