Konfigurieren von Amazon S3-Ereignisbenachrichtigungen - Amazon Simple Storage Service

Konfigurieren von Amazon S3-Ereignisbenachrichtigungen

Die Amazon S3-Benachrichtigungsfunktion ermöglicht Ihnen, Benachrichtigungen zu erhalten, wenn innerhalb Ihres Buckets bestimmte Ereignisse stattfinden. Um Benachrichtigungen zu aktivieren, müssen Sie zuerst eine Benachrichtigungskonfiguration hinzufügen, die die Ereignisse angibt, die Amazon S3 veröffentlichen soll, und die Ziele, an die Amazon S3 die Benachrichtigungen senden soll. Sie speichern dieses Konfiguration in der einem Bucket zugeordneten notification-Subressource. (Weitere Informationen finden Sie unter Optionen für die Bucket-Konfiguration.) Amazon S3 stellt eine API zur Verwaltung dieser Subressource bereit.

Wichtig

Amazon S3-Ereignisbenachrichtigungen sind so konzipiert, dass sie mindestens einmal zugestellt werden. Ereignisbenachrichtigungen stellen Ereignisse typischerweise in wenigen Sekunden bereit, manchmal kann dies aber auch eine Minute oder länger dauern.

Wenn zwei Schreibvorgänge an einem einzelnen nicht versionsgesteuerten Objekt gleichzeitig vorgenommen werden, ist es möglich, dass nur eine einzelne Ereignisbenachrichtigung gesendet wird. Wenn Sie sicherstellen möchten, dass für jeden erfolgreichen Schreibvorgang eine Ereignisbenachrichtigung gesendet wird, können Sie die Versioning auf Ihrem Bucket aktivieren. Bei der Versioning erstellt jeder erfolgreiche Schreibvorgang eine neue Version Ihres Objekts und sendet auch eine Ereignisbenachrichtigung.

Übersicht über Benachrichtigungen

Zurzeit kann Amazon S3 Benachrichtigungen für die folgenden Ereignisse veröffentlichen:

  • Neues Objekt erstellt — Amazon S3 unterstützt mehrere APIs für das Erstellen von Objekten. Sie können eine Benachrichtigung anfordern, die nur dann erstellt wird, wenn eine bestimmte API verwendet wird (z. B. s3:ObjectCreated:Put), oder einen Platzhalter verwenden (z. B. s3:ObjectCreated:*), um eine Benachrichtigung anzufordern, wenn ein Objekt erstellt wird, unabhängig von der verwendeten API.

  • Entfernung eines Objekts— Amazon S3 unterstützt das Löschen von Objekten mit und ohne Versioning. Weitere Informationen zum Objekt-Versioning finden Sie unter Objekt-Versioning und Verwenden von Versioning.

    Sie können eine Benachrichtigung anfordern, wenn ein Objekt gelöscht wird, oder wenn ein versionsfähiges Objekt permanent gelöscht wird. Dazu wird der Ereignistyp s3:ObjectRemoved:Delete verwendet. Sie können auch eine Benachrichtigung anfordern, wenn eine Löschmarkierung für ein versionsfähiges Objekt erstellt wird. Dazu wird der Ereignistyp s3:ObjectRemoved:DeleteMarkerCreated verwendet. Sie können auch eine Wildcard s3:ObjectRemoved:* verwenden, um bei jedem Löschen eines Objekts eine Benachrichtigung anzufordern. Weitere Informationen zum Löschen von versionsfähigen Objekten finden Sie unter Löschen von Objektversionen.

  • Wiederherstellen von Objektereignissen – Amazon S3 unterstützt die Wiederherstellung von in den Speicherklassen S3 Glacier archivierten Objekten. Sie können mittels s3:ObjectRestore:Completed Benachrichtigungen bei Abschluss von Objektwiederherstellungen anfordern. Sie können mittels s3:ObjectRestore:Post Benachrichtungen bei Initiierung einer Wiederherstellung anfordern.

  • Verlust eines Reduced Redundancy Storage (RRS)-Objekts — Amazon S3 sendet eine Benachrichtigung, wenn der Verlust eines Objekts in der Speicherklasse RRS entdeckt wird.

  • Replikationsereignisse — Amazon S3 sendet Ereignisbenachrichtigungen für Replikationskonfigurationen, bei denen S3 Replication Time Control (S3 RTC) aktiviert ist. Sie sendet diese Benachrichtigungen, wenn für ein Objekt die Replikation fehlschlägt, wenn ein Objekt den Schwellenwert von 15 Minuten überschreitet, wenn ein Objekt nach dem Schwellenwert von 15 Minuten repliziert wird und wenn ein Objekt nicht mehr durch Replikationsmetriken verfolgt wird. Es veröffentlicht ein zweites Ereignis, wenn dieses Objekt in die Zielregion repliziert.

