使用 Amazon SNS 通知監控 Systems Manager 狀態變更 - AWS Systems Manager

使用 Amazon SNS 通知監控 Systems Manager 狀態變更

您可以將 Amazon Simple Notification Service (Amazon SNS) 設定為傳送通知,這些通知會與您使用 Run Command 或 Maintenance Windows (AWS Systems Manager 的功能) 傳送的命令狀態相關。Amazon SNS 會協調和管理傳送和傳遞通知給已訂閱 Amazon SNS 主題的用戶端或端點。每當命令變更為新狀態或特定狀態時 (如「失敗」或「逾時」),您都可以收到通知。當您將命令傳送至多個節點時,您都可以接收到傳送到特定節點之每個命令複本的通知。每個複本稱為呼叫

Amazon SNS 可以使用 HTTP 或 HTTPS POST、電子郵件 (SMTP,純文字或 JSON 格式) 或發佈到 Amazon Simple Queue Service (Amazon SQS) 佇列訊息的方式,傳遞通知。如需詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》中的什麼是 Amazon SNS。如需 Run Command 和 Maintenance Windows 提供之 Amazon SNS 通知中所含 JSON 資料結構的範例,請參閱 AWS Systems Manager 的 Amazon SNS 通知範例

設定 AWS Systems Manager 的 Amazon SNS 通知

向維護時段註冊的 Run Command 和 Maintenance Windows 任務可以針對已進入下列狀態的命令任務傳送 Amazon SNS 通知。

  • 進行中

  • Success (成功)

  • 失敗

  • 逾時

  • 已取消

如需導致命令進入這些其中一種狀態之條件的相關資訊,請參閱 了解命令狀態

注意

使用 Run Command 傳送的命令也會報告 Canceling 和 Pending 狀態。Amazon SNS 通知不會擷取這些狀態。

命令摘要 Amazon SNS 通知

如果您在 Amazon SNS 通知的維護時段中設定 Run Command 或 Run Command 任務,Amazon SNS 會傳送包含以下資訊的摘要訊息。

欄位 類型 描述

eventTime

:字串

事件啟動的時間。此時間戳記非常重要,因為 Amazon SNS 不保證訊息交付的順序。範例:2016-04-26T13:15:30Z

documentName

:字串

用來執行此命令之 SSM 文件名稱。

commandId

:字串

在傳送命令後 Run Command 產生的 ID。

expiresAfter

Date

如果已達到此時間但系統尚未開始執行命令,則系統不會執行該命令。

outputS3BucketName

:字串

Amazon Simple Storage Service (Amazon S3) 儲存貯體,命令執行的回應應存放的位置。

outputS3KeyPrefix

:字串

儲存貯體中的 Amazon Simple Storage Service (Amazon S3) 目錄路徑,命令執行的回應應存放的位置。

requestedDateTime

:字串

將請求傳送到此特定節點的時間和日期。

instanceIds

StringList

被命令視為目標的節點。

注意

只有在Run Command任務直接以執行個體 ID 為目標時,摘要訊息才會包含執行個體 ID。如果是使用標籤型目標鎖定來發出 Run Command 任務,則摘要訊息不會包含執行個體 ID。

status

:字串

命令的命令狀態。

以叫用為基礎的 Amazon SNS 通知

如果您將命令傳送到多個節點,Amazon SNS 可以傳送與每個命令副本或叫用相關的訊息。此訊息包含下列資訊。

欄位 類型 描述

eventTime

:字串

事件啟動的時間。此時間戳記非常重要,因為 Amazon SNS 不保證訊息交付的順序。範例:2016-04-26T13:15:30Z

documentName

:字串

用來執行此命令之 Systems Manager 文件 (SSM 文件) 名稱。

requestedDateTime

:字串

將請求傳送到此特定節點的時間和日期。

commandId

:字串

在傳送命令後 Run Command 產生的 ID。

instanceId

:字串

被命令視為目標的執行個體。

status

:字串

此呼叫的命令狀態。

若要設定當命令變更狀態時的 Amazon SNS 通知,則須先完成下列任務。

注意

如未針對維護時段設定 Amazon SNS 通知,則可略過本主題稍後的任務 5。

任務 1:建立並訂閱 Amazon SNS 主題

Amazon SNS 主題 是一個通訊通道,向維護時段註冊的 Run Command 和 Run Command 任務使用此通道來傳送命令狀態的相關通知。Amazon SNS 支援不同的通訊協定,包括 HTTP/S、電子郵件和 Amazon Simple Queue Service (Amazon SQS) 之類的其他 AWS 服務。為了入門,我們建議您先從電子郵件通訊協定開始。如需建立主題的詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》中的建立 Amazon SNS 主題

