本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
发送和接收AS2消息
本节介绍发送和接收AS2消息的过程。它还提供与AS2消息相关的文件名和位置的详细信息。
发送AS2消息流程
出站进程定义为从 AWS 外部客户端或服务发送的消息或文件。出站消息的顺序如下:
-
管理员调用
start-file-transfer
AWS Command Line Interface (AWS CLI) 命令或StartFileTransfer
API操作。此操作引用connector
配置。 -
Transfer Family 检测到新的文件请求并定位该文件。文件经过压缩、签名和加密。
-
传输HTTP客户端执行HTTPPOST请求,将有效负载传输到合作伙伴的AS2服务器。
-
该过程返回已签名的MDN响应,与HTTP响应内联(同步MDN)。
-
当文件在不同的传输阶段之间移动时,该流程会向客户提供MDN回复收据和处理细节。
-
远程AS2服务器将解密并经过验证的文件提供给合作伙伴管理员。
AS2处理支持许多 RFC 4130 协议,重点是常见用例以及与现有AS2支持服务器实现的集成。有关支持的配置详细信息,请参阅 AS2支持的配置。
接收AS2消息流程
入站流程定义为正在传输到 AWS Transfer Family 服务器的消息或文件。入站消息的顺序如下:
管理员或自动流程在合作伙伴的远程AS2服务器上启动AS2文件传输。
合作伙伴的远程AS2服务器对文件内容进行签名和加密,然后向 Transfer Family 上托管的AS2入站端点发送HTTPPOST请求。
-
Transfer Family 使用服务器、合作伙伴、证书和协议的配置值,解密并验证有效负载。AS2文件内容存储在已配置的 Amazon S3 文件存储中。
-
已签名的MDN响应要么与HTTP响应内联返回,要么通过单独的HTTPPOST请求异步返回原始服务器。
审计记录已写入Amazon, CloudWatch 其中包含有关交易所的详细信息。
解密后的文件位于名为
inbox/processed
的文件夹中。
通过发送和接收AS2消息 HTTPS
本节介绍如何配置使用AS2协议发送和接收消息的 Transfer Family 服务器HTTPS。
通过发送AS2消息 HTTPS
要使用发送AS2消息HTTPS,请使用以下信息创建一个连接器:
-
对于URL,请指定 HTTPS URL
对于加密算法,请指定
NONE
。-
提供连接器的其余值,如 配置AS2连接器 中所述。
通过接收AS2消息 HTTPS
AWS Transfer Family AS2服务器目前仅通过端口 5080 提供HTTP传输。但是,您可以使用自己选择的端口和证书在 Transfer Family 服务器VPC端点前的负载均衡器TLS上终止。通过这种方法,你可以使用传入的AS2消息HTTPS。
先决条件
-
VPC必须与你的 Transfer Family 服务器 AWS 区域 相同。
-
您的子网VPC必须位于您要在其中使用服务器的可用区内。
注意
每台 Transfer Family 服务器最多可以支持三个可用区。
-
在与您的服务器相同的区域中最多分配三个弹性 IP 地址。或者,您可以选择自带自己的 IP 地址范围 (BYOIP)。
注意
弹性 IP 地址的数量必须与您用于服务器端点的可用区域数量相匹配。
配置网络负载均衡器
在中设置面向互联网的 Network Load Balancer (NLB)。VPC
创建 Network Load Balancer 并将服务器的VPC端点定义为负载均衡器的目标
-
打开亚马逊弹性计算云控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择负载均衡器,然后选择创建负载均衡器。
-
在网络负载均衡器下,选择创建。
-
在基本配置部分,输入以下信息:
-
对于名称,为负载均衡器输入一个描述性名称。
-
对于 Scheme,选择 Internet-facing。
-
对于 IP address type(IP 地址类型),选择 IPv4。
-
-
在网络映射部分中,输入以下信息:
-
对于 VPC,请选择您创建的虚拟私有云 (VPC)。
-
在 Mapping s 下,选择与公有子网关联的可用区,这些可用区与您用于服务器VPC终端节点的子网相同。
-
对于每个子网IPv4的地址,选择您分配的弹性 IP 地址之一。
-
-
在侦听器和路由部分中,输入以下信息:
-
对于 Protocol(协议),选择 TLS。
-
对于端口,输入
5080
。 -
对于默认操作,选择创建目标组。有关创建新目标组的详细信息,请参阅 创建目标组。
创建目标组后,在默认操作字段中输入其名称。
-
-
在安全侦听器设置部分,在默认 SSL /证书区域中选择您的TLS证书。
-
选择创建负载均衡器来创建您的NLB。
-
(可选,但推荐)打开网络负载均衡器的访问日志以保持完整的审计跟踪记录,如网络负载均衡器的访问日志中所述。
我们建议执行此步骤,因为TLS连接终止于NLB。因此,反映在您的 Transfer Family AS2 CloudWatch 日志组中的源 IP 地址是NLB的私有 IP 地址,而不是交易伙伴的外部 IP 地址。
设置负载均衡器后,客户端通过自定义端口侦听器与负载均衡器进行通信。然后,负载均衡器通过端口 5080 与服务器通信。
创建目标组
-
在前面的过程中选择创建目标组后,您将进入新目标组的指定组详细信息页面。
-
在基本配置部分,输入以下信息。
-
在选择目标类型中,选择 IP 地址。
-
对于目标组名称,输入目标组的名称。
-
对于 Protocol(协议),选择 TCP。
-
对于端口,输入
5080
。 -
对于 IP address type(IP 地址类型),选择 IPv4。
-
对于 VPC,请选择您为 Transfer Family AS2 服务器创建的。VPC
-
-
在 “健康检查” 部分,选择 “TCP健康检查” 协议。
-
选择下一步。
-
在注册目标页面,输入以下信息:
-
对于网络,请确认已指定您为 Transfer Famil AS2 y 服务器创建的。VPC
-
对于IPv4地址,请输入 Trans IPv4 fer Family AS2 服务器端点的私有地址。
如果您的服务器有多个端点,请选择添加IPv4地址以添加另一行用于输入其他IPv4地址。重复此过程,直到输入服务器所有端点的私有 IP 地址。
-
确保端口设置为
5080
。 -
选择包含如下待处理事项,将您的条目添加到审核目标部分。
-
-
在查看目标部分,查看您的 IP 目标。
-
选择创建目标组,然后返回到之前的创建目标组的过程,NLB并在指示的地方输入新的目标组。
测试从弹性 IP 地址访问服务器
使用弹性 IP 地址或 Network Load Balancer 的DNS名称通过自定义端口连接到服务器。
重要
使用负载均衡器上配置的子网的网络访问控制列表(网络ACLs),管理从客户端 IP 地址对服务器的访问。网络ACL权限是在子网级别设置的,因此这些规则适用于使用该子网的所有资源。您无法使用安全组控制来自客户端 IP 地址的访问,因为负载均衡器的目标类型设置为 IP 地址而不是实例。因此,负载均衡器不保留源 IP 地址。如果网络负载均衡器的运行状况检查失败,则意味着负载均衡器无法连接到服务器端点。要对此问题进行故障排除,请检查以下步骤:
-
确认服务器端点的关联安全组
允许来自负载均衡器上配置的子网的入站连接。负载均衡器必须能够通过端口 5080 连接到服务器端点。 -
确认服务器的状态为联机。
使用AS2连接器传输文件
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 "/DOC-EXAMPLE-SOURCE-BUCKET
/myfile1.txt
" "/DOC-EXAMPLE-SOURCE-BUCKET
/myfile2.txt
"
要获取连接器详细信息,请运行以下命令:
aws transfer list-connectors
该list-connectors
命令会返回连接器IDsURLs、以及连接器的 Amazon 资源名称 (ARNs)。
要返回特定连接器的属性,请使用要使用的 ID 运行以下命令:
aws transfer describe-connector --connector-id
your-connector-id
该describe-connector
命令返回连接器的所有属性,包括其角色URL、配置文件、邮件处置通知 (MDNs)、标签和监控指标。
您可以通过查看和文件来确认合作伙伴是否成功接收JSON了MDN文件。这些文件是根据 文件名和位置 中描述的约定命名的。如果您在创建连接器时配置了日志记录角色,则还可以检查 CloudWatch 日志中的AS2消息状态。
要查看AS2连接器详细信息,请参阅查看AS2连接器详细信息。有关创建AS2连接器的更多信息,请参见配置AS2连接器。
文件名和位置
本节讨论传输的文件命名惯例。AS2
对于入站文件传输,需要注意以下方面:
-
您可以在协议中指定基本目录。基本目录是 Amazon S3 存储桶名称和前缀(如果有)的组合。例如,
/DOC-EXAMPLE-BUCKET/AS2-folder
。 -
如果成功处理了传入的文件,则该文件(以及相应的JSON文件)将保存到该文件
/processed
夹。例如,/DOC-EXAMPLE-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
夹。例如,/DOC-EXAMPLE-BUCKET/AS2-folder/failed
。 -
传输的文件存储在
processed
文件夹中,名为
。也就是说,传输的消息 ID 会附加到文件名之后,在文件的原始扩展名之前。original_filename
.messageId
.original_extension
-
JSON文件已创建并另存为
。除了要添加的消息 ID 外,还会在传输的文件名后面附加该字符串original_filename
.messageId
.original_extension
.json.json
。 -
邮件处置通知 (MDN) 文件已创建并另存为
。除了要添加的消息 ID 外,还会在传输的文件名后面附加该字符串original_filename
.messageId
.original_extension
.mdn.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
/DOC-EXAMPLE-BUCKET/AS2-folder/file-to-send.txt
如果您运行此命令,MDN并且JSON文件保存在中
/DOC-EXAMPLE-BUCKET/AS2-folder/processed
(对于成功传输),或/DOC-EXAMPLE-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 日志以查看转账的详细信息,包括任何失败的转账。
状态代码
下表列出了您或您的合作伙伴发送AS2消息时可以记录到 CloudWatch 日志中的所有状态代码。不同的消息处理步骤适用于不同的消息类型,并且仅用于监控。COMPLETED和FAILED状态表示处理的最后一步,并且在JSON文件中可见。
代码 | 描述 | 处理完成了吗? |
---|---|---|
PROCESSING | 该消息正在转换为其最终格式。例如,解压缩和解密步骤都具有此状态。 | 否 |
MDN_TRANSMIT | 消息处理正在发送MDN响应。 | 否 |
MDN_RECEIVE | 消息处理正在收到MDN响应。 | 否 |
COMPLETED | 消息处理已成功完成。此状态包括何时MDN为入站邮件或MDN验证出站邮件发送。 | 是 |
FAILED | 消息处理失败。有关错误代码的列表,请参阅AS2 错误代码。 | 是 |
示例JSON文件
本节列出了入站和出站传输的示例文件,包括成功传输和传输失败的示例文件。JSON
传输成功的示例出站文件:
{ "requester-content-type": "application/octet-stream", "mesage-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": "/DOC-EXAMPLE-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": "/testbucket-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" }