CloudWatch アラームトリガーのための、SNS 通知が受信されなかったのはなぜですか?
最終更新日: 2020 年 9 月 23 日
アラームの状態が変化した場合に、Amazon Simple Notification Service (Amazon SNS) トピックを介して通知が送信されるように、Amazon CloudWatch アラームを作成しました。けれども、CloudWatch アラームの状態が変わり、SNS 通知を受信しなくなりました。CloudWatch アラームトリガーの SNS 通知を受信しなかったのはなぜですか?
解決方法
SNS 通知の配信は、SNS トピックの設定と CloudWatch アラームによって異なります。SNS 通知が期待どおりに受信できない理由を判断するには、CloudWatch アラームの履歴で、トリガーアクションのステータスを確認します。
SNS アクセスポリシーの制限が原因となり、トリガーアクションが失敗している場合:
- CloudWatch アラーム履歴に、次のようなメッセージが表示されます。
Failed to execute action arn:aws:sns:<region>:<account-id>:<topic-name>.Received error: "Resource: arn:aws:cloudwatch:<region>:<account-id>:alarm:<alarm-name> is not authorized to perform: SNS:Publish on resource: arn:aws:sns:<region>:<account-id>:<topic-name> - SNS は、アクセスポリシーを使用して、トピックにメッセージを発行できるソースを制限します。アクセス許可エラーが発生した場合、SNS アクセスポリシーの [Statement] セクションに次のアクセス許可を追加する必要があります。この更新により、CloudWatch アラームサービスに、SNS トピックにメッセージを発行するアクセス許可が付与されます。
注: 前出の例で、<region> の部分は通知の対象となるリージョンに、<account-id> は自分のアカウント ID に、また、<topic name> は SNS トピック名に、それぞれ置き換えます。
{
"Sid": "Allow_Publish_Alarms",
"Effect": "Allow",
"Principal":
{
"Service": [
"cloudwatch.amazonaws.com"
]
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:<region>:<account-id>:<topic-name>"
}
SNS トピックの暗号化が原因で、トリガーアクションが失敗している場合:
- CloudWatch アラーム履歴に、次のようなメッセージが表示されます。
Failed to execute action arn:aws:sns:<region>:<account-id>:<topic-name>.Received error: "null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException;)" - SNS では、トピックの保管時の暗号化が許可されています。デフォルトの AWS Key Management Service (KMS) キー「alias/aws/sns」がこの暗号化に使用されている場合、CloudWatch アラームはメッセージを SNS トピックに発行できません。SNS のデフォルトの AWS KMS キーのキーポリシーでは、CloudWatch アラームが「kms:Decrypt」と「kms:GenerateDataKey」API 呼び出しを実行することを許可していません。このキーは AWS の管理下にあるため、ポリシーを手動で編集することはできません。
- SNS トピックを保存時に暗号化する必要がある場合は、顧客管理型 CMK を使用できます。顧客管理型 CMK には、キーポリシーのステートメントセクションに次のアクセス許可が含まれている必要があります。このアクセス許可により、CloudWatch アラームが、暗号化された 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:<region>:<account-id>:<topic-name> - これは、CloudWatch アラームが SNS トピックにメッセージを正常に発行したことを意味します。通知が SNS によって配信されなかった場合は、SNS トピックとそのメトリクスで配信の失敗がないかを確認します。詳細については、「Amazon SNS プッシュ通知の配信に失敗したときのトラブルシューティングを教えてください」を参照してください。
注: CloudWatch は、指定したアクションをテストまたは検証しません。また、存在しないアクションを呼び出そうとしたために発生した Amazon EC2 Auto Scaling または Amazon SNS エラーも検出しません。アクションが存在することを確認してください。