Eine Liste der unterstützten Ereignistypen finden Sie unter Unterstützte Ereignistypen.

Amazon S3 unterstützt die folgenden Ziele, wo es Ereignisse veröffentlichen kann:

  • Amazon Simple Notification Service-(Amazon SNS)-Thema

    Amazon SNS ist ein flexibler, vollständig verwalteter Push-Messaging-Service. Mit diesem Service können Sie Mitteilungen an Mobilgeräte oder verteilte Dienste übertragen. Mit SNS können Sie eine Nachricht einmal veröffentlichen und ein- oder mehrmals übermitteln. Weitere Informationen zu SNS finden Sie auf der Produktdetailseite für Amazon SNS.

  • Amazon Simple Queue Service-(Amazon SQS)-Warteschlange

    Amazon SQS ist ein skalierbarer und vollständig verwalteter Warteschlangenservice. Mit SQS können Sie beliebige Datenvolumen übertragen, ohne dass andere Services stets verfügbar sein müssen. In Ihrer Benachrichtigungskonfiguration können Sie anfordern, dass Amazon S3 Ereignisse in einer SQS-Warteschlange veröffentlichen kann.

    Derzeit ist nur die Standard-SQS-Warteschlange als Amazon S3-Ereignisbenachrichtigungsziel zugelassen, während die FIFO-SQS-Warteschlange nicht zugelassen ist. Weitere Informationen zu Amazon SQS finden Sie auf der Amazon SQS-Produktdetailseite.

  • AWS Lambda

    AWS Lambda ist ein Datenverarbeitungsservice, mit dem Sie auf einfache Weise Anwendungen erstellen können, die schnell auf neue Informationen reagieren. AWS Lambda führt Ihren Code als Reaktion auf bestimmte Ereignisse aus, beispielsweise das Hochladen von Bildern, Aktivitäten in einer App, Websiteklicks oder Ausgaben aus verbundenen Geräten.

    Sie können AWS Lambda verwenden, um weitere AWS-Services mit benutzerdefinierter Logik bereitzustellen oder ein eigenes Backend zu erstellen, das mit der Größe, Leistung und Sicherheit von AWS arbeitet. Mit AWS Lambda können Sie ganz einfach unabhängige, ereignisabhängige Anwendungen erstellen, die nur ausgeführt werden, wenn sie benötigt werden, und die automatisch von einigen wenigen Anfragen pro Tag bis hin zu Tausenden von Anfragen pro Sekunde skaliert werden können.

    AWS Lambda als Reaktion auf Amazon S3-Bucket-Ereignisse benutzerdefinierten Code ausführen. Sie laden Ihren benutzerdefinierten Code zu AWS Lambda hoch und erstellen eine so genannte Lambda-Funktion. Wenn Amazon S3 ein Ereignis eines bestimmten Typs entdeckt (z. B. eine Objekterstellung), kann das Ereignis zu AWS Lambda veröffentlicht werden und Ihre Funktion in Lambda aufrufen. In Reaktion darauf führt AWS Lambda Ihre Funktion aus.

