Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
為什麼我沒有收到 CloudWatch 警示觸發的 Amazon SNS 通知?
我已設定 Amazon CloudWatch 警示,讓它在警示狀態變更時將通知傳送至 Amazon Simple Notification Service (Amazon SNS) 主題。但是,當狀態變更時,我沒有收到 SNS 通知。
解決方法
若要判斷為何您未收到 SNS 通知,請檢查 CloudWatch 警示的歷程記錄以檢視觸發動作的狀態。
SNS 存取政策限制
您在 CloudWatch 警示歷程記錄中收到類似以下的錯誤訊息:
「Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME.Received error: "CloudWatch Alarms is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME"」
會發生此錯誤是因為 SNS 存取政策限制了 CloudWatch 對 SNS 主題的存取。
Amazon SNS 使用存取政策來限制可以將訊息發佈至該主題的服務。若要授予 CloudWatch 將訊息發佈至 SNS 主題的權限,請將以下權限陳述式新增至 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 替換為您的 AWS 帳戶 ID,並將 TOPIC_NAME 替換為 SNS 主題名稱。
若要限制特定警示將訊息發佈至主題的能力,請新增全域條件金鑰。以下範例政策使用 ArnLike 條件運算子與 aws:SourceArn 全域條件金鑰:
{ "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 主題的帳戶與擁有警示的帳戶,將政策限制為同一個帳戶。
如需更多資訊,請參閱 Amazon SNS 存取控制的範例案例。
SNS 主題加密問題
如果您的觸發動作因為 SNS 主題加密而失敗,則 CloudWatch 警示歷程記錄會顯示類似以下的錯誤訊息:
「Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME.Received error: "CloudWatch Alarms does not have authorization to access the SNS topic encryption key."」
如果您將 Amazon SNS 設定為使用預設的 AWS Key Management Service (AWS KMS) alias/aws/sns 金鑰進行 伺服器端加密,則 CloudWatch 無法發佈至該 SNS 主題。Amazon SNS 的預設 AWS KMS 金鑰政策不允許 CloudWatch 執行 kms:Decrypt 與 kms:GenerateDataKey API 作業。由於 AWS 管理此金鑰,您無法手動編輯該政策。
如果您必須對靜態 SNS 主題進行加密,請使用客戶自管金鑰。該客戶自管金鑰必須在金鑰政策中包含以下權限陳述式:
{ "Sid": "Allow_CloudWatch_for_CMK", "Effect": "Allow", "Principal": { "Service": [ "cloudwatch.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" }
執行成功
如果您的觸發動作成功,則 CloudWatch 警示歷程記錄會顯示類似以下的一則訊息:
「Successfully executed action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME」
如果您未收到 SNS 通知,請檢查 SNS 主題及其指標,確認傳遞是否失敗。如需更多資訊,請參閱如何存取推播通知的 Amazon SNS 主題交付日誌?
CloudWatch 不會測試或驗證您指定的動作。當您嘗試調用不存在的動作時,CloudWatch 也不會偵測 Amazon EC2 Auto Scaling 或 Amazon SNS 發生的錯誤。請確定您的動作確實存在。
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 3 年前
AWS 官方已更新 1 年前
