Direkt zum Inhalt

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üge mithilfe der Amazon/--Konsole ein kontoübergreifendes AWS-Lambda-Abonnement zu einem Amazon-SNS-Thema hinzu.

Lösung

Voraussetzung

Bevor du beginnst, stelle 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-Auslösers 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)

Ressourcen erstellen

Erstelle ein SNS-Thema in Konto A:

  1. Öffne die Amazon-SNS-Konsole und wähle dann im linken Bereich Themen aus.
  2. Wähle Thema erstellen, wähle Thementyp aus und gib dann den Themennamen ein.
  3. Scrolle nach unten und wähle Thema erstellen.

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

  1. Bearbeite die Zugriffsrichtlinie zum Thema, um Konto B die sns:Subscribe-Berechtigung zu erteilen.
  2. Füge die unten abgebildete Richtlinienanweisung hinzu und wähle Speichern:
{
  "Sid": "Allow-AccountB-To-Subscribe",
  "Effect": "Allow",
  "Principal": {
    "AWS": ""
  },
  "Action": "sns:Subscribe",
  "Resource": ""
}

Hinweis: Ersetze Prinzipal <AccountB> durch deine Kontonummer, die die Lambda-Funktion hat. Ersetze das Feld Ressource <SNSTopicARN> durch Amazon-Ressourcennamen (ARN) deines SNS-Themas.

Erstelle eine Lambda-Funktion in Konto B:

  1. Öffne die Seite Funktion auf der AWS-Lambda-Konsole. Wähle dann Funktion erstellen.
  2. Gib einen Funktionsnamen ein.
  3. Wähle für Ausführungsrolle die Option Create a new role with basic Lambda permissions (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. Scrolle nach unten und wähle die Schaltfläche Funktion erstellen.

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

  1. Öffne die Seite Funktion in der AWS-Lambda-Konsole und wähle die Funktion aus, die du zuvor erstellt hast.
  2. Wähle die Schaltfläche Auslöser hinzufügen.
  3. Wähle auf der Auslöser-Konfigurationsseite SNS aus der Dropdown-Liste aus.
  4. Füge in das Feld SNS-Thema das Thema ARN ein.
  5. Wähle die Schaltfläche Hinzufügen.

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

Die Konfiguration testen

Führe den Test durch, indem du eine Nachricht zum SNS-Thema veröffentlichst.
Hinweis: Wenn du den Auslöser über die Lambda-Konsole hinzufügst, fügt Lambda automatisch die erforderlichen Berechtigungen hinzu, damit Amazon SNS die Lambda-Funktion von diesem Auslöser aus aufrufen kann.

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

Für diese Option musst du dem SNS-Service-Prinzipal ausdrücklich die Berechtigung erteilen, die Aktion lambda:InvokeFunction auszuführen.

Erlaube dem SNS-Service-Prinzipal, die Lambda-Funktion aufzurufen.

Wähle auf der Funktionsseite der Lambda-Konsole die Funktion aus, die du zuvor erstellt hast. Gehe danach wie folgt vor:

  1. Wähle die Registerkarte Konfiguration und anschließend Berechtigungen aus.
  2. Scrolle nach unten zum Abschnitt Ressourcenbasierte Richtlinie. Wähle dann die Schaltfläche Berechtigungen hinzufügen.
  3. Wähle AWS-Service und dann SNS aus der Dropdown-Liste aus. Fülle dann die Felder aus:
    Setze Anweisungs-ID auf AllowSNSToInvokeFunction
    Füge für Quell-ARN den ARN des zuvor erstellten SNS-Themas ein
    Wähle für Aktion lambda:InvokeFunction.
  4. Wähle Speichern aus.
  5. Erstelle das SNS-Abonnement für Lambda.

Öffne von Konto B aus die Amazon-SNS-Konsole.

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

Hinweis: Stelle sicher, dass du die Lambda-Funktion für das SNS-Thema über das AWS-Konto abonnierst, das über die Lambda-Funktion verfügt (Konto B). Wenn du versuchst, das Abonnement von dem Konto aus zu erstellen, das das SNS-Thema hat (Konto A), erhältst du 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

Ähnliche Informationen

Verwendung 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?