Warnung

Wenn Ihre Benachrichtigung schließlich in den Bucket schreibt, der die Benachrichtigung auslöst, kann dies zu einer Ausführungsschleife führen. Wenn der Bucket z. B. eine Lambda-Funktion immer dann auslöst, wenn ein Objekt hochgeladen wird, und die Funktion ein Objekt in den Bucket hochlädt, löst sich die Funktion indirekt selbst aus. Um dies zu vermeiden, verwenden Sie zwei Buckets oder konfigurieren Sie den Auslöser so, dass er nur für einen Präfix gilt, der für eingehende Objekte verwendet wird.

Weitere Informationen und ein Beispiel für die Verwendung von Amazon S3-Benachrichtigungen mit AWS Lambda finden Sie unter Verwenden von AWS Lambda mit Amazon S3 im AWS Lambda Developer Guide.

Vorgehensweise zum Aktivieren von Ereignisbenachrichtigungen

Die Aktivierung von Benachrichtigungen erfolgt auf Bucket-Ebene. Sie speichern die Benachrichtigungskonfiguration in der einem Bucket zugeordneten notification-Subressource. Sie können jede der folgenden Methoden verwenden, um die Benachrichtigungskonfiguration zu verwalten:

  • Verwenden der Amazon S3-Konsole

    Die Benutzeroberfläche der Konsole ermöglicht Ihnen, eine Benachrichtigungskonfiguration für einen Bucket einzurichten, ohne Code schreiben zu müssen. Weitere Informationen finden Sie unter Wie kann ich Ereignisbenachrichtigungen für einen S3-Bucket aktivieren und konfigurieren? im Konsolenbenutzerhandbuch für Amazon Simple Storage Service.

  • Programmgesteuerte Verwendung der AWS-SDKs

    Anmerkung

    Falls nötig, können Sie auch die REST API-Aufrufe in Amazon S3 direkt von Ihrem Code aus durchführen. Allerdings kann dies aufwändig sein, weil Sie Code zur Authentifizierung Ihrer Anfragen schreiben müssen.

    Intern rufen sowohl die Konsole als auch die SDKs die Amazon S3-REST-API auf, um die mit dem Bucket verknüpften notification-Unterressourcen zu verwalten. Informationen zur Benachrichtigungskonfiguration anhand von AWS SDK-Beispielen finden Sie unter Walkthrough: Konfigurieren eines Buckets für Benachrichtigungen (SNS-Thema und SQS-Warteschlange).

    Unabhängig von der verwendeten Methode speichert Amazon S3 die Benachrichtigungskonfiguration als XML in der mit dem jeweiligen Bucket verknüpften Unterressource notification. Weitere Informationen zu Bucket-Subressourcen finden Sie unter Optionen für die Bucket-Konfiguration.

    Standardmäßig sind für keinen Ereignistyp Benachrichtigungen aktiviert. Aus diesem Grund speichert die notification-Subressource anfänglich eine leere Konfiguration.

    <NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </NotificationConfiguration>

    Um die Benachrichtigungen für bestimmte Ereignistypen zu aktivieren, ersetzen Sie das XML durch die entsprechende Konfiguration, die die Ereignistypen identifiziert, die Amazon S3 veröffentlichen soll, sowie das Ziel, in dem die Ereignisse veröffentlicht werden sollen. Sie müssen für jedes Ziel eine entsprechende XML-Konfiguration hinzufügen. Zum Beispiel:

    • Veröffentlichung von Ereignismitteilungen in einer SQS-Warteschlange — Um eine SQS-Warteschlange als Benachrichtigungsziel für ein oder mehrere Ereignistypen einzurichten, fügen Sie die QueueConfiguration hinzu.

      <NotificationConfiguration> <QueueConfiguration> <Id>optional-id-string</Id> <Queue>sqs-queue-arn</Queue> <Event>event-type</Event> <Event>event-type</Event> ... </QueueConfiguration> ... </NotificationConfiguration>
    • Veröffentlichung von Ereignismitteilungen in einem SNS-Thema — Um ein SNS-Thema als Benachrichtigungsziel für spezifische Ereignistypen einzurichten, fügen Sie die TopicConfiguration hinzu.

      <NotificationConfiguration> <TopicConfiguration> <Id>optional-id-string</Id> <Topic>sns-topic-arn</Topic> <Event>event-type</Event> <Event>event-type</Event> ... </TopicConfiguration> ... </NotificationConfiguration>
    • Rufen Sie die AWS Lambda-Funktion auf und übergeben Sie ihr eine Ereignismitteilung als Argument — Um eine Lambda-Funktion als Benachrichtigungsziel für spezifische Ereignistypen einzurichten, fügen Sie die CloudFunctionConfiguration hinzu.

      <NotificationConfiguration> <CloudFunctionConfiguration>    <Id>optional-id-string</Id>    <Cloudcode>cloud-function-arn</Cloudcode>         <Event>event-type</Event>       <Event>event-type</Event>       ...   </CloudFunctionConfiguration> ... </NotificationConfiguration>

    Um alle für einen Bucket konfigurierten Benachrichtigungen zu entfernen, speichern Sie ein leeres <NotificationConfiguration/>-Element in der notification-Unterressource.

    Wenn Amazon S3 ein Ereignis des spezifischen Typs erkennt, veröffentlicht es eine Meldung mit der Ereignisinformation. Weitere Informationen finden Sie unter Struktur von Ereignismeldungen.

