

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

# AWS Transfer Family 对于 AS2
<a name="as2-for-transfer-family"></a>

适用性声明 2 (AS2) 是 RFC 定义的文件传输规范，其中包括强大的消息保护和验证机制。保护传输中的有效 AS2 载荷使用带有加密和数字签名的加密消息语法 (CMS) 来提供数据保护和对等身份验证。已签名的消息处置通知（MDN）响应有效负载提供消息已接收并成功解密的验证（不可否认性）。

该 AS2 协议对于具有合规性要求的工作流程至关重要，这些工作流程依赖于在协议中内置数据保护和安全功能。 AWS Transfer Family AS2 端点已通过 [Drummond 认证](https://aws.amazon.com/about-aws/whats-new/2023/06/aws-transfer-family-drummond-group-as2-certification/)，使零售、生命科学、制造业、金融服务和公用事业等行业的客户能够安全地与其业务合作伙伴进行交易。

当你 AS2 与 Transfer Family 一起使用时，可以在以下版本中 AWS 本地访问已处理的数据：
+ 处理、分析和机器学习
+ 与企业资源规划 (ERP) 系统集成
+ 与客户关系管理 (CRM) 系统集成

要与具有 AS2启用服务器的合作伙伴交换文件，您必须：
+ 生成用于加密的公私密钥 pair
+ 生成用于签名的公私密钥 pair
+ 与您的伴侣交换公钥

**重要**  
目前不支持 HTTPS AS2 服务器端点。您应对终止 TLS 负责。

Transfer Family 提供了一个你可以参加的研讨会，在研讨会中，你可以将 Transfer Family 端点配置为 AS2 已启用，也可以配置 Transfer Famil AS2 y 连接器。您可以[在此处](https://catalog.workshops.aws/transfer-family-as2/en-US)查看本次研讨会的详细信息。

有关在 Transfer Family AS2 中进行配置的 step-by-step说明，请参阅以下内容：

1. [导入 AS2 证书](managing-as2-partners.md#configure-as2-certificate)

1. [创建 AS2 个人资料](configure-as2-profile.md)

1. [创建 AS2 服务器](create-as2-transfer-server.md)

1. [创建 AS2 协议](create-as2-transfer-server.md#as2-agreements)

1. [配置 AS2 连接器](configure-as2-connector.md)

有关完整示例，请参阅[设置 AS2 配置](as2-example-tutorial.md)。

**注意**  
要显示对 AS2 Terraform 模板的支持，请在 Transfer Family Ter [raf](https://github.com/aws-ia/terraform-aws-transfer-family/issues/62#issue-3364703944) orm 模板功能请求中添加竖起大拇指的反应 (👍)。您也可以添加评论来描述您的用例。

## AS2 用例
<a name="as2-use-cases"></a>

如果您是想要与具有 AS2启用服务器的合作伙伴交换文件的 AWS Transfer Family 客户，则设置中最复杂的部分是生成一个用于加密的公私密钥对，另一个用于与合作伙伴签署和交换公钥。

![\[该图显示了使用公有-私有密钥对进行加密和签名的情况。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-architecture-high-level.png)


 AWS Transfer Family 与一起使用时，请考虑以下变体 AS2。

**注意**  
*贸易伙伴*是与该合作伙伴资料关联的合作伙伴。  
下表中所有提及 *MDN* 的内容都假设*已签名* MDNs。


**AS2 用例**  

|  | 
| --- |
|  仅限入站的使用案例 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-for-transfer-family.html)  | 
|  仅限出站的使用案例 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-for-transfer-family.html)  | 
|  入站和出站使用案例 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-for-transfer-family.html)  | 

## AS2 CloudFormation 模板
<a name="as2-templates-section"></a>

本主题提供有关 AWS CloudFormation 模板的信息，您可以使用这些模板来快速部署 AS2 服务器和配置 AWS Transfer Family。这些模板可以自动执行设置过程，并帮助您实施 AS2 文件传输的最佳实践。
+ 有关基本 AS2 模板的描述，请参见 [使用模板创建演示 Transfer Family AS2 堆栈](create-as2-transfer-server.md#as2-cfn-demo-template)
+ 中介绍了用于自定义 HTTP 标头的 AS2 [为 AS2 消息自定义 HTTP 标头](as2-custom-http-headers.md)模板。

### 自定义模板 AS2
<a name="as2-template-customization"></a>

您可以自定义提供的模板以满足您的特定要求：

1. 从 S3 网址下载模板。

1. 修改 YAML 代码以调整配置，例如：
   + 安全设置和证书配置
   + 网络架构和 VPC 设置
   + 存储选项和文件处理
   + 监控和通知首选项

1. 将修改后的模板上传到自己的 S3 存储桶。

1. 使用 CloudFormation 控制台部署自定义模板或 AWS CLI。

**重要**  
自定义模板时，请确保保持资源之间的依赖关系并遵循安全最佳实践。

### 测试您的 AS2 部署
<a name="as2-template-testing"></a>

使用模板部署 AS2 服务器后，您可以测试配置：

1. 查看 CloudFormation 堆栈输出以获取示例命令和端点信息。

1. 使用 AWS CLI 发送测试文件：

   ```
   aws s3api put-object --bucket your-bucket-name --key test.txt --body test.txt
   aws transfer start-file-transfer --connector-id your-connector-id --send-file-paths /your-bucket-name/test.txt
   ```

1. 验证目标 S3 存储桶中的文件传输。

1. 检查 CloudWatch 日志是否成功处理和 MDN 响应。

要进行更全面的测试，可以考虑使用第三方 AS2 客户端将文件发送到您的 Transfer Famil AS2 y 服务器。

### AS2 模板部署的最佳实践
<a name="as2-template-best-practices"></a>

使用 AS2 CloudFormation 模板时，请遵循以下最佳实践：

安全性  
使用强证书并定期轮换。  
实施最低权限的 IAM 策略。  
使用安全组限制网络访问。

可靠性  
跨多个可用区部署。  
对失败的传输实施监控和警报。  
为失败的传输设置自动重试。

性能  
为您的传输量选择合适的实例类型。  
实施 S3 生命周期策略以实现高效的文件管理。  
监控和优化网络配置。

成本优化  
对可变的工作负载使用自动缩放。  
为较旧的文件实现 S3 存储类别。  
根据实际使用情况监控和调整资源。

# 正在配置 AS2
<a name="create-b2b-server"></a>

要创建 AS2启用了的服务器，还必须指定以下组件：
+ **协议** — 双边贸易伙伴*协议*或伙伴关系，定义交换消息（文件）的双方之间的关系。为了定义协议，Transfer Family 结合了服务器、本地配置文件、合作伙伴配置文件和证书信息。Tran AS2 sfer Family 入站流程使用协议。
+ **证书**-*公钥 (X.509) 证书*用于 AS2 通信以进行消息加密和验证。证书也用于连接器端点。
+ **本地档案和合作伙伴档案 — *本地资料***定义本地（AS2已启用 Transfer Family 服务器）组织或 “派对”。同样，*合作伙伴配置文件*定义了 Transfer Family 外部的远程合作伙伴组织。

虽然并非所有 AS2启用了连接器的服务器都需要连接器，但对于出站传输，则需要**连接器**。连接器捕获出站连接的参数。要将文件发送到客户的外部非 AWS 服务器，则需要使用连接器。

下图显示了入站和出站流程中涉及的 AS2 对象之间的关系。

![\[该图显示了入站和出站流程中涉及的 AS2 对象之间的关系。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-architecture-in-out-agree-connect.png)


有关 AS2 配置示 end-to-end例，请参阅[设置 AS2 配置](as2-example-tutorial.md)。

**Topics**
+ [AS2 配置](#as2-supported-configurations)
+ [AS2 配额和限制](#as2-limitations)
+ [AS2 特性和功能](#as2-capabilities)

## AS2 配置
<a name="as2-supported-configurations"></a>

本主题介绍使用适用性声明 2 (AS2) 协议的传输支持的配置、特性和功能，包括接受的密码和摘要。

**签名、加密、压缩、MDN**

对于入站和出站传输，以下项目为必需或可选项目：
+ **加密** - 必需（对于 HTTP 传输，这是目前唯一支持的传输方法）。只有通过终止 TLS 的代理（例如应用程序负载均衡器(ALB)）转发且 `X-Forwarded-Proto: https` 标头存在的情况下，才会接受未加密的消息。
+ **签名** - 可选
+ **压缩** - 可选（目前唯一支持的压缩算法是 ZLIB）
+ **邮件处置通知 (MDN)** - 可选

**密码**

入站和出站传输均支持以下密码：
+ AES128\$1CBC
+ AES192\$1CBC
+ AES256\$1CBC
+ 3DES（仅用于向后兼容）

**摘要**

支持以下摘要：
+ **入站签名和 MDN** — SHA1、、 SHA256、 SHA384 SHA512
+ **出站签名和 MDN** — SHA1、、 SHA256、 SHA384 SHA512

**MDN**

对于 MDN 响应，支持某些类型，如下所示：
+ **入站传输** - 同步和异步
+ **出站传输** - 仅限同步
+ **简单邮件传输协议（SMTP）（电子邮件 MDN）** – 不支持

**Transports**
+ **入站传输** – HTTP 是目前唯一支持的传输，您必须明确指定。
**注意**  
如果您需要使用 HTTPS 进行入站传输，则可以在应用程序负载均衡器或网络负载均衡器上终止 TLS。[通过 HTTPS 接收 AS2 消息](send-as2-messages.md#receive-https)中对此进行了描述。
+ **出站传输** - 如果您提供 HTTP URL，则还必须指定加密算法。如果您提供 HTTPS URL，则可以选择为加密算法指定 **NONE**。

## AS2 配额和限制
<a name="as2-limitations"></a>

本节讨论配额和限制 AS2

**Topics**
+ [AS2 配额](#as2-quotas)
+ [处理密钥的限额](#as2-quotas-secrets)
+ [已知限制条件](#as2-known-limitations)

### AS2 配额
<a name="as2-quotas"></a>

 AS2 文件传输有以下配额。要申请增加可调整的限额，请参阅 *AWS 一般参考* 中的 [AWS 服务 限额](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。


**AS2 配额**  

| Name | 默认值 | 可调整 | 
| --- | --- | --- | 
| 每个出站请求的最大文件数 | 10 | 否 | 
| 每秒最大出站请求数 | 100 | 否 | 
| 每秒最大入站请求数 | 100 | 否 | 
| 每个账户的最大出站带宽（出站 SFTP 和 AS2请求均构成此值） | 每秒 50 MB | 否 | 

### 处理密钥的限额
<a name="as2-quotas-secrets"></a>

AWS Transfer Family AWS Secrets Manager 代表使用基本身份验证的 AS2 客户拨打电话。此外，Secrets Manager 还会拨打电话 AWS KMS。

**注意**  
这些配额并不特定于你对 Transfer Family 的密钥的使用：它们是在你的所有服务之间共享的 AWS 账户。

对于 Secrets Manager`GetSecretValue`，适用的配额是**组合速率 DescribeSecret 和 GetSecretValue API 请求**，如[AWS Secrets Manager 配额](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_limits.html#quotas)中所述。


**Secrets Manager `GetSecretValue`**  

| Name | 值 | 说明 | 
| --- | --- | --- | 
| 和 GetSecretValue API 请求 DescribeSecret 的合并速率 | 每个受支持的区域：每秒 1 万个 | DescribeSecret和 GetSecretValue API 操作的每秒最大交易总和。 | 

对于 AWS KMS，以下配额适用`Decrypt`。有关详细信息，请参阅[每个 AWS KMS API 操作的请求配额](https://docs.aws.amazon.com/kms/latest/developerguide/requests-per-second.html#rps-table)


**AWS KMS `Decrypt`**  

| 限额名称 | 默认值（每秒请求数） | 
| --- | --- | 
|  加密操作（对称）请求速率  |  这些共享配额因请求中使用的 AWS KMS 密钥类型 AWS 区域 和密钥类型而异。每个配额都单独计算。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/create-b2b-server.html)  | 
|  自定义密钥存储请求限额  此限额仅适用于使用外部密钥存储的情况。   |  自定义密钥存储请求限额是针对每个自定义密钥存储单独计算的。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/create-b2b-server.html)  | 

### 已知限制条件
<a name="as2-known-limitations"></a>
+ 不支持服务器端 TCP 保持活动状态。除非客户端发送保持活动状态的数据包，否则连接将在处于非活动状态 350 秒后超时。
+ 要使有效协议被服务接受并显示在 Amazon CloudWatch 日志中，消息必须包含有效的 AS2 标头。
+ 从 AWS Transfer Family for 接收消息的服务器 AS2 必须支持 [R](https://datatracker.ietf.org/doc/html/rfc6211) FC 6211 中定义的用于验证消息签名的加密消息语法 (CMS) 算法保护属性。某些较早的 IBM Sterling 产品不支持此属性。
+ 重复的消息 IDs 会导致已处理/警告：重复的文档消息。
+  AS2 证书的密钥长度必须至少为 2048 位，最多为 4096 位。
+  MDNs 向贸易伙伴的 HTTPS 终端节点发送 AS2 消息或异步消息时，消息或 MDNs 必须使用由公开信任的证书颁发机构 (CA) 签署的有效 SSL 证书。目前仅支持出站传输自签名证书。
+ 端点必须支持 TLS 版本 1.2 协议和安全策略允许的加密算法（如 [AWS Transfer Family 服务器的安全策略](security-policies.md) 中所述）。
+ 目前不支持 AS2 版本 1.2 中的多个附件和证书交换消息 (CEM)。
+ 基本身份验证目前仅支持出站消息。
+ 您可以将文件处理工作流程附加到使用该 AS2 协议的 Transfer Family 服务器：但是， AS2 消息不会执行附加到服务器的工作流程。

## AS2 特性和功能
<a name="as2-capabilities"></a>

下表列出了使用的 Transfer Family 资源可用的特性和功能 AS2。

### AS2 features
<a name="as2-features"></a>

Transfer Family 为以下用户提供以下功能 AS2。


| 功能 | 由... 支持 AWS Transfer Family | 
| --- |--- |
|  [德拉蒙德认证](https://aws.amazon.com/about-aws/whats-new/2023/06/aws-transfer-family-drummond-group-as2-certification/) | 是 | 
| [AWS CloudFormation 支持](https://docs.aws.amazon.com/transfer/latest/userguide/as2-cfn-demo-template.html)  | 是 | 
| [亚马逊 CloudWatch指标](https://docs.aws.amazon.com/transfer/latest/userguide/as2-monitoring.html) | 是 | 
| [SHA-2 加密算法](https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html#cryptographic-algorithms) | 是 | 
| 对亚马逊 S3 的支持 | 是 | 
| Amazon EFS 支持 | 否 | 
| 定时消息 | 是 1 | 
| AWS Transfer Family 托管工作流程 | 否 | 
| 证书交换消息 (CEM) | 否 | 
| 双向 TLS（mTLS） | 否 | 
| Support 支持自签名证书 | 是 | 

1. 通过[使用 Amazon 的计划 AWS Lambda 功能](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-run-lambda-schedule.html)提供出站预设消息 EventBridge

### AS2 发送和接收功能
<a name="as2-capabilities"></a>

下表列出了 AWS Transfer Family AS2 发送和接收功能。


| 能力 | 入站：通过服务器接收 | 出站：使用连接器发送 | 
| --- |--- |--- |
| [TLS 加密传输 (HTTPS)](send-as2-messages.md#as2-https-process) | 是 1 | 是 | 
| 非 TLS 传输 (HTTP) | 是 |  是 2  | 
| 同步 MDN | 支持 | 是 | 
| 消息压缩 | 支持 | 是 | 
| 异步 MDN | 是 | 否 | 
| 静态 IP 地址 | 支持 | 是 | 
| 自带 IP 地址 | 是 | 否 | 
| 多个文件附件 | 否 | 否 | 
| 基本身份验证 | 否 | 是 | 
| AS2 重启 | 不适用 | 否 | 
| AS2 可靠性 | 否 | 否 | 
| 每封邮件的自定义主题 | 不适用 | 否 | 

1. Network Load Balancer (NLB) 或应用程序负载均衡器 (ALB) 提供入站 TLS 加密传输

2. 只有启用加密后，出站非 TLS 传输才可用

# 管理 AS2 证书
<a name="managing-as2-partners"></a>

本主题讨论如何导入和管理 AS2 证书。导入证书是 Transfer Family AS2 流程的第一步。

1. 导入证书

1. [创建 AS2 个人资料](configure-as2-profile.md)

1. [创建 AS2 服务器](create-as2-transfer-server.md) 

1. [创建 AS2 协议](create-as2-transfer-server.md#as2-agreements)

1. [配置 AS2 连接器](configure-as2-connector.md)

## 导入 AS2 证书
<a name="configure-as2-certificate"></a>

Transf AS2 er Family 流程使用证书密钥对传输的信息进行加密和签名。合作伙伴可以为两个目的使用相同的密钥，也可以为每个目的使用单独的密钥。如果您的通用加密密钥由受信任的第三方托管，以便在发生灾难或安全漏洞时可以对数据进行解密，我们建议您使用单独的签名密钥。通过使用单独的签名密钥（您不托管），您不会损害数字签名的不可否认性功能。

**注意**  
 AS2 证书的密钥长度必须至少为 2048 位，最多为 4096 位。

以下几点详细说明了在此过程中如何使用 AS2 证书。
+ 入境 AS2
  + 交易伙伴发送签名证书的公有密钥，该密钥将导入至合作伙伴配置文件中。
  + 本地方发送用于其加密和签名证书的公有密钥。然后，合作伙伴导入一个或多个私有密钥。本地方可以发送单独的证书密钥进行签名和加密，也可以选择将相同的密钥用于两种用途。
+ 出境 AS2
  + 合作伙伴发送其加密证书的公有密钥，该密钥将导入至合作伙伴配置文件中。
  + 本地方发送证书的公有密钥进行签名，并导入证书的私有密钥进行签名。
  + 如果您使用的是 HTTPS，则可以导入自签名的传输层安全 (TLS) 证书。

有关如何创建证书的详细信息，请参阅 [步骤 1：为创建证书 AS2](as2-example-tutorial.md#as2-create-certs)。

此步骤说明了如何使用 Transfer Family 控制台导入证书。如果要 AWS CLI 改用，请参阅[第 2 步：将证书作为 Transfer Family 证书资源导入](as2-example-tutorial.md#as2-import-certs-example)。

**指定 AS2启用了的证书**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格的 “**AS2 贸易伙伴**” 下，选择 “**证书**”。

1. 选择**导入证书**。

1. 在**证书配置**部分的**证书描述**中，输入一个易于识别的证书名称。确保您可以通过其描述来识别证书的用途。此外，选择证书的角色。

1. 在**证书使用**部分中，选择此证书的用途。它可以用于加密、签名或两者兼而有之。

   **提示：**如果您为使用选择**加密和签名**，Transfer Family 会创建两个相同的证书（每个证书都有自己的 ID）：一个使用值为，另一个使用值为`SIGNING`。`ENCRYPTION`

1. 在**证书内容**部分，提供交易伙伴提供的公有证书，或本地证书的公有和私有密钥。

   在**证书内容**部分填写相应的详细信息。
   + 如果选择**自签名证书**，则不提供证书链。
   + 将证书文本及其链粘贴到**证书和证书链**字段中。
   + 如果此证书是本地证书，请粘贴其私有密钥。

1. 选择**导入证书**以完成该流程并保存导入证书的详细信息。

**注意**  
TLS 证书只能作为合作伙伴的公共证书导入。如果您选择**合作伙伴提供的公共证书**，然后为使用选择**传输层安全 (TLS)**，则会收到警告。此外，TLS 证书必须是自签名的（也就是说，您必须选择**自签名证书**才能导入 TLS 证书）。

## AS2 证书轮换
<a name="as2-certificate-rotation"></a>

通常，证书的有效期为六个月至一年。您可能已经设置想要保留更长时间的配置文件。为此，Transfer Family 提供了证书轮换功能。您可以为一个配置文件指定多个证书，以便您可以连续多年使用该配置文件。Transfer Family 使用证书进行签名（可选）和加密（必填）。如果您愿意，可以为这两个目的指定一个证书。

证书轮换是将即将过期的旧证书替换为较新的证书的过程。过渡是渐进的，以避免协议中的合作伙伴尚未为出站传输配置新证书，或者可能在使用新证书的时期发送使用旧证书签名或加密的有效负载，从而避免中断传输。新旧证书均有效的中间期称为*宽限期*。

X.509 证书有 `Not Before` 日期和 `Not After` 日期。但是，这些参数可能无法为管理员提供足够的控制。Transfer Family 提供 `Active Date` 和 `Inactive Date` 设置以控制哪些证书用于出站负载，哪些证书被接受用于入站负载。

### 证书到期监控
<a name="as2-certificate-expiry-monitoring"></a>

Transfer Famil CloudWatch y `DaysUntilExpiry` 在导入证书后会发布亚马逊指标。该指标显示当前日期与证书`InactiveDate`上指定的日期之间的天数。该指标位于 CloudWatch指标控制面板的`Transfer` AWS 命名空间下。

此指标将始终有一个指标维度 **CertificateId**，如果客户在证书上提供了**描述**维度，则可以选择包含描述维度。有关 CloudWatch 指标维度的更多信息，请参阅 *CloudWatch API 参考*中的[维度](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Dimension.html)。

**注意**  
导入 Transfer Family 证书后，可能需要整整一天的时间才能将该指标发送到客户账户。

您可以使用此指标创建 CloudWatch 警报，在证书即将到期时通知您。

出站证书选择使用转移日期之前的最大值作为 `Inactive Date`。入站流程接受 `Not Before` 和 `Not After` 范围内的证书，以及 `Active Date` 和 `Inactive Date` 范围内的证书。

### 证书轮换示例
<a name="as2-cert-rotate-example"></a>

下表描述了为单个配置文件配置两个证书的一种可能方法。


**两个证书轮换**  

| Name | NOT BEFORE（由证书颁发机构控制） | ACTIVE DATE（由 Transfer Family 设置） | INACTIVE DATE（由 Transfer Family 设置） | NOT AFTER（由证书颁发机构设置） | 
| --- | --- | --- | --- | --- | 
| 证书 1（旧证书） | 2019-11-01 | 2020-01-01 | 2020-12-31 | 2024-01-01 | 
| 证书 2（新证书） | 2020-11-01 | 2020-06-01 | 2021-06-01 | 2025-01-01 | 

 注意以下几点：
+ 为证书指定 `Active Date` 和 `Inactive Date` 时，该范围必须介于 `Not Before` 和 `Not After` 之间。
+ 我们建议您为每个配置文件配置多个证书，确保所有证书的有效日期范围涵盖您要使用该配置文件的时间。
+ 我们建议您在旧证书变为非活动状态和新证书处于活动状态之间指定一段宽限时间。在前面的示例中，第一个证书直到 2020 年 12 月 31 才处于非活动状态，而第二个证书在 2020 年 6 月 1 日生效，提供了 6 个月的宽限期。在 2020 年 6 月 1 日至 2020 年 12 月 31 日期间，两个证书均处于活动状态。

# 创建 AS2 个人资料
<a name="configure-as2-profile"></a>

本主题讨论如何创建用于 AS2 流程的配置文件。*本地配置文件*定义本地（AS2已启用 Transfer Family 服务器）组织或 “派对”。同样，*合作伙伴配置文件*定义了 Transfer Family 外部的远程合作伙伴组织。

1. [导入 AS2 证书](managing-as2-partners.md#configure-as2-certificate)

1. 创建 AS2 个人资料

1. [创建 AS2 服务器](create-as2-transfer-server.md) 

1. [创建 AS2 协议](create-as2-transfer-server.md#as2-agreements)

1. [配置 AS2 连接器](configure-as2-connector.md)

使用此步骤创建本地和合作伙伴配置文件。此过程说明了如何使用 Transfer Family 控制台创建 AS2 配置文件。如果要改用 AWS CLI ，请参阅 [第 3 步：为您和您的贸易伙伴创建档案](as2-example-tutorial.md#as2-create-profiles-example)。

**创建个人 AS2 资料**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格的 “**AS2 贸易伙伴**” 下，选择**个人资料**，然后选择**创建个人资料**。

1. 在**配置文件配置**部分，输入配置文件的 AS2 ID。此值用于 AS2 特定于协议的 HTTP 标头，`as2-from`并`as2-to`用于标识交易伙伴关系，后者决定要使用的证书，依此类推。

1. 在**配置文件类型**部分，选择**本地配置文件**或**合作伙伴配置文件**。

1. 在**证书**部分，从下拉菜单中选择一个或多个证书。

   **提示：**如果要导入未在下拉菜单中列出的证书，请选择**导入新证书**。这将在**导入证书**屏幕上打开一个新的浏览器窗口。有关导入证书的步骤，请参阅[导入 AS2 证书](managing-as2-partners.md#configure-as2-certificate)。

1. （可选）在**标签**部分中，指定一个或多个键值对以帮助标识此配置文件。

1. 选择**创建配置文件**以完成该流程并保存新的配置文件。

# 创建 AS2 服务器
<a name="create-as2-transfer-server"></a>

本主题提供使用控制台或 CloudFormation 模板创建 AS2启用的 Transfer Family 服务器的说明。有关 AS2 配置示 end-to-end例，请参阅[设置 AS2 配置](as2-example-tutorial.md)。创建 AS2 服务器后，可以向服务器添加协议。

1. [导入 AS2 证书](managing-as2-partners.md#configure-as2-certificate)

1. [创建 AS2 个人资料](configure-as2-profile.md)

1. 创建 AS2 服务器

1. [创建 AS2 协议](#as2-agreements)

1. [配置 AS2 连接器](configure-as2-connector.md)

**Topics**
+ [使用 Tran AS2 sfer Family 控制台创建服务器](#create-server-as2-console)
+ [使用模板创建演示 Transfer Family AS2 堆栈](#as2-cfn-demo-template)
+ [创建 AS2 协议](#as2-agreements)

## 使用 Tran AS2 sfer Family 控制台创建服务器
<a name="create-server-as2-console"></a>

此过程说明了如何使用 Transfer AS2 Family 控制台创建支持该功能的服务器。如果要 AWS CLI 改用，请参阅[步骤 4：创建使用该 AS2 协议的 Transfer Family 服务器](as2-example-tutorial.md#as2-example-server)。

**注意**  
您可以将文件处理工作流程附加到使用该 AS2 协议的 Transfer Family 服务器：但是， AS2 消息不会执行附加到服务器的工作流程。

**创建 AS2启用了-的服务器**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧的导航窗格中，选择**服务器**，然后选择**创建服务器**。

1. 在 **“选择协议**” 页上，选择 **AS2（适用性声明 2）**，然后选择**下一步**。

1. 在**选择身份提供商**页面上，选择**下一步**。
**注意**  
对于 AS2，您无法选择身份提供商，因为该 AS2 协议不支持基本身份验证。相反，您可以通过虚拟私有云 (VPC) 安全组控制访问权限。

1. 在**选择端点**页面上，执行以下操作：  
![\[控制台屏幕截图显示了选择端点页面，已选择 VPC 托管。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/create-server-choose-endpoint-vpc-internal.png)

   1. 对于**端点类型**，选择托管服务器端点的 **VPC 托管**。有关设置 VPC 主机端点的信息，请参阅 [在虚拟私有云中创建服务器](create-server-in-vpc.md)。
**注意**  
该 AS2协议不支持可公开访问的端点。要使您的 VPC 端点可通过互联网访问，请在**访问权限**下选择**面向互联网**，然后提供您的弹性 IP 地址。

   1. 对于**访问权限**，请选择下列选项之一：
      + **内部** — 选择此选项可在您的 VPC 和 VPC 连接的环境中提供访问权限，例如通过 Direct Connect 或 VPN 的本地数据中心。
      + **面向互联网** — 选择此选项可通过互联网以及您的 VPC 和 VPC 连接的环境（例如本地数据中心或 VPN）提供访问权限。 Direct Connect 

        如果您选择**面向互联网**，请在出现提示时提供您的弹性 IP 地址。

   1. 对于 **VPC**，选择现有 VPC 或选择**创建 VPC** 以创建新的 VPC。

   1. 对于**启用 FIPS**，请清除**启用 FIPS 端点**复选框。
**注意**  
该协议不支持启用 FIPS 的端点。 AS2

   1. 选择**下一步**。

1. 在**选择域**页面上，选择 **Amazon S3** 以使用所选协议将文件作为对象存储和访问。

   选择**下一步**。

1. 在**配置其他详细信息**页面上，选择所需的设置。
**注意**  
如果您同时配置任何其他协议 AS2，则所有其他详细设置均适用。但是，对于该 AS2 协议，唯一适用的设置是**CloudWatch 日志**和**标签**部分中的设置。  
尽管设置 CloudWatch 日志记录角色是可选的，但我们强烈建议您对其进行设置，以便您可以查看消息状态并解决配置问题。

1. 在**查看并创建**页面上，查看您的选择以确保它们正确无误。
   + 如果要编辑任何设置，请选择要更改步骤旁边的**编辑**。
**注意**  
如果您编辑某个步骤，我们建议您在选择编辑的步骤之后查看每个步骤。
   + 如果没有任何更改，请选择**创建服务器**来创建您的服务器。您将转至如下所示的**服务器**页面，其中列出了您的新服务器。

     您的新服务器状态更改为**在线**可能需要几分钟时间。到时候，您的服务器可以执行用户的文件操作。

## 使用模板创建演示 Transfer Family AS2 堆栈
<a name="as2-cfn-demo-template"></a>

我们提供了一个独立的 CloudFormation 模板来快速创建 AS2支持的 Transfer Family 服务器。该模板为服务器配置公有 Amazon VPC 端点、证书、本地和合作伙伴配置文件、协议和连接器。

基本 AS2 服务器模板创建以下资源：
+ 一台 AS2启用了 Transfer Family 的服务器，带有 VPC 终端节点
+ 带有证书的本地和合作伙伴 AS2 档案
+ 个人资料之间的协议
+ 用于文件存储的 Amazon S3 存储桶
+ 所需的 IAM 角色和策略
+ CloudWatch 日志配置

 在使用此模板之前，请注意以下事项：
+ 如果您根据此模板创建堆栈，则需为使用的 AWS 资源计费。
+ 该模板会创建多个证书并将其放入其中 AWS Secrets Manager 以安全地存储它们。如果您愿意，您可以从 Secrets Manager 中删除这些证书，因为使用此服务需要付费。在 Secrets Manager 中删除这些证书不会将其从 Transfer Family 服务器中删除。因此，演示堆栈的功能不受影响。但是，对于要用于生产 AS2 服务器的证书，您可能需要使用 Secrets Manager 来管理和定期轮换存储的证书。
+ 我们建议您仅将模板用作基础，主要用于演示目的。如果您想在生产环境中使用此演示堆栈，我们建议您修改模板的 YAML 代码以创建更强大的堆栈。例如，创建生产级证书，并创建可在生产中使用的 AWS Lambda 函数。

**使用模板创建 AS2启用了 Transfer Family CloudFormation 服务器**

1. 在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 CloudFormation 控制台。

1. 在左侧导航窗格中，选择**堆栈**。

1. 选择**创建堆栈**，然后选择**使用新资源（标准）**。

1. 在 “**先决条件-准备模板**” 部分，选择 **“选择现有模板**”。

1. 复制此链接、[AS2 演示模板](https://s3.amazonaws.com/aws-transfer-resources/as2-templates/aws-transfer-as2-basic.template.yml)，然后将其粘贴**到 Amazon S3 网址**字段中。

1. 选择**下一步**。

1. 在**指定堆栈详细信息**页面上，命名您的堆栈，然后指定以下参数：
   + 在下方 **AS2**，输入**本地 AS2 ID** 和**合作伙伴 AS2 ID** 的值，或者分别接受默认值和。`local` `partner`
   + 在**网络**下，输入**安全组入口 CIDR IP** 的值，或接受默认值 `0.0.0.0/0`。
**注意**  
此值采用 CIDR 格式，指定允许向 AS2 服务器传入流量使用哪些 IP 地址。默认值 `0.0.0.0/0` 允许所有 IP 地址。
   + 在**常规**下，输入**前缀**的值，或接受默认值 `transfer-as2`。此前缀位于堆栈创建的任何资源名称之前。例如，如果您使用默认前缀，则会将您的 Amazon S3 存储桶命名为 `transfer-as2-amzn-s3-demo-bucket`。

1. 选择**下一步**。在**配置堆栈选项**页面上，再次选择**下一步**。

1. 查看您正在创建的堆栈的详细信息，然后选择**创建堆栈**。
**注意**  
在页面底部的**能力**下，您必须确认这 CloudFormation 可能会创建 AWS Identity and Access Management (IAM) 资源。

创建堆栈后，您可以使用 AWS Command Line Interface (AWS CLI) 将测试 AS2 消息从伙伴服务器发送到本地 Transfer Family 服务器。将创建用于发送测试消息的示例 AWS CLI 命令以及堆栈中的所有其他资源。

要使用此示例命令，请转到堆栈的 “**输出**” 选项卡，然后复制 **TransferExampleAs2Com** mand。然后，您可以使用 AWS CLI运行该命令。如果您尚未安装 AWS CLI，请参阅*AWS Command Line Interface 用户指南 AWS CLI*中的[安装或更新最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)的。

此示例命令采用以下格式：

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key test.txt && aws transfer start-file-transfer --region aws-region --connector-id TransferConnectorId --send-file-paths /amzn-s3-demo-bucket/test.txt
```

**注意**  
此命令的版本包含堆栈中 `amzn-s3-demo-bucket` 和 `TransferConnectorId` 资源的实际值。

此示例命令由两个单独的命令组成，这两个命令使用 `&&` 字符串链接在一起。

第一个命令在您的存储桶中创建一个新的空文本文件：

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key test.txt
```

然后，第二个命令使用连接器将文件从合作伙伴配置文件发送到本地配置文件。Transfer Family 服务器已设置协议，允许本地配置文件接受来自合作伙伴配置文件的消息。

```
aws transfer start-file-transfer --region aws-region --connector-id TransferConnectorId --send-file-paths /amzn-s3-demo-bucket/test.txt
```

运行命令后，您可以转到您的 Amazon S3 存储桶 (`amzn-s3-demo-bucket`) 并查看其内容。如果命令成功，您应看到存储桶中有以下对象：
+ `processed/` – 此文件夹包含一个 JSON 文件，该文件描述传输的文件和 MDN 响应。
+ `processing/` – 此文件夹暂时包含正在处理的文件，但在传输完成后，此文件夹应为空。
+ `server-id/` – 此文件夹根据您的 Transfer Family 服务器 ID 命名。它包含`from-partner`（此文件夹根据合作伙伴的 AS2 ID 动态命名），该文件夹本身包含`failed/``processed/`、和`processing/`文件夹。`/server-id/from-partner/processed/` 文件夹包含传输的文本文件的副本以及相应的 JSON 和 MDN 文件。
+ `test.txt` – 此对象是传输的（空）文件。

## 创建 AS2 协议
<a name="as2-agreements"></a>

协议与 Transfer Family 服务器相关联。它们为使用该 AS2 协议通过Transfer Family交换消息或文件的贸易伙伴以及*入站*传输（将 AS2 文件从合作伙伴拥有的外部来源发送到Transfer Family服务器）提供了详细信息。

此过程说明了如何使用 Transfer Family 控制台创建 AS2 协议。如果要 AWS CLI 改用，请参阅[第 5 步：创建您与合作伙伴之间的协议](as2-example-tutorial.md#as2-create-agreement-example)。

**要为 Transfer Family 服务器创建协议**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. **在左侧导航窗格中，选择 Servers，然后选择使用该 AS2 协议的服务器。**

   或者，只要您至少有一台使用该协议的 Transfer Family 服务器，请从 “**AS2 交易伙伴**” 菜单中选择 “**协议” 以接收消息**。 AS2 然后，在**创建协议**屏幕中，选择要与该协议关联的 AS2 服务器。

1. 在服务器详细信息页面上，向下滚动到**协议**部分。

1. 选择**添加协议**。

1. 填写协议参数，如下所示：

   1. 在**协议配置**部分中，输入描述性名称。确保您可以通过协议名称来识别协议的目的。此外，还要设置协议的**状态**：**活动**（默认选中）或**非活动**。

   1. 在**通信配置**部分，选择本地配置文件和合作伙伴配置文件。此外，还要选择是否强制执行消息签名。
      + 默认情况下，“**强制消息签名**” 处于启用状态，这意味着 Transfer Family 会拒绝您的交易伙伴为此协议发送的未签名消息。
      + 清除此设置可允许 Transfer Family 接受交易伙伴为本协议发送的未签名消息。

   1. 在**收件箱目录配置**部分，提供以下信息。
      + 确定是否选择**指定单独的目录来存储您的 AS2 消息、MDN 文件和 JSON 状态文件**。
        + 如果选择此选项，则可以为负载文件、失败文件、MDN 文件、状态文件和临时文件指定单独的位置。
        + 如果清除此选项，则所有 AS2 文件都会进入您为基目录指定的位置。
      + 对于 **S3 存储桶**，请选择一个 Amazon S3 存储桶。
      + 在 **P** refix 中，您可以输入用于在存储桶中存储文件的前缀（文件夹）。

        例如，如果您**amzn-s3-demo-bucket**为存储桶和**incoming**前缀输入，则您的 AS2文件将保存到该文件`/amzn-s3-demo-bucket/incoming`夹。
      + 对于 **AWS IAM 角色**，请选择可以访问您指定的存储桶的角色。
      + 在 “**保留文件名**” 中，选择是否为传入的 AS2 邮件负载保留原始文件名。
        + 如果您选择此设置，则在将文件保存到 Amazon S3 中时，您的交易伙伴提供的文件名将被保留。
        + 如果清除此设置，则在 Transfer Family 保存文件时，会调整文件名，如中所述[文件名和位置](send-as2-messages.md#file-names-as2)。

   1. （可选）在**标签**部分中，添加标签。

   1. 输入协议的所有信息后，选择**创建协议**。

新协议显示在服务器详细信息页面的**协议**部分。

# 配置 AS2 连接器
<a name="configure-as2-connector"></a>

连接器的目的是在贸易伙伴之间建立出*站*传输关系，即将 AS2 文件从 Transfer Family 服务器发送到合作伙伴拥有的外部目的地。对于连接器，您可以指定本地方、远程合作伙伴及其证书（通过创建本地和合作伙伴配置文件）。

有了连接器后，您可以将信息传输给您的交易伙伴。为每 AS2 台服务器分配了三个静态 IP 地址。 AS2 连接器使用这些 IP 地址 MDNs 向您的贸易伙伴发送异步信息 AS2。

**注意**  
交易伙伴收到的消息大小将与 Amazon S3 中的对象大小不匹配。之所以出现这种差异，是因为 AS2 邮件在发送前会将文件封装在信封中。因此，即使文件是以压缩方式发送的，文件大小也可能会增加。因此，请确保交易伙伴的最大文件大小大于您发送的文件的大小。

1. [导入 AS2 证书](managing-as2-partners.md#configure-as2-certificate)

1. [创建 AS2 个人资料](configure-as2-profile.md)

1. [创建 AS2 服务器](create-as2-transfer-server.md)

1. [创建 AS2 协议](create-as2-transfer-server.md#as2-agreements)

1. 创建 AS2 连接器

## 创建 AS2 连接器
<a name="create-as2-connector"></a>

此过程说明如何使用 AWS Transfer Family 控制台创建 AS2 连接器。如果要 AWS CLI 改用，请参阅[第 6 步：创建您与合作伙伴之间的连接器](as2-example-tutorial.md#as2-create-connector-example)。

**创建 AS2 连接器**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格中，从 “**AS2 贸易伙伴**” 菜单中选择 “**要发送消息的连接**器”，然后选择 “**创建 AS2 连接器**”。

1. 在**连接器配置**部分中，指定以下信息：
   + **URL** — 输入出站连接的 URL。
   + **访问角色**-选择要使用的 (IAM) 角色的亚马逊资源名称 AWS Identity and Access Management (ARN)。确保角色提供对 `StartFileTransfer` 请求中所使用文件位置父目录的读取和写入访问权限。此外，确保角色对拟定发送 `StartFileTransfer` 的父目录提供读取和写入访问权限。
**注意**  
如果您对连接器执行基本身份验证，则访问角色需要密钥的 `secretsmanager:GetSecretValue` 权限。如果使用客户管理的密钥而不是 in 对密钥进行加密 AWS Secrets Manager，则该角色还需要`kms:Decrypt`获得该密钥的权限。 AWS 托管式密钥 如果您使用前缀 `aws/transfer/` 命名您的密钥，则可以使用通配符 (`*`) 添加必要的权限，如[创建密钥的权限示例](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html#auth-and-access_examples_wildcard)中所示。
   + **日志角色**（可选）-选择连接器用于将事件推送到 CloudWatch日志的 IAM 角色。

1. 在**AS2 配置**部分，选择本地和合作伙伴配置文件、加密和签名算法，以及是否压缩传输的信息。注意以下几点：
   + 默认情况下，**保留 S3 内容类型**参数处于启用状态。

     设置后，Transfer Famil `Content-Type` y 使用与 S3 中的对象关联的 Amazon S3，而不是根据文件扩展名映射内容类型。如果您希望服务根据文件扩展名映射 AS2 消息的内容类型，而不是使用 S3 对象中的内容类型，请清除此设置。
   + 对于加密算法，`DES_EDE3_CBC`除非必须支持需要加密算法的旧版客户端，否则不要选择，因为这是一种较弱的加密算法。
   + 在使用连接器发送的 AS2 邮件中，**主题**用作 `subject` HTTP标头属性。
   + 如果您选择创建不使用加密算法的连接器，则必须指定`HTTPS`为您的协议。

1. 在**基本身份验证**部分中，指定以下信息：
   + 要将登录凭证与出站消息一起发送，请选择**启用基本身份验证**。如果您不想在出站消息中发送任何凭证，请清除**启用基本身份验证**。
   + 如果您使用的是身份验证，请选择或创建密钥。
     + 要创建新密钥，请选择**创建新密钥**，然后输入用户名和密码。这些凭证必须与连接到合作伙伴端点的用户相匹配。  
![\[AWS Transfer Family 控制台中的 “创建连接器” 页面，显示了 “基本身份验证” 部分，并选择了 “创建新密钥”。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-create-secret.png)
     + 要使用现有密钥，请选择**选择现有秘钥**，然后从下拉菜单中选择密钥。有关在 Secrets Manager 中创建格式正确的密钥的详细信息，请参阅 [为 AS2 连接器启用基本身份验证](#as2-secret-create)。  
![\[AWS Transfer Family 控制台中的 “创建连接器” 页面，显示 “基本身份验证” 部分，并选择了选择现有密钥。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-select-secret.png)

1. 在 **MDN 配置**部分中，指定以下信息：
   + **请求 MDN** — 您可以选择要求您的贸易伙伴在成功收到您的消息后向他们发送 MDN。 AS2
   + **已签名 MDN** — 您可以选择要求对其 MDNs 进行签名。只有选择了**请求 MDN**，此选项才可用。

1. 确认所有设置后，选择**创建 AS2 连接器**以创建连接器。

**连接器**页面会出现，其中新连接器的 ID 已添加到列表中。要查看连接器的详细信息，请参阅 [查看 AS2 连接器详细信息](#connectors-view-info)。

## AS2 连接器算法
<a name="as2-connectors-details"></a>

创建 AS2 连接器时，会将以下安全算法附加到该连接器。


| Type | 算法 | 
| --- | --- | 
| TLS 密码 | TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1128\$1GCM\$1 SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1 SHA256 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1128\$1CBC\$1 SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1 SHA256 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1 SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1 SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1 SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1 SHA384 | 

## AS2 连接器的基本身份验证
<a name="as2-basic-auth"></a>

创建或更新使用该 AS2 协议的 Transfer Family 服务器时，可以为出站邮件添加基本身份验证。可以通过为连接器添加身份验证信息来完成此操作。

**注意**  
仅当您使用 HTTPS 时，基本身份验证才可用。

要对连接器使用身份验证，请在“**基本身份验证**”部分中选择“**启用基本身份验证**”。启用基本身份验证后，您可以选择创建新密钥，或使用现有密钥。无论哪种情况，密钥中的凭据都与使用此连接器的出站邮件一起发送。这些凭证必须与试图连接到贸易伙伴的远程端点的用户相匹配。

以下屏幕截图显示选中了“**启用基本身份验证**”，并选择了**“创建新密钥**”。做出这些选择后，您可以输入密钥的用户名和密码。

![\[Transfer Family 控制台的“连接器”页面，显示连接器的消息身份验证信息。在这种情况下，选择了“启用基本身份验证”，并选择了“创建新密钥”。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-create-secret.png)


以下屏幕截图显示选中了“**启用基本身份验证**”，并选择了**“创建现有密钥**”。您的密钥必须为正确格式，如 [为 AS2 连接器启用基本身份验证](#as2-secret-create) 所述。

![\[Transfer Family 控制台的“连接器”页面，显示连接器的消息身份验证信息。在这种情况下，选择了“启用基本身份验证”，并选择了“选择现有的密钥”。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-select-secret.png)


## 为 AS2 连接器启用基本身份验证
<a name="as2-secret-create"></a>

为 AS2 连接器启用基本身份验证后，您可以在 Transfer Family 控制台中创建新密钥，也可以使用在中创建的密钥 AWS Secrets Manager。无论哪种情况，您的密钥都存储在 Secrets Manager 中。

**Topics**
+ [在控制台中创建新的密钥](#as2-secret-details-console)
+ [使用现有 密钥](#use-existing-secret)
+ [在中创建密钥 AWS Secrets Manager](#as2-secret-details-asm)

### 在控制台中创建新的密钥
<a name="as2-secret-details-console"></a>

当您在控制台中创建连接器时，您可以创建一个新的密钥。

要创建新密钥，请选择**创建新密钥**，然后输入用户名和密码。这些凭证必须与连接到合作伙伴端点的用户相匹配。

![\[AWS Transfer Family 控制台的 “创建连接器” 页面，显示了 “基本身份验证” 部分，并选择了 “创建新密钥”。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-create-secret.png)


**注意**  
当您在控制台中创建新密钥时，密钥的名称将遵循以下命名约定：**/aws/transfer/*connector-id***，其中*connector-id*是您正在创建的连接器的 ID。当您试图在 AWS Secrets Manager中定位密钥时，请考虑这一点。

### 使用现有 密钥
<a name="use-existing-secret"></a>

当您在控制台中创建连接器时，您可以指定一个现有密钥。

要使用现有密钥，请选择**选择现有秘钥**，然后从下拉菜单中选择密钥。有关在 Secrets Manager 中创建格式正确的密钥的详细信息，请参阅 [在中创建密钥 AWS Secrets Manager](#as2-secret-details-asm)。

![\[AWS Transfer Family 控制台的 “创建连接器” 页面，显示 “基本身份验证” 部分，并选择 “选择现有密钥”。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-select-secret.png)


### 在中创建密钥 AWS Secrets Manager
<a name="as2-secret-details-asm"></a>

以下过程介绍如何创建用于 AS2 连接器的相应密钥。

**注意**  
仅当您使用 HTTPS 时，基本身份验证才可用。<a name="as2-auth-secret-key"></a>

**将用户凭据存储在 Secrets Manager 中进行 AS2 基本身份验证**

1. 登录 AWS 管理控制台 并打开 AWS Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在左侧导航窗格中，选择**密钥**。

1. 在**密钥**页面，选择**存储新密钥**。

1. 在**选择密钥类型**页面上，对于**密钥类型**，选择**其他类型密钥**。

1. 在**键/值对**部分，选择**键/值**选项卡。
   + **键** — 输入**Username**。
   + **值** — 输入有权连接到合作伙伴服务器的用户名。

1. **如果要提供密码，请选择**添加行**，然后在**键/值对**部分中，选择键/值**选项卡。

   选择**添加行**，然后在**键/值对**部分选择**键/值**选项卡。
   + **键** — 输入 **Password**。
   + **值** — 输入用户的密码。

1. **如果要提供私钥，请选择**添加行**，然后在密**钥/值对部分，选择密钥/值**选项卡。**
   + **键** — 输入 **PrivateKey**。
   + **值** — 输入用户的私有密钥。此值必须以 OpenSSH 格式存储，并且必须与在远程服务器中为该用户存储的公有密钥相对应。

1. 选择**下一步**。

1. 在**配置密钥**页面，输入密钥的名称和描述。建议对名称使用前缀 **aws/transfer/**。例如，您可以将密钥命名为 **aws/transfer/connector-1**。

1. 选择**下一步**，接受**配置轮换**页面的默认设置。然后选择**下一步**。

1. 在**审核**页面，选择**存储**以创建和存储密钥。

创建密钥后，您可以在创建连接器时选择密钥（请参阅 [配置 AS2 连接器](#configure-as2-connector)）。在启用基本身份验证的步骤中，从可用密钥的下拉列表中选择密钥。

## 查看 AS2 连接器详细信息
<a name="connectors-view-info"></a>

您可以在 AWS Transfer Family 控制台中找到 AS2 AWS Transfer Family 连接器的详细信息和属性列表。 AS2 连接器的属性包括其 URL、角色、配置文件 MDNs、标签和监控指标。

这是查看连接器详细信息的过程。

**要查看连接器详细信息**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格中，选择**连接器**。

1. 在“**连接器 ID**”列中选择标识符以查看所选连接器的详细信息页面。

通过选择 “**编辑**”，可以在 AS2 连接器的详细信息页面上更改连接器的属性。

![\[Transfer Family 控制台连接器详细信息页面，显示所选连接器的 URL、访问角色和日志角色。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-connector-details_01-top.png)


![\[Transfer Family 控制台连接器详细信息页面，显示所选连接器的 AS2 配置详细信息。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-connector-details_02-middle.png)


![\[Transfer Family 控制台连接器详细信息页面，显示所选连接器的 AS2 基本身份验证部分的详细信息、标签、静态 IP 和 AS2监控信息。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-basic-auth-details-pane.png)


**注意**  
你可以通过运行以下命令来获取其中的大部分信息，尽管格式不同 AWS Command Line Interface （AWS CLI 命令：  

```
aws transfer describe-connector --connector-id your-connector-id
```
有关更多信息，请参阅《 API 参考》中的 [https://docs.aws.amazon.com/transfer/latest/APIReference/API_DescribeConnector.html](https://docs.aws.amazon.com/transfer/latest/APIReference/API_DescribeConnector.html)。

# 发送和接收 AS2 消息
<a name="send-as2-messages"></a>

本节介绍发送和接收 AS2 消息的过程。它还提供与 AS2 消息相关的文件名和位置的详细信息。

下表列出了 AS2 消息的可用加密算法以及何时可以使用这些算法。


| 加密算法 | HTTP | HTTPS | 注意 | 
| --- |--- |--- |--- |
| AES128\$1CBC | 支持 | 是 |  | 
| AES192\$1CBC | 支持 | 是 |  | 
| AES256\$1CBC | 支持 | 是 |  | 
| DES\$1 \$1 EDE3 CBC | 支持 | 是 | 只有在必须支持需要此算法的旧版客户端时才使用此算法，因为它是一种弱加密算法。 | 
| NONE | 否 | 是 | 如果您要向 Transfer Family 服务器发送消息，则只能选择NONE是否使用应用程序负载均衡器 (ALB)。 | 

**Topics**
+ [接收 AS2 消息流程](#as2-inbound-process)
+ [通过 HTTPS 发送和接收 AS2 消息](#as2-https-process)
+ [使用 AS2 连接器传输文件](#transfer-as2-connectors)
+ [文件名和位置](#file-names-as2)
+ [状态代码](#status-codes)
+ [示例 JSON 文件](#file-as2-json)

## 接收 AS2 消息流程
<a name="as2-inbound-process"></a>

入站流程定义为正在传输到 AWS Transfer Family 服务器的消息或文件。入站消息的顺序如下：

1. 管理员或自动流程在合作伙伴的远程 AS2 服务器上启动 AS2 文件传输。

1. 合作伙伴的远程 AS2 服务器对文件内容进行签名和加密，然后向托管在 Transfer Family 上的 AS2 入站端点发送 HTTP POST 请求。

1. Transfer Family 使用服务器、合作伙伴、证书和协议的配置值，解密并验证有效负载。 AS2 文件内容存储在已配置的 Amazon S3 文件存储中。

1. 已签名的 MDN 响应应与 HTTP 响应内联返回，或者通过单独的 HTTP POST 请求异步返回原始服务器。

1. 审计记录已写入Amazon， CloudWatch 其中包含有关交易所的详细信息。

1. 解密后的文件位于名为 `inbox/processed` 的文件夹中。

![\[该图显示了入站消息的处理顺序。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-architecture-inbound.png)


## 通过 HTTPS 发送和接收 AS2 消息
<a name="as2-https-process"></a>

本节介绍如何配置使用该 AS2 协议通过 HTTPS 发送和接收消息的 Transfer Family 服务器。

**Topics**
+ [通过 HTTPS 发送 AS2 消息](#send-https)
+ [通过 HTTPS 接收 AS2 消息](#receive-https)

### 通过 HTTPS 发送 AS2 消息
<a name="send-https"></a>

要使用 HTTPS 发送 AS2 消息，请使用以下信息创建一个连接器：
+ 对于网址，请指定 HTTPS URL
+ 对于加密算法，请选择任何可用的算法。
**注意**  
 要在不使用加密（即您选择`NONE`加密算法）的情况下向 Transfer Family 服务器发送消息，则必须使用应用程序负载均衡器 (ALB)。
+ 提供连接器的其余值，如 [配置 AS2 连接器](configure-as2-connector.md) 中所述。

### 通过 HTTPS 接收 AS2 消息
<a name="receive-https"></a>

 AWS Transfer Family AS2 服务器目前仅通过端口 5080 提供 HTTP 传输。但是，您可以使用自己选择的端口和证书在您的 Transfer Family 服务器 VPC 终端节点前的网络或应用程序负载均衡器上终止 TLS。通过这种方法，您可以让传入的 AS2 消息使用 HTTPS。

**先决条件**
+ VPC 必须与您的 Transfer AWS 区域 Family 服务器位于同一个服务器中。
+ 您的 VPC 的子网必须位于您要在其中使用服务器的可用区内。
**注意**  
每台 Transfer Family 服务器最多可以支持三个可用区。
+ 在与您的服务器相同的区域中最多分配三个弹性 IP 地址。或者，您可以选择自带 IP 地址范围（BYOIP）。
**注意**  
弹性 IP 地址的数量必须与您用于服务器端点的可用区域数量相匹配。

您可以配置网络负载平衡 (NLB) 或 Application Load Balancer (ALB)。下表列出了每种方法的优缺点。

下表提供了使用 NLB 与 ALB 终止 TLS 时的功能差异。


| 功能 | Network Load Balancer (NLB) | Application Load Balancer (ALB) | 
| --- | --- | --- | 
| 延迟 | 由于它在网络层运行，因此延迟更低。 | 由于它在应用层运行，因此延迟更高。 | 
| 支持静态 IP | 可以附加可以是静态的弹性 IP 地址。 | 无法附加弹性 IP 地址：提供其基础 IP 地址可以更改的域。 | 
| 高级路由 | 不支持高级路由。 | 支持高级路由。 AS2无需加密即可注入所需的`X-Forwarded-Proto`标头。 [developer.mozilla.org 网站上的 [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) 中描述了这个标题。](https://developer.mozilla.org/) | 
| TLS/SSL 终止 | 支持 TLS/SSL 终止 | 支持 TLS/SSL 终止 | 
| 双向 TLS（mTLS） | Transfer Family 目前不支持将 NLB 用于 mTL | 对 mTLS 的 Support | 

------
#### [ Configure NLB ]

此过程介绍如何在您的 VPC 中设置面向互联网的网络负载均衡器 (NLB)。<a name="create-nlb-AS2"></a>

**创建网络负载均衡器并将服务器的 VPC 端点定义为负载均衡器的目标**

1. 打开亚马逊弹性计算云控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**负载均衡器**，然后选择**创建负载均衡器**。

1. 在**网络负载均衡器**下，选择**创建**。

1. 在**基本配置**部分，输入以下信息：
   + 对于**名称**，为负载均衡器输入一个描述性名称。
   + 对于 **Scheme**，选择 **Internet-facing**。
   + 对于 **IP address type**（IP 地址类型），选择 **IPv4**。

1. 在**网络映射**部分中，输入以下信息：
   + 对于 **VPC**，请选择您已创建的虚拟私有云 (VPC)。
   + 在**映射**下，选择与公有子网关联的可用区，这些子网位于您用于服务器端点的同一 VPC 中。
   + 对于每个子网**IPv4 的地址**，选择您分配的弹性 IP 地址之一。

1. 在**侦听器和路由**部分中，输入以下信息：
   + 对于**协议**，选择 **TLS**。
   + 对于**端口**，输入 **5080**。
   + 对于**默认操作**，选择**创建目标组**。有关创建新目标组的详细信息，请参阅 [创建目标组](#create-target-group)。

   创建目标组后，在**默认操作**字段中输入其名称。

1. 在**安全侦听器设置**部分，在**默认证书区域中选择您的 SSL/TLS 证书**。

1. 选择**创建负载均衡器**以创建您的 NLB。

1. （可选，但推荐）打开网络负载均衡器的访问日志以保持完整的审计跟踪记录，如[网络负载均衡器的访问日志](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html)中所述。

   我们建议执行此步骤，因为 TLS 连接已在 NLB 终止。因此，反映在您的 Transfer Family AS2 CloudWatch 日志组中的源 IP 地址是 NLB 的私有 IP 地址，而不是交易伙伴的外部 IP 地址。

------
#### [ Configure ALB ]

此过程介绍如何在您的 VPC 中设置应用程序负载均衡器 (ALB)。<a name="create-alb-AS2"></a>

**创建 Application Load Balancer 并将服务器的 VPC 终端节点定义为负载均衡器的目标**

1. 打开亚马逊弹性计算云控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**负载均衡器**，然后选择**创建负载均衡器**。

1. 在**应用程序负载均衡器**下，选择**创建**。

1. 在 ALB 控制台中，在端口 443 (HTTPS) 上创建一个新的 HTTP 监听器。

1. （可选）。如果要设置相互身份验证 (mTLS)，请配置安全设置和信任存储。

   1. 将您的 SSL/TLS 证书附加到监听器。

   1. 在 “**客户证书处理**” 下，选择**相互身份验证 (mTLS)**。

   1. 选择 “**使用信任存储进行验证**”。

   1. 在 “**高级 mTLS 设置”** 下，通过上传您的 CA 证书来选择或创建信任存储。

1. 创建一个新的目标组，并将 Transfer Family AS2 服务器端点的私有 IP 地址添加为端口 5080 上的目标。有关创建新目标组的详细信息，请参阅 [创建目标组](#create-target-group)。

1. 为目标组配置运行状况检查，使其在端口 5080 上使用 HTTP 协议。

1. 创建新规则，将 HTTPS 流量从侦听器转发到目标组。

1. 将侦听器配置为使用您的 SSL/TLS 证书。

------

设置负载均衡器后，客户端通过自定义端口侦听器与负载均衡器进行通信。然后，负载均衡器通过端口 5080 与服务器通信。<a name="create-target-group"></a>

**创建目标组**

1. 在前面的过程中选择**创建目标组**后，您将进入新目标组的**指定组详细信息**页面。

1.  在**基本配置**部分，输入以下信息。
   + 在**选择目标类型**中，选择 **IP 地址**。
   + 对于**目标组名称**，输入目标组的名称。
   + 对于**协议**，您的选择取决于您使用的是 ALB 还是 NLB。
     + **对于 Network Load Balancer (NLB)，请选择 TCP**
     + **对于 Application Load Balancer (ALB)，请选择 HTTP**
   + 对于**端口**，输入 **5080**。
   + 对于 **IP address type**（IP 地址类型），选择 **IPv4**。
   + 对于 **VPC**，请选择您为 Transfer Family AS2 服务器创建的 VPC。

1. <a name="vpc-register-targets"></a>在 “**健康检查**” 部分，选择**健康检查协议**。
   + **对于 ALB，请选择 HTTP**
   + **对于 NLB，请选择 TCP**

1. <a name="vpc-add-to-list"></a>选择**下一步**。

1. 在**注册目标**页面，输入以下信息：
   + 对于**网络**，请确认已指定您为 Transfer Family AS2 服务器创建的 VPC。
   + 对于**IPv4 地址**，请输入 Trans IPv4 fer Family AS2 服务器端点的私有地址。

      如果您的服务器有多个端点，请选择**添加 IPv4 地址**以添加另一行用于输入其他 IPv4 地址。重复此过程，直到输入服务器所有端点的私有 IP 地址。
   + 确保**端口**设置为 **5080**。
   + 选择**包含如下待处理事项**，将您的条目添加到**审核目标**部分。

1. 在**查看目标**部分，查看您的 IP 目标。

1. 选择**创建目标组**，然后返回之前创建 NLB 的过程，并在指示的位置输入新的目标组。

**测试从弹性 IP 地址访问服务器**

使用弹性 IP 地址或网络负载均衡器的 DNS 名称通过自定义端口连接到服务器。

**重要**  
使用负载均衡器上配置的子[网的网络访问控制列表（网络 ACLs）](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)，管理从客户端 IP 地址对服务器的访问。网络 ACL 权限是在子网级别设置的，因此这些规则适用于使用该子网的所有资源。您无法使用安全组控制来自客户端 IP 地址的访问，因为负载均衡器的目标类型设置为 **IP 地址**而不是**实例**。因此，负载均衡器不保留源 IP 地址。如果[网络负载均衡器的运行状况检查](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-health-checks.html)失败，则意味着负载均衡器无法连接到服务器端点。要对此问题进行故障排除，请检查以下步骤：  
确认服务器[端点的关联安全组](https://aws.amazon.com/premiumsupport/knowledge-center/sftp-enable-elastic-ip-custom-port/)允许来自负载均衡器上配置的子网的入站连接。负载均衡器必须能够通过端口 5080 连接到服务器端点。
确认服务器的**状态**为**联机**。

## 使用 AS2 连接器传输文件
<a name="transfer-as2-connectors"></a>

AS2 连接器在贸易伙伴之间建立关系，以便将 AS2 消息从 Transfer Family 服务器传输到合作伙伴拥有的外部目的地。

您可以使用 Transfer Family 通过引用连接器 ID 和文件路径来发送 AS2 消息，如以下 `start-file-transfer` AWS Command Line Interface (AWS CLI) 命令所示：

```
aws transfer start-file-transfer --connector-id c-1234567890abcdef0 \
--send-file-paths "/amzn-s3-demo-source-bucket/myfile1.txt" "/amzn-s3-demo-source-bucket/myfile2.txt"
```

要获取连接器详细信息，请运行以下命令：

```
aws transfer list-connectors
```

该`list-connectors`命令会返回连接器 IDs URLs、以及连接器的 Amazon 资源名称 (ARNs)。

要返回特定连接器的属性，请使用要使用的 ID 运行以下命令：

```
aws transfer describe-connector --connector-id your-connector-id
```

该`describe-connector`命令返回连接器的所有属性，包括其 URL、角色、配置文件、邮件处置通知 (MDNs)、标签和监控指标。

您可以通过查看 JSON 和 MDN 文件来确认合作伙伴已成功接收文件。这些文件是根据 [文件名和位置](#file-names-as2) 中描述的约定命名的。如果您在创建连接器时配置了日志记录角色，则还可以检查 CloudWatch 日志中的 AS2 消息状态。

要查看 AS2 连接器详细信息，请参阅[查看 AS2 连接器详细信息](configure-as2-connector.md#connectors-view-info)。有关创建 AS2连接器的更多信息，请参见[配置 AS2 连接器](configure-as2-connector.md)。

**发送出 AS2 站消息**

出站进程定义为从 AWS 外部客户端或服务发送的消息或文件。出站消息的顺序如下：

1. 管理员调用 `start-file-transfer` AWS Command Line Interface (AWS CLI) 命令或 `StartFileTransfer` API 操作。此操作引用 `connector` 配置。

1. Transfer Family 检测到新的文件请求并定位该文件。文件经过压缩、签名和加密。

1. 传输 HTTP 客户端执行 HTTP POST 请求，将有效负载传输到合作伙伴的 AS2 服务器。

1. 该流程返回已签名的 MDN 响应，该响应与 HTTP 响应（同步 MDN）内联。

1. 当文件在不同的传输阶段之间移动时，该流程会向客户提供 MDN 响应接收和处理详细信息。

1. 远程 AS2 服务器将解密并经过验证的文件提供给合作伙伴管理员。

![\[该图显示了出站消息的处理顺序。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/as2-architecture-outbound.png)


AS2 处理支持许多 RFC 4130 协议，重点是常见用例以及与现有 AS2支持服务器实现的集成。有关支持的配置详细信息，请参阅 [AS2 配置](create-b2b-server.md#as2-supported-configurations)。

## 文件名和位置
<a name="file-names-as2"></a>

本节讨论传输的文件命名惯例。 AS2 

对于入站文件传输，需要注意以下方面：
+ 您可以在协议中指定基本目录。基本目录是 Amazon S3 存储桶名称和前缀（如果有）的组合。例如 `/amzn-s3-demo-bucket/AS2-folder`。
+ 如果成功处理了传入的文件，则该文件（以及相应的 JSON 文件）将保存至该 `/processed` 文件夹。例如 `/amzn-s3-demo-bucket/AS2-folder/processed`。

  JSON 文件包含以下字段：
  + `agreement-id` 
  + `as2-from`
  + `as2-to`
  + `as2-message-id`
  + `transfer-id`
  + `client-ip`
  + `connector-id`
  + `failure-message`
  + `file-path`
  + `message-subject`
  + `mdn-message-id`
  + `mdn-subject`
  + `requester-file-name`
  + `requester-content-type`
  + `server-id`
  + `status-code`
  + `failure-code`
  + `transfer-size`
+ 如果无法成功处理传入文件，则该文件（以及相应的 JSON 文件）将保存至该 `/failed` 文件夹。例如 `/amzn-s3-demo-bucket/AS2-folder/failed`。
+ 传输的文件存储在 `processed` 文件夹中，名为 `original_filename.messageId.original_extension`。也就是说，传输的消息 ID 会附加到文件名之后，在文件的原始扩展名之前。
+ 已创建 JSON 文件并将其另存为 `original_filename.messageId.original_extension.json`。除了要添加的消息 ID 外，还会在传输的文件名后面附加该字符串 `.json`。
+ 消息处置通知 (MDN) 文件已创建并另存为 `original_filename.messageId.original_extension.mdn`。除了要添加的消息 ID 外，还会在传输的文件名后面附加该字符串 `.mdn`。
+ 如果存在名为 `ExampleFileInS3Payload.dat` 的入站文件，则会创建以下文件：
  + **File** — `ExampleFileInS3Payload.c4d6b6c7-23ea-4b8c-9ada-0cb811dc8b35@44313c54b0a46a36.dat`
  + **JSON** — `ExampleFileInS3Payload.c4d6b6c7-23ea-4b8c-9ada-0cb811dc8b35@44313c54b0a46a36.dat.json` 
  + **MDN** — `ExampleFileInS3Payload.c4d6b6c7-23ea-4b8c-9ada-0cb811dc8b35@44313c54b0a46a36.dat.mdn` 

对于出站传输，命名类似，不同之处在于没有传入的消息文件，而且，已传输消息的传输 ID 会添加到文件名中。传输 ID 由 `StartFileTransfer` API 操作返回（或者当其他流程或脚本调用此操作时）。
+ `transfer-id` 是与文件传输关联的标识符。作为 `StartFileTransfer` 调用一部分的所有请求共享 `transfer-id`。
+ 基本目录与您用于源文件的路径相同。也就是说，基目录是您在 `StartFileTransfer` API 操作或`start-file-transfer` AWS CLI 命令中指定的路径。例如：

  ```
  aws transfer start-file-transfer --send-file-paths /amzn-s3-demo-bucket/AS2-folder/file-to-send.txt
  ```

  如果运行此命令，MDN 和 JSON 文件将保存在 `/amzn-s3-demo-bucket/AS2-folder/processed` 中（对于成功传输）或 `/amzn-s3-demo-bucket/AS2-folder/failed`（对于不成功传输）。
+ 已创建 JSON 文件并将其另存为 `original_filename.transferId.messageId.original_extension.json`。
+ 已创建 MDN 文件并将其另存为 `original_filename.transferId.messageId.original_extension.mdn`。
+ 如果存在名为 `ExampleFileOutTestOutboundSyncMdn.dat` 的出站文件，则会创建以下文件：
  + **JSON** — `ExampleFileOutTestOutboundSyncMdn.dedf4601-4e90-4043-b16b-579af35e0d83.fbe18db8-7361-42ff-8ab6-49ec1e435f34@c9c705f0baaaabaa.dat.json`
  + **MDN** — `ExampleFileOutTestOutboundSyncMdn.dedf4601-4e90-4043-b16b-579af35e0d83.fbe18db8-7361-42ff-8ab6-49ec1e435f34@c9c705f0baaaabaa.dat.mdn`

您还可以查看 CloudWatch 日志以查看转账的详细信息，包括任何失败的转账。

## 状态代码
<a name="status-codes"></a>

下表列出了您或您的合作伙伴发送 AS2 消息时可以记录到 CloudWatch 日志中的所有状态代码。不同的消息处理步骤适用于不同的消息类型，并且仅用于监控。“已完成” 和 “失败” 状态表示处理的最后一步，在 JSON 文件中可见。


****  

| 代码 | 说明 | 处理完成了吗？ | 
| --- | --- | --- | 
| 处理 | 该消息正在转换为其最终格式。例如，解压缩和解密步骤都具有此状态。 | 否 | 
| MDN\$1TRANSM | 消息处理正在发送 MDN 响应。 | 否 | 
| MDN\$1RECEIVE | 消息处理正在收到 MDN 响应。 | 否 | 
| COMPLETED | 消息处理已成功完成。此状态包括为入站消息或出站消息的 MDN 验证发送 MDN 的时间。 | 是 | 
| FAILED | 消息处理失败。有关错误代码的列表，请参阅[AS2 错误代码](as2-monitoring.md#as2-error-codes)。 | 是 | 

## 示例 JSON 文件
<a name="file-as2-json"></a>

本部分列出了入站和出站传输的示例 JSON 文件，包括传输成功和传输失败的示例文件。

传输成功的示例出站文件：

```
{
  "requester-content-type": "application/octet-stream",
  "message-subject": "File xyzTest from MyCompany_OID to partner YourCompany",
  "requester-file-name": "TestOutboundSyncMdn-9lmCr79hV.dat",
  "as2-from": "MyCompany_OID",
  "connector-id": "c-c21c63ceaaf34d99b",
  "status-code": "COMPLETED",
  "disposition": "automatic-action/MDN-sent-automatically; processed",
  "transfer-size": 3198,
  "mdn-message-id": "OPENAS2-11072022063009+0000-df865189-1450-435b-9b8d-d8bc0cee97fd@PartnerA_OID_MyCompany_OID",
  "mdn-subject": "Message be18db8-7361-42ff-8ab6-49ec1e435f34@c9c705f0baaaabaa has been accepted",
  "as2-to": "PartnerA_OID",
  "transfer-id": "dedf4601-4e90-4043-b16b-579af35e0d83",
  "file-path": "/amzn-s3-demo-bucket/as2testcell0000/openAs2/TestOutboundSyncMdn-9lmCr79hV.dat",
  "as2-message-id": "fbe18db8-7361-42ff-8ab6-49ec1e435f34@c9c705f0baaaabaa",
  "timestamp": "2022-07-11T06:30:10.791274Z"
}
```

传输失败的示例出站文件：

```
{
  "failure-code": "HTTP_ERROR_RESPONSE_FROM_PARTNER",
  "status-code": "FAILED",
  "requester-content-type": "application/octet-stream",
  "subject": "Test run from Id da86e74d6e57464aae1a55b8596bad0a to partner 9f8474d7714e476e8a46ce8c93a48c6c",
  "transfer-size": 3198,
  "requester-file-name": "openAs2TestOutboundWrongAs2Ids-necco-3VYn5n8wE.dat",
  "as2-message-id": "9a9cc9ab-7893-4cb6-992a-5ed8b90775ff@718de4cec1374598",
  "failure-message": "http://Test123456789.us-east-1.elb.amazonaws.com:10080 returned status 500 for message with ID 9a9cc9ab-7893-4cb6-992a-5ed8b90775ff@718de4cec1374598",
  "transfer-id": "07bd3e07-a652-4cc6-9412-73ffdb97ab92",
  "connector-id": "c-056e15cc851f4b2e9",
  "file-path": "/amzn-s3-demo-bucket-4c1tq6ohjt9y/as2IntegCell0002/openAs2/openAs2TestOutboundWrongAs2Ids-necco-3VYn5n8wE.dat",
  "timestamp": "2022-07-11T21:17:24.802378Z"
}
```

传输成功的示例进站文件：

```
{
  "requester-content-type": "application/EDI-X12",
  "subject": "File openAs2TestInboundAsyncMdn-necco-5Ab6bTfCO.dat sent from MyCompany to PartnerA",
  "client-ip": "10.0.109.105",
  "requester-file-name": "openAs2TestInboundAsyncMdn-necco-5Ab6bTfCO.dat",
  "as2-from": "MyCompany_OID",
  "status-code": "COMPLETED",
  "disposition": "automatic-action/MDN-sent-automatically; processed",
  "transfer-size": 1050,
  "mdn-subject": "Message Disposition Notification",
  "as2-message-id": "OPENAS2-11072022233606+0000-5dab0452-0ca1-4f9b-b622-fba84effff3c@MyCompany_OID_PartnerA_OID",
  "as2-to": "PartnerA_OID",
  "agreement-id": "a-f5c5cbea5f7741988",
  "file-path": "processed/openAs2TestInboundAsyncMdn-necco-5Ab6bTfCO.OPENAS2-11072022233606+0000-5dab0452-0ca1-4f9b-b622-fba84effff3c@MyCompany_OID_PartnerA_OID.dat",
  "server-id": "s-5f7422b04c2447ef9",
  "timestamp": "2022-07-11T23:36:36.105030Z"
}
```

传输失败的示例进站文件：

```
{
  "failure-code": "INVALID_REQUEST",
  "status-code": "FAILED",
  "subject": "Sending a request from InboundHttpClientTests",
  "client-ip": "10.0.117.27",
  "as2-message-id": "testFailedLogs-TestRunConfig-Default-inbound-direct-integ-0c97ee55-af56-4988-b7b4-a3e0576f8f9c@necco",
  "as2-to": "0beff6af56c548f28b0e78841dce44f9",
  "failure-message": "Unsupported date format: 2022/123/456T",
  "agreement-id": "a-0ceec8ca0a3348d6a",
  "as2-from": "ab91a398aed0422d9dd1362710213880",
  "file-path": "failed/01187f15-523c-43ac-9fd6-51b5ad2b08f3.testFailedLogs-TestRunConfig-Default-inbound-direct-integ-0c97ee55-af56-4988-b7b4-a3e0576f8f9c@necco",
  "server-id": "s-0582af12e44540b9b",
  "timestamp": "2022-07-11T06:30:03.662939Z"
}
```

# 为 AS2 消息自定义 HTTP 标头
<a name="as2-custom-http-headers"></a>

向贸易伙伴发送 AS2 消息时，您可能需要自定义 HTTP 标头以满足特定要求或增强与合作伙伴 AS2 服务器配置的兼容性。此 CloudFormation 模板创建了一个基础架构，用于为通过发送的 AS2 消息启用自定义 HTTP 标头 AWS Transfer Family。它设置了充当代理的 Amazon API Gateway 和 Lambda 函数，允许动态修改交易伙伴 AS2 服务器所需的标头。

使用此模板执行以下操作：
+ 向出站 AS2 消息添加自定义 HTTP 标头
+ 使用自定义值覆盖默认标题值
**重要**  
覆盖默认标头值时要小心，因为这可能会导致发送失败：需要一些 AS2 标头。
+ 确保与具有特定标题要求的贸易伙伴兼容

## 模板概述
<a name="template-overview"></a>

该模板创建了以下主要组件：
+ 用于处理和转发消息的 Lambda 函数 AS2 
+ 用于公开 Lambda 函数的亚马逊 API Gateway
+ Lambda 函数的 IAM 角色和权限
+ 支持 HTTPS 的条件资源

模板文件可在此处获得：[动态 HTTP 标头模板](https://s3.amazonaws.com/aws-transfer-resources/as2-templates/dynamic-http-headers.template.yml)。

## 工作方式
<a name="how-it-works"></a>

1. Amazon API Gateway 接收来自的传入 AS2 消息 AWS Transfer Family。

1. 该请求被转发到 Lambda 函数。

1. Lambda 函数处理请求，根据需要添加或修改标头。

1. 然后，修改后的请求会被转发到合作伙伴的 AS2 服务器。

1. 来自合作伙伴服务器的响应将通过 Lambda 和 Amazon API Gateway 返回到。 AWS Transfer Family

## 主要功能
<a name="key-features"></a>
+ *动态标题修改：*允许自定义主题标题和添加其他必需的标题。
+ P@@ *rotocol Support：*可同时使用 HTTP 和 HTTPS 协议。
+ *灵活配置：*允许指定合作伙伴主机、端口和路径。

## 实施详情
<a name="implementation-details"></a>

该模板实现了以下关键组件：

### Lambda 函数
<a name="lambda-function"></a>

该解决方案的核心是一个 Node.js Lambda 函数，该函数：
+ 接收来自亚马逊 API Gateway 的请求
+ 根据配置和传入的请求数据修改标头
+ 将修改后的请求转发到合作伙伴的服务器 AS2 
+ 同时处理 HTTP 和 HTTPS 协议
+ 包括错误处理和日志记录

### Amazon API Gateway
<a name="api-gateway"></a>

HTTP API 设置为：
+ 接收传入的 AS2 消息
+ 将请求路由到 Lambda 函数
+ 将回复返回到 AWS Transfer Family

### 模板参数
<a name="as2-header-template-parameter-details"></a>

按如下方式输入模板参数信息。请注意，所有这些参数都是字符串。
+ `Environment`: 此参数用于命名模板创建的资源：无论它们是用于开发环境还是生产环境。有效值为 **dev** 和 **prod**。
+ `PartnerHost`： AS2 伙伴服务器的 IP 地址或主机名。
+ `PartnerPort`: AS2 伙伴服务器的端口号。如果未指定，则 HTTP 的默认值为 80，HTTPS 的默认值为 443。
+ `PartnerPath`: 伙伴服务器上 AS2 终端节点的路径
+ `ProtocolType`：用于 AS2 通信的协议：有效值为 **HTTP 和 HTT** **PS**。

### 有条件的资源
<a name="conditional-resources"></a>

为了支持 HTTPS，模板会有条件地创建：
+ 用于 CA 证书的 Lambda 层
+ Lambda 函数中特定于 HTTPS 的配置

## 部署和使用
<a name="deployment-and-usage"></a>

**使用 CloudFormation 模板自定义 AS2 HTTP 标头**

1. 在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 CloudFormation 控制台。

1. 在左侧导航窗格中，选择**堆栈**。

1. 选择**创建堆栈**，然后选择**使用新资源（标准）**。

1. 在 “**先决条件-准备模板**” 部分，选择 **“选择现有模板**”。

1. 复制此链接，即[动态 HTTP 标头模板](https://s3.amazonaws.com/aws-transfer-resources/as2-templates/dynamic-http-headers.template.yml)，然后将其粘贴**到 Amazon S3 网址**字段中。

1. 选择**下一步**。

1. 在参数详细信息中填写您的信息。详情请参阅[模板参数](#as2-header-template-parameter-details)。

1. 选择**下一步**。在**配置堆栈选项**页面上，再次选择**下一步**。

1. 查看您正在创建的堆栈的详细信息，然后选择**创建堆栈**。
**注意**  
在页面底部的**能力**下，您必须确认这 CloudFormation 可能会创建 AWS Identity and Access Management (IAM) 资源。

部署此 CloudFormation 堆栈后：

1. 请注意堆栈输出中提供的 Amazon API Gateway 终端节点网址。

1. 更新您的现有 AWS Transfer Family 连接器以使用这个新的 Amazon API Gateway 终端节点。

1. 现在，该解决方案将处理 AS2 消息，根据配置添加或修改标头。

**警告**  
仅修改主题标题或添加合作伙伴明确期望的标题。更改其他标头可能会导致传输失败。

# 监控 AS2 使用情况
<a name="as2-monitoring"></a>

您可以使用Amazon CloudWatch 和Amazon监控 AS2 活动 AWS CloudTrail。要查看其他 Transfer Family 服务器指标，请参阅 [Amazon AWS Transfer Family 服务器 CloudWatch 登录](structured-logging.md)


**AS2 指标**  

| 指标 | 描述 | 
| --- | --- | 
| InboundMessage |  成功从交易伙伴处收到的 AS2 消息总数。 单位：计数 时间：5 分钟  | 
| InboundFailedMessage |  未成功从贸易伙伴处收到的 AS2 消息总数。也就是说，交易伙伴发送了一条消息，但是 Transfer Family 服务器无法成功处理该消息。 单位：计数 时间：5 分钟  | 
| OutboundMessage |  从 Transfer Family 服务器成功发送给交易伙伴的 AS2 消息总数。 单位：计数 时间 = 5 分钟  | 
| OutboundFailedMessage |  未成功发送给贸易伙伴的 AS2 消息总数。也就是说，它们是从 Transfer Family 服务器发送的，但交易伙伴没有成功接收。 单位：计数 时间：5 分钟  | 
| DaysUntilExpiry |  证书到期前的天数由导入时证书上的`InactiveDate`设置决定。 单位：计数 尺寸：`CertificateId`，`Description`（如果提供） 周期：1 天 有关更多信息，请参阅 [AS2 证书轮换](managing-as2-partners.md#as2-certificate-rotation)。  | 

## AS2 状态码
<a name="as2-monitor-status-codes"></a>

下表列出了您或您的合作伙伴发送 AS2 消息时可以记录到 CloudWatch 日志中的所有状态代码。不同的消息处理步骤适用于不同的消息类型，并且仅用于监控。“已完成” 和 “失败” 状态表示处理的最后一步，在 JSON 文件中可见。


****  

| 代码 | 描述 | 处理完成了吗？ | 
| --- | --- | --- | 
| 处理 | 该消息正在转换为其最终格式。例如，解压缩和解密步骤都具有此状态。 | 否 | 
| MDN\$1TRANSM | 消息处理正在发送 MDN 响应。 | 否 | 
| MDN\$1RECEIVE | 消息处理正在收到 MDN 响应。 | 否 | 
| COMPLETED | 消息处理已成功完成。此状态包括为入站消息或出站消息的 MDN 验证发送 MDN 的时间。 | 是 | 
| FAILED | 消息处理失败。有关错误代码的列表，请参阅[AS2 错误代码](#as2-error-codes)。 | 是 | 

## AS2 错误代码
<a name="as2-error-codes"></a>

下表列出并描述了您可能从 AS2文件传输中收到的错误代码。


**AS2 错误代码**  

| 代码 | 错误 | 描述和解决方法 | 
| --- | --- | --- | 
| ACCESS\$1DENIED |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html)  |  在处理其中任何一个 `SendFilePaths` 都无效或格式错误的 `StartFileTransfer` 请求时发生。也就是说，路径缺少 Amazon S3 存储桶名称，或者路径包含无效字符。如果 Transfer Family 未能担任访问角色或日志记录角色，也会发生这种情况。确保路径包含有效的 Amazon S3 存储桶名称和密钥名称。 | 
| AGREEMENT\$1NOT\$1FOUND | 未找到协议。 | 要么找不到协议，要么该协议与非活动配置文件相关联。在 Transfer Family 服务器中更新协议，使其包含活动的配置文件。 | 
| CONNECTOR\$1NOT\$1FOUND | 找不到连接器或相关配置。 |  要么找不到连接器，要么该连接器与非活动配置文件相关联。 更新连接器以包含活动配置文件。  | 
| CREDENTIALS\$1RETRIEVAL\$1FAILED |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html)  |  对于 AS2 基本身份验证，密钥的格式必须正确。以下解决方案对应于上一栏中列出的错误。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html)  | 
| DECOMPRESSION\$1FAILED | 无法解压缩消息。 |  要么发送的文件已损坏，要么压缩算法无效。 重新发送消息并验证使用了 ZLIB 压缩，或者在未启用压缩的情况下重新发送消息。  | 
| DECRYPT\$1FAILED | 无法解密消息。message-ID确保合作伙伴拥有正确的公共加密密钥。 |  解密失败。 确认合作伙伴使用有效证书发送了有效负载，并且使用有效加密算法执行了加密。  | 
| DECRYPT\$1FAILED\$1INVALID\$1SMIME\$1FORMAT | 无法解析封装的 mimePart。 |  MIME 有效负载要么已损坏，要么采用不支持的 SMIME 格式。 发送者应确保他们使用的格式受到支持，然后重新发送有效负载。  | 
| DECRYPT\$1FAILED\$1NO\$1DECRYPTION\$1KEY\$1FOUND | 未找到匹配的解密密钥。 |  没有为合作伙伴配置文件分配与消息匹配的证书，或者与消息匹配的证书现已过期或不再有效。 您必须更新合作伙伴配置文件并确保其中包含有效的证书。  | 
| DECRYPT\$1FAILED\$1UNSUPPORTED\$1ENCRYPTION\$1ALG | 使用不支持的算法请求了 SMIME Payload 解密，编号为：。encryption-ID |  远程发送方发送了使用不支持的加密算法的 AS2 有效负载。 发件人必须选择 AWS Transfer Family支持的加密算法。  | 
| DUPLICATE\$1MESSAGE | 重复或双重处理步骤。 |  有效负载具有重复的处理步骤。例如，有两个加密步骤。 只需一步即可重新发送消息，完成签名、压缩和加密。  | 
| ENCRYPT\$1FAILED\$1NO\$1ENCRYPTION\$1KEY\$1FOUND |  在配置文件中找不到有效的公共加密证书：*local-profile-ID*  | Transfer Family 正在尝试加密出站消息，但找不到本地配置文件的加密证书。解决办法选项：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html) | 
| ENCRYPTION\$1FAILED | 无法加密文件file-name。 |  要发送的文件不可用于加密。 确认文件位于预期 AS2 位置并且 AWS Transfer Family 有权读取该文件。  | 
| FILE\$1SIZE\$1TOO\$1LARGE | 文件太大。 | 当发送或接收超过文件大小限制的文件时，就会发生这种情况。 | 
| HTTP\$1ERROR\$1RESPONSE\$1FROM\$1PARTNER |  *partner-URL*ID 为 = *message-ID* 的消息返回状态 400。  |  与合作伙伴的 AS2 服务器通信返回了意外的 HTTP 响应代码。 合作伙伴可能能够从其 AS2 服务器日志中提供更多诊断。  | 
| INSUFFICENT\$1MESSAGE\$1SECURITY\$1UNENCRYPTED | 需要加密。 | 合作伙伴向 Transfer Family 发送了一封未加密的消息，但该消息不受支持。发件人必须使用加密的有效负载。 | 
| INVALID\$1ENDPOINT\$1PROTOCOL | 仅支持 HTTP 和 HTTPS。 | 您必须在 AS2 连接器配置中指定 HTTP 或 HTTPS 作为协议。 | 
| INVALID\$1REQUEST |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html)  |  此错误有多种原因。以下解决方案对应于上一栏中列出的错误。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html) | 
| INVALID\$1URL\$1FORMAT | 网址格式无效：URL |  当您使用配置了格式错误的 URL 的连接器发送出站消息时，就会发生这种情况。 确保为连接器配置了有效的 HTTP 或 HTTPS URL。  | 
| MDN\$1RESPONSE\$1INDICATES\$1AUTHENTICATION\$1FAILED | 不适用 | 接收方无法对发送者进行身份验证。交易伙伴向 Transfer Family 返回 MDN，其带有[处置修饰符](https://datatracker.ietf.org/doc/html/rfc4130#section-7.5.4) 错误：authentication-failed。 | 
| MDN\$1RESPONSE\$1INDICATES\$1DECOMPRESSION\$1FAILED | 不适用 | 当接收者无法解压缩消息内容时，就会发生这种情况。交易伙伴向 Transfer Family 返回 MDN，其带有[处置修饰符](https://datatracker.ietf.org/doc/html/rfc4130#section-7.5.4) 错误：decompression-failed。 | 
| MDN\$1RESPONSE\$1INDICATES\$1DECRYPTION\$1FAILED | 不适用 | 接收者无法解密消息内容。交易伙伴向 Transfer Family 返回 MDN，其带有[处置修饰符](https://datatracker.ietf.org/doc/html/rfc4130#section-7.5.4) 错误：authentication-failed。 | 
| MDN\$1RESPONSE\$1INDICATES\$1INSUFFICIENT\$1MESSAGE\$1SECURITY | 不适用 | 接收者希望对消息进行签名或加密，但事实并非如此。贸易伙伴向 Transfer Family 返回带有[处置修饰符](https://datatracker.ietf.org/doc/html/rfc4130#section-7.5.4)的 MDN 错误： insufficient-message-security。在连接器上启用签名 and/or 加密，以符合交易伙伴的期望。 | 
| MDN\$1RESPONSE\$1INDICATES\$1INTEGRITY\$1CHECK\$1FAILED | 不适用 | 接收者无法验证内容的完整性。贸易伙伴向 Transfer Family 返回带有[处置修饰符](https://datatracker.ietf.org/doc/html/rfc4130#section-7.5.4)的 MDN 错误： integrity-check-failed。 | 
| PATH\$1NOT\$1FOUND |  无法创建目录*file-path*。找不到父路径。  | Transfer Family 正在尝试在客户的 Amazon S3 存储桶中创建目录，但未找到该存储桶。确保 `StartFileTransfer` 命令中提到的每个路径都包含现有存储桶的名称。 | 
| SEND\$1FILE\$1NOT\$1FOUND | file-path未找到文件路径。 |  Transfer Family 在发送文件操作中找不到该文件。 检查配置的主目录和路径有效，以及 Transfer Family 具有该文件的读取权限。  | 
| SERVER\$1NOT\$1FOUND | 找不到与消息关联的服务器。 | Transfer Family 在收到消息时找不到服务器。如果在处理传入消息的过程中删除了服务器，则可能会发生这种情况。 | 
| SERVER\$1NOT\$1ONLINE | 服务器server-ID未联机。 | Transfer Family 服务器处于脱机状态。启动服务器，使其可以接收和处理消息。 | 
| SIGNING\$1FAILED | 对文件签名失败。 |  要发送的文件不可用于签名，或者无法进行签名。 确认文件位于预期 AS2 位置并且 AWS Transfer Family 有权读取该文件。  | 
| SIGNING\$1FAILED\$1NO\$1SIGNING\$1KEY\$1FOUND | 找不到个人资料的证书:local-profile-ID. | 正在尝试对出站消息进行签名，但找不到本地配置文件的签名证书。解决办法选项：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html) | 
| UNABLE\$1RESOLVE\$1HOST\$1TO\$1IP\$1ADDRESS | 无法将主机名解析为 IP 地址。 |  Transfer Family 无法在 AS2 连接器中配置的公共 DNS 服务器上执行 DNS 到 IP 地址的解析。 更新连接器以指向有效的合作伙伴 URL。  | 
| UNABLE\$1TO\$1CONNECT\$1TO\$1REMOTE\$1HOST\$1OR\$1IP | 与端点的连接超时。 |  Transfer Family 无法与配置的伙伴的 AS2 服务器建立套接字连接。 检查合作伙伴的 AS2 服务器在配置的 IP 地址上是否可用。  | 
| UNABLE\$1TO\$1RESOLVE\$1HOSTNAME | 无法解析主机名hostname。 |  Transfer Family 服务器无法使用公共 DNS 服务器解析伙伴的主机名。 检查配置的主机已注册以及 DNS 记录有时间发布。  | 
| VERIFICATION\$1FAILED |  AS2 消息签名验证失败message-ID或 MIC 代码不匹配。 | 检查发件人的签名证书与远程配置文件的签名证书相匹配。还要检查 MIC 算法是否兼容 AWS Transfer Family。 | 
| VERIFICATION\$1FAILED\$1NO\$1MATCHING\$1KEY\$1FOUND |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html)  | AWS Transfer Family 正在尝试验证收到的消息的签名，但找不到与合作伙伴配置文件匹配的签名证书。解决办法选项：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/as2-monitoring.html) | 

# 证书到期监控
<a name="certificate-expiry-monitoring"></a>

AWS Transfer Family 自动监控 AS2 证书的到期日期，并发布 Amazon CloudWatch 指标以帮助您跟踪证书何时接近到期。这使您可以主动管理证书续订并避免服务中断。

## DaysUntilExpiry 指标
<a name="daysuntilexpiry-metric"></a>

当您导入证书以供 AS2 使用时，Transfer Family 会自动创建一个名为的 CloudWatch 指标`DaysUntilExpiry`。此指标根据`InactiveDate`您在导入证书时指定的时间，跟踪证书到期前的剩余天数。

**指标详情：**
+ **指标名称：**`DaysUntilExpiry`
+ **命名空间：**`AWS/Transfer`
+ **尺寸：**`CertificateId`（始终存在），`Description`（如果在导入证书时提供）
+ **单位：**计数（天）
+ **频率：**每日发布

**重要**  
导入证书后，Transfer Family 可能需要整整一天的时间才能将该指标发送到您的账户。

随着证书的失效日期临近，该指标值每天减少一个。例如，如果证书的到期时间为 30 天，则该指标将显示 30 天，然后在第二天显示 29 天，依此类推。

## 证书监控的最佳实践
<a name="certificate-monitoring-best-practices"></a>

设置证书过期监控时，请遵循以下最佳实践：
+ **设置多个警报阈值：**为不同的时间段（例如，到期前 30 天、14 天和 7 天）创建警报，以便为证书续订提供充足的时间。
+ **使用适当的统计数据：**在创建警报时使用`Maximum`统计数据以确保捕获最新的指标值。
+ **配置适当的警报操作：**设置通知以提醒可以续订证书的相应团队成员。
+ **测试您的警报：**定期测试您的通知系统，确保警报正确传送。
+ **记录您的流程：**保留有关您的证书续订流程以及谁负责不同证书的文档。

## 警报配置示例
<a name="certificate-monitoring-examples"></a>

以下是针对不同通知场景的一些警报配置示例：

### 30 天到期警告
<a name="thirty-day-warning"></a>

创建警报，当证书距离到期时间不超过 30 天时触发：
+ **指标：** DaysUntilExpiry
+ **统计数据：**Maximum
+ **周期：**1 天
+ **阈值：**30
+ **比较：**小于或等于阈值
+ **缺失数据处理：**将缺失的数据视为良好（不是泄露）

### 严重的 7 天到期警告
<a name="critical-warning"></a>

创建临界警报，当证书距离到期时间不超过 7 天时触发：
+ **指标：** DaysUntilExpiry
+ **统计数据：**Maximum
+ **周期：**1 天
+ **阈值：**7
+ **比较：**小于或等于阈值
+ **缺失数据处理：**将缺失的数据视为良好（不是泄露）