Warum habe ich keine SNS-Benachrichtigung für meinen CloudWatch-Alarmauslöser erhalten?

Lesedauer: 4 Minute
0

Ich habe einen Amazon CloudWatch-Alarm erstellt, um über ein Amazon Simple Notification Service (Amazon SNS)-Thema Benachrichtigungen zu senden, wenn sich der Status des Alarms ändert. Wenn der CloudWatch-Alarm den Status ändert, erhalte ich jedoch keine SNS-Benachrichtigung.

Lösung

Die Zustellung von SNS-Benachrichtigungen hängt von der Konfiguration des SNS-Themas und des CloudWatch-Alarms ab. Um festzustellen, warum Sie keine SNS-Benachrichtigungen erhalten, überprüfen Sie den Verlauf des CloudWatch-Alarms, um den Status der Auslöseaktion einzusehen.

Wenn Ihre Auslöseaktion aufgrund von Einschränkungen der SNS-Zugriffsrichtlinie fehlgeschlagen ist, zeigt der CloudWatch-Alarmverlauf eine Meldung an, die der folgenden Meldung ähnelt:

„Die Aktion arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME konnte nicht ausgeführt werden. Empfangener Fehler: „Ressource: arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME ist nicht autorisiert, Folgendes auszuführen: SNS:Publish on resource: arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME““

SNS schränkt die Quellen, die Nachrichten zum Thema veröffentlichen können, mithilfe von Zugriffsrichtlinien ein. Wenn ein Berechtigungsfehler auftritt, müssen Sie die folgenden Berechtigungen im Abschnitt Anweisung der SNS-Zugriffsrichtlinie hinzufügen. Dieses Update gewährt dem CloudWatch-Alarmdienst die Berechtigung, Nachrichten zum Thema SNS zu veröffentlichen:

{
  "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"
}

Hinweis: Ersetzen Sie us-east-1 durch die AWS-Region, für die die Benachrichtigung gilt, ACCOUNT\ _ID durch Ihre Konto-ID und TOPIC\ _NAME durch den Namen des SNS-Themas.

Um die Möglichkeit, Nachrichten zum Thema zu veröffentlichen, auf bestimmte Alarme zu beschränken, fügen Sie globale Bedingungsschlüssel hinzu. Im folgenden Beispiel werden der ArnLike-Bedingungsoperator und der globale Bedingungsschlüssel aws:SourceArn verwendet. Weitere Informationen finden Sie unter Beispielfälle für die Amazon SNS-Zugriffskontrolle.

{
  "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"
    }
  }
}

Hinweis: Ersetzen Sie us-east-1 durch die Region, für die die Benachrichtigung bestimmt ist, ACCOUNT\ _ID durch Ihre Konto-ID, TOPIC\ _NAME durch den Namen des SNS-Themas und ALARM\ _NAME durch den Alarmnamen.

Wichtig: Jeder Alarm in dem Konto, der in der Bedingung enthalten ist, kann im SNS-Thema der Ressource in der Richtlinie veröffentlicht werden. Beispielsweise kann die Konto-ID des Besitzers der Alarm-Ressource zum Thema veröffentlicht werden. Beschränken Sie die Richtlinie sowohl für die Konto-ID des SNS-Themas als auch für die Konto-ID, der der Alarm gehört, auf dasselbe Konto.

Wenn Ihre Auslöseaktion aufgrund der SNS-Themenverschlüsselung fehlschlägt, zeigt der CloudWatch-Alarmverlauf eine Meldung an, die der folgenden Meldung ähnelt:

„Die Aktion arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME konnte nicht ausgeführt werden. Empfangener Fehler: „null (Service: AWSKMS; Statuscode: 400; Fehlercode: AccessDeniedException;)““

SNS erlaubt Verschlüsselung im Ruhezustand für sein Thema. Wenn SNS für diese Verschlüsselung den standardmäßigen AWS Key Management Service (AWS KMS)-Schlüssel alias/aws/sns verwendet, können CloudWatch-Alarme keine Nachrichten zum SNS-Thema veröffentlichen. Die standardmäßige Richtlinie des AWS-KMS-Schlüssels für SNS erlaubt es CloudWatch-Alarmen nicht, kms:Decrypt- und kms:GenerateDataKey-API-Aufrufe auszuführen. Da AWS diesen Schlüssel verwaltet, können Sie die Richtlinie nicht manuell bearbeiten.
Wenn Sie das SNS-Thema im Ruhezustand verschlüsseln müssen, verwenden Sie einen vom Kunden verwalteten Schlüssel. Der vom Kunden verwaltete Schlüssel muss die folgenden Berechtigungen enthalten, die im Abschnitt Anweisung der Schlüsselrichtlinie aufgeführt sind. Diese Berechtigungen ermöglichen es den CloudWatch-Alarmen, Nachrichten zu verschlüsselten SNS-Themen zu veröffentlichen:

{
  "Sid": "Allow_CloudWatch_for_CMK",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "cloudwatch.amazonaws.com"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*"
}

Wenn Ihre Auslöseaktion erfolgreich war, zeigt der CloudWatch-Alarmverlauf eine Meldung an, die der folgenden Meldung ähnelt:

„Die Aktion arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME wurde erfolgreich ausgeführt“

Dies bedeutet, dass der CloudWatch-Alarm erfolgreich eine Nachricht zum SNS-Thema veröffentlicht hat. Wenn die Benachrichtigung nicht von SNS zugestellt wurde, überprüfen Sie das SNS-Thema und die zugehörigen Metriken auf etwaige Zustellungsfehler. Weitere Informationen finden Sie unter Wie greife ich auf die Amazon SNS-Lieferprotokolle für Push-Benachrichtigungen zu?

Hinweis: CloudWatch testet oder validiert die von Ihnen angegebenen Aktionen nicht. CloudWatch erkennt auch keine Amazon EC2 Auto Scaling- oder Amazon SNS-Fehler, die auf den Versuch zurückzuführen sind, nicht existierende Aktionen aufzurufen. Stellen Sie sicher, dass Ihre Aktionen existieren.

Ähnliche Informationen

Amazon CloudWatch-Alarme verwenden

Verschlüsseln von auf Amazon SNS veröffentlichten Nachrichten mit AWS KMS