

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

# 在警示變更時通知使用者
<a name="Notify_Users_Alarm_Changes"></a>

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

## 設定 AWS 使用者通知
<a name="Alarm_User_Notifications"></a>

您可以使用 [AWS User Notifications](https://docs.aws.amazon.com/notifications/latest/userguide/what-is-service.html) 來設定交付管道以接收有關 CloudWatch 警示狀態變更及組態變更事件的通知。當事件符合您指定的規則時，便會收到通知。您可以透過多個管道接收事件通知，包括電子郵件、[AWS Chatbot](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) 聊天通知或 [AWS 主控台行動應用程式推送通知](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/managing-notifications.html)。您也可以在[主控台通知中心](https://console.aws.amazon.com/notifications)查看通知。使用者通知支援彙總，可減少您在特定事件期間收到的通知數目。

您使用 AWS 使用者通知建立的通知組態不會計入您可以為每個目標警示狀態設定的動作數量限制。當 AWS 使用者通知與傳送至 Amazon EventBridge 的事件相符時，會傳送帳戶和所選區域中所有警示的通知，除非您指定允許清單或拒絕清單特定警示或模式的進階篩選條件。

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

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

您可以使用 EventBridge 事件中警示所發布的任何屬性來建立篩選條件。如需詳細資訊，請參閱[警示事件和 EventBridge](cloudwatch-and-eventbridge.md)。

## 設定 Amazon SNS 通知
<a name="US_SetupSNS"></a>

您可以使用 Amazon Simple Notification Service 來傳送應用程式對應用程式 (A2A) 及應用程式對人 (A2P) 簡訊，包括行動文字簡訊 (SMS) 和電子郵件訊息。如需詳細資訊，請參閱 [Amazon SNS 事件目的地](https://docs.aws.amazon.com/sns/latest/dg/sns-event-destinations.html)。

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

首先，請建立主題，然後訂閱它。您可以選擇性將測試訊息發布到主題。如需範例，請參閱 [使用 設定 Amazon SNS 主題 AWS 管理主控台](#set-up-sns-topic-console)。或者，如需詳細資訊，請參閱 [Amazon SNS 入門](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)。

或者，如果您計劃使用 AWS 管理主控台 來建立 CloudWatch 警示，您可以略過此程序，因為您可以在建立警示時建立主題。

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

**注意**  
建立 Amazon SNS 主題時，您可以選擇將其設為*標準主題*或 *FIFO 主題*。CloudWatch 保證會針對這兩種主題發佈所有警示通知。但是，即使您使用 FIFO 主題，在極少數情況下，CloudWatch 會不按順序將通知傳送至該主題。如果您使用 FIFO 主題，則警示會將警示通知的訊息群組 ID 設定為警示 ARN 的雜湊。

**Topics**
+ [防止因資料混淆而產生誤判的安全問題](#SNS_Confused_Deputy)
+ [使用 設定 Amazon SNS 主題 AWS 管理主控台](#set-up-sns-topic-console)
+ [使用 設定 SNS 主題 AWS CLI](#set-up-sns-topic-cli)

### 防止因資料混淆而產生誤判的安全問題
<a name="SNS_Confused_Deputy"></a>

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

我們建議在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgid) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths) 全域條件內容索引鍵，來限制 Amazon SNS 提供給另一項服務的資源許可。使用 `aws:SourceArn`，僅將一個資源與跨服務存取權相關聯。使用 `aws:SourceAccount`，讓該帳戶中的任何資源都與跨服務使用相關聯。使用 `aws:SourceOrgID`，允許組織內任何帳戶的任何資源與跨服務使用相關聯。使用 `aws:SourceOrgPaths`，將 AWS Organizations 路徑中帳戶的任何資源與跨服務使用相關聯。如需有關使用和了解路徑的詳細資訊，請參閱《IAM 使用者指南》中的 [aws:SourceOrgPaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths)。

防範混淆代理人問題的最有效方法是使用 `aws:SourceArn` 全域條件內容索引鍵，以及資源的完整 ARN。如果不知道資源的完整 ARN，或者如果您指定了多個資源，請使用 `aws:SourceArn` 全域內容條件索引鍵搭配萬用字元 (`*`) 來表示 ARN 的未知部分。例如 `arn:aws:servicename:*:123456789012:*`。

如果 `aws:SourceArn` 值不包含帳戶 ID (例如 Amazon S3 儲存貯體 ARN)，您必須同時使用 `aws:SourceAccount` 和 `aws:SourceArn` 來限制許可。

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

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

下列範例示範如何使用 CloudWatch 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容索引鍵，來防止因資料混淆而產生誤判。

```
{
    "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 管理主控台
<a name="set-up-sns-topic-console"></a>

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

**建立 SNS 主題**

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

1. 在 Amazon SNS 儀表板上，在 **Common actions** (常見的動作) 下，選擇 **Create Topic** (建立主題)。

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

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

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

**若要訂閱 SNS 主題**

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

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

1. 在 **Create subscription (建立訂閱)** 對話方塊中，對於 **Topic ARN (主題 ARN)**，貼上在之前工作所建立的主題 ARN。

1. 對於**通訊協定**，選擇**電子郵件**。

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

1. 從您的電子郵件應用程式開啟來自 AWS 通知的訊息，並確認訂閱。

   您的 Web 瀏覽器顯示自 Amazon SNS 的確認回覆。

**若要將文字訊息發布至 SNS 主題**

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

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

1. 在 **Topics (主題)** 頁面上，選取主題然後選擇 **Publish to topic (發布到主題)**。

1. 在 **Publish a message (發布訊息)** 頁面中，針對 **Subject (主旨)**，輸入訊息的主旨行，然後針對 **Message (訊息)**，輸入簡短訊息。

1. 選擇 **Publish Message (發布訊息)**。

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

### 使用 設定 SNS 主題 AWS CLI
<a name="set-up-sns-topic-cli"></a>

首先，您可以建立一個 SNS 主題，然後直接將訊息發布到主題來測試您已正確設定。

**設定 SNS 主題**

1. 使用 [create-topic](https://docs.aws.amazon.com/cli/latest/reference/sns/create-topic.html) 命令建立主題，如下所示。

   ```
   1. aws sns create-topic --name my-topic
   ```

   Amazon SNS 會以下列格式傳回主題 ARN：

   ```
   1. {
   2.     "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic"
   3. }
   ```

1. 使用 [subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html) 命令來訂閱您的電子郵件地址至該主題。如果訂閱請求成功，您會收到一封確認電子郵件訊息。

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

   Amazon SNS 傳回下列回應：

   ```
   1. {
   2.     "SubscriptionArn": "pending confirmation"
   3. }
   ```

1. 從您的電子郵件應用程式開啟來自 AWS 通知的訊息，並確認訂閱。

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

1. 使用 [list-subscriptions-by-topic](https://docs.aws.amazon.com/cli/latest/reference/sns/list-subscriptions-by-topic.html) 命令檢查訂閱。

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

   Amazon SNS 傳回下列回應：

   ```
    1. {
    2.   "Subscriptions": [
    3.     {
    4.         "Owner": "111122223333",
    5.         "Endpoint": "me@mycompany.com",
    6.         "Protocol": "email",
    7.         "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic",
    8.         "SubscriptionArn": "arn:aws:sns:us-east-1:111122223333:my-topic:64886986-bf10-48fb-a2f1-dab033aa67a3"
    9.     }
   10.   ]
   11. }
   ```

1. (選用) 使用 [publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html) 命令將測試訊息發布到該主題。

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

   Amazon SNS 傳回下列回應：

   ```
   1. {
   2.     "MessageId": "42f189a0-3094-5cf6-8fd7-c2dde61a4d7d"
   3. }
   ```

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

## 警示變更狀態時的 Amazon SNS 通知結構描述
<a name="alarm-sns-schema"></a>

本節列出警示變更其狀態時，傳送至 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]
}
```