

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

# 教學課程：使用 Amazon EventBridge 監控您組織的重要變更
<a name="orgs_tutorials_cwe"></a>

本教學課程說明如何設定 Amazon EventBridge、先前的 Amazon CloudWatch Events 來監控您組織的變更。首先設定規則，此規則會在使用者叫用特定 AWS Organizations 操作時觸發。接著，您將 Amazon EventBridge 設定為在規則觸發時執行 AWS Lambda 函數，並將 Amazon SNS 設定為傳送電子郵件，其中包含事件的詳細資訊。

下圖顯示教學的主要步驟。

**[步驟 1：設定追蹤記錄與事件選擇器](#tutorial-cwe-step1)**  
在 中建立稱為*線索*的日誌 AWS CloudTrail。您可以設定日誌來擷取所有 API 呼叫。

**[步驟 2：設定 Lambda 函數](#tutorial-cwe-step2)**  
建立 AWS Lambda 函數，將事件的詳細資訊記錄到 S3 儲存貯體。

**[步驟 3：建立傳送電子郵件給訂閱者的 Amazon SNS 主題](#tutorial-cwe-step3)**  
建立 Amazon SNS 主題，此主題會發送電子郵件給其訂閱者，然後讓訂閱者自行訂閱該主題。

**[步驟 4：建立 Amazon EventBridge 規則](#tutorial-cwe-step4)**  
建立規則，此規則會讓 Amazon EventBridge 將特定 API 呼叫的詳細資訊，傳給 Lambda 函數和 SNS 主題的訂閱者。

**[步驟 5：測試 Amazon EventBridge 規則](#tutorial-cwe-step5)**  
藉由執行其中一項受監控的操作，來測試您的新規則。在本教學課程中，受監控的操作會建立組織單位 (OU)。您可檢視 Lambda 函數所建立的日誌記錄，和檢視 Amazon SNS 傳送給訂閱者的電子郵件。

**秘訣**  
您也可以使用此教學作為設定類似操作 (例如在帳戶建立完成時傳送電子郵件通知) 的指南。由於帳戶建立是非同步的操作，當它完成時，您預設不會收到通知。如需搭配 使用 AWS CloudTrail 和 Amazon EventBridge 的詳細資訊 AWS Organizations，請參閱 [在 中記錄和監控 AWS Organizations](orgs_security_incident-response.md)。

## 先決條件
<a name="tutorial-cwe-prereqs"></a>

本教學課程的假設如下：
+ 您可以從組織中的管理帳戶以 IAM 使用者 AWS 管理主控台 身分登入 。IAM 使用者必須擁有許可，以在 CloudTrail 中建立日誌、在 Lambda 中建立函數、在 Amazon SNS 中建立主題，以及在 Amazon EventBridge 中建立規則，並進行設定。如需關於授與許可的詳細資訊，請參閱 *IAM 使用者指南*中的[存取管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)，或針對您想要設定其存取的服務，參閱該服務的指南。
+ 您可以存取現有的 Amazon Simple Storage Service (Amazon S3) 儲存貯體 (或者您擁有建立儲存貯體的許可)，來接收您在步驟 1 中所設定的 CloudTrail 日誌。

**重要**  
目前， AWS Organizations 僅託管在美國東部 （維吉尼亞北部） 區域 （即使全球皆可使用）。若要執行本教學課程中的步驟，您必須 AWS 管理主控台 將 設定為使用該區域。

## 步驟 1：設定追蹤記錄與事件選擇器
<a name="tutorial-cwe-step1"></a>

在此步驟中，您會登入管理帳戶，並且在 * 中設定日誌 (稱為*追蹤記錄 AWS CloudTrail)。您也會設定針對追蹤的事件選擇器，以擷取所有讀取/寫入 API 呼叫，以便 Amazon EventBridge 具有要觸發的呼叫。

**建立追蹤記錄**

1. 以組織管理帳戶的管理員 AWS 身分登入 ，然後在 開啟 CloudTrail 主控台[https://console.aws.amazon.com/cloudtrail/](https://console.aws.amazon.com/cloudtrail/)。

1. 在主控台右上角的導覽列中，選擇**美國東部 (維吉尼亞北部)** 區域。如果您選擇不同的區域， AWS Organizations 不會在 Amazon EventBridge 組態設定中顯示為選項，且 CloudTrail 不會擷取相關資訊 AWS Organizations。

1. 在導覽窗格中，選擇 **Trails** (追蹤記錄)。

1. 選擇 **Create trail** (建立追蹤)。

1. 針對 **Trail name** (追蹤名稱)，輸入 **My-Test-Trail**。

1. 執行以下其中一個選項，指定 CloudTrail 交付其日誌的位置：
   + 如果您需要建立儲存貯體，請選擇 **Create new S3 bucket** (建立新的 S3 儲存貯體)，然後針對 **Trail log bucket and folder** (追蹤日誌儲存貯體和資料夾)，輸入新儲存貯體的名稱。
**注意**  
S3 儲存貯體名稱必須在**「全域」****必須是唯一的。
   + 如果您已經擁有儲存貯體，請選擇 **Use existing S3 bucket** (使用現有的 S3 儲存貯體)，然後從 **S3 bucket** (S3 儲存貯體) 清單中選擇儲存貯體的名稱。

1. 選擇**下一步**。

1. 在 **Choose log events ** (選擇日誌事件) 頁面的 **Management events** (管理事件) 區段中，選擇 **Read** (讀取) 和 **Write** (寫入)。

1. 選擇**下一步**。

1. 檢閱選項，然後選擇 **Create trail** (建立追蹤)。

Amazon EventBridge 可讓您從幾種不同的方法中選擇其一，用來在警示規則符合傳入的 API 呼叫時傳送提醒。本教學示範兩種方法：叫用可以記錄 API 呼叫的 Lambda 函數，以及傳送資訊至 Amazon SNS 主題，而此主題會發送電子郵件或文字訊息給該主題的訂閱者。在接下來的兩個步驟中，會建立所需的元件：Lambda 函數和 Amazon SNS 主題。

## 步驟 2：設定 Lambda 函數
<a name="tutorial-cwe-step2"></a>

在此步驟中會建立 Lambda 函數，其中記錄根據 Amazon EventBridge 規則 (您稍後會進行設定) 傳送給該函數的 API 活動。

**建立記錄 Amazon EventBridge 事件的 Lambda 函數**

1. 在 開啟 AWS Lambda 主控台[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

1. 如果您是初次使用 Lambda，請選擇歡迎頁面上的 **Get Started Now** (立即開始使用)；否則請選擇 **Create function** (建立函數)。

1. 在 **Create function (建立函數)** 頁面上，選擇 **Use a blueprint (使用藍圖)**。

1. 從 **Blueprints (藍圖)** 搜尋方塊中，針對篩選條件輸入 **hello**，並選擇 **hello-world** 藍圖。

1. 選擇**設定**。

1. 在 **Basic information (基本資訊)** 頁面上，執行以下作業：

   1. 對於 Lambda 函數名稱，在 **Name** (名稱) 文字方塊中輸入 **LogOrganizationEvents**。

   1. 針對 **Role (角色)**，選擇 **Create a new role with basic Lambda permissions (建立具備基本 Lambda 許可的新角色)**。此角色會授予許可給您的 Lambda 函數，讓函數存取所需的資訊和寫入其輸出日誌。

1. 如下列範例所示，編輯 Lambda 函數程式碼。

   ```
   console.log('Loading function');
   
   exports.handler = async (event, context) => {
       console.log('LogOrganizationsEvents');
       console.log('Received event:', JSON.stringify(event, null, 2));
       return event.key1;  // Echo back the first key value
       // throw new Error('Something went wrong');
   };
   ```

   此範本程式碼會記錄具有 **LogOrganizationEvents** 標記字串的事件，後面接續構成事件的 JSON 字串。

1. 選擇**建立函數**。

## 步驟 3：建立傳送電子郵件給訂閱者的 Amazon SNS 主題
<a name="tutorial-cwe-step3"></a>

在此步驟中，您會建立一個 Amazon SNS 主題，此主題會透過電子郵件來傳送資訊給其訂閱者。這會讓此主題成為之後所建立 Amazon EventBridge 規則的目標。

**若要建立 Amazon SNS 主題來傳送電子郵件給訂閱者**

1. 在 [https://console.aws.amazon.com/sns/v3/](https://console.aws.amazon.com/sns/v3/) 開啟 Amazon SNS 主控台。

1. 在導覽窗格中，選擇 **Topics (主題)**。

1. 請選擇 **Create new topic** (建立新主題)。

   1. 針對 **Topic name (主題名稱)**，輸入 **OrganizationsCloudWatchTopic**。

   1. 針對 **Display name (顯示名稱)**，輸入 **OrgsCWEvnt**。

   1. 請選擇**建立主題**。

1. 現在您可以建立該主題的訂閱。針對剛才所建立的主題，來選擇 ARN。

1. 選擇**建立訂閱**。

   1. 在 **Create subscription (建立訂閱)** 頁面上，針對 **Protocol (通訊協定)** 選擇 **Email (電子郵件)**。

   1. 針對 **Endpoint (端點)**，輸入電子郵件地址。

   1. 選擇**建立訂閱**。 AWS 傳送電子郵件到您在上一個步驟中指定的電子郵件地址。請等待該電子郵件送達，然後選取電子郵件中的 **Confirm subscription (確認訂閱)** 連結，來確認您已成功收到電子郵件。

   1. 返回主控台並重新整理頁面。**Pending confirmation** (待確認) 訊息會關閉，改而顯示目前有效的訂閱 ID。

## 步驟 4：建立 Amazon EventBridge 規則
<a name="tutorial-cwe-step4"></a>

現在您帳戶中已經存在所需的 Lambda 函數，您可以建立 Amazon EventBridge 規則，以在規則中的條件滿足時叫用該函數。

**若要建立 EventBridge 規則**

1. 在 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 將主控台設定為 **US East (N. Virginia)** (美國東部 (維吉尼亞北部)) 區域，否則組織的相關資訊將不可用。在主控台右上角的導覽列中，選擇**美國東部 (維吉尼亞北部)** 區域。

1. 如需建立規則的說明，請參閱《[Amazon EventBridge 使用者指南》中的 Amazon EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)中的規則。 EventBridge 

## 步驟 5：測試 Amazon EventBridge 規則
<a name="tutorial-cwe-step5"></a>

在此步驟中，您會建立組織單位 (OU)、觀察 Amazon EventBridge 規則、產生日誌項目，並將電子郵件傳送給您自己，其中包含該事件的相關詳細資訊。

------
#### [ AWS 管理主控台 ]

**建立組織單位 (OU)**

1. 開啟 AWS Organizations 主控台至 [**AWS 帳戶**頁面](https://console.aws.amazon.com/organizations/v2/home/accounts)。

1.  選擇核取方塊 ![\[Blue checkmark icon indicating confirmation or completion of a task.\]](http://docs.aws.amazon.com/zh_tw/organizations/latest/userguide/images/checkbox-selected.png) **Root** (根) OU，選擇 **Actions** (動作)，然後在 **Organizational unit** (組織單位) 下，選擇 **Create new** (建立新的)。

1. 針對 OU 的名稱，輸入 **TestCWEOU**，然後選擇 **Create organizational unit (建立組織單位)**。

------

**查看 EventBridge 日誌項目**

1. 在 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 ​CloudWatch 主控台。

1. 在導覽頁面中，選擇 **Logs (日誌)**。

1. 在 **Log Groups** (日誌群組) 下方，選擇與您的 Lambda 函數：**/aws/lambda/LogOrganizationEvents** 關聯的群組。

1. 每個群組包含一或多個串流，而今天應該會有一個群組。請加以選擇。

1. 檢視日誌。您應該會看到與以下內容相似的資料列。  
![\[顯示 Organizations API 呼叫詳細資訊的 CloudWatch Events 日誌範例\]](http://docs.aws.amazon.com/zh_tw/organizations/latest/userguide/images/tutorial-sample-CWE-log.png)

1. 選取項目的中間資料列，檢視所接收事件的完整 JSON 文字。在輸出的 `requestParameters` 和 `responseElements` 片段中，可以看到 API 請求的所有詳細資訊。

   ```
   2017-03-09T22:45:05.101Z 0999eb20-051a-11e7-a426-cddb46425f16 Received event:
   {
       "version": "0",
       "id": "123456-EXAMPLE-GUID-123456",
       "detail-type": "AWS API Call via CloudTrail",
       "source": "aws.organizations",
       "account": "123456789012",
       "time": "2017-03-09T22:44:26Z",
       "region": "us-east-1",
       "resources": [],
       "detail": {
           "eventVersion": "1.04",
           "userIdentity": {
               ...
           },
           "eventTime": "2017-03-09T22:44:26Z",
           "eventSource": "organizations.amazonaws.com",
           "eventName": "CreateOrganizationalUnit",
           "awsRegion": "us-east-1",
           "sourceIPAddress": "192.168.0.1",
           "userAgent": "AWS Organizations Console, aws-internal/3",
           "requestParameters": {
               "parentId": "r-exampleRootId",
               "name": "TestCWEOU"
           },
           "responseElements": {
               "organizationalUnit": {
                   "name": "TestCWEOU",
                   "id": "ou-exampleRootId-exampleOUId",
                   "arn": "arn:aws:organizations::1234567789012:ou/o-exampleOrgId/ou-exampleRootId-exampeOUId",
                   "path": "o-exampleOrgId/r-exampleRootId/ou-exampleRootId-exampleOUId/"
               }
           },
           "requestID": "123456-EXAMPLE-GUID-123456",
           "eventID": "123456-EXAMPLE-GUID-123456",
           "eventType": "AwsApiCall"
       }
   }
   ```

1. 檢查您的電子郵件帳戶，看看是否有來自 **OrgsCWEvnt** (您 Amazon SNS 主題的顯示名稱) 的訊息。電子郵件的內文中，包含了與先前步驟所示日誌記錄相同的 JSON 文字輸出。

## 清除：移除不再需要的資源
<a name="clean-up-resources"></a>

為了避免產生費用，您應該刪除在本教學課程中建立且不想保留的任何 AWS 資源。

**清除您的 AWS 環境**

1. 使用 [CloudTrail 主控台](https://console.aws.amazon.com/cloudtrail/)，來刪除您在步驟 1 中所建立的名稱為 **My-Test-Trail** 的追蹤。

1. 如果您在步驟 1 中建立了 Amazon S3 儲存貯體，則使用 [Amazon S3 主控台](https://console.aws.amazon.com/s3/)來刪除該儲存貯體。

1. 使用 [Lambda 主控台](https://console.aws.amazon.com/lambda/)，來刪除您在步驟 2 中所建立名稱為 **LogOrganizationEvents** 的函數。

1. 使用[Amazon SNS 主控台](https://console.aws.amazon.com/sns/)，來刪除您在步驟 3 中所建立的名稱為 **OrganizationsCloudWatchTopic** 的 Amazon SNS 主題。

1. 使用 [CloudWatch 主控台](https://console.aws.amazon.com/cloudwatch/)，刪除您在步驟 4 中建立的名為 **OrgsMonitorRule** 的 EventBridge 規則。

1. 最後，使用 [Organizations 主控台](https://console.aws.amazon.com/organizations/)，來刪除您在步驟 5 中所建立名稱為 **TestCWEOU** 的 OU。

到此為止。在本教學課程中，您設定了 EventBridge 來監控組織的變更。您設定了規則，此規則會在使用者叫用特定 AWS Organizations 操作時觸發。此規則會執行記錄事件的 Lambda 函數，並傳送電子郵件，其中包含關於事件的詳細資訊。