Ereignisbenachrichtigungstypen und -ziele

Dieser Abschnitt beschreibt die Ereignisbenachrichtigungstypen, die von Amazon S3 unterstützt werden, sowie den Typ der Ziele, wo die Benachrichtigungen veröffentlicht werden können.

Unterstützte Ereignistypen

Amazon S3 kann Ereignisse der folgenden Typen veröffentlichen. Sie spezifizieren diese Ereignistypen in der Benachrichtigungskonfiguration.

Ereignistypen Beschreibung

s3:ObjectCreated:*

s3:ObjectCreated:Put

s3:ObjectCreated:Post

s3:ObjectCreated:Copy

s3:ObjectCreated:CompleteMultipartUpload

Amazon S3 APIs wie PUT, POST und COPY können ein Objekt erstellen. Unter Verwendung dieser Ereignistypen können Sie eine Benachrichtigung aktivieren, wenn ein Objekt mit einer spezifischen API erstellt wird. Sie können auch den Ereignistyp s3:ObjectCreated:* verwenden, um eine Benachrichtigung unabhängig von der API anzufordern, die zum Erstellen eines Objekts verwendet wurde.

Für fehlgeschlagene Operationen erhalten Sie keine Ereignisbenachrichtigungen.

s3:ObjectRemoved:*

s3:ObjectRemoved:Delete

s3:ObjectRemoved:DeleteMarkerCreated

Durch Verwendung der ObjectRemoved-Ereignistypen können Sie eine Benachrichtigung aktivieren, wenn ein Objekt oder mehrere Objekte aus einem Bucket entfernt werden.

Sie können eine Benachrichtigung anfordern, wenn ein Objekt gelöscht wird oder ein Objekt mit Versioning permanent gelöscht wird, indem Sie den Ereignistyp s3:ObjectRemoved:Delete verwenden. Sie können auch eine Benachrichtigung anfordern, wenn eine Löschmarkierung für ein Objekt mit Versioning erstellt wird, indem Sie den Ereignistyp s3:ObjectRemoved:DeleteMarkerCreated verwenden. Weitere Informationen zum Löschen von versionsfähigen Objekten finden Sie unter Löschen von Objektversionen. Sie können auch eine Wildcard s3:ObjectRemoved:* verwenden, um bei jedem Löschen eines Objekts eine Benachrichtigung anzufordern.

