

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon S3 事件通知
<a name="EventNotifications"></a>

您可以使用 Amazon S3 事件通知功能，在 S3 儲存貯體中發生特定事件時接收通知。若要啟用通知，請新增通知組態，以識別您想要 Amazon S3 發佈的事件。請確定通知組態也會識別您想要 Amazon S3 傳送通知的目的地。您會將此組態存放在儲存貯體相關聯的*通知*子資源中。如需詳細資訊，請參閱[一般用途儲存貯體組態選項](UsingBucket.md#bucket-config-options-intro)。Amazon S3 提供 API，讓您管理此子資源。

**重要**  
Amazon S3 事件通知的設計是要至少傳送一次。事件通知一般能在幾秒內交付，但有時候會耗費一分鐘或更長的時間。

## Amazon S3 事件通知概觀
<a name="notification-how-to-overview"></a>

目前 Amazon S3 可以發佈下列事件的通知：
+ 新物件建立的事件
+ 物件移除事件
+ 還原物件事件
+ 低冗餘儲存 (RRS) 物件遺失事件
+ 複寫事件
+ S3 生命週期過期事件
+ S3 生命週期轉換事件
+ S3 Intelligent-Tiering 自動封存事件
+ 物件標記事件
+ 物件 ACL PUT 事件

如需所有支援事件類型的描述，請參閱 [SQS、SNS 和 Lambda 支援的事件類型](notification-how-to-event-types-and-destinations.md#supported-notification-event-types)。

Amazon S3 可將事件通知訊息傳送至下列目標。您必須在通知組態中，指定這些目的地的 Amazon Resource Name (ARN) 值。
+ Amazon Simple Notification Service (Amazon SNS) 主題
+ Amazon Simple Queue Service (Amazon SQS) 佇列
+ AWS Lambda 函數
+ Amazon EventBridge

如需詳細資訊，請參閱[支援的事件目的地](notification-how-to-event-types-and-destinations.md#supported-notification-destinations)。

**注意**  
Amazon Simple Queue Service FIFO (先進先出) 佇列不支援做為 Amazon S3 事件通知目的地。若要傳送 Amazon S3 事件通知給 Amazon SQS FIFO 佇列，您可以使用 Amazon EventBridge。如需詳細資訊，請參閱[啟用 Amazon EventBridge](enable-event-notifications-eventbridge.md)。

**警告**  
如果您的通知寫入觸發通知的同一個儲存貯體，則可能會導致執行迴圈。例如，如果儲存貯體在物件每次上傳時都觸發 Lambda 函式，且該函式會將物件上傳至儲存貯體，則函式會間接地觸發本身。若要避免此狀況，請使用兩個儲存貯體，或將觸發設定為僅套用至傳入物件所用的字首。  
如需搭配 使用 Amazon S3 通知的詳細資訊和範例 AWS Lambda，請參閱《 *AWS Lambda 開發人員指南*》中的[搭配使用 AWS Lambda 與 Amazon S3](https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html)。

有關每個儲存貯體可建立之事件通知組態數量的詳細資訊，請參閱《AWS 一般參考》**中的 [Amazon S3 服務配額](https://docs.aws.amazon.com/general/latest/gr/s3.html#limits_s3)。

如需有關事件通知的詳細資訊，請參閱下列章節。

**Topics**
+ [Amazon S3 事件通知概觀](#notification-how-to-overview)
+ [事件通知類型與目的地](notification-how-to-event-types-and-destinations.md)
+ [使用 Amazon SQS、Amazon SNS 和 Lambda](how-to-enable-disable-notification-intro.md)
+ [使用 EventBridge](EventBridge.md)

# 事件通知類型與目的地
<a name="notification-how-to-event-types-and-destinations"></a>

Amazon S3 支援多種事件通知類型和可發佈通知的目的地。您可以在設定事件通知時，指定事件類型和目的地。每個事件通知只能指定一個目的地。Amazon S3 事件通知會針對每個通知訊息傳送一個事件項目。

**Topics**
+ [支援的事件目的地](#supported-notification-destinations)
+ [SQS、SNS 和 Lambda 支援的事件類型](#supported-notification-event-types)
+ [Amazon EventBridge 的支援事件類型](#supported-notification-event-types-eventbridge)
+ [事件排序和重複事件](#event-ordering-and-duplicate-events)

## 支援的事件目的地
<a name="supported-notification-destinations"></a>

Amazon S3 可將事件通知訊息傳送至下列目標。
+ Amazon Simple Notification Service (Amazon SNS) 主題
+ Amazon Simple Queue Service (Amazon SQS) 佇列
+ AWS Lambda
+ Amazon EventBridge

但是，每個事件通知只能指定一個目的地類型。

**注意**  
您必須授予 Amazon S3 許可才能將訊息張貼到 Amazon SNS 主題或 Amazon SQS 佇列。您還必須授予 Amazon S3 代表您叫用 AWS Lambda 函數的許可。如需如何授予這些許可的詳細資訊，請參閱 [授予許可以將事件通知訊息發佈至目標](grant-destinations-permissions-to-s3.md)。

### Amazon SNS 主題
<a name="amazon-sns-topic"></a>

Amazon SNS 是管理完善且靈活的推送訊息服務。您可以使用此項服務將訊息推播至行動裝置或分散式服務。有了 SNS，只需發佈一次訊息，就可以進行一或多次的傳遞。目前，標準 SNS 僅允許作為 S3 事件通知目的地，而不允許作為 SNS FIFO。

Amazon SNS 會同時協調與管理訂閱端點或用戶端的訊息傳送或送達。您可以使用 Amazon SNS 主控台來建立可將通知傳送至其中的 Amazon SNS 主題。

主題必須與 AWS 區域 Amazon S3 儲存貯體位於相同的 中。如需有關如何建立 Amazon SNS 主題的資訊，請參閱《*Amazon Simple Notification Service 開發人員指南*》中的 [Amazon SNS 入門](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)，以及 [Amazon SNS 常見問答集](https://aws.amazon.com/sns/faqs/)。

您需要有下列資訊，才能使用可建立為事件通知目的地的 Amazon SNS 主題：
+ Amazon SNS 主題的 Amazon Resource Name (ARN)
+ 有效的 Amazon SNS 主題訂閱。有了它，當訊息發佈至 Amazon SNS 主題時，主題訂閱者會收到通知。

### Amazon SQS 佇列
<a name="amazon-sqs-queue"></a>

Amazon SQS 提供可靠並可擴展的代管佇列，供訊息往返電腦期間儲存訊息之用。您可以使用 Amazon SQS 傳輸任何資料量，但不需要其他服務一直都能使用。您可以使用 Amazon SQS 主控台來建立可將通知傳送至其中的 Amazon SQS 佇列。

Amazon SQS 佇列必須與 AWS 區域 Amazon S3 儲存貯體位於相同的 中。如需有關如何建立 Amazon SQS 佇列的指示，請參閱《*Amazon Simple Queue Service 開發人員指南*》中的[什麼是 Amazon Simple Queue Service](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 和 [Amazon SQS 入門](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html)。

您需要有下列資訊，才能使用 Amazon SQS 佇列作為事件通知目的地：
+ Amazon SQS 佇列的 Amazon Resource Name (ARN)

**注意**  
Amazon Simple Queue Service FIFO (先進先出) 佇列不支援做為 Amazon S3 事件通知目的地。若要傳送 Amazon S3 事件通知給 Amazon SQS FIFO 佇列，您可以使用 Amazon EventBridge。如需詳細資訊，請參閱[啟用 Amazon EventBridge](enable-event-notifications-eventbridge.md)。

### Lambda 函式
<a name="lambda-function"></a>

您可以使用 AWS Lambda 擴展具有自訂邏輯的 AWS 其他服務，或建立您自己的後端，以 AWS 大規模、效能和安全性運作。使用 Lambda，您可以建立離散的事件驅動應用程式，只在需要時執行。您也可以使用它來自動將這些應用程式從每天幾個請求擴展到每秒數千個請求。

Lambda 可執行自訂程式碼來回應 Amazon S3 儲存貯體事件。您可以自訂程式碼上傳到 Lambda，以建立 Lambda 函數。當 Amazon S3 偵測到特定類型的事件時，可以將事件發佈至 ， AWS Lambda 並在 Lambda 中調用您的函數。作為回應，Lambda 會執行您的函數。例如，它可能會偵測到的其中一個事件類型是建立物件的事件。

您可以使用 AWS Lambda 主控台來建立使用基礎設施代表您執行程式碼的 AWS Lambda 函數。Lambda 函式必須位在與 S3 儲存貯體相同的區域中。您也必須具有 Lambda 函式的名稱或 ARN，以將 Lambda 函式設定為事件通知目的地。

**警告**  
如果您的通知寫入觸發通知的同一個儲存貯體，則可能會導致執行迴圈。例如，如果儲存貯體在物件每次上傳時都觸發 Lambda 函式，且該函式會將物件上傳至儲存貯體，則函式會間接地觸發本身。若要避免此狀況，請使用兩個儲存貯體，或將觸發設定為僅套用至傳入物件所用的字首。  
如需搭配 使用 Amazon S3 通知的詳細資訊和範例 AWS Lambda，請參閱《 *AWS Lambda 開發人員指南*》中的[搭配使用 AWS Lambda 與 Amazon S3](https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html)。

### Amazon EventBridge
<a name="eventbridge-dest"></a>

Amazon EventBridge 是無伺服器事件匯流排，可接收來自 AWS 服務的事件。您可以設定規則以比對事件並將其交付至目標，例如 AWS 服務或 HTTP 端點。如需詳細資訊，請參閱*《Amazon EventBridge 使用者指南》*中的[什麼是 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)。

與其他目的地不同，您可以為儲存貯體啟用或停用傳遞至 EventBridge 的事件。如果您啟用傳遞，則所有事件都會傳送至 EventBridge。此外，您可以使用 EventBridge 規則將事件路由至其他目標。

## SQS、SNS 和 Lambda 支援的事件類型
<a name="supported-notification-event-types"></a>

Amazon S3 可以發佈下列類型的事件。您必須在通知組態中指定這些事件類型。


|  事件類型 |  Description  | 
| --- | --- | 
|  `s3:TestEvent`  |  啟用通知時，Amazon S3 會發佈測試通知。這是為了確保主題存在，且儲存貯體擁有者擁有發佈指定主題的許可。 如果啟用通知失敗，則不會收到測試通知。  | 
|  `s3:ObjectCreated:*` `s3:ObjectCreated:Put` `s3:ObjectCreated:Post` `s3:ObjectCreated:Copy` `s3:ObjectCreated:CompleteMultipartUpload`  |  `PUT`、`POST` 和 `COPY` 等 Amazon S3 API 操作可以建立物件。使用這些事件類型，您可以在使用特定 API 操作建立物件時啟用通知。或者，您可以使用 `s3:ObjectCreated:*` 事件類型來請求通知，無論用於建立物件的 API 為何。 `s3:ObjectCreated:CompleteMultipartUpload` 包含使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 複製操作建立的物件。  | 
|  `s3:ObjectRemoved:*` `s3:ObjectRemoved:Delete` `s3:ObjectRemoved:DeleteMarkerCreated`  |  透過使用 `ObjectRemoved` 事件類型，您可以啟用從儲存貯體移除一個物件或一批物件時的通知。 您可以使用 `s3:ObjectRemoved:Delete` 事件類型，在刪除物件或永久刪除版本控制的物件時要求通知。或者您可以使用 `s3:ObjectRemoved:DeleteMarkerCreated`，在建立版本控制物件的刪除標記時，請求通知。如需如何刪除版本控制物件的指示，請參閱 [刪除啟用版本控制功能之儲存貯體中的物件](DeletingObjectVersions.md)。您也可以使用萬用字元 `s3:ObjectRemoved:*`，在刪除物件時隨時要求通知。 這些事件通知不會提醒您生命週期組態自動刪除或操作失敗。  | 
|  `s3:ObjectRestore:*` `s3:ObjectRestore:Post` `s3:ObjectRestore:Completed` `s3:ObjectRestore:Delete`  |  透過使用 `ObjectRestore` 事件類型，您可以收到從 S3 Glacier Flexible Retrieval 儲存類別、S3 Glacier Deep Archive 儲存類別、S3 Intelligent-Tiering Archive Access 層和 S3 Intelligent-Tiering Deep Archive Access 層還原物件時的事件起始和完成通知。您也可以在還原的物件複本過期時收到通知。 `s3:ObjectRestore:Post` 事件類型會通知您物件還原的起始。`s3:ObjectRestore:Completed` 事件類型會通知您有關還原完成的情況。`s3:ObjectRestore:Delete` 事件類型會在還原物件的臨時複本過期時通知您。  | 
| s3:ReducedRedundancyLostObject | 您會在 Amazon S3 偵測到缺少 RRS 儲存類別物件時，收到此通知事件。 | 
|  `s3:Replication:*` `s3:Replication:OperationFailedReplication` `s3:Replication:OperationMissedThreshold` `s3:Replication:OperationReplicatedAfterThreshold` `s3:Replication:OperationNotTracked`  |  透過使用 `Replication` 事件類型，您可以收到已啟用 S3 複寫指標或 S3 複寫時間控制 (S3 RTC) 之複寫組態的通知。您可以透過追蹤擱置的位元組、擱置中的作業和複寫延遲來監控複寫事件的每分鐘進度。如需複寫指標的相關資訊，請參閱[使用指標、事件通知和狀態監控複寫](replication-metrics.md)。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html)  | 
|  `s3:LifecycleExpiration:*` `s3:LifecycleExpiration:Delete` `s3:LifecycleExpiration:DeleteMarkerCreated`  |  透過使用 `LifecycleExpiration` 事件類型，您可以在 Amazon S3 根據您的 S3 生命週期組態刪除物件時收到通知。 `s3:LifecycleExpiration:Delete` 事件類型會在刪除未進行版本控制之儲存貯體中的物件時通知您。當 S3 生命週期組態永久刪除物件版本時，它也會通知您。S3 生命週期在建立用於刪除版本控制儲存貯體中物件之最新版本的刪除標記時，`s3:LifecycleExpiration:DeleteMarkerCreated` 事件類型會通知您。  | 
| s3:LifecycleTransition | 當物件透過 S3 生命週期組態轉換至另一個 Amazon S3 儲存類別時，您會收到此通知事件。 | 
| s3:IntelligentTiering | 當 S3 Intelligent-Tiering 儲存類別中的物件移至封存存取層或 Deep Archive 存取層時，您會收到此通知事件。 | 
|  `s3:ObjectTagging:*` `s3:ObjectTagging:Put` `s3:ObjectTagging:Delete`  |  透過使用 `ObjectTagging` 事件類型，您可以啟用為物件新增物件標籤或從物件刪除物件標籤時的通知。 `s3:ObjectTagging:Put` 事件類型會在物件上的標籤為 PUT 或現有標籤已更新時通知您。`s3:ObjectTagging:Delete` 事件類型會在標籤從物件移除時通知您。 | 
| s3:ObjectAcl:Put | 當 ACL 在物件上標記為 PUT 或現有 ACL 變更時，您會收到此通知事件。當請求對物件的 ACL 沒有變更時，則不會產生事件。 | 

## Amazon EventBridge 的支援事件類型
<a name="supported-notification-event-types-eventbridge"></a>

如需 Amazon S3 將傳送至 Amazon EventBridge 的事件類型清單，請參閱 [使用 EventBridge](EventBridge.md)。

## 事件排序和重複事件
<a name="event-ordering-and-duplicate-events"></a>

Amazon S3 事件通知旨在至少傳送一次通知，但不保證以事件發生的相同順序送達。在極少數情況下，Amazon S3 的重試機制可能會導致相同物件事件的重複 S3 事件通知。如需處理重複或順序不正確事件的詳細資訊，請參閱 *AWS 儲存部落格*上的[使用 Amazon S3 事件通知管理事件排序和重複事件](https://aws.amazon.com/blogs/storage/manage-event-ordering-and-duplicate-events-with-amazon-s3-event-notifications/)。

# 使用 Amazon SQS、Amazon SNS 和 Lambda
<a name="how-to-enable-disable-notification-intro"></a>

啟用通知是儲存貯體層級的操作。您可以將通知組態資訊存放在與儲存貯體關聯的*通知*子資源中。建立或變更儲存貯體通知組態後，通常要等待 5 分鐘變更才會生效。首次啟用通知時，則會發生 `s3:TestEvent`。您可以使用下列任一方法來管理通知組態：
+ **使用 Amazon S3 主控台** – 您可以使用主控台 UI 在儲存貯體上設定通知組態，無需編寫任何程式碼。如需詳細資訊，請參閱[使用 Amazon S3 主控台啟用和設定事件通知](enable-event-notifications.md)。
+ **以程式設計方式使用 AWS SDKs** — 在內部，主控台和 SDKs都會呼叫 Amazon S3 REST API 來管理與儲存貯體相關聯的*通知*子資源。如需使用 AWS SDK 的通知組態範例，請參閱 [演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)](ways-to-add-notification-config-to-bucket.md)。
**注意**  
您還可以直接透過程式碼進行 Amazon S3 REST API 呼叫。但這麼做會很麻煩，因為這需要編寫程式碼來對您的請求進行身分驗證。

無論您使用何種方法，Amazon S3 都會將通知組態以 XML 的形式存放在與儲存貯體相關聯的*通知*子資源中。如需儲存貯體子資源的相關資訊，請參閱 [一般用途儲存貯體組態選項](UsingBucket.md#bucket-config-options-intro)。

**注意**  
如果您因為已刪除目的地而有多個失敗的事件通知，當您嘗試加以刪除時，您可能會收到**無法驗證下列目的地組態**。您可以在 S3 主控台中同時刪除所有失敗的通知來解決此問題。

**Topics**
+ [授予許可以將事件通知訊息發佈至目標](grant-destinations-permissions-to-s3.md)
+ [使用 Amazon S3 主控台啟用和設定事件通知](enable-event-notifications.md)
+ [以程式設計方式設定事件通知](#event-notification-configuration)
+ [演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)](ways-to-add-notification-config-to-bucket.md)
+ [使用物件金鑰名稱篩選來設定事件通知](notification-how-to-filtering.md)
+ [事件訊息結構](notification-content-structure.md)

# 授予許可以將事件通知訊息發佈至目標
<a name="grant-destinations-permissions-to-s3"></a>

您必須將必要的許可授予 Amazon S3 主體，以呼叫相關的 API，將訊息發佈至 SNS 主題、SQS 佇列或 Lambda 函數。這樣 Amazon S3 便可將事件通知訊息發佈至目的地。

若要進行疑難排解，以將事件通知發佈到目的地，請參閱[將 Amazon S3 事件通知發佈到 Amazon Simple Notification Service 主題的疑難排解](https://repost.aws/knowledge-center/sns-not-receiving-s3-event-notifications)。

**Topics**
+ [授予叫用 AWS Lambda 函數的許可](#grant-lambda-invoke-permission-to-s3)
+ [授予許可以將訊息發佈到 SNS 主題或 SQS 佇列](#grant-sns-sqs-permission-for-s3)

## 授予叫用 AWS Lambda 函數的許可
<a name="grant-lambda-invoke-permission-to-s3"></a>

Amazon S3 透過 AWS Lambda 叫用 Lambda 函數並提供事件訊息做為引數，將事件訊息發佈至 。

當您使用 Amazon S3 主控台，在 Amazon S3 儲存貯體上設定 Lambda 函數的事件通知時，該主控台將設定 Lambda 函數的必要許可。這樣 Amazon S3 便可從儲存貯體叫用函數。如需詳細資訊，請參閱[使用 Amazon S3 主控台啟用和設定事件通知](enable-event-notifications.md)。

您也可以從 授予 Amazon S3 許可 AWS Lambda ，以叫用 Lambda 函數。如需詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[教學課程： AWS Lambda 搭配 Amazon S3 使用](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) 。

## 授予許可以將訊息發佈到 SNS 主題或 SQS 佇列
<a name="grant-sns-sqs-permission-for-s3"></a>

若要授予 Amazon S3 發佈訊息至 SNS 主題或 SQS 佇列的許可，請將 AWS Identity and Access Management (IAM) 政策連接至目的地 SNS 主題或 SQS 佇列。

如需如何將政策連接到 SNS 主題或 SQS 佇列的範例，請參閱 [演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)](ways-to-add-notification-config-to-bucket.md)。如需許可的詳細資訊，請參閱下列主題：
+ *《Amazon Simple Notification Service 開發人員指南》*中的 [Amazon SNS 存取控制的範例案例](https://docs.aws.amazon.com/sns/latest/dg/AccessPolicyLanguage_UseCases_Sns.html)
+ *《Amazon Simple Queue Service 開發人員指南》*中的 [Amazon SQS 中的 Identity and Access Management](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html)

### 目的地 SNS 主題的 IAM 政策
<a name="sns-topic-policy"></a>

以下是您連接至目的地 SNS 主題的 AWS Identity and Access Management (IAM) 政策範例。如需有關如何使用此政策為事件通知設定目的地 Amazon SNS 主題的指示，請參閱 [演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)](ways-to-add-notification-config-to-bucket.md)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "Example SNS topic policy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SNS:Publish"
            ],
            "Resource": "arn:aws:sns:us-east-1:111122223333:example-sns-topic",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-123456789012"
                }
            }
        }
    ]
}
```

------

### 目的地 SQS 佇列的 IAM 政策
<a name="sqs-queue-policy"></a>

以下是您附加至目標 SQS 佇列之 IAM 政策的範例。如需有關如何使用此政策為事件通知設定目的地 Amazon SQS 佇列的指示，請參閱 [演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)](ways-to-add-notification-config-to-bucket.md)。

若要使用此政策，您必須更新 Amazon SQS 佇列 ARN、儲存貯體名稱和儲存貯體擁有者的 AWS 帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "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:us-east-1:111122223333:queue-name",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-123456789012"
                }
            }
        }
    ]
}
```

------

針對 Amazon SNS 和 Amazon SQS IAM 政策，您可以在政策中指定 `StringLike` 條件，不是 `ArnLike` 條件。

使用 `ArnLike` 時，分割區、服務、帳戶 ID、資源類型，和 ARN 的部分資源 ID 部分必須和請求的背景資訊內容中的 ARN 完全相符。只有區域和資源路徑允許部分相符。

 當使用 `StringLike` 而不是 `ArnLike` 時，比對是否相符時會忽略 ARN 結構，並允許部分相符，無論哪一部分被萬用字元取代。如需詳細資訊，請參閱 *IAM 使用者指南*中的 [IAM JSON 政策元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)。

```
"Condition": {         
  "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket" }
  }
```

### AWS KMS 金鑰政策
<a name="key-policy-sns-sqs"></a>

如果 SQS 佇列或 SNS 主題使用 AWS Key Management Service (AWS KMS) 客戶受管金鑰加密，您必須授予 Amazon S3 服務主體使用加密主題或佇列的許可。若要將許可授予 Amazon S3 服務委託人，請將下列陳述式新增至客戶受管金鑰的金鑰政策。

------
#### [ JSON ]

****  

```
{
    "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": "*"
        }
    ]
}
```

------

如需 AWS KMS 金鑰政策的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[在 中使用金鑰政策 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

如需搭配 AWS KMS for Amazon SQS 和 Amazon SNS 使用伺服器端加密的詳細資訊，請參閱下列內容：
+ *Amazon Simple Notification Service 開發人員指南》*中的[金鑰管理](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)。
+ *Amazon Simple Queue Service 開發人員指南》*中的[金鑰管理](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)。
+ *AWS 運算部落格*中的[透過 AWS KMS加密發佈到 Amazon SNS 的訊息](https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/)。

# 使用 Amazon S3 主控台啟用和設定事件通知
<a name="enable-event-notifications"></a>

您可以啟用特定的 Amazon S3 一般用途儲存貯體事件，於發生事件時傳送通知訊息給目的地。本節說明如何使用 Amazon S3 主控台來啟用事件通知。如需如何搭配 AWS SDKs 和 Amazon S3 REST APIs 使用事件通知的詳細資訊，請參閱 [以程式設計方式設定事件通知](how-to-enable-disable-notification-intro.md#event-notification-configuration)。

**先決條件**：您必須先設定其中一個目的地類型，然後設定許可，才能啟用儲存貯體的事件通知。如需詳細資訊，請參閱[支援的事件目的地](notification-how-to-event-types-and-destinations.md#supported-notification-destinations)及[授予許可以將事件通知訊息發佈至目標](grant-destinations-permissions-to-s3.md)。

**注意**  
Amazon Simple Queue Service FIFO (先進先出) 佇列不支援做為 Amazon S3 事件通知目的地。若要傳送 Amazon S3 事件通知給 Amazon SQS FIFO 佇列，您可以使用 Amazon EventBridge。如需詳細資訊，請參閱[啟用 Amazon EventBridge](enable-event-notifications-eventbridge.md)。

**Topics**
+ [使用 Amazon S3 主控台啟用 Amazon SNS、Amazon SQS 或 Lambda 通知](#enable-event-notifications-sns-sqs-lam)

## 使用 Amazon S3 主控台啟用 Amazon SNS、Amazon SQS 或 Lambda 通知
<a name="enable-event-notifications-sns-sqs-lam"></a>

**啟用及設定 S3 儲存貯體的事件通知**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體名稱清單中，選擇要啟用事件的儲存貯體名稱。

1. 選擇 **Properties** (屬性)。

1. 瀏覽至**事件通知**區段，然後選擇**建立事件通知**。

1. 在**一般組態**區段中，指定事件通知的描述性事件名稱。或者，您也可以指定首碼和字尾，將通知限制在具有以指定字元結尾的金鑰的物件。

   1. 輸入**事件名稱**的說明。

      如果您未輸入名稱，則會產生全域唯一識別碼 (GUID) 並用於名稱。

   1. (選用) 若要依字首篩選事件通知，請輸入 **Prefix** (字首)。

      例如，您可以設定字首篩選條件，只在檔案新增至特定資料夾 (例如，`images/`) 時才收到通知。

   1. (選用) 若要依尾碼篩選事件通知，請輸入 **Prefix** (尾碼)。

      如需詳細資訊，請參閱[使用物件金鑰名稱篩選來設定事件通知](notification-how-to-filtering.md)。

1. 在 **Event types** (事件類型) 區段中，選取您要接收通知的一或多個事件類型。

   如需不同事件類型的清單，請參閱 [SQS、SNS 和 Lambda 支援的事件類型](notification-how-to-event-types-and-destinations.md#supported-notification-event-types)。

1. 在**目的地**區段中，選擇事件通知目的地。
**注意**  
在發佈事件通知之前，您必須授予 Amazon S3 主體必要的許可來呼叫相關 API。這樣可以將通知發佈至 Lambda 函數、SNS 主題或 SQS 佇列。

   1. 選取目的地類型： **Lambda 函式**、**SNS 主題**或 **SQS 佇列**。

   1. 選擇目的地類型後，請從清單中選擇功能、主題或佇列。

   1. 或者，如果您想要指定 Amazon Resource Name (ARN)，**請選取輸入 ARN** 並輸入 ARN。

   如需詳細資訊，請參閱[支援的事件目的地](notification-how-to-event-types-and-destinations.md#supported-notification-destinations)。

1. 選擇 **Save changes** (儲存變更)，Amazon S3 會將測試訊息傳送到事件通知目的地。

## 以程式設計方式設定事件通知
<a name="event-notification-configuration"></a>

根據預設，所有事件類型都不會啟用通知。因此，*通知*子資源一開始存放的是空白組態。

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

若要啟用特定類型事件的通知，請以合適的組態取代 XML，識別 Amazon S3 所要發佈的事件類型，以及所需的事件發佈目標。為每個目標新增對應的 XML 組態。

**將事件訊息發佈至 SQS 佇列**  
若要將 SQS 佇列設定為一或多種事件類型的通知目標，請新增 `QueueConfiguration`。

```
<NotificationConfiguration>
  <QueueConfiguration>
    <Id>optional-id-string</Id>
    <Queue>sqs-queue-arn</Queue>
    <Event>event-type</Event>
    <Event>event-type</Event>
     ...
  </QueueConfiguration>
   ...
</NotificationConfiguration>
```

**將事件訊息發佈至 SNS 主題**  
若要將 SNS 主題設定為特定事件類型的通知目標，請新增 `TopicConfiguration`。

```
<NotificationConfiguration>
  <TopicConfiguration>
     <Id>optional-id-string</Id>
     <Topic>sns-topic-arn</Topic>
     <Event>event-type</Event>
     <Event>event-type</Event>
      ...
  </TopicConfiguration>
   ...
</NotificationConfiguration>
```

**叫用 AWS Lambda 函數，並提供事件訊息做為 引數**  
若要將 Lambda 函數設定為特定事件類型的通知目的地，請新增 `CloudFunctionConfiguration`。

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

**移除儲存貯體上設定的所有通知**  
若要移除儲存貯體上設定的所有通知，請在*通知*子資源中儲存空白的 `<NotificationConfiguration/>` 元素。

當 Amazon S3 偵測到特定類型的事件，即會發佈附事件資訊的訊息。如需詳細資訊，請參閱[事件訊息結構](notification-content-structure.md)。

如需有關設定事件通知的資訊，請參閱下列主題：
+ [演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)](ways-to-add-notification-config-to-bucket.md).
+ [使用物件金鑰名稱篩選來設定事件通知](notification-how-to-filtering.md)

# 演練：設定儲存貯體的通知 (SNS 主題或 SQS 佇列)
<a name="ways-to-add-notification-config-to-bucket"></a>

您可以使用 Amazon Simple Notification Service (Amazon SNS) 或 Amazon Simple Queue Service (Amazon SQS) 接收 Amazon S3 通知。在此演練中，您使用 Amazon SNS 主題和 Amazon SQS 佇列將通知設定新增至儲存貯體。

**注意**  
Amazon Simple Queue Service FIFO (先進先出) 佇列不支援做為 Amazon S3 事件通知目的地。若要傳送 Amazon S3 事件通知給 Amazon SQS FIFO 佇列，您可以使用 Amazon EventBridge。如需詳細資訊，請參閱[啟用 Amazon EventBridge](enable-event-notifications-eventbridge.md)。

**Topics**
+ [演練摘要](#notification-walkthrough-summary)
+ [步驟 1：建立 Amazon SQS 佇列](#step1-create-sqs-queue-for-notification)
+ [步驟 2：建立 Amazon SNS 主題](#step1-create-sns-topic-for-notification)
+ [步驟 3：將通知組態新增至儲存貯體](#step2-enable-notification)
+ [步驟 4：測試設定](#notification-walkthrough-1-test)

## 演練摘要
<a name="notification-walkthrough-summary"></a>

此演練可以協助您執行以下操作：
+ 將 `s3:ObjectCreated:*` 類型的事件發佈至 Amazon SQS 佇列。
+ 將 `s3:ReducedRedundancyLostObject` 類型的事件發佈至 Amazon SNS 主題。

如需通知組態的資訊，請參閱「[使用 Amazon SQS、Amazon SNS 和 Lambda](how-to-enable-disable-notification-intro.md)」。

您可以使用主控台執行所有這些步驟，不用撰寫任何程式碼。此外，還提供使用適用於 Java 和 .NET AWS SDKs 的程式碼範例，以協助您以程式設計方式新增通知組態。

此程序包含以下步驟：

1. 建立 Amazon SQS 佇列。

   使用 Amazon SQS 主控台建立 SQS 佇列。您可以利用程式設計的方式，存取 Amazon S3 傳送到佇列的任何訊息。但在此演練中，您會在主控台中驗證通知訊息。

   您要將存取政策連接到佇列，以授予 Amazon S3 張貼訊息的許可。

1. 建立 Amazon SNS 主題。

   使用 Amazon SNS 主控台，建立 SNS 主題並訂閱主題。如此一來，張貼其上的任何事件都會傳遞給您。您會將電子郵件指定為通訊協定。建立主題後，Amazon SNS 會傳送電子郵件。您可以使用電子郵件中的連結，確認主題訂閱。

   您要將存取政策連接到主題，以授予 Amazon S3 張貼訊息的許可。

1. 將通知組態新增至儲存貯體。

## 步驟 1：建立 Amazon SQS 佇列
<a name="step1-create-sqs-queue-for-notification"></a>

按照步驟建立和訂閱 Amazon Simple Queue Service (Amazon SQS) 佇列。

1. 使用 Amazon SQS 主控台建立佇列。如需指示，請參閱《*Amazon Simple Queue Service 開發人員指南*》中的 [Amazon SQS 入門](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html)。

1. 將連接至佇列的存取政策以下列政策取代。

   1. 在 Amazon SQS 主控台的 **Queues** (佇列) 清單中，選擇佇列名稱。

   1. 在 **Access policy** (存取政策) 標籤中選擇 **Edit** (編輯)。

   1. 取代連接至佇列的存取政策。在其中，提供 Amazon SQS ARN、來源儲存貯體名稱以及儲存貯體擁有者帳戶 ID。

------
#### [ JSON ]

****  

      ```
      {
          "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:us-west-2:111122223333:s3-notification-queue",
                  "Condition": {
                      "ArnLike": {
                          "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1"
                      },
                      "StringEquals": {
                          "aws:SourceAccount": "bucket-owner-123456789012"
                      }
                  }
              }
          ]
      }
      ```

------

   1. 選擇**儲存**。

1. （選用） 如果 Amazon SQS 佇列或 Amazon SNS 主題已啟用伺服器端加密，請使用 AWS Key Management Service (AWS KMS)，將下列政策新增至相關聯的對稱加密客戶受管金鑰。

   您必須將政策新增至客戶受管金鑰，因為您無法修改適用於 Amazon SQS 或 Amazon SNS 的 AWS 受管金鑰。

------
#### [ JSON ]

****  

   ```
   {
       "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": "*"
           }
       ]
   }
   ```

------

   如需搭配 Amazon SQS 和 Amazon SNS 使用 SSE 的詳細資訊 AWS KMS，請參閱下列內容：
   + *Amazon Simple Notification Service 開發人員指南》*中的[金鑰管理](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)。
   + *Amazon Simple Queue Service 開發人員指南》*中的[金鑰管理](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)。

1. 記下佇列 ARN。

   您建立的 SQS 佇列是 AWS 帳戶中的另一個資源。它具有獨特的 Amazon Resource Name (ARN)。下一個步驟需要用到此 ARN。ARN 的格式如下：

   ```
   arn:aws:sqs:aws-region:account-id:queue-name
   ```

## 步驟 2：建立 Amazon SNS 主題
<a name="step1-create-sns-topic-for-notification"></a>

按照步驟建立並訂閱 Amazon SNS 主題。

1. 使用 Amazon SNS 主控台建立一個主題。如需說明，請參閱《*Amazon Simple Notification Service 開發人員指南*》中的[建立 Amazon SNS 主題](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。

1. 訂閱此主題。在此練習中，請使用電子郵件作為通訊協定。如需詳細資訊，請參閱《*Amazon Simple Notification Service 開發人員指南*》中的[訂閱 Amazon SNS 主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

   您會收到要求確認訂閱主題的電子郵件。確認訂閱。

1. 下列列政策取代連接至主題的存取政策。在其中，提供您的 SNS 主題 ARN、儲存貯體名稱以及儲存貯體擁有者帳戶 ID。

1. 請記下主題 ARN。

   您建立的 SNS 主題是 中的另一個資源 AWS 帳戶，且具有唯一的 ARN。下一個步驟需要用到此 ARN。ARN 的格式如下：

   ```
   arn:aws:sns:aws-region:account-id:topic-name
   ```

## 步驟 3：將通知組態新增至儲存貯體
<a name="step2-enable-notification"></a>

您可以使用 Amazon S3 主控台或以程式設計方式使用 AWS SDKs來啟用儲存貯體通知。選擇任一選項在儲存貯體上設定通知。本節提供使用適用於 Java 和 .NET 的 AWS SDK 程式碼範例。

### (選項 A)：使用主控台啟用儲存貯體上的通知
<a name="step2-enable-notification-using-console"></a>

使用 Amazon S3 主控台，新增請求 Amazon S3 的通知組態新增以執行下列操作：
+ 將**所有物件建立事件**類型的事件發佈至您的 Amazon SQS 佇列。
+ 將 **RRS 中物件遺失** 類型的事件發佈至您的 Amazon SNS 主題。

儲存通知組態後，Amazon S3 會張貼測試訊息，您會透過電子郵件收到此訊息。

如需說明，請參閱[使用 Amazon S3 主控台啟用和設定事件通知](enable-event-notifications.md)。

### 選項 B：使用 AWS SDKs 啟用儲存貯體的通知
<a name="step2-enable-notification-using-awssdk-dotnet"></a>

------
#### [ .NET ]

下列 C\$1 程式碼範例提供完整的程式碼清單，將通知組態新增至儲存貯體。您必須更新程式碼，並提供您的儲存貯體名稱和 SNS 主題 ARN。如需有關設定和執行程式碼範例的資訊，請參閱《[適用於 .NET 的 AWS SDK 開發人員指南》中的適用於 .NET 的 SDK 入門](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。 *AWS *

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class EnableNotificationsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string snsTopic = "*** SNS topic ARN ***";
        private const string sqsQueue = "*** SQS topic ARN ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            EnableNotificationAsync().Wait();
        }

        static async Task EnableNotificationAsync()
        {
            try
            {
               PutBucketNotificationRequest request = new PutBucketNotificationRequest
                {
                    BucketName = bucketName
                };

                TopicConfiguration c = new TopicConfiguration
                {
                    Events = new List<EventType> { EventType.ObjectCreatedCopy },
                    Topic = snsTopic
                };
                request.TopicConfigurations = new List<TopicConfiguration>();
                request.TopicConfigurations.Add(c);
                request.QueueConfigurations = new List<QueueConfiguration>();
                request.QueueConfigurations.Add(new QueueConfiguration()
                {
                    Events = new List<EventType> { EventType.ObjectCreatedPut },
                    Queue = sqsQueue
                });
                
                PutBucketNotificationResponse response = await client.PutBucketNotificationAsync(request);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' ", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown error encountered on server. Message:'{0}' ", e.Message);
            }
        }
    }
}
```

------
#### [ Java ]

如需如何使用適用於 Java 的 AWS SDK 設定儲存貯體通知的範例，請參閱《Amazon [ S3 API 參考》中的處理 S3 事件通知](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_ProcessS3EventNotification_section.html)。 *Amazon S3 *

------

## 步驟 4：測試設定
<a name="notification-walkthrough-1-test"></a>

現在，只要將物件上傳至儲存貯體，即可測試設定，並在 Amazon SQS 主控台中驗證事件通知。如需指示，請參閱 *Amazon Simple Queue Service 開發人員指南「入門」一節*中的[接收訊息](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.htmlReceiveMessage.html)。

# 使用物件金鑰名稱篩選來設定事件通知
<a name="notification-how-to-filtering"></a>

設定 Amazon S3 事件通知時，您必須指定哪些支援的 Amazon S3 事件類型會導致 Amazon S3 傳送通知。如果您未指定的事件類型在 S3 儲存貯體中發生，則 Amazon S3 不會傳送通知。

您可以設定按物件金鑰名稱的字首和尾碼篩選通知。例如，您可以設定組態，只在將副檔名為「`.jpg`」的映像檔案新增至儲存貯體時才傳送通知。或者，您可以有一個組態，當具有字首「`images/`」的物件新增至儲存貯體時，將通知傳送到 Amazon SNS 主題，同時讓相同儲存貯體中具有「`logs/`」字首的物件通知傳送到 AWS Lambda 函數。

**注意**  
萬用字元 ("\$1") 不能在篩選條件中用作前綴或後綴。如果您的字首或字尾包含空格，則必須將其取代為 "\$1" 字元。如果您在字首或字尾的值中使用任何其他特殊字元，則必須以 [URL 編碼 (百分比編碼) 格式](https://en.wikipedia.org/wiki/Percent-encoding)將其輸入。如需在事件通知的字首或字尾中使用時，必須轉換為 URL 編碼格式之特殊字元的完整清單，請參閱 [安全字元](object-keys.md#object-key-guidelines-safe-characters)。

您可以設定通知組態，在 Amazon S3 主控台使用物件金鑰名稱篩選。您可以直接透過 AWS SDKs 或 REST APIs 使用 Amazon S3 APIs來執行此操作。如需使用主控台 UI 在儲存貯體上設定通知組態的相關資訊，請參閱「[使用 Amazon S3 主控台啟用和設定事件通知](enable-event-notifications.md)」。

Amazon S3 會將通知組態儲存為 XML，放在與儲存貯體相關聯的*通知*子資源中，如 [使用 Amazon SQS、Amazon SNS 和 Lambda](how-to-enable-disable-notification-intro.md) 所述。您必須使用 `Filter` XML 結構定義規則，依物件金鑰名稱的字首或尾碼篩選通知。如需 `Filter` XML 結構的詳細資訊，請參閱 *Amazon Simple Storage Service API 參考*中的 [PUT 儲存貯體通知](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html)。

使用 `Filter` 的通知組態無法定義重疊字首、重疊尾碼或字首和尾碼重疊的篩選規則。下列小節提供使用物件金鑰名稱篩選的有效通知組態範例。它們也包含因為字首和尾碼重疊而無效的通知組態範例。

**Topics**
+ [以物件金鑰名稱篩選的有效通知組態範例](#notification-how-to-filtering-example-valid)
+ [無效字首和尾碼重疊的通知組態範例](#notification-how-to-filtering-examples-invalid)

## 以物件金鑰名稱篩選的有效通知組態範例
<a name="notification-how-to-filtering-example-valid"></a>

下列通知組態包含的佇列組態，可識別 Amazon SQS 佇列，讓 Amazon S3 將事件發佈成 `s3:ObjectCreated:Put` 類型。只要字首為 `images/` 和尾碼為 `jpg` 的物件 PUT 到儲存貯體，就會發佈事件。

```
<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>
```

下列通知組態有多個非重疊字首。組態的定義是：`images/` 資料夾中的 PUT 請求通知排入佇列 A，而 `logs/` 資料夾中的 PUT 請求通知排入佇列 B。

```
<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>
```

下列通知組態有多個非重疊尾碼。組態的定義是：所有近期新增至儲存貯體的 `.jpg` 映像都由 Lambda cloud-function-A 處理，而所有近期新增的 `.png` 影像則由 cloud-function-B 處理。`.png` 和 `.jpg` 字尾即使最後一個字母相同也不重疊。如果指定的字串可以這兩個尾碼結束，則兩個尾碼視為重疊。字串的結尾不能是 `.png` 和 `.jpg`，所以範例組態中的字尾不是重疊的字尾。

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

使用 `Filter` 的通知組態無法定義相同事件類型的重疊字首篩選規則。如果重疊字首搭配的尾碼不重疊，則只能這麼做。下列範例組態示範如何將以常見字首但不重疊尾碼建立的物件，傳送至不同的目標。

```
<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>
     <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
     <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>
     <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
     <Event>s3:ObjectCreated:Put</Event>
  </CloudFunctionConfiguration>
</NotificationConfiguration>
```

## 無效字首和尾碼重疊的通知組態範例
<a name="notification-how-to-filtering-examples-invalid"></a>

在大多數情況下，使用 `Filter` 的通知組態無法定義相同事件類型的重疊字首、重疊尾碼或字首和尾碼重疊組合的篩選規則。只要字首不重疊就可以有重疊的前綴。如需範例，請參閱 [使用物件金鑰名稱篩選來設定事件通知](#notification-how-to-filtering)。

不同的事件類型可以使用重疊的物件金鑰名稱篩選。例如，您可以建立通知組態，在 `image/` 事件類型使用字首 `ObjectCreated:Put`，在 `image/` 事件類型使用字首 `ObjectRemoved:*`。

當您使用 Amazon S3 主控台或 API 時，如果嘗試儲存的通知組態其相同事件類型具無效的重疊名稱篩選條件，就會發生錯誤。本節示範因為重疊名稱篩而無效的通知組態範例。

現有的全部通知組態，都假設分別擁有與任何其他字首和尾碼符合的預設字首和尾碼。下列通知組態因有重疊的字首而無效。明確地說，根字首會與任何其他字首重疊。在本範例中，如果使用尾碼而不使用字首，也是同樣的情況。根尾碼會與任何其他尾碼重疊。

```
<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>
```

下列通知組態因有重疊的字尾而無效。如果指定的字串可以這兩個尾碼結束，則兩個尾碼視為重疊。字串的結尾可以使用 `jpg` 和 `pg`。所以，字尾會重疊。字首也是一樣。如果指定的字串可以這兩個字首開始，則兩個字首視為重疊。

```
 <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
```

下列通知組態因有重疊的字首和字尾而無效。

```
<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>
```

# 事件訊息結構
<a name="notification-content-structure"></a>

Amazon S3 傳送以發佈事件的通知訊息為 JSON 格式。

如需設定事件通知的一般概觀和指示，請參閱 [Amazon S3 事件通知](EventNotifications.md)。

此範例顯示事件通知 JSON 結構的 *2.1 版*。Amazon S3 使用該事件結構的*版本 2.1*、*2.2* 和 *2.3*。Amazon S3 會將版本 2.2 用於跨區域複寫事件通知。它將版本 2.3 用於 S3 生命週期、S3 Intelligent-Tiering、物件 ACL、物件標記和物件還原刪除事件。這些版本包含特定於這些操作的額外資訊。版本 2.2 及 2.3 在其他方面與版本 2.1 相容，而 Amazon S3 目前可用於全部其他事件通知類型。

```
{  
   "Records":[  
      {  
         "eventVersion":"2.1",
         "eventSource":"aws:s3",
         "awsRegion":"us-west-2",
         "eventTime":"The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z) when Amazon S3 finished processing the request",
         "eventName":"The event type",
         "userIdentity":{  
            "principalId":"The unique ID of the IAM resource that caused the event"
         },
         "requestParameters":{  
            "sourceIPAddress":"The IP address where the request came from"
         },
         "responseElements":{  
            "x-amz-request-id":"The Amazon S3 generated request ID",
            "x-amz-id-2":"The Amazon S3 host that processed the request"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"The ID found in the bucket notification configuration",
            "bucket":{  
               "name":"The name of the bucket, for example, amzn-s3-demo-bucket",
               "ownerIdentity":{  
                  "principalId":"The Amazon retail customer ID of the bucket owner"
               },
               "arn":"The bucket Amazon Resource Name (ARN)"
            },
            "object":{  
               "key":"The object key name",
               "size":"The object size in bytes (as a number)",
               "eTag":"The object entity tag (ETag)",
               "versionId":"The object version if the bucket is versioning-enabled; null or not present if the bucket isn't versioning-enabled",
               "sequencer": "A string representation of a hexadecimal value used to determine event sequence; only used with PUT and DELETE requests"
            }
         },
         "glacierEventData": {
            "restoreEventData": {
               "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z), when the temporary copy of the restored object expires",
               "lifecycleRestoreStorageClass": "The source storage class for restored objects"
            }
         }
      }
   ]
}
```

請注意，以下是事件訊息結構：
+ `eventVersion` 金鑰值包含以 `major`.`minor` 形式的主要和次要版本。

  如果 Amazon S3 對不向下相容的事件結構進行變更，主要版本就會增加。這包含已經存在的 JSON 欄位，或變更欄位內容的呈現方式 (例如，日期格式)。

  如果 Amazon S3 將新欄位新增至事件結構，次要版本就會增加。如果針對部分或所有現有事件提供新資訊，則可能會發生這種情況。如果只有新引進的事件類型才提供新資訊，也可能會發生這種情況。要維持與次要版本的新事件結構相容，建議您的應用程式略過新欄位。

  如果引進新的事件類型，但卻未修改事件結構，則事件版本不會變更。

  為確保您的應用程式可以正確剖析事件結構，我們建議您對主要版本編號進行「等於」比較。為確保您的應用程式預期的欄位存在，我們建議您對次要版本編號進行「大於或等於」比較。
+ 所以 `eventName` 索引鍵值會參考[事件通知類型](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html)的清單，但不會包含 `s3:` 字首。
+ `userIdentity` 索引鍵值參考造成事件的 AWS Identity and Access Management (IAM) 資源 （使用者、角色、群組等） 的唯一 ID。對於每個 IAM 識別碼字首 (例如 AIDA、AROA、AGPA) 的定義，以及關於如何取得唯一識別碼的資訊，請參閱《IAM 使用者指南》**中的[唯一識別碼](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html##identifiers-unique-ids)。
+ 如果您想要追蹤請求，則`responseElements`金鑰值非常有用 AWS 支援。`x-amz-request-id` 和 `x-amz-id-2` 都能協助 Amazon S3 追蹤個別請求。這些值與 Amazon S3 為回應起始事件之請求而傳回的值相同。因此，您可以使用這些值來比對事件與請求。
+ `s3` 索引鍵值提供與事件有關之儲存貯體和物件的相關資訊。此物件金鑰名稱值是以 URL 編碼而成。例如，`red flower.jpg` 會變成 `red+flower.jpg`。(Amazon S3 傳回 "`application/x-www-form-urlencoded`" 做為回應中的內容類型。)

  `ownerIdentity` 索引鍵值對應至儲存貯體擁有者的 Amazon Retail (Amazon.com) 客戶 ID。此 ID 值不再使用，且只會為了回溯相容性而進行維護。
+ `sequencer` 索引鍵值提供判斷事件順序的方式。事件通知不保證按事件發生的相同順序抵達。不過，來自建立物件 (`PUT` 請求) 和刪除物件之事件的通知包含 `sequencer`。您可以使用此值來確定指定物件索引鍵的事件順序。

  如果比較 `sequencer` 字串和相同物件金鑰的兩項事件通知，`sequencer` 十六進位值較大的事件通知是發生較晚的事件。如果使用事件通知維護個別的 Amazon S3 物件資料庫或索引，則建議您在處理每項事件通知時，比較並存放 `sequencer` 值。

  注意下列事項：
  + 您不能使用 `sequencer` 索引鍵值來判斷不同物件索引鍵上的事件順序。
  + `sequencer` 字串長度可能各不相不同。所以，為了比較這些值，需先在較短值的左邊填充零，再執行字典排序比較。
+ 只有 `s3:ObjectRestore:Completed` 事件才可看見 `glacierEventData` 索引鍵值。
+ `restoreEventData` 索引鍵值包含與您的還原請求相關的屬性。
+ `replicationEventData` 索引鍵值只會對複寫事件顯現。
+ `intelligentTieringEventData` 索引鍵值只會對 S3 Intelligent-Tiering 事件顯現。
+ `lifecycleEventData` 索引鍵值只會對 S3 生命週期轉換事件顯現。

## 範例訊息
<a name="notification-content-structure-examples"></a>

以下是 Amazon S3 事件通知訊息的範例。

**Amazon S3 測試訊息**  
您在儲存貯體上設定事件通知後，Amazon S3 會傳送下列測試訊息。

```
1. {  
2.    "Service":"Amazon S3",
3.    "Event":"s3:TestEvent",
4.    "Time":"2014-10-13T15:57:02.089Z",
5.    "Bucket":"amzn-s3-demo-bucket",
6.    "RequestId":"5582815E1AEA5ADF",
7.    "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
8. }
```

**注意**  
`s3:TestEvent` 訊息使用的格式與一般 S3 事件通知不同。與其他使用先前所示 `Records` 陣列結構的事件通知不同，測試事件會搭配使用簡化格式與直接欄位。實作事件處理時，請確定您的程式碼可以區分和正確處理這兩種訊息格式。

**使用 `PUT` 請求建立物件時的範例訊息**  
以下是 Amazon S3 傳送以發佈 `s3:ObjectCreated:Put` 事件的訊息範例。

```
 1. {  
 2.    "Records":[  
 3.       {  
 4.          "eventVersion":"2.1",
 5.          "eventSource":"aws:s3",
 6.          "awsRegion":"us-west-2",
 7.          "eventTime":"1970-01-01T00:00:00.000Z",
 8.          "eventName":"ObjectCreated:Put",
 9.          "userIdentity":{  
10.             "principalId":"AIDAJDPLRKLG7UEXAMPLE"
11.          },
12.          "requestParameters":{  
13.             "sourceIPAddress":"172.16.0.1"
14.          },
15.          "responseElements":{  
16.             "x-amz-request-id":"C3D13FE58DE4C810",
17.             "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
18.          },
19.          "s3":{  
20.             "s3SchemaVersion":"1.0",
21.             "configurationId":"testConfigRule",
22.             "bucket":{  
23.                "name":"amzn-s3-demo-bucket",
24.                "ownerIdentity":{  
25.                   "principalId":"A3NL1KOZZKExample"
26.                },
27.                "arn":"arn:aws:s3:::amzn-s3-demo-bucket"
28.             },
29.             "object":{  
30.                "key":"HappyFace.jpg",
31.                "size":1024,
32.                "eTag":"d41d8cd98f00b204e9800998ecf8427e",
33.                "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
34.                "sequencer":"0055AED6DCD90281E5"
35.             }
36.          }
37.       }
38.    ]
39. }
```



# 使用 EventBridge
<a name="EventBridge"></a>

每當儲存貯體發生特定事件時，Amazon S3 可將事件傳送至 Amazon EventBridge。與其他目的地不同，您不需要選取想要傳遞的事件類型。啟用 EventBridge 之後，下列所有事件都會傳送至 EventBridge。您可以使用 EventBridge 規則將事件路由至其他目標。以下列出 Amazon S3 傳送至 EventBridge 的事件。


|  事件類型 |  Description  | 
| --- | --- | 
|  *物件已建立*  |  已建立物件。 事件訊息結構中的原因欄位會指出使用哪個 S3 API 來建立物件：[https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 或 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)。  | 
|  *物件已刪除 (DeleteObject)* *物件已刪除 (生命週期過期)*  |  已刪除物件。 當使用 S3 API 呼叫刪除物件時，原因欄位會設定為 DeleteObject。當 S3 生命週期過期規則刪除物件時，原因欄位會設定為生命週期過期。如需詳細資訊，請參閱[即將到期的物件](lifecycle-expire-general-considerations.md)。 刪除未進行版本控制的物件，或永久刪除版本控制的物件時，deletion-type 欄位會設定為 Permanently Deleted。當為版本控制的物件建立刪除標記時，`deletion-type` 欄位會設定為 Delete Marker Created。如需詳細資訊，請參閱[刪除啟用版本控制功能之儲存貯體中的物件](DeletingObjectVersions.md)。  | 
|  *還原物件已起始*  |  從 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 儲存類別或者 S3 Intelligent-Tiering 封存存取或 Deep Archive 存取層起始物件還原。如需詳細資訊，請參閱[使用封存的物件](archived-objects.md)。  | 
|  *物件還原已完成*  |  物件還原已完成。  | 
|  *物件還原已過期*  |  從 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 還原的物件臨時複本已過期且已刪除。  | 
|  *物件儲存類別已變更*  |  物件已轉換至不同的儲存類別。如需詳細資訊，請參閱[使用 Amazon S3 生命週期轉換物件](lifecycle-transition-general-considerations.md)。  | 
|  *物件存取層已變更*  |  物件轉換至 S3 Intelligent-Tiering Archive 存取層或 Deep Archive 存取層。如需詳細資訊，請參閱[使用 Amazon S3 Intelligent-Tiering 管理儲存成本](intelligent-tiering.md)。  | 
|  *物件 ACL 已更新*  |  可使用 `PutObjectAcl` 設定物件的存取控制清單 (ACL)。當請求對物件的 ACL 沒有變更時，則不會產生事件。如需詳細資訊，請參閱[存取控制清單 (ACL) 概觀](acl-overview.md)。  | 
|  *物件標籤已新增*  |  已使用 `PutObjectTagging` 將一組標籤新增至物件。如需詳細資訊，請參閱[使用標籤為物件分類](object-tagging.md)。  | 
|  *物件標籤已刪除*  |  已使用 `DeleteObjectTagging` 從物件移除所有標籤。如需詳細資訊，請參閱[使用標籤為物件分類](object-tagging.md)。  | 

**注意**  
如需有關 Amazon S3 事件類型如何映射至 EventBridge 事件類型的詳細資訊，請參閱 [Amazon EventBridge 映射和疑難排解](ev-mapping-troubleshooting.md)。

您可以將 Amazon S3 事件通知搭配 EventBridge 使用來編寫規則，以便在儲存貯體中發生事件時採取動作。例如，您可以讓其為您傳送通知。如需詳細資訊，請參閱《Amazon EventBridge 使用者指南》**中的[什麼是 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)。

如需可使用 EventBridge API 互動的動作和資料類型詳細資訊，請參閱 Amazon EventBridge API 參考**中的 [Amazon EventBridge API 參考](https://docs.aws.amazon.com/eventbridge/latest/APIReference/Welcome.html)。

如需定價的詳細資訊，請參閱 [Amazon EventBridge 定價](https://aws.amazon.com/eventbridge/pricing)。

**Topics**
+ [Amazon EventBridge 許可](ev-permissions.md)
+ [啟用 Amazon EventBridge](enable-event-notifications-eventbridge.md)
+ [EventBridge 事件訊息結構](ev-events.md)
+ [Amazon EventBridge 映射和疑難排解](ev-mapping-troubleshooting.md)

# Amazon EventBridge 許可
<a name="ev-permissions"></a>

Amazon S3 不需要任何額外許可，即可將事件傳遞給 Amazon EventBridge。

# 啟用 Amazon EventBridge
<a name="enable-event-notifications-eventbridge"></a>

您可以使用 S3 主控台、 AWS Command Line Interface (AWS CLI) 或 Amazon S3 REST API 來啟用 Amazon EventBridge。

**注意**  
啟用 EventBridge 之後，變更生效需時約五分鐘。

## 使用 S3 主控台
<a name="eventbridge-console"></a>

**啟用 S3 主控台中的 EventBridge 事件傳遞。**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體名稱清單中，選擇要啟用事件的儲存貯體名稱。

1. 選擇 **Properties** (屬性)。

1. 導覽至 **Event Notifications** (事件通知) 區段，然後尋找 **Amazon EventBridge** 子區段。選擇**編輯**。

1. 在 **Send notifications to Amazon EventBridge for all events in this bucket** (將此儲存貯體中所有事件的通知傳送至 Amazon 事件 Bridge) 下，選擇 **On** (開啟)。

## 使用 AWS CLI
<a name="eventbridge-cli"></a>

下列範例會為已啟用 Amazon EventBridge 的儲存貯體 *`amzn-s3-demo-bucket1`* 建立儲存貯體通知組態。

```
aws s3api put-bucket-notification-configuration --bucket amzn-s3-demo-bucket1 --notification-configuration='{ "EventBridgeConfiguration": {} }'
```

## 使用 REST API
<a name="eventbridge-api"></a>

您可以呼叫 Amazon S3 REST API，以程式設計方式啟用儲存貯體上的 Amazon EventBridge。如需詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html)。

下列範例顯示用於建立已啟用 Amazon EventBridge 之儲存貯體通知組態的 XML。

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

## 建立 EventBridge 規則
<a name="ev-tutorial"></a>

啟用後，您可以為某些任務建立 Amazon EventBridge 規則。例如，您可以在建立物件時傳送電子郵件通知。如需完整的教學課程，請參閱《*Amazon EventBridge 使用者指南*》中的[教學課程：建立 Amazon S3 物件時傳送通知](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-s3-object-created-tutorial.html)。

# EventBridge 事件訊息結構
<a name="ev-events"></a>

Amazon S3 傳送以發佈事件的通知訊息為 JSON 格式。Amazon S3 將事件傳送至 Amazon EventBridge 時，會出現下列欄位。
+ `version` – 所有事件目前為 0 (零)。
+ `id` – 為每個事件產生的 UUID。
+ `detail-type` – 要傳送的事件類型。如需事件類型的清單，請參閱 [使用 EventBridge](EventBridge.md)。
+ `source` – 識別產生事件的服務。
+ `account` – 儲存貯體擁有者的 12 位數 AWS 帳戶 ID。
+ `time` - 事件發生的時間。
+ `region` – 識別儲存貯體 AWS 區域 的 。
+ `resources` – 包含儲存貯體之 Amazon Resource Name (ARN) 的 JSON 陣列。
+ `detail`：包含事件相關資訊的 JSON 物件。如需此欄位可以包含哪些項目的詳細資訊，請參閱 [事件訊息詳細資訊欄位](#ev-events-detail)。

## 事件訊息結構範例
<a name="ev-events-list"></a>

以下是可傳送至 Amazon EventBridge 之部分 Amazon S3 事件通知訊息的範例。

### 物件已建立
<a name="ev-events-object-created"></a>

```
{
  "version": "0",
  "id": "17793124-05d4-b198-2fde-7ededc63b103",
  "detail-type": "Object Created",
  "source": "aws.s3",
  "account": "111122223333",
  "time": "2021-11-12T00:00:00Z",
  "region": "ca-central-1",
  "resources": [
    "arn:aws:s3:::amzn-s3-demo-bucket1"
  ],
  "detail": {
    "version": "0",
    "bucket": {
      "name": "amzn-s3-demo-bucket1"
    },
    "object": {
      "key": "example-key",
      "size": 5,
      "etag": "b1946ac92492d2347c6235b4d2611184",
      "version-id": "IYV3p45BT0ac8hjHg1houSdS1a.Mro8e",
      "sequencer": "617f08299329d189"
    },
    "request-id": "N4N7GDK58NMKJ12R",
    "requester": "123456789012",
    "source-ip-address": "1.2.3.4",
    "reason": "PutObject"
  }
}
```

### 物件已刪除 (使用 DeleteObject)
<a name="ev-events-object-deleted"></a>

```
{
  "version": "0",
  "id": "2ee9cc15-d022-99ea-1fb8-1b1bac4850f9",
  "detail-type": "Object Deleted",
  "source": "aws.s3",
  "account": "111122223333",
  "time": "2021-11-12T00:00:00Z",
  "region": "ca-central-1",
  "resources": [
    "arn:aws:s3:::amzn-s3-demo-bucket1"
  ],
  "detail": {
    "version": "0",
    "bucket": {
      "name": "amzn-s3-demo-bucket1"
    },
    "object": {
      "key": "example-key",
      "etag": "d41d8cd98f00b204e9800998ecf8427e",
      "version-id": "1QW9g1Z99LUNbvaaYVpW9xDlOLU.qxgF",
      "sequencer": "617f0837b476e463"
    },
    "request-id": "0BH729840619AG5K",
    "requester": "123456789012",
    "source-ip-address": "1.2.3.4",
    "reason": "DeleteObject",
    "deletion-type": "Delete Marker Created"
  }
}
```

### 物件已刪除 (使用生命週期過期)
<a name="ev-events-object-deleted-lifecycle"></a>

```
{
  "version": "0",
  "id": "ad1de317-e409-eba2-9552-30113f8d88e3",
  "detail-type": "Object Deleted",
  "source": "aws.s3",
  "account": "111122223333",
  "time": "2021-11-12T00:00:00Z",
  "region": "ca-central-1",
  "resources": [
    "arn:aws:s3:::amzn-s3-demo-bucket1"
  ],
  "detail": {
    "version": "0",
    "bucket": {
      "name": "amzn-s3-demo-bucket1"
    },
    "object": {
      "key": "example-key",
      "etag": "d41d8cd98f00b204e9800998ecf8427e",
      "version-id": "mtB0cV.jejK63XkRNceanNMC.qXPWLeK",
      "sequencer": "617b398000000000"
    },
    "request-id": "20EB74C14654DC47",
    "requester": "s3.amazonaws.com",
    "reason": "Lifecycle Expiration",
    "deletion-type": "Delete Marker Created"
  }
}
```

### 物件還原已完成
<a name="ev-events-object-restore-complete"></a>

```
{
  "version": "0",
  "id": "6924de0d-13e2-6bbf-c0c1-b903b753565e",
  "detail-type": "Object Restore Completed",
  "source": "aws.s3",
  "account": "111122223333",
  "time": "2021-11-12T00:00:00Z",
  "region": "ca-central-1",
  "resources": [
    "arn:aws:s3:::amzn-s3-demo-bucket1"
  ],
  "detail": {
    "version": "0",
    "bucket": {
      "name": "amzn-s3-demo-bucket1"
    },
    "object": {
      "key": "example-key",
      "size": 5,
      "etag": "b1946ac92492d2347c6235b4d2611184",
      "version-id": "KKsjUC1.6gIjqtvhfg5AdMI0eCePIiT3"
    },
    "request-id": "189F19CB7FB1B6A4",
    "requester": "s3.amazonaws.com",
    "restore-expiry-time": "2021-11-13T00:00:00Z",
    "source-storage-class": "GLACIER"
  }
}
```

## 事件訊息詳細資訊欄位
<a name="ev-events-detail"></a>

詳細資訊欄位包含具有事件相關資訊的 JSON 物件。下列欄位可能會出現在詳細資訊欄位中。
+ `version` – 所有事件目前為 0 (零)。
+ `bucket` – 與事件有關之 Amazon S3 儲存貯體的相關資訊。
+ `object` – 與事件有關之 Amazon S3 物件的相關資訊。
+ `request-id` – S3 回應中的請求 ID。
+ `requester` –申請者的 AWS 帳戶 ID AWS 或服務主體。
+ `source-ip-address` – S3 請求的來源 IP 位址。僅適用於由 S3 請求觸發的事件。
+ `reason` – 對於**物件建立**事件，會將 S3 API 用於建立物件：[https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 或 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)。對於**物件已刪除**事件，在透過 S3 API 呼叫刪除物件時，會設定為 **DeleteObject**，或是在透過 S3 生命週期過期規則刪除物件時，設定為**生命週期過期**。如需詳細資訊，請參閱[即將到期的物件](lifecycle-expire-general-considerations.md)。
+ `deletion-type` – 對於**物件已刪除**事件，刪除未進行版本控制的物件，或永久刪除版本控制的物件時，這會設定為**永久刪除**。當為版本控制物件建立刪除標記時，會設定為 **Delete Marker Created** (刪除建立的標記)。如需詳細資訊，請參閱[刪除啟用版本控制功能之儲存貯體中的物件](DeletingObjectVersions.md)。
**注意**  
某些物件屬性 (例如 `etag` 和 `size`) 只有在建立刪除標記之後才會出現。
+ `restore-expiry-time` – 對於**物件還原已完成**事件，物件臨時複本的時間會從 S3 刪除。如需詳細資訊，請參閱[使用封存的物件](archived-objects.md)。
+ `source-storage-class` – 對於**物件還原已起始**和**物件還原已完成**事件，即為還原物件的儲存類別。如需詳細資訊，請參閱[使用封存的物件](archived-objects.md)。
+ `destination-storage-class` – 對於**物件儲存類別已變更**事件，即為物件的新儲存類別。如需詳細資訊，請參閱[使用 Amazon S3 生命週期轉換物件](lifecycle-transition-general-considerations.md)。
+ `destination-access-tier` – 對於**物件存取層已變更**事件，即為物件的新存取層。如需詳細資訊，請參閱[使用 Amazon S3 Intelligent-Tiering 管理儲存成本](intelligent-tiering.md)。

# Amazon EventBridge 映射和疑難排解
<a name="ev-mapping-troubleshooting"></a>

下表說明 Amazon S3 事件類型如何映射到 Amazon EventBridge 事件類型。


|  S3 事件類型 |  Amazon EventBridge 詳細類型  | 
| --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)  |  物件已建立  | 
|  ObjectRemoved:Delete ObjectRemoved:DeleteMarkerCreated LifecycleExpiration:Delete LifecycleExpiration:DeleteMarkerCreated  |  物件已刪除  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html)  |  還原物件已起始  | 
|  ObjectRestore:Completed  |  物件還原已完成  | 
|  ObjectRestore:Delete  |  物件還原已過期  | 
|  LifecycleTransition  |  物件儲存類別已變更  | 
|  IntelligentTiering  |  物件存取層已變更  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html)  |  物件標籤已新增  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html)  |  物件標籤已刪除  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)  |  物件 ACL 已更新  | 

## Amazon EventBridge 疑難排解
<a name="ev-troubleshooting"></a>

如需如何對 EventBridge 進行疑難排解的詳細資訊，請參閱*《Amazon EventBridge 使用者指南》*中的[對 Amazon EventBridge 進行疑難排解](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-troubleshooting.html)。