注意

建立主題後,請複製或記下 Topic ARN (主題 ARN)。當您傳送設定為傳回狀態通知的命令時,您會指定此 ARN。

建立主題後,透過指定 Endpoint (端點) 來進行訂閱。如果您選擇電子郵件通訊協定,該端點是您想要從中接收到通知的電子郵件地址。如需如何訂閱主題的詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》中的訂閱 Amazon SNS 主題

Amazon SNS 會從 AWS 通知傳送確認電子郵件到您所指定的電子郵件地址。開啟電子郵件,然後選擇 Confirm subscription (確認訂閱) 連結。

您將會收到來自 AWS 的確認訊息。Amazon SNS 現在已設定為採用您指定的電子郵件地址,以電子郵件方式接收和傳送通知。

任務 2:為 Amazon SNS 通知建立 IAM 政策

請使用下列程序來建立自訂 AWS Identity and Access Management (IAM) 政策,此政策可提供啟動 Amazon SNS 通知的許可。

若要建立 Amazon SNS 通知的自訂 IAM 政策

  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Policies (政策),然後選擇 Create Policy (建立政策)。(顯示 Get Started (開始使用) 按鈕時先選擇它,然後選擇 Create Policy (建立政策)。)

  3. 請選擇 JSON 標籤。

  4. 將預設內容取代為以下內容。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:region:account-id:sns-topic-name" } ] }

    region 代表 AWS Systems Manager 支援之 AWS 區域 的識別符,例如 us-east-2 代表美國東部 (俄亥俄) 區域。如需 region 值的清單,請參閱《Amazon Web Services 一般參考》中 Systems Manager 服務端點中的 Region (區域) 資料欄。

    account-id 代表您的 12 位數識別符的 AWS 帳戶,格式為 123456789012

    sns-topic-name 代表您想要用於發佈通知的 Amazon SNS 主題名稱。

  5. 選擇 Next: Tags (下一步:標籤)

  6. (選用) 新增一個或多個標籤鍵值組來組織、追蹤或控制對此政策的存取。

  7. 選擇 Next:Review (下一步:檢閱)

  8. Review Policy (檢閱政策) 頁面上 Name (名稱)中,輸入該內嵌政策的名稱。例如:my-sns-publish-permissions

  9. (選用) Description (說明),輸入政策的說明。

  10. 選擇 Create policy (建立政策)。

任務 3:為 Amazon SNS 通知建立 IAM 角色

請遵循以下程序,為 Amazon SNS 通知建立 IAM 角色。Systems Manager 會使用此服務角色來啟動 Amazon SNS 通知。在後續的所有程序中,此角色就是所謂的 Amazon SNS IAM 角色。

若要為 Amazon SNS 通知建立 IAM 服務角色

  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)

  3. Select type of trusted entity (選擇可信任執行個體類型) 下,選擇 AWS service ( 服務)。

  4. Choose a use case (選擇使用案例) 區段中,選擇 Systems Manager (Systems Manager)。

  5. Select your use case (選取您的使用案例) 區段中,選擇 Systems Manager (Systems Manager),然後選擇 Next: Permissions (下一步:許可)。

  6. Attached permissions policy (連接的許可政策) 頁面上,選取您在任務 2 中建立之自訂政策名稱左側的核取方塊。例如:my-sns-publish-permissions

  7. 選擇 Next: Tags (下一步:標籤)

  8. (選用) 新增一個或多個標籤鍵值組來組織、追蹤或控制對此角色的存取。

  9. 選擇 Next:Review (下一步:檢閱)

  10. Review (檢閱) 頁面的 Role name (角色名稱) 中,輸入名稱以識別角色,例如 my-sns-role

  11. (選用) 變更預設的角色描述以反映此角色的用途。例如︰Runs SNS topics on your behalf.

  12. 選擇 Create role (建立角色)。系統會讓您回到 Roles (角色) 頁面。

  13. 選擇角色的名稱,然後複製或記下 Role ARN (角色 ARN) 值。當您傳送的命令設定為傳回 Amazon SNS 通知時,就會使用針對此角色的 Amazon Resource Name (ARN)。

  14. Summary (摘要) 頁面隨即開啟。

任務 4:設定使用者存取

