教學課程:使用 Amazon EventBridge 監控您組織的重要變更 - AWS Organizations

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

教學課程:使用 Amazon EventBridge 監控您組織的重要變更

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

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

步驟 1:設定追蹤記錄與事件選擇器

中建立稱為追蹤記錄AWS CloudTrail的日誌。您可以設定日誌來擷取所有 API 呼叫。

步驟 2:設定 Lambda 函數

建立 AWS Lambda 功能,此功能會將事件的相關詳細資訊記錄到 S3 儲存貯體。

步驟 3:建立傳送電子郵件給訂閱者的 Amazon SNS 主題

建立 Amazon SNS 主題,此主題會發送電子郵件給其訂閱者,然後讓訂閱者自行訂閱該主題。

步驟 4:建立 Amazon EventBridge 規則

建立規則,此規則會讓 Amazon EventBridge 將特定 API 呼叫的詳細資訊,傳給 Lambda 函數和 SNS 主題的訂閱者。

步驟 5:測試 Amazon EventBridge 規則

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

秘訣

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

先決條件

本教學課程的假設如下:

  • 您可以從組織中的管理帳戶,以 IAM 使用者的身分登入 AWS Management Console。IAM 使用者必須擁有許可,以在 CloudTrail 中建立日誌、在 Lambda 中建立函數、在 Amazon SNS 中建立主題,以及在 Amazon EventBridge 中建立規則,並進行設定。如需關於授與許可的詳細資訊,請參閱 IAM 使用者指南中的存取管理,或針對您想要設定其存取的服務,參閱該服務的指南。

  • 您可以存取現有的 Amazon Simple Storage Service (Amazon S3) 儲存貯體 (或者您擁有建立儲存貯體的許可),來接收您在步驟 1 中所設定的 CloudTrail 日誌。

重要

目前,AWS Organizations 只在美國東部 (維吉尼亞北部) 區域中託管 (雖然全球皆可使用)。若要執行此教學課程中的步驟,您必須設定 AWS Management Console 使用該區域。

步驟 1:設定追蹤記錄與事件選擇器

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

若要建立追蹤記錄
  1. 以組織管理帳戶管理員的身分登入 AWS,然後開啟位於 https://console.aws.amazon.com/cloudtrail/ 的 CloudTrail 主控台。

  2. 在主控台右上角的導覽列中,選擇美國東部 (維吉尼亞北部) 區域。如果您選擇不同的區域,則在 Amazon EventBridge 的組態設定選項中不會出現 AWS Organizations,CloudTrail 也不會擷取關於 AWS Organizations 的資訊。

  3. 在導覽窗格中,選擇 Trails (追蹤記錄)。

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

  5. 針對 Trail name (追蹤名稱),輸入 My-Test-Trail

  6. 執行以下其中一個選項,指定 CloudTrail 交付其日誌的位置:

    • 如果您需要建立儲存貯體,請選擇 Create new S3 bucket (建立新的 S3 儲存貯體),然後針對 Trail log bucket and folder (追蹤日誌儲存貯體和資料夾),輸入新儲存貯體的名稱。

      注意

      S3 儲存貯體名稱必須在「全域」必須是唯一的。

    • 如果您已經擁有儲存貯體,請選擇 Use existing S3 bucket (使用現有的 S3 儲存貯體),然後從 S3 bucket (S3 儲存貯體) 清單中選擇儲存貯體的名稱。

  7. 選擇 Next (下一步)

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

  9. 選擇 Next (下一步)

  10. 檢閱選項,然後選擇 Create trail (建立追蹤)。

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

步驟 2:設定 Lambda 函數

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

建立記錄 Amazon EventBridge 事件的 Lambda 函數
  1. 開啟位於 AWS Lambda 的 https://console.aws.amazon.com/lambda/ 主控台。

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

  3. Create function (建立函數) 頁面上,選擇 Use a blueprint (使用藍圖)

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

  5. 選擇設定

  6. Basic information (基本資訊) 頁面上,執行以下作業:

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

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

  7. 如下列範例所示,編輯 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 字串。

  8. 選擇 建立函數

