在警示變更時通知使用者 - Amazon CloudWatch

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

在警示變更時通知使用者

本節說明如何使用 AWS 使用者通知或 Amazon Simple Notification Service,讓使用者收到警示變更的通知。

設定 AWS 使用者通知

您可以使用AWS 使用者通知來設定交付管道,以取得 CloudWatch 警示狀態變更和組態變更事件的通知。當事件符合您指定的規則時,便會收到通知。您可以透過多個管道接收事件通知,包括電子郵件、AWS Chatbot 聊天通知或 AWS 主控台行動應用程式推送通知。您也可以在主控台通知中心查看通知。使用者通知支援彙總,可減少您在特定事件期間收到的通知數目。

您使用 AWS 使用者通知建立的通知組態不會計入您可以為每個目標警示狀態設定的動作數量限制。由於 AWS User Notificatinos 與 Amazon 發出的事件相符 EventBridge,因此會針對您的帳戶和所選區域中的所有警示傳送通知,除非您指定進階篩選條件以允許列出或拒絕列出特定警示或模式。

下列進階篩選條件範例會比對名為 之警示ALARM上的警示狀態從 OK 變更為 ServerCpuTooHigh

{ "detail": { "alarmName": ["ServerCpuTooHigh"], "previousState": { "value": ["OK"] }, "state": { "value": ["ALARM"] } } }

您可以使用 EventBridge 事件中警示發佈的任何屬性來建立篩選條件。如需詳細資訊,請參閱警報事件和 EventBridge

設定 Amazon SNS通知

您可以使用 Amazon Simple Notification Service 傳送 application-to-application(A2A) 訊息和 application-to-person (A2P) 訊息,包括行動簡訊 (SMS) 和電子郵件訊息。如需詳細資訊,請參閱 Amazon SNS事件目的地

對於警示可以採取的每個狀態,您可以設定警示以傳送訊息至SNS主題。您為指定警示上的狀態設定的每個 Amazon SNS主題都會計入您可以為該警示和狀態設定的動作數量限制。您可以從帳戶中的任何警示傳送訊息至相同的 Amazon SNS主題,並為應用程式 (A2A) 和人員 (A2P) 取用者使用相同的 Amazon SNS主題。由於此組態是在警示層級完成,因此只有您設定的警示才會將訊息傳送至選取的 Amazon SNS主題。

首先,請建立主題,然後訂閱它。您可以選擇性將測試訊息發佈到主題。如需範例,請參閱使用 設定 Amazon SNS主題 AWS Management Console。如需詳細資訊,請參閱 Amazon 入門SNS

或者,如果您計劃使用 AWS Management Console 來建立 CloudWatch 警示,您可以略過此程序,因為您可以在建立警示時建立主題。

建立 CloudWatch 警示時,您可以為警示進入的任何目標狀態新增動作。針對您要收到通知的狀態新增 Amazon SNS通知,然後選取您在上一個步驟中建立的 Amazon SNS主題,以便在警示進入所選狀態時傳送電子郵件通知。

注意

建立 Amazon SNS主題時,您可以選擇將其設定為標準主題FIFO主題 . CloudWatch guarantees,以發佈所有警示通知給這兩種主題。不過,即使您使用FIFO主題,在極少數情況下, 會不按順序將通知 CloudWatch 傳送至主題。如果您使用FIFO主題,警示會將警示通知的訊息群組 ID 設定為警示ARN的雜湊。

防止混淆代理安全問題

混淆代理人問題屬於安全性議題,其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS,跨服務模擬可能會導致混淆代理問題。在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時,可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可,以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況, AWS 提供的工具可協助您保護所有服務的資料,而這些服務主體已獲得您帳戶中資源的存取權。

我們建議在資源政策中使用 aws:SourceArnaws:SourceOrgIDaws:SourceAccountaws:SourceOrgPaths全域條件內容索引鍵,以限制 Amazon 為資源SNS提供另一項服務的許可。使用 aws:SourceArn 僅將一個資源與跨服務存取建立關聯。使用 aws:SourceAccount 可讓該帳戶中的任何資源與跨服務使用相關聯。使用 aws:SourceOrgID 允許組織中任何帳戶的任何資源與跨服務使用相關聯。使用 aws:SourceOrgPaths將 AWS Organizations 路徑中帳戶的任何資源與跨服務使用建立關聯。如需使用和了解路徑的詳細資訊,請參閱了解 AWS Organizations 實體路徑

防止混淆代理問題的最有效方法是使用包含完整資源ARN的aws:SourceArn全域條件內容索引鍵。如果您不知道資源ARN的完整內容,或要指定多個資源,請將aws:SourceArn全域內容條件索引鍵與萬用字元 (*) 搭配使用,以用於 的未知部分ARN。例如:arn:aws:servicename:*:123456789012:*

如果該aws:SourceArn值不包含帳戶 ID,例如 Amazon S3 儲存貯體ARN,您必須使用 aws:SourceAccountaws:SourceArn來限制許可。

若要大規模防範混淆代理人問題,請在資源型政策中使用 aws:SourceOrgIDaws:SourceOrgPaths 全域條件內容鍵和資源的組織 ID 或組織路徑。當您新增、移除或移動組織中的帳戶時,包含 aws:SourceOrgIDaws:SourceOrgPaths 鍵的政策將會自動包含正確的帳戶,您無需手動更新政策。

