CloudWatch アラームトリガーの SNS 通知を受信しなかったのはなぜですか?

最終更新日: 2021 年 3 月 12 日

アラームの状態が変化した場合に、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>.受信したエラー: "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 トピックにメッセージを発行できます。グローバル条件キーを追加して、トピックへのメッセージを公開する機能を特定のアラームに制限します。次の例では、arnLike 条件演算子と aws:SourceArn グローバル条件キーを使用しています。詳細については、Amazon SNS アクセスコントロールの例を参照してください。

注: <region> は、この通知の対象となるリージョンに置き換えます。<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:<region>:<account-id>:alarm:<alarm-name>"
        }
    }
}

SNS トピックの暗号化が原因で、トリガーアクションが失敗している場合:

  • CloudWatch アラーム履歴に、次のようなメッセージが表示されます。
    Failed to execute action arn:aws:sns:<region>:<account-id>:<topic-name>.受信したエラー: "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 は、指定したアクションをテストまたは検証しません。また、存在しないアクションを呼び出そうとしたために発生した Amazon EC2 Auto Scaling または Amazon SNS エラーも検出しません。アクションが存在することを確認してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?