步驟 3:建立傳送電子郵件給訂閱者的 Amazon SNS 主題

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

若要建立 Amazon SNS 主題來傳送電子郵件給訂閱者
  1. https://console.aws.amazon.com/sns/v3/ 開啟 Amazon SNS 主控台。

  2. 在導覽窗格中,選擇 Topics (主題)

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

    1. 針對 Topic name (主題名稱),輸入 OrganizationsCloudWatchTopic

    2. 針對 Display name (顯示名稱),輸入 OrgsCWEvnt

    3. 請選擇 建立主題

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

  5. 選擇建立訂閱

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

    2. 針對 Endpoint (端點),輸入電子郵件地址。

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

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

步驟 4:建立 Amazon EventBridge 規則

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

若要建立 EventBridge 規則
  1. https://console.aws.amazon.com/events/ 開啟 Amazon EventBridge 主控台。

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

  3. 如需有關建立規則的指示,請參閱 Amazon EventBridge user guide (《Amazon EventBridge 使用者指南》) 中的 Getting started with Amazon EventBridge (Amazon EventBridge 入門)。

步驟 5:測試 Amazon EventBridge 規則

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

AWS Management Console
建立組織單位 (OU)
  1. 在 AWS Organizations 主控台中開啟 AWS 帳戶 頁面

  2. 選擇核取方塊 Blue checkmark icon indicating confirmation or completion of a task. Root (根) OU,選擇 Actions (動作),然後在 Organizational unit (組織單位) 下,選擇 Create new (建立新的)。

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

查看 EventBridge 日誌項目
  1. https://console.aws.amazon.com/cloudwatch/ 開啟 ​CloudWatch 主控台。

  2. 在導覽頁面中,選擇 Logs (日誌)

  3. Log Groups (日誌群組) 下方,選擇與您的 Lambda 函數:/aws/lambda/LogOrganizationEvents 關聯的群組。

  4. 每個群組包含一或多個串流,而今天應該會有一個群組。請選擇此群組。

  5. 檢視日誌。您應該會看到與以下內容相似的資料列。

    Log entries showing event reception with timestamp, version, and ID details.
  6. 選取項目的中間資料列,檢視所接收事件的完整 JSON 文字。在輸出的 requestParametersresponseElements 片段中,可以看到 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" } }, "requestID": "123456-EXAMPLE-GUID-123456", "eventID": "123456-EXAMPLE-GUID-123456", "eventType": "AwsApiCall" } }
  7. 檢查您的電子郵件帳戶,看看是否有來自 OrgsCWEvnt (您 Amazon SNS 主題的顯示名稱) 的訊息。電子郵件的內文中,包含了與先前步驟所示日誌記錄相同的 JSON 文字輸出。

清除:移除不再需要的資源

為了避免產生費用,您應該刪除在此教學中建立但不想保留的所有 AWS 資源。

清除您的 AWS 環境
  1. 使用 CloudTrail 主控台,來刪除您在步驟 1 中所建立的名稱為 My-Test-Trail 的追蹤。

  2. 如果您在步驟 1 中建立了 Amazon S3 儲存貯體,則使用 Amazon S3 主控台來刪除該儲存貯體。

  3. 使用 Lambda 主控台,來刪除您在步驟 2 中所建立名稱為 LogOrganizationEvents 的函數。

  4. 使用Amazon SNS 主控台,來刪除您在步驟 3 中所建立的名稱為 OrganizationsCloudWatchTopic 的 Amazon SNS 主題。

  5. 使用 CloudWatch 主控台,刪除您在步驟 4 中建立的名為 OrgsMonitorRule 的 EventBridge 規則。

  6. 最後,使用 Organizations 主控台,來刪除您在步驟 5 中所建立名稱為 TestCWEOU 的 OU。

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