為什麼我沒有 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 主題的許可:
{ "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" }
**注意:**將 us-east-1 取代為通知所針對的 AWS 區域,將 ACCOUNT_ID 取代為您的帳戶 ID,將 TOPIC_NAME 取代為 SNS 主題名稱。
若要限制將訊息發佈至特定警報主題的功能,請新增全域條件金鑰。下列範例政策會使用 ArnLike 條件運算式和 aws:SourceArn 全域條件金鑰。如需詳細資訊,請參閱 Amazon SNS 存取控制的範例案例。
{ "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" } } }
**注意:**將 us-east-1 取代為通知所針對的區域,將 ACCOUNT_ID 取代為您的帳戶 ID,將 TOPIC_NAME 取代為 SNS 主題名稱,將 ALARM_NAME 取代為警示名稱。
**重要事項:**帳戶中包含在條件中的任何警報都可以發佈至政策中資源的 SNS 主題。例如,警報資源擁有者的帳戶 ID 可以發佈至主題。針對 SNS 主題帳戶 ID 和擁有警報的帳戶 ID,將政策限制為相同的帳戶。
如果您的觸發動作因 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 不會測試或驗證您指定的動作。CloudWatch 也不會偵測您嘗試調用不存在的動作時導致的 Amazon EC2 Auto Scaling 或 Amazon SNS 錯誤。請確定您的動作存在。
相關資訊
相關內容
- 已提問 17 小時前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 10 個月前
- AWS 官方已更新 9 個月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 個月前