Direkt zum Inhalt

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

Lesedauer: 3 Minute
0

Ich habe einen Amazon-CloudWatch-Alarm so konfiguriert, dass Benachrichtigungen an ein Amazon Simple Notification Service (Amazon SNS)-Thema gesendet werden, wenn sich der Status des Alarms ändert. Ich erhalte jedoch keine SNS-Benachrichtigungen, wenn sich der Status ändert.

Lösung

Um festzustellen, warum du keine SNS-Benachrichtigungen erhältst, überprüfe den Verlauf des CloudWatch-Alarms, um den Status der Auslöseaktion anzuzeigen.

SNS-Zugriffsrichtlinienbeschränkungen

Du erhältst eine Fehlermeldung, die der folgenden im CloudWatch-Alarmverlauf ähnelt:

„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"“

Dieser Fehler tritt auf, weil die SNS-Zugriffsrichtlinie den CloudWatch-Zugriff auf das SNS-Thema beschränkt.

Amazon SNS verwendet Zugriffsrichtlinien, um die Services einzuschränken, die Nachrichten zu dem Thema veröffentlichen können. Um CloudWatch die Berechtigung zu erteilen, Nachrichten zum SNS-Thema zu veröffentlichen, füge der SNS-Zugriffsrichtlinie die folgende Berechtigungsanweisung hinzu:

{  "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: Ersetze us-east-1 durch die AWS-Region, für die die Benachrichtigung bestimmt ist, ACCOUNT_ID durch deine AWS-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üge globale Bedingungsschlüssel hinzu. Im folgenden Beispiel werden der ArnLike-Bedingungsoperator und der globale Bedingungsschlüssel aws:SourceArn verwendet:

{  "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: Ersetze us-east-1 durch die Region, für die die Benachrichtigung bestimmt ist, ACCOUNT_ID durch deine Konto-ID, TOPIC_NAME durch den Namen des SNS-Themas und ALARM_NAME durch den Alarmnamen.

Alarme, die sich in dem Konto befinden, das in der Bedingung enthalten ist, können 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änke die Richtlinie sowohl für das Konto, dem das SNS-Thema gehört, als auch für das Konto, dem der Alarm gehört, auf dasselbe Konto.

Weitere Informationen findest du unter Beispielfälle für die Amazon SNS-Zugriffssteuerung.

SNS-Thema Verschlüsselungsprobleme

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

„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."“

Wenn du Amazon SNS so konfiguriert hast, dass der standardmäßige alias/aws/sns-Schlüssel von AWS Key Management Service (AWS KMS) für die serverseitige Verschlüsselung verwendet wird, kann CloudWatch keine Nachrichten zum SNS-Thema veröffentlichen. Die standardmäßige AWS-KMS-Schlüsselrichtlinie für Amazon SNS erlaubt CloudWatch nicht, die API-Vorgänge kms:Decrypt und kms:GenerateDataKey durchzuführen. Da AWS diesen Schlüssel verwaltet, kannst du die Richtlinie nicht manuell bearbeiten.

Wenn du das SNS-Thema im Ruhezustand verschlüsseln musst, verwende einen vom Kunden verwalteten Schlüssel. Der vom Kunden verwaltete Schlüssel muss die folgende Berechtigungsanweisung in der Schlüsselrichtlinie enthalten:

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

Erfolgreiche Ausführung

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

„Successfully executed action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME“

Wenn du keine SNS-Benachrichtigung erhältst, überprüfe das SNS-Thema und die zugehörigen Metriken für Zustellungsfehler. Weitere Informationen findest du unter Wie greife ich auf die Amazon-SNS-Zustellprotokolle für Push-Benachrichtigungen zu?

CloudWatch testet oder validiert die von dir angegebenen Aktionen nicht. CloudWatch erkennt auch keine Fehler bei Amazon EC2 Auto Scaling oder Amazon SNS, die auftreten, wenn du versuchst, nicht vorhandene Aktionen aufzurufen. Stelle sicher, dass die Aktionen existieren.

Ähnliche Informationen

Amazon-CloudWatch-Alarme verwenden

Verschlüsseln von Nachrichten, die mit AWS KMS auf Amazon SNS veröffentlicht werden