的值aws:SourceArn必須是正在傳送通知之警示ARN的 。

下列範例顯示如何使用 中的 aws:SourceArnaws:SourceAccount全域條件內容索引鍵 CloudWatch ,以防止混淆代理問題。

{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" }, "StringEquals": { "aws:SourceAccount": "111122223333" } } }] }

如果警示ARN包含任何非ASCII字元,請僅使用aws:SourceAccount全域條件金鑰來限制許可。

使用 設定 Amazon SNS主題 AWS Management Console

首先,請建立主題,然後訂閱它。您可以選擇性將測試訊息發佈到主題。

建立 SNS 主題
  1. https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS主控台。

  2. 在 Amazon SNS儀表板的常見動作 下,選擇建立主題

  3. Create new topic (建立新主題) 對話方塊中,針對 Topic name (主題名稱),輸入主題的名稱 (例如 my-topic)。

  4. 請選擇建立主題

  5. 複製下一個任務的主題 ARN (例如 arn:aws:sns:us-east-1:111122223333:my-topic)。

訂閱 SNS 主題
  1. https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS主控台。

  2. 在導覽面板中依序選擇 Subscriptions (訂閱) 與 Create subscription (建立訂閱)。

  3. 建立訂閱對話方塊中,針對主題 ARN貼上ARN您在上一個任務中建立的主題。

  4. 對於通訊協定,選擇電子郵件

  5. 針對 Endpoint (端點),輸入您可以用來接收通知的電子郵件地址,然後選擇 Create subscription (建立訂閱)

  6. 從您的電子郵件應用程式中,開啟來自 AWS Notifications 的訊息,並確認訂閱。

    您的 Web 瀏覽器會顯示來自 Amazon 的確認回應SNS。

將測試訊息發佈至SNS主題
  1. https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS主控台。

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

  3. Topics (主題) 頁面上,選取主題然後選擇 Publish to topic (發佈到主題)

  4. Publish a message (發佈訊息) 頁面中,針對 Subject (主旨),輸入訊息的主旨行,然後針對 Message (訊息),輸入簡短訊息。

  5. 選擇 Publish Message (發佈訊息)

  6. 檢查電子郵件以確認您已收到訊息。

使用 設定SNS主題 AWS CLI

首先,您會建立SNS主題,然後直接將訊息發佈到主題,以測試是否已正確設定。

設定SNS主題
  1. 使用 create-topic 命令建立主題,如下所示。

    aws sns create-topic --name my-topic

    Amazon SNS傳回ARN具有下列格式的主題:

    { "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic" }
  2. 使用 subscribe 命令來訂閱您的電子郵件地址至該主題。如果訂閱請求成功,您會收到一封確認電子郵件訊息。

    aws sns subscribe --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic --protocol email --notification-endpoint my-email-address

    Amazon SNS傳回下列項目:

    { "SubscriptionArn": "pending confirmation" }
  3. 從您的電子郵件應用程式中,開啟來自 AWS Notifications 的訊息,並確認訂閱。

    您的 Web 瀏覽器顯示自 Amazon Simple Notification Service 的確認回覆。

  4. 使用 list-subscriptions-by-topic命令檢查訂閱。

    aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic

    Amazon SNS傳回下列項目:

    { "Subscriptions": [ { "Owner": "111122223333", "Endpoint": "me@mycompany.com", "Protocol": "email", "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic", "SubscriptionArn": "arn:aws:sns:us-east-1:111122223333:my-topic:64886986-bf10-48fb-a2f1-dab033aa67a3" } ] }
  5. (選用) 使用 publish 命令將測試訊息發佈到該主題。

    aws sns publish --message "Verification" --topic arn:aws:sns:us-east-1:111122223333:my-topic

    Amazon SNS傳回下列項目。

    { "MessageId": "42f189a0-3094-5cf6-8fd7-c2dde61a4d7d" }
  6. 檢查電子郵件以確認您已收到訊息。

警示變更狀態時的 Amazon SNS通知結構描述

本節列出警示變更其狀態時,傳送至 Amazon SNS主題的通知結構描述。

指標警示變更狀態時的結構描述

{ "AlarmName": "string", "AlarmDescription": "string", "AWSAccountId": "string", "AlarmConfigurationUpdatedTimestamp": "string", "NewStateValue": "string", "NewStateReason": "string", "StateChangeTime": "string", "Region": "string", "AlarmArn": "string", "OldStateValue": "string", "OKActions": ["string"], "AlarmActions": ["string"], "InsufficientDataActions": ["string"], "Trigger": { "MetricName": "string", "Namespace": "string", "StatisticType": "string", "Statistic": "string", "Unit": "string or null", "Dimensions": [ { "value": "string", "name": "string" } ], "Period": "integer", "EvaluationPeriods": "integer", "DatapointsToAlarm": "integer", "ComparisonOperator": "string", "Threshold": "number", "TreatMissingData": "string", "EvaluateLowSampleCountPercentile": "string or null" } }

複合警示變更狀態時的結構描述

{ "AlarmName": "string", "AlarmDescription": "string", "AWSAccountId": "string", "NewStateValue": "string", "NewStateReason": "string", "StateChangeTime": "string", "Region": "string", "AlarmArn": "string", "OKActions": [String], "AlarmActions": [String], "InsufficientDataActions": [String], "OldStateValue": "string", "AlarmRule": "string", "TriggeringChildren": [String] }