如果您的 IAM 使用者帳戶、群組或角色受指派管理員許可,則您可以存取 Run Command 和 Maintenance Windows (AWS Systems Manager 的功能)。如果您沒有管理員許可,則管理員必須指派 AmazonSSMFullAccess 受管政策或提供相當許可的政策給您的 IAM 帳戶、群組或角色,藉此給予您許可。

使用以下程序來將使用者帳戶設定為使用 Run Command 和 Maintenance Windows。如果您需要建立新的使用者帳戶,請參閱《IAM 使用者指南》中的在您的 AWS 帳戶 中建立 IAM 使用者

若要設定使用者存取權並將 iam:PassRole 政策連接至使用者帳戶

  1. 在 IAM 導覽窗格中,選擇 Users (使用者),接著選擇要設定的使用者帳戶。

  2. Permissions (許可) 標籤,於政策清單中,確認 AmazonSSMFullAccess 政策已列出,或是有同等的政策能夠給予帳戶存取 Systems Manager 的許可。

  3. 選擇 Add inline policy (新增內嵌政策)

  4. Create policy (建立政策) 頁面,選擇 Visual editor (視覺化編輯器) 索引標籤。

  5. 選擇 Choose a service (選擇一個服務),然後選擇 IAM

  6. 對於 Actions (動作),在 Filter actions (篩選動作) 文字方塊中輸入 PassRole,接著選取 PassRole 旁的核取方塊。

  7. 對於 Resources (資源),確認已選取 Specific (特定),接著選擇 Add ARN (新增 ARN)。

  8. Specify ARN for role (指定角色的 ARN) 欄位中,貼上您在任務 3 結尾複製的 Amazon SNS IAM 角色 ARN。系統會自動填入 Account (帳戶)Role name with path (角色名稱與路徑) 欄位。

  9. 選擇 Add (新增)

  10. 選擇 Review policy (檢閱政策)。

  11. Review Policy (檢閱政策) 頁面輸入名稱,接著選擇 Create Policy (建立政策)。

任務 5:將 iam:PassRole 政策連接至維護時段角色

當您使用維護時段註冊 Run Command 任務時,您需要指定服務角色 Amazon Resource Name (ARN)。此服務角色是 Systems Manager 用來執行向維護時段註冊的任務。若要為已註冊的 Run Command 任務設定 Amazon SNS 通知,則須將 iam:PassRole 政策連接到指定的維護時段服務角色。如果您沒有打算為 Amazon SNS 通知設定已註冊的任務,則您可以略過此任務。

iam:PassRole 政策允許 Maintenance Windows 服務角色將在任務 3 中建立的 Amazon SNS IAM 角色中傳遞到 Amazon SNS 服務。以下程序說明如何將 iam:PassRole 政策連接至 Maintenance Windows 服務角色。

注意

使用維護時段的自訂服務角色,傳送與已註冊 Run Command 任務相關的通知。如需相關資訊,請參閱 設定 Maintenance Windows

如果您需要制定用於維護時段任務的自訂服務角色,請參閱 利用主控台設定維護時段許可

若要將 iam:PassRole 政策連接至 Maintenance Windows 角色。

  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Roles (角色) 並選取任務 3 中建立的 Amazon SNS IAM 角色。

  3. 複製或記下 Role ARN (角色 ARN),並返回 IAM 主控台的 Roles (角色) 區段。

  4. Role name (角色名稱) 清單中,選取您建立的自訂 Maintenance Windows 服務角色。

  5. Permissions (許可) 索引標籤中,驗證是否列出 AmazonSSMMaintenanceWindowRole 政策,或是否有同等的政策能夠將維護時段許可提供給 Systems Manager API。若否,則應選擇 Attach policies (連接政策) 以進行連接。

  6. 選擇 Add inline policy (新增內嵌政策)

  7. 選擇 Visual Editor (視覺化編輯器) 標籤。

  8. 針對 Service (服務),選擇 IAM (IAM)。

  9. 對於 Actions (動作),在 Filter actions (篩選動作) 文字方塊中輸入 PassRole,接著選取 PassRole 旁的核取方塊。

  10. 針對 Resources (資源),選擇 Specific (特定),然後選擇 Add ARN (新增 ARN)

  11. Specify ARN for role (指定角色的 ARN) 方塊中,貼上在任務 3 中建立之 Amazon SNS IAM 角色的 ARN,然後選擇 Add (新增)。

  12. 選擇 Review policy (檢閱政策)。

  13. Review Policy (檢閱政策) 頁面上,提供 PassRole 政策的名稱,然後選擇 Create policy (建立政策)。