Wie richte ich ein kontoübergreifendes AWS Lambda-Abonnement mit einem SNS-Thema ein?

Lesedauer: 4 Minute
0

Ich möchte meine AWS Lambda-Funktion für ein Amazon Simple Notification Service (Amazon SNS)-Thema in einem anderen Konto abonnieren.

Kurzbeschreibung

Fügen Sie mithilfe der Amazon SNS-Konsole ein kontoübergreifendes AWS Lambda-Abonnement zu einem Amazon SNS-Thema hinzu.

Behebung

Voraussetzung

Bevor Sie beginnen, stellen Sie Folgendes sicher:

  • Die Lambda-Funktionsressourcenrichtlinie ermöglicht es SNS, die Funktion aufzurufen.
  • Die SNS-Themenzugriffsrichtlinie ermöglicht es Lambda, das Thema zu abonnieren.

Hinweis: Das SNS-Thema befindet sich in Konto A und die Lambda-Funktion befindet sich in Konto B.

Abonnieren einer kontoübergreifenden Lambda-Funktion

Es gibt zwei Möglichkeiten, eine kontoübergreifende Lambda-Funktion für ein SNS-Thema zu abonnieren:

  • Hinzufügen eines SNS-Triggers von der Lambda-Konsole in Konto B
  • Hinzufügen des Lambda-Abonnements über die SNS-Konsole in Konto B (das Konto mit der Lambda-Funktion)

Erstellen der Ressourcen

Erstellen Sie ein SNS-Thema in Konto A:

  1. Öffnen Sie die Amazon SNS-Konsole und wählen Sie dann im linken Bereich Themen aus.
  2. Wählen Sie Thema erstellen, wählen Sie Thementyp aus und geben Sie dann den Themennamen ein.
  3. Scrollen Sie nach unten und wählen Sie Thema erstellen.

Erlauben Sie Konto B, eine Abonnement-Aktion zum Thema auszuführen.

  1. Bearbeiten Sie die Zugriffsrichtlinie zum Thema, um Konto B die sns:Subscribe-Berechtigung zu gewähren.
  2. Fügen Sie die unten abgebildete Grundsatzerklärung hinzu und speichern Sie:
{
  "Sid": "Allow-AccountB-To-Subscribe",
  "Effect": "Allow",
  "Principal": {
    "AWS": ""
  },
  "Action": "sns:Subscribe",
  "Resource": ""
}

Hinweis: Ersetzen Sie Principal <AccountB> mit Ihrer Kontonummer, die die Lambda-Funktion hat. Ersetzen Sie für das Feld Ressource <SNSTopicARN> Ihren Amazon-Ressourcennamen (ARN) des SNS-Themas.

Erstellen Sie eine Lambda-Funktion in Konto B:

  1. Öffnen Sie die Seite Funktion auf der AWS Lambda-Konsole. Wählen Sie dann Funktion erstellen.
  2. Geben Sie einen Funktionsnamen ein.
  3. Wählen Sie für die Ausführungsrolle die Option Neue Rolle mit grundlegenden Lambda-Berechtigungen erstellen aus. Lambda erstellt eine Ausführungsrolle, die der Funktion die Berechtigung erteilt, Protokolle auf Amazon CloudWatch hochzuladen.
  4. Scrollen Sie nach unten und wählen Sie die Schaltfläche Funktion erstellen.

Abonnieren einer Lambda-Funktion durch Hinzufügen eines Triggers auf der Lambda-Konsole (Option 1)

  1. Öffnen Sie die Seite Funktion in der AWS Lambda-Konsole und wählen Sie die Funktion aus, die Sie zuvor erstellt haben.
  2. Wählen Sie die Schaltfläche Trigger hinzufügen.
  3. Wählen Sie auf der Trigger-Konfigurationsseite SNS aus der Dropdown-Liste aus.
  4. Fügen Sie in das Feld SNS-Thema das Thema ARN ein.
  5. Wählen Sie die Schaltfläche Hinzufügen.

Das SNS-Thema in Konto A kann jetzt Ihre Lambda-Funktion in Konto B aufrufen.

Testen der Konfiguration

Testen Sie, indem Sie eine Nachricht zum SNS-Thema veröffentlichen.
Hinweis: Wenn Sie den Trigger über die Lambda-Konsole hinzufügen, fügt Lambda automatisch die erforderlichen Berechtigungen hinzu, damit Amazon SNS Ihre Lambda-Funktion von diesem Trigger aus aufrufen kann.

Abonnieren einer Lambda-Funktion durch Hinzufügen eines Abonnements über die SNS-Konsole (Option 2)

Für diese Option müssen Sie dem SNS-Dienstprinzipal ausdrücklich die Erlaubnis erteilen, die Aktion lambda:InvokeFunction auszuführen.

Erlauben Sie dem SNS-Dienstprinzipal, die Lambda-Funktion aufzurufen.

Wählen Sie auf der Funktionsseite der Lambda-Konsole die Funktion aus, die Sie zuvor erstellt haben. Führen Sie die folgenden Schritte aus:

  1. Wählen Sie die Registerkarte Konfiguration und anschließend Berechtigungen aus.
  2. Scrollen Sie nach unten zum Abschnitt Ressourcenbasierte Richtlinien. Wählen Sie dann die Schaltfläche Berechtigungen hinzufügen.
  3. Wählen Sie AWS Service und dann SNS aus der Dropdown-Liste aus. Füllen Sie dann die Felder aus:
    Setzen Sie sie für Statement-ID auf AllowSNSToInvokeFunction
    Fügen Sie als Quell-ARN den ARN des zuvor erstellten SNS-Themas ein
    Wählen Sie für Aktion lambda:InvokeFunction
  4. Wählen Sie Speichern aus.
  5. Erstellen Sie das SNS-Abonnement für Lambda.

Öffnen Sie von Konto B aus die Amazon SNS-Konsole.

  1. Wählen Sie im linken Bereich Abonnements aus.
  2. Wählen Sie die Schaltfläche Abonnement erstellen.
  3. Fügen Sie den ARN des SNS-Themas von Konto A in das Feld Thema ARN ein.
  4. Wählen Sie AWS Lambda aus der Protokoll-Dropdown-Liste aus.
  5. Fügen Sie den ARN der Lambda-Funktion in das Feld Endpunkt ein
  6. Scrollen Sie nach unten und wählen Sie die Schaltfläche Abonnement erstellen.

Hinweis: Stellen Sie sicher, dass Sie Ihre Lambda-Funktion für das SNS-Thema über das AWS-Konto abonnieren, das über die Lambda-Funktion verfügt (Konto B). Wenn Sie versuchen, das Abonnement von dem Konto aus zu erstellen, das das SNS-Thema hat (Konto A), erhalten Sie die folgende Fehlermeldung:

Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:region:XXXXXXX:function:XXXXXXX

Weitere Informationen

Verwenden von AWS Lambda mit Amazon Simple Notification Service

Warum erhalte ich einen Autorisierungsfehler, wenn ich versuche, meine Lambda-Funktion für mein Amazon SNS-Thema zu abonnieren?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr