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

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

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

注意

不支援 Amazon Simple Notification Service FIFO 主題。

您可以將 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 服務端點一節的區域資料欄。

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

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

  5. 選擇 下一步:標籤

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

  7. 選擇 下一步:檢閱

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

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

  10. 選擇 建立政策

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

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

若要為 Amazon SNS 通知建立 IAM 服務角色
  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。

  3. 選擇 AWS 服務 角色類型,然後選擇 Systems Manager。

  4. 選擇 Systems Manager 使用案例。然後選擇 Next (下一步)。

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

  6. (選用) 設定許可界限。這是進階功能,可用於服務角色,而不是服務連結的角色。

    展開 Permissions boundary (許可界限) 區段,並選擇 Use a permissions boundary to control the maximum role permissions (使用許可界限來控制角色許可上限)。IAM 包含您帳戶中的 AWS 受管和客戶受管政策清單。選取用於許可界限的政策,或者選擇 Create policy (建立政策) 以開啟新的瀏覽器標籤,並從頭建立新的政策。如需詳細資訊,請參閱《IAM 使用者指南》中的建立 IAM 政策。在您建立政策後,關閉該標籤並返回您的原始標籤,以選取用於許可界限的政策。

  7. 選擇 Next (下一步)

  8. 如果可能,請輸入角色名稱或角色名稱後綴,以協助您識別此角色的用途。角色名稱在您的 AWS 帳戶 內必須是獨一無二的。它們無法透過大小寫進行區分。例如,您無法建立名為 PRODROLEprodrole 的角色。因為有各種實體可能會參照角色,所以您無法在建立角色之後編輯角色名稱。

  9. (選用) 在 Description (說明) 中,輸入新角色的說明。

  10. Step 1: Select trusted entities (步驟 1:選取受信任的實體) 或者 Step 2: Select permissions (步驟 2:選取許可) 區段中選擇 Edit (編輯),可編輯角色的使用案例和許可。

  11. (選用) 藉由連接標籤作為鍵值對,將中繼資料新增至使用者。如需有關在 IAM 中使用標籤的詳細資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源

  12. 檢閱角色,然後選擇 Create role (建立角色)。

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

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

任務 4:設定使用者存取

如果 IAM 實體 (使用者、角色或群組) 獲指派管理員許可,則該使用者或角色可以存取 Run Command 和 Maintenance Windows (AWS Systems Manager 的功能)。

對於沒有管理員許可的實體,管理員必須將以下許可授予給 IAM 實體:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/sns-role-name" } ] }

若要提供存取權,請新增許可到您的使用者、群組或角色:

  • AWS IAM Identity Center 中的使用者和群組:

    建立許可集合。請遵循《AWS IAM Identity Center 使用者指南》建立許可集合中的指示。

  • 透過身分提供者在 IAM 中管理的使用者:

    建立聯合身分的角色。請遵循《IAM 使用者指南》為第三方身分提供者 (聯合) 建立角色中的指示。

  • 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. 前往網址 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

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

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

  6. 選擇 Add permissions, Create 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. 檢閱政策頁面上,提供 PassRole 政策的名稱,然後選擇建立政策