

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

# Mail Manager 記錄
<a name="eb-logging"></a>

Mail Manager 記錄可讓您詳細了解 Mail Manager 操作。記錄功能會根據您設定的規則集和規則，透過訊息處理來追蹤從輸入端點的初始接收的訊息流程。

Mail Manager 提供下列資源的記錄：
+ 輸入端點
+ 規則集

Mail Manager 會使用 Amazon CloudWatch Logs 服務交付日誌，而日誌可以交付到下列任何目的地：*CloudWatch Logs*、*Amazon S3* 或 *Amazon Data Firehose*。

## 設定 Mail Manager 日誌交付
<a name="setting-up-log-delivery"></a>

工作日誌交付包含三個元素：
+ **DeliverySource** – 代表傳送日誌之資源的邏輯物件，可以是輸入端點或規則集。
+ **DeliveryDestination** – 代表實際交付目的地 (CloudWatch Logs、S3 或 Firehose) 的邏輯物件。
+ **交付** – 將交付來源連接到交付目的地。

本節將說明如何建立這些物件，以及使用 Mail Manager 記錄所需的必要許可。

### 先決條件
<a name="logging-prerequisites"></a>

設定 Mail Manager 記錄之前，請確定：

1. 您已建立[傳入端點](eb-ingress.md)或[規則集](eb-rules.md)。

1. 您擁有必要的 CloudWatch Logs 和 SES Mail Manager 許可，可將日誌從 Mail Manager 資源提供給其交付目的地。

#### 所需的許可
<a name="logging-permissions"></a>

您將需要如 *Amazon CloudWatch Logs 使用者指南的* [日誌記錄 一節中所述，設定已佈建的日誌許可，該許可需要額外許可 【V2】](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2)，並套用對應至交付目的地的許可：
+ [傳送至 CloudWatch Logs 的日誌](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs)
+ [傳送至 Amazon S3 的日誌](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-S3)
+ [傳送至 Firehose 的日誌](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-Firehose)

