

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Mail Manager 日志记录
<a name="eb-logging"></a>

Mail Manager 日志记录为您的 Mail Manager 操作提供详细的可见性。日志记录功能跟踪消息流，从在入口端点初始接收到基于您配置的规则集和规则进行消息处理。

Mail Manager 为以下资源提供日志记录：
+ 入口端点
+ 规则集

Mail Manager 使用亚马逊 CloudWatch 日志服务传送日志，日志可以传送到以下任何目的地：日*CloudWatch 志*、*Amazon S3 或 Amazon* *Data Firehose*。

## 设置 Mail Manager 日志交付
<a name="setting-up-log-delivery"></a>

工作日志传输由三个元素组成：
+ **DeliverySource**— 表示发送日志的资源的逻辑对象，可以是入口端点或规则集。
+ **DeliveryDestination**— 表示实际传送目标的逻辑对象（CloudWatch 日志、S3 或 Firehose）。
+ **Delivery**：将交付源连接到交付目的地。

本节将解释如何创建这些对象以及使用 Mail Manager 日志记录所需的必要权限。

### 先决条件
<a name="logging-prerequisites"></a>

在设置 Mail Manager 日志记录之前，请确保：

1. 您已创建[入口端点](eb-ingress.md)或[规则集](eb-rules.md)。

1. 您拥有必要的 CloudWatch 日志和 SES Mail Manager 权限，可以将邮件管理器资源中的日志发送到其送达目的地。

#### 所需的权限
<a name="logging-permissions"></a>

您需要按照《A *mazon Logs 用户指南》的 “[需要额外权限的日志记录 [V2]](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2)” 部分中的说明设置销售 CloudWatch 日志*权限，并应用与您的配送目的地相对应的权限：
+ [发送到日志的 CloudWatch 日志](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 日志发送到特定资源的日志，如示例所示：

------
#### [ 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. 打开 SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在 **Mail Manager** 下的导航窗格中，选择**入口端点**或**规则集**，并选择要启用日志记录的特定资源。

1. 在资源的详细信息页面上，展开**添加日志传输，然后选择传送**到**CloudWatch 日志**、**S3** 或 **Firehose**。

1. 在所选目的地的**添加交付到**对话框中，按照提示配置特定于目的地类型的日志交付选项。

1. （可选）展开**其他设置**以自定义记录的字段、输出格式、字段分隔符和特定于目的地类型的其他参数。

### 使用 CloudWatch 日志 API 启用日志记录
<a name="enable-logging-api"></a>

要使用 CloudWatch 日志 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) 将恰好一个交付源和一个交付目的地配对来创建 Delivery。

您可以在《A *mazon Logs 用户指南》的 “[需要额外权限的日志记录 [V2]” 部分中查看包含特定日志目标所需的所有权限](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2)的 IAM 角色和权限策略示例，并按照 CloudWatch 日志*目标的 IAM 角色和权限策略示例进行操作，包括允许更新您的特定日志目标资源，例如*CloudWatch 日志*、*S3* 或 Fireh *os* e。

**注意**  
创建时 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 日志见解查询示例
<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 日志见解查询示例
<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 日志见解查询示例
<a name="rule-set-queries"></a>

查询特定 message-id（显示消息通过规则集的流程）：

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

查询失败的 WRITE\$1TO\$1S3 操作：

```
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
```