Für ein automatisches Löschen aufgrund von Lebenszyklusrichtlinien und für fehlgeschlagene Operationen erhalten Sie keine Ereignisbenachrichtigungen.

s3:ObjectRestore:Post

s3:ObjectRestore:Completed

Mithilfe von Objektwiederherstellungs-Ereignistypen können Sie Benachrichtigungen für Initiierungs- und Abschlussereignisse erhalten, wenn Objekte aus der Speicherklasse S3 Glacier wiederhergestellt werden.

Sie verwenden s3:ObjectRestore:Post, um Benachrichtigungen über die Initiierung von Objektwiederherstellungen zu erhalten. Sie verwenden s3:ObjectRestore:Completed, um Benachrichtigungen über den Abschluss von Objektwiederherstellungen zu erhalten.

s3:ReducedRedundancyLostObject Sie können diesen Ereignistyp verwenden, um Amazon S3 zum Senden einer Benachrichtigung aufzufordern, wenn Amazon S3 den Verlust eines Objekts der RRS-Speicherklasse entdeckt.
s3:Replication:OperationFailedReplication Sie erhalten dieses Benachrichtigungsereignis, wenn ein Objekt, das für die Replikation mit Amazon S3 Replication Time Control berechtigt war, nicht repliziert werden konnte.
s3:Replication:OperationMissedThreshold Sie erhalten dieses Benachrichtigungsereignis für ein Objekt, bei dem eine Replikation mithilfe der Funktion Amazon S3 Replication Time Control berechtigt war und bei dem der 15-minütigen Schwellenwert für die Replikation überschritten wurde.
s3:Replication:OperationReplicatedAfterThreshold Sie erhalten dieses Benachrichtigungsereignis für ein Objekt, bei dem eine Replikation mithilfe der Funktion Amazon S3 Replication Time Control berechtigt war und nach dem 15-minütigen Schwellenwert repliziert wurde.
s3:Replikation:OperationNotTracked Sie erhalten dieses Benachrichtigungsereignis für ein Objekt, das für die Replikation mit der Funktion Amazon S3 Replication Time Control berechtigt war, aber nicht mehr von Replikationsmetriken verfolgt wird.

Unterstützte Ziele

Amazon S3 kann Ereignisbenachrichtigungsmeldungen an die folgenden Ziele senden. Sie spezifizieren den ARN-Wert dieser Ziele in der Benachrichtigungskonfiguration.

  • Veröffentlichung von Ereignismitteilungen zu einem Amazon Simple Notification Service (Amazon SNS)-Thema

  • Veröffentlichung von Ereignismitteilungen zu einer Amazon Simple Queue Service (Amazon SQS)-Warteschlange

    Anmerkung

    Wenn die Zielwarteschlange oder das Zielthema SSE verwendet, benötigt Amazon S3 Zugriff auf den zugehörigen AWS Key Management Service (AWS KMS) Kundenhauptschlüssel (CMK), um die Nachrichtenverschlüsselung zu aktivieren.

  • Veröffentlichung von Ereignismitteilungen zu AWS Lambda durch Aufruf einer Lambda-Funktion und Übergabe der Ereignismitteilung als Argument

Sie müssen Amazon S3 Berechtigungen zum Veröffentlichen von Nachrichten an ein Amazon SNS-Thema oder eine Amazon SQS-Warteschlange gewähren. Außerdem müssen Sie Amazon S3 die Berechtigung zum Aufruf einer AWS Lambda in Ihrem Namen gewähren. Informationen zum erteilen dieser Berechtigungen finden Sie unter Erteilen von Berechtigungen zur Veröffentlichung von Ereignisbenachrichtigungsmeldungen an einem Ziel.