此外，Mail Manager 需要下列使用者許可才能設定日誌交付：
+ `ses:AllowVendedLogDeliveryForResource` – 允許 Mail Manager 代表您將日誌提供給 CloudWatch Logs 以取得特定資源的必要項目，如範例所示：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSesMailManagerLogDelivery",
            "Effect": "Allow",
            "Action": [
                "ses:AllowVendedLogDeliveryForResource"
            ],
            "Resource": [
            "arn:aws:ses:{{us-east-1}}:{{111122223333}}:mailmanager-ingress-point/inp-xxxxx",
            "arn:aws:ses:{{us-east-1}}:{{111122223333}}:mailmanager-rule-set/rs-xxxx"
            ]
        }
    ]
}
```

------

### 在 SES 主控台中啟用記錄
<a name="enable-logging-console"></a>

若要使用主控台啟用 Mail Manager 資源的記錄：

1. 在 https：//[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/) 開啟 SES 主控台。

1. 在**郵件管理員**下的導覽窗格中，選擇**傳入端點**或**規則集**，然後選取您要啟用記錄的特定資源。

1. 在資源的詳細資訊頁面上，展開**新增日誌交付**，然後選擇交付至 **CloudWatch Logs**、**S3** 或 **Firehose**。

1. 在**新增交付至**您選擇的目的地對話方塊中，依照提示設定目的地類型特定的日誌交付選項。

1. （選用） 展開**其他設定**，以自訂記錄、輸出格式、欄位分隔符號和其他特定於目的地類型的參數。

### 使用 CloudWatch Logs API 啟用記錄
<a name="enable-logging-api"></a>

若要使用 CloudWatch Logs API 啟用 Mail Manager 資源的記錄，您需要：

1. 使用 建立 DeliverySource[https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html)。

1. 使用 建立 DeliveryDestination[https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html)。

1. 使用 ，透過完全配對一個交付來源和一個交付目的地來建立交付[https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html)。

您可以在 *Amazon CloudWatch Logs 使用者指南*的 [日誌中，檢視 IAM 角色和許可政策的範例，其中包含您特定日誌目的地所需的所有必要許可，這些許可需要額外許可 【V2】](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2) 區段，並遵循日誌目的地的 IAM 角色和許可政策範例，包括允許更新特定日誌目的地資源，例如 *CloudWatch Logs*、*S3* 或 *Firehose*。

**注意**  
建立 DeliverySource 時， [https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html#API_PutDeliverySource_RequestSyntax](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html#API_PutDeliverySource_RequestSyntax) 可以是傳入端點 ARN 或規則集 ARN。根據 DeliverySource， [https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html#API_PutDeliverySource_RequestSyntax](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html#API_PutDeliverySource_RequestSyntax)可以如下所示：  
**輸入端點 ARN – **`APPLICATION_LOGS`或 `TRAFFIC_POLICY_DEBUG_LOGS`
**規則集 ARN** – `APPLICATION_LOGS`

## 解譯日誌
<a name="interpreting-logs"></a>

日誌可用來在 Mail Manager 處理收到的訊息時，進一步深入了解這些訊息的流程。

下列範例詳細說明每個資源和日誌類型的日誌不同欄位：

**Topics**
+ [傳入端點日誌 – `APPLICATION_LOGS`](#ingress-endpoint-logs-app)
+ [傳入端點日誌 – `TRAFFIC_POLICY_DEBUG_LOGS`](#ingress-endpoint-logs-traffic)
+ [規則集日誌 – `APPLICATION_LOGS`](#rule-set-logs)

### 傳入端點日誌 – `APPLICATION_LOGS`
<a name="ingress-endpoint-logs-app"></a>

日誌會依訊息產生。

```
{
  "resource_arn": "arn:aws:ses:us-east-1:1234567890:mailmanager-ingress-point/inp-xxxxx",
  "event_timestamp": 1728562395042,
  "ingress_point_type": "OPEN" | "AUTH" | "MTLS",
  "ingress_point_name": "MyIngressPoint",
  "message_id": "0000llcki1jmushh817gr586f963a5inhkvnh81",
  "message_size_bytes": 100000,
  "rule_set_id": "rs-xxxx",
  "sender_ip_address": "1.2.3.4",
  "smtp_mail_from": "someone@domain.com",
  "smtp_helo": "domain.com",
  "tls_protocol": "TLSv1.2",
  "tls_cipher_suite": "TLS_AES_256_GCM_SHA384",
  "recipients": ["me@mydomain.com", "you@mydomain.com", "they@mydomain.com"],
  "ingress_point_metadata": {
       // Only applies to AUTH Ingress endpoint
       "password_version": "",
       "secrets_manager_arn": "",
       // Only applies to MTLS Ingress endpoint
       "client_certificate_details": {
           "common_names": ["mail.example.com"],
           "serial_number": "0A:DE:EB:89:42:FB:1C:67",
           "subject_alternative_names": ["mail.example.com", "smtp.example.com"],
           "issuer": "CN=Example CA,O=Example Corp,C=US",
           "not_before": "2025-01-15T00:00:00Z",
           "not_after": "2026-01-15T23:59:59Z"
       },
       "trust_store_monitoring": {
           "ca_invalid_or_near_expiry": [
               {
                   "subject": "CN=Example CA,O=Example Corp,C=US",
                   "not_before": "2023-06-01T00:00:00Z",
                   "not_after": "2025-05-15T23:59:59Z"
               },
               ...
           ],
           "crl_invalid_or_near_expiry": [
               {
                   "issuer": "CN=Example CA,O=Example Corp,C=US",
                   "this_update": "2025-03-01T00:00:00Z",
                   "next_update": "2025-04-01T00:00:00Z"
               },
               ...
           ]
       }
  }
}
```

**注意**  
日誌只會針對輸入端點接受的訊息建立。拒絕所有傳入訊息的傳入端點將不會發佈任何應用程式日誌。

**注意**  
`trust_store_monitoring` 清單 (`ca_invalid_or_near_expiry` 和 `crl_invalid_or_near_expiry`) 每個最多傳回 10 個項目。「即將到期」表示憑證或 CRL 會在 90 天內過期。

#### CloudWatch Logs Insights 查詢範例
<a name="ingress-endpoint-app-queries"></a>

從 sender@domain.com 查詢訊息：

```
fields @timestamp, @message, @logStream, @log
| filter smtp_mail_from like /sender@domain.com/
| sort @timestamp desc
| limit 10000
```

查詢大小大於 5000 位元組的訊息：

```
fields @timestamp, @message, @logStream, @log
| filter message_size_bytes > 5000
| sort @timestamp desc
| limit 10000
```

### 傳入端點日誌 – `TRAFFIC_POLICY_DEBUG_LOGS`
<a name="ingress-endpoint-logs-traffic"></a>

日誌是依收件人產生。

```
{
    "resource_arn": "arn:aws:ses:us-east-1:1234567890:mailmanager-ingress-point/inp-xxxxx",
    "event_timestamp": 1728562395042,
    "ingress_point_type": "OPEN" | "AUTH",
    "ingress_point_id": "inp-xxxx",
    "ingress_point_session_id": "xxxx",
    "traffic_policy_id": "tp-xxxx",
    "traffic_policy_evaluation": [
           // Array of policy evaluations
           {
                "action": "ALLOW" | "DENY",
                "conditions": [
                // Array of conditions
                {
                    "expression": {
                        "attribute": "RECIPIENT",
                        "operator": "CONTAINS",
                        "value": ["@domain.com", "@mydomain.com"]
                    },
                    "expressionResult": true | false
                }],
                "policyStatementMatched": true | false
            },
            // If no policy statement match then default action will be applied
            {
                "action": "ALLOW" | "DENY",
                "policyStatementMatched": true,
                "type": "DefaultAction",
                "scope": "Recipient"
            },
            // Only present if the email was too large according to the traffic policy
            {
                "action": "DENY",
                "allowedMessageSize": 41943040,
                "receivedMessageSize": 42495384,
                "scope": "Data"
            }
    ],
    "traffic_policy_verdict": "REJECT" | "ACCEPT",
    "sender_ip_address": "1.2.3.4",
    "smtp_mail_from": "someone@domain.com",
    "smtp_helo": "domain.com",
    "tls_protocol": "TLSv1.2",
    "recipient": "me@mydomain.com",
    "tls_cipher_suite": "TLS_AES_256_GCM_SHA384"
}
```

**注意**  
系統會針對流量政策在輸入端點評估的所有訊息建立日誌，無論這些訊息是接受還是拒絕。
屬於相同訊息的所有收件人流量政策評估 （在相同的 SMTP 對話中） 都會共用共同的 `ingress_point_session_id`。此 ID 做為相互關聯識別符，因為在訊息接受之前`message_id`， 都無法使用。
`traffic_policy_evaluation` 內容會根據您的組態而有所不同，一旦判斷後，可能會提早終止。

#### CloudWatch Logs Insights 查詢範例
<a name="ingress-endpoint-traffic-queries"></a>

從 sender@domain.com 查詢訊息：

```
fields @timestamp, @message, @logStream, @log
| filter smtp_mail_from like /sender@domain.com/
| sort @timestamp desc
| limit 10000
```

查詢屬於特定 的訊息`ingress_point_session_id`：

```
fields @timestamp, @message, @logStream, @log
| filter ingress_point_session_id = 'xxx'
| sort @timestamp desc
| limit 10000
```

查詢遭拒的訊息：

```
fields @timestamp, @message, @logStream, @log
| filter traffic_policy_verdict = 'REJECT'
| sort @timestamp desc
| limit 10000
```

### 規則集日誌 – `APPLICATION_LOGS`
<a name="rule-set-logs"></a>

日誌會依每個動作的每則訊息產生。這表示每次由規則集中規則中的動作處理訊息時，都會產生日誌記錄：

```
{
   "resource_arn": "arn:aws:ses:us-east-1:1234567890:mailmanager-rule-set/rs-xxxx",
   "event_timestamp": 1732298258254,
   "message_id": "0000llcki1jmushh817gr586f963a5inhkvnh81",
   "rule_set_name": "MyRuleSet",
   "rule_name": "MyRule",
   "rule_index": 1,
   "recipients_matched": ["recipient1@domain.com", "recipient2@domain.com"],
   "action_metadata": {
       "action_name": "WRITE_TO_S3" | "DROP" | "RELAY" | "DELIVER_TO_MAILBOX" | etc.,
       "action_index": 2,
       "action_status": "SUCCESS" | "FAILURE" | "IN_PROGRESS",
       "action_failure": "Access denied"
   }
}
```
+ `recipients_matched` – 符合正在執行動作之規則條件的收件人。
+ `rule_index` – 規則集內的規則順序。
+ `action_index` – 動作在規則中的順序。
+ `action_status` – 指出對指定訊息執行動作的結果。
+ `action_failure` – 指出動作的失敗詳細資訊 （僅適用於動作失敗時）。例如，如果提供的角色沒有足夠的許可來執行動作。

此外，如果訊息的規則條件不相符，也就是說，訊息不會由規則處理，則單一日誌會發佈至 ，指出訊息已由規則集處理，但未對其執行任何動作：

```
{
   "resource_arn": "arn:aws:ses:us-east-1:1234567890:mailmanager-rule-set/rs-xxxx",
   "event_timestamp": 1732298258254,
   "message_id": "0000llcki1jmushh817gr586f963a5inhkvnh81",
   "rule_set_name": "MyRuleSet",
   "rule_name": "MyRule",
   "rule_index": 1,
   "recipients_matched": [],
}
```

#### CloudWatch Logs Insights 查詢範例
<a name="rule-set-queries"></a>

查詢特定訊息 ID （顯示通過規則集的訊息流程）：

```
fields @timestamp, @message, @logStream, @log
| filter message_id = 'message-id-123'
| sort @timestamp desc
| limit 10000
```

查詢失敗的 WRITE\_TO\_S3 動作：

```
fields @timestamp, @message, @logStream, @log
| filter action_metadata.action_name = 'WRITE_TO_S3'
    and action_metadata.action_status = 'FAILURE'
| sort @timestamp desc
| limit 10000
```

查詢規則集的第二個規則未處理的訊息 （訊息不符合規則的條件）：

```
fields @timestamp, @message, @logStream, @log
| filter recipients_matched = '[]'
    and rule_index = 2
| sort @timestamp desc
| limit 10000
```