Wie richte ich ein kontoübergreifendes AWS Lambda-Abonnement mit einem SNS-Thema ein?
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:
- Öffnen Sie die Amazon SNS-Konsole und wählen Sie dann im linken Bereich Themen aus.
- Wählen Sie Thema erstellen, wählen Sie Thementyp aus und geben Sie dann den Themennamen ein.
- Scrollen Sie nach unten und wählen Sie Thema erstellen.
Erlauben Sie Konto B, eine Abonnement-Aktion zum Thema auszuführen.
- Bearbeiten Sie die Zugriffsrichtlinie zum Thema, um Konto B die sns:Subscribe-Berechtigung zu gewähren.
- 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:
- Öffnen Sie die Seite Funktion auf der AWS Lambda-Konsole. Wählen Sie dann Funktion erstellen.
- Geben Sie einen Funktionsnamen ein.
- 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.
- 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)
- Öffnen Sie die Seite Funktion in der AWS Lambda-Konsole und wählen Sie die Funktion aus, die Sie zuvor erstellt haben.
- Wählen Sie die Schaltfläche Trigger hinzufügen.
- Wählen Sie auf der Trigger-Konfigurationsseite SNS aus der Dropdown-Liste aus.
- Fügen Sie in das Feld SNS-Thema das Thema ARN ein.
- 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:
- Wählen Sie die Registerkarte Konfiguration und anschließend Berechtigungen aus.
- Scrollen Sie nach unten zum Abschnitt Ressourcenbasierte Richtlinien. Wählen Sie dann die Schaltfläche Berechtigungen hinzufügen.
- 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 - Wählen Sie Speichern aus.
- Erstellen Sie das SNS-Abonnement für Lambda.
Öffnen Sie von Konto B aus die Amazon SNS-Konsole.
- Wählen Sie im linken Bereich Abonnements aus.
- Wählen Sie die Schaltfläche Abonnement erstellen.
- Fügen Sie den ARN des SNS-Themas von Konto A in das Feld Thema ARN ein.
- Wählen Sie AWS Lambda aus der Protokoll-Dropdown-Liste aus.
- Fügen Sie den ARN der Lambda-Funktion in das Feld Endpunkt ein
- 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
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 7 Monaten