Konfigurieren von Benachrichtigungen mit Objektschlüsselnamenfilterung

Sie können Benachrichtigungen konfigurieren, die nach dem Präfix und dem Suffix des Objektschlüsselnamens gefiltert werden. Sie können beispielsweise eine Konfiguration so einrichten, dass Sie nur eine Benachrichtigung erhalten, wenn einem Bucket Bilddateien mit der Erweiterung „.jpg“ hinzugefügt werden. Sie können auch eine Konfiguration verwenden, die eine Benachrichtigung an ein Amazon SNS-Thema sendet, wenn dem Bucket ein Objekt mit dem Präfix „images/“ hinzugefügt wird, während Benachrichtigungen für Objekte mit dem Präfix „logs/“ im selben Bucket an eine AWS Lambda-Funktion gesendet werden.

Sie können Benachrichtigungskonfigurationen, die nach Objektschlüsselnamen filtern, über die Amazon S3-Konsole und unter direkter Verwendung von Amazon S3-APIs über die AWS-SDKs oder die REST-APIs einrichten. Informationen zur Verwendung der Konsolenoberfläche für die Einrichtung einer Benachrichtigungskonfiguration für einen Bucket finden Sie unter Wie kann ich Ereignisbenachrichtigungen für einen S3-Bucket aktivieren und konfigurieren? im Konsolenbenutzerhandbuch für Amazon Simple Storage Service.

Amazon S3 speichert die Benachrichtigungskonfiguration als XML in der einem Bucket zugeordneten notification-Unterressource wie in Vorgehensweise zum Aktivieren von Ereignisbenachrichtigungen beschrieben. Sie können die Filter XML-Struktur verwenden, um Regeln für die nach dem Präfix und/oder dem Suffix eines Objektschlüsselnamens gefilterten Benachrichtigungen zu definieren. Informationen zu den Details der XML-Struktur von Filter finden Sie unter PUT Bucket-Benachrichtigung im Amazon Simple Storage Service API Reference.

Benachrichtigungskonfigurationen, die Filter verwenden, können keine Filterregeln mit überlappenden Präfixen, überlappenden Suffixen oder Präfix- und Suffix-Überlappung definieren. Die folgenden Abschnitte enthalten Beispiele für gültige Benachrichtigungskonfigurationen mit Objektschlüssel-Namensfilterung. Sie enthalten auch Beispiele für Benachrichtigungskonfigurationen, die wegen der Überlappung von Präfix/Suffix ungültig sind.

Beispiele für gültige Benachrichtigungskonfigurationen mit Filterung nach dem Objektschlüsselnamen

Die folgende Benachrichtigungskonfiguration enthält eine Warteschlangekonfiguration, die eine Amazon SQS-Warteschlange für Amazon S3 identifiziert, um Ereignisse des Typs s3:ObjectCreated:Put zu veröffentlichen. Die Ereignisse werden veröffentlicht, wenn ein Objekt mit dem Präfix images/ und dem Suffix jpg mit PUT in einen Bucket geschrieben wird.

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

Die folgende Benachrichtigungskonfigurationen hat mehrere nicht überlappende Präfixe. Die Konfiguration definiert, dass Benachrichtigungen für PUT-Anforderungen im Ordner images/ in queue-A geschrieben werden, während Benachrichtigungen für PUT-Anforderungen im Ordner logs/ in queue-B geschrieben werden.

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> <QueueConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>logs/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

Die folgende Benachrichtigungskonfigurationen hat mehrere nicht überlappende Suffixe. Die Konfiguration definiert, dass alle dem Bucket neu hinzugefügten .jpg-Bilder über Lambda cloud-function-A und alle neu hinzugefügten .png-Bilder über cloud-function-B verarbeitet werden. Die Suffixe .png und .jpg überschneiden sich nicht, obwohl ihr letzter Buchstabe identisch ist. Zwei Suffixe werden als überlappend betrachtet, wenn eine Zeichenfolge mit beiden Suffixen enden kann. Da eine Zeichenfolge nicht mit .png und .jpg gleichzeitig enden kann, sind die Suffixe in der Beispielkonfiguration keine überlappenden Suffixe.

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</Cloudcode> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</Cloudcode> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

Ihre Benachrichtigungskonfigurationen, die Filter verwenden, können keine Filterregeln mit überlappenden Präfixen für dieselben Ereignistypen definieren, es sei denn, die überlappenden Präfixe werden mit nicht überlappenden Suffixen verwendet. Die folgende Beispielkonfiguration zeigt, wie Objekte, die mit einem gemeinsamen Präfix, aber nicht überlappenden Suffixen erstellt werden, an unterschiedliche Ziele geliefert werden können.

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</Cloudcode> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</Cloudcode> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

Beispiele für Benachrichtigungskonfigurationen mit ungültiger Präfix/Suffix-Überlappung

Ihre Benachrichtigungskonfigurationen, die Filter verwenden, können größtenteils keine Filterregeln mit überlappenden Präfixen, überlappenden Suffixen oder überlappenden Präfix- und Suffix-Kombinationen für dieselben Ereignistypen definieren. (Überlappende Präfixe sind möglich, solange sich die Suffixe nicht überlappen. Ein Beispiel finden Sie unter Konfigurieren von Benachrichtigungen mit Objektschlüsselnamenfilterung.)

Sie können überlappende Objektschlüsselnamensfilter mit unterschiedlichen Ereignistypen verwenden. Beispielsweise könnten sie eine Benachrichtigungskonfiguration erstellen, die das Präfix image/ für den Ereignistyp ObjectCreated:Put und das Präfix image/ für den Ereignistyp ObjectRemoved:* verwendet.

Sie erhalten einen Fehler, wenn Sie versuchen, eine Benachrichtigungskonfiguration mit ungültigen, sich überschneidenden Namensfiltern für dieselben Ereignistypen zu speichern, wenn Sie die Amazon S3-Konsole oder -API verwenden. Dieser Abschnitt zeigt Beispiele für Benachrichtigungskonfigurationen, die aufgrund überlappender Namensfilter ungültig sind.

Es wird angenommen, dass eine vorhandene Benachrichtigungskonfigurationsregel ein Standardpräfix und -suffix hat, die mit allen anderen Präfixen bzw. Suffixen übereinstimmen. Die folgende Benachrichtigungskonfiguration ist ungültig, da sie überlappende Präfixe hat, wobei das Root-Präfix sich mit allen anderen Präfixen überlappt. (Dasselbe würde gelten, wenn Sie in diesem Beispiel ein Suffix statt des Präfix verwenden würden. Das Root-Suffix überlappt mit allen anderen Suffixen.)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic> <Event>s3:ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

Die folgende Benachrichtigungskonfiguration ist ungültig, weil sie überlappende Suffixe hat. Zwei Suffixe werden als überlappend betrachtet, wenn eine Zeichenfolge mit beiden Suffixen enden kann. Eine Zeichenkette kann mit jpg und pg enden, die Suffixe überlappen sich also. (Gleiches gilt für Präfixe. Zwei Präfixe werden als überlappend betrachtet, wenn eine Zeichenfolge mit beiden Präfixen beginnen kann.)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration

Die folgende Benachrichtigungskonfiguration ist ungültig, weil sie überlappende Präfixe und Suffixe hat.

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

Erteilen von Berechtigungen zur Veröffentlichung von Ereignisbenachrichtigungsmeldungen an einem Ziel

Damit Amazon S3 Nachrichten zu einem Ziel veröffentlichen kann, müssen Sie dem Amazon S3-Prinzipal die notwendigen Berechtigungen zum Aufruf der jeweiligen API für die Veröffentlichung von Nachrichten zu einem SNS-Thema, einer SQS-Warteschlange oder einer Lambda-Funktion erteilen.

Erteilen von Berechtigungen zum Aufrufen einer AWS Lambda-Funktion

Amazon S3 veröffentlicht Ereignisnachrichten an AWS Lambda durch den Aufruf einer Lambda-Funktion und die Bereitstellung der Ereignisnachricht als Argument.

Wenn Sie die Amazon S3-Konsole zur Konfiguration von Ereignisbenachrichtigungen in einem Amazon S3-Bucket für eine Lambda-Funktion verwenden, richtet die Konsole die notwendigen Berechtigungen für die Lambda-Funktion ein, sodass Amazon S3 Berechtigungen besitzt, die Funktion vom Bucket aus aufzurufen. Weitere Informationen finden Sie unter Wie kann ich Ereignisbenachrichtigungen für einen S3-Bucket aktivieren und konfigurieren? im Konsolenbenutzerhandbuch für Amazon Simple Storage Service.

Sie können Amazon S3 auch Berechtigungen aus AWS Lambda erteilen, um Ihre Lambda-Funktion aufzurufen. Weitere Informationen finden Sie unter Tutorial: Verwendung von AWS Lambda mit Amazon S3 im AWS Lambda Developer Guide.

Erteilen von Berechtigungen, Meldungen in einem SNS-Thema oder einer SQS-Warteschlange zu veröffentlichen

Um Amazon S3 die Erlaubnis zu erteilen, Nachrichten im SNS-Thema oder in der SQS-Warteschlange zu veröffentlichen, fügen Sie eine AWS Identity and Access Management-(IAM)-Richtlinie an das SNS-Zielthema oder die SQS-Warteschlange an.

Ein Beispiel dafür, wie Sie einem SNS-Thema oder einer SQS-Warteschlange eine Richtlinie zuordnen, finden Sie unter Walkthrough: Konfigurieren eines Buckets für Benachrichtigungen (SNS-Thema und SQS-Warteschlange). Weitere Informationen über Berechtigungen finden Sie in den folgenden Themen:

IAM-Richtlinie für ein SNS-Zielthema

Im Folgenden finden Sie ein Beispiel für eine IAM-Richtlinie, die Sie dem Ziel-SNS-Thema zuordnen.

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "arn:aws:sns:Region:account-id:topic-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::bucket-name" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

IAM-Richtlinie für eine SQS-Zielwarteschlange

Im Folgenden finden Sie ein Beispiel für eine IAM-Richtlinie, die Sie der Ziel-SQS-Warteschlange zuordnen.

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "arn:aws:sqs:Region:account-id:queue-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

Beachten Sie, dass Sie für die Amazon SNS- und Amazon SQS-IAM-Richtlinien anstelle der Bedingung ArnLike die Bedingung StringLike in der Richtlinie angeben können.

"Condition": {        "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } }

AWS KMS-Schlüsselrichtlinie

Wenn die SQS-Warteschlange oder SNS-Themen mit einem vom Kunden verwalteten AWS Key Management Service-(AWS KMS-)Kundenhauptschlüssel (Customer Master Key, CMK) verschlüsselt sind, müssen Sie dem Amazon S3-Service-Prinzipal die Berechtigung erteilen, mit den verschlüsselten Themen und/oder der Warteschlange zu arbeiten. Um dem Amazon S3-Service-Prinzipal die Berechtigung zu erteilen, fügen Sie der Schlüsselrichtlinie für den vom Kunden verwalteten CMK die folgende Anweisung hinzu:

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }

Weitere Informationen zu AWS KMS-Schlüsselrichtlinien finden Sie unter Verwenden von Schlüsselrichtlinien in AWS KMS im AWS Key Management Service Developer Guide. Weitere Informationen zum Verwenden der serverseitigen Verschlüsselung mit AWS KMS für Amazon SQS und Amazon SNS, finden Sie in den folgenden Informationen: