發送和接收 AS2 消息 - AWS Transfer Family

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

發送和接收 AS2 消息

本節說明傳送和接收 AS2 訊息的程序。它還提供了與 AS2 消息相關聯的文件名和位置的詳細信息。

下表列出 AS2 訊息可用的加密演算法,以及何時可以使用它們。

加密演算法 HTTP HTTPS 備註
亚洲
俄羅斯
西 256_C
德斯 _ 埃德 3_CBC 僅當您必須支援需要此演算法的舊版用戶端時,才使用此演算法,因為它是弱式加密演算法。
NONE 如果您要將訊息傳送至 Transfer Family 伺服器,則只能選取是NONE否使用應用程式負載平衡器 (ALB)。

傳送 AS2 訊息程序

輸出處理程序會定義為從 AWS 外部用戶端或服務傳送的訊息或檔案。輸出郵件的順序如下:

  1. 管理員會呼叫 start-file-transfer AWS Command Line Interface (AWS CLI) 命令或 StartFileTransfer API 作業。此操作參照connector模型組態。

  2. Transfer Family 會偵測到新的檔案請求並找到檔案。該文件被壓縮,簽名和加密。

  3. 傳輸 HTTP 用戶端會執行 HTTP POST 要求,將承載傳輸至合作夥伴的 AS2 伺服器。

  4. 該進程返回簽名的 MDN 響應,內聯 HTTP 響應(同步 MDN)。

  5. 由於文件傳輸的不同階段之間移動,該過程提供 MDN 響應接收和處理細節給客戶。

  6. 遠端 AS2 伺服器可讓合作夥伴管理員使用已解密和驗證的檔案。

顯示輸出郵件處理順序的圖表。

AS2 處理支援許多 RFC 4130 通訊協定,專注於常見使用案例,並與現有啟用 AS2 的伺服器實作整合。如需支援組態的詳細資訊,請參閱

接收 AS2 訊息程序

輸入程序會定義為正在傳輸到 AWS Transfer Family 伺服器的訊息或檔案。輸入訊息的順序如下:

  1. 管理員或自動化程序會在合作夥伴的遠端 AS2 伺服器上啟動 AS2 檔案傳輸。

  2. 合作夥伴的遠端 AS2 伺服器會簽署並加密檔案內容,然後將 HTTP POST 要求傳送至傳輸系列上裝載的 AS2 輸入端點。

  3. Transfer Family 會使用伺服器、合作夥伴、憑證和合約的設定值,解密並驗證 AS2 承載。檔案內容存放在已設定的 Amazon S3 檔案存放區中。

  4. 已簽署的 MDN 回應會以內嵌方式傳回 HTTP 回應,或透過個別的 HTTP POST 要求以非同步方式傳回原始伺服器。

  5. 稽核記錄會寫入 Amazon,其中 CloudWatch 包含有關交易所的詳細資訊。

  6. 解密的檔案位於名為inbox/processed的資料夾中。

顯示輸入訊息處理順序的圖表。

透過 HTTPS 傳送及接收 AS2 訊息

本節說明如何設定使用 AS2 通訊協定透過 HTTPS 傳送及接收訊息的傳送系列伺服器。

通過 HTTPS 發送 AS2 消息

若要使用 HTTPS 傳送 AS2 郵件,請使用下列資訊建立連接器:

  • 對於該網址,請指定一個 HTTPS 網址

  • 對於加密演算法,請選取任何可用的演算法。

    注意

    若要在不使用加密的情況下將訊息傳送至 Transfer Family 伺服器 (亦即,您NONE為加密演算法選取),您必須使用 Application Load Balancer 器 (ALB)。

  • 如中所述,提供連接器的剩餘值設定 AS2 連接器

透過 HTTPS 接收 AS2 訊息

AWS Transfer Family AS2 服務器目前僅提供通過端口 5080 的 HTTP 傳輸。不過,您可以使用您選擇的連接埠和憑證,在 Transfer Family 伺服器 VPC 端點前面的網路或應用程式負載平衡器上終止 TLS。使用這種方法,您可以讓內送 AS2 消息使用 HTTPS。

先決條件

  • VPC 必須與您的 Transfer Family 伺服器位於 AWS 區域 相同的位置。

  • VPC 的子網路必須位於您要在其中使用伺服器的可用區域內。

    注意

    每個 Transfer Family 伺服器最多可支援三個可用區域。

  • 在與伺服器相同的區域中,最多配置三個彈性 IP 位址。或者,您可以選擇攜帶自己的 IP 位址範圍 (BYOIP)。

    注意

    彈性 IP 位址的數目必須與您搭配伺服器端點使用的可用區域數目相符。

您可以設定網路負載平衡 (NLB) 或 Application Load Balancer (ALB)。下表列出了每種方法的優缺點。

下表提供當您使用 NLB 與 ALB 終止 TLS 時的功能差異。

功能 Network Load Balancer (NLB) Application Load Balancer (ALB)
Latency (延遲) 更低的延遲,因為它在網絡層運行。 更高的延遲,因為它在應用程序層運行。
靜態 IP 支援 可以附加可以是靜態的彈性 IP 地址。 無法附加彈性 IP 位址:提供基礎 IP 位址可以變更的網域。
進階路由 不支援進階路由。

支持高級路由。可以在不加密的情況下注入 AS2 所需的X-Forwarded-Proto標頭。

這個標題在 X-前進-原型在開發人員 .mozil la.org 網站上描述。

TLS/SSL 終止 支持TLS/SSL 終端 支持TLS/SSL 終端
相互 TLS Transfer Family 目前不支援使用 NLB 進行 MTL Support MTL
Configure NLB

此程序說明如何在 VPC 中設定面向網際網路的 Network Load Balancer (NLB)。

建立 Network Load Balancer 並將伺服器的 VPC 端點定義為負載平衡器的目標
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon 彈性運算雲端主控台。

  2. 在瀏覽窗格中,選擇 [負載平衡器],然後選擇 [建立負載平衡器]。

  3. Network Load Balancer 下,選擇建立

  4. 在「基本組態」區段中,輸入下列資訊:

    • 名稱中,輸入負載平衡器的描述性名稱。

    • 對於 Scheme (結構描述),選擇 Internet-facing (面向網際網路)

    • 針對 [IP 位址類型],請選擇 [IPv4]。

  5. 在「網路對應」區段中,輸入下列資訊:

    • 對於 VPC,請選擇您建立的虛擬私有雲 (VPC)。

    • 在 [對應] 下,選擇與與伺服器端點搭配使用的相同 VPC 中可用的公用子網路相關聯的可用區域。

    • 針對每個子網路的 IPv4 位址,選擇您配置的其中一個彈性 IP 位址。

  6. 在「監聽器和路由」段落中,輸入下列資訊:

    • 針對通訊協定,選擇 TLS

    • 針對連接埠,輸入 5080

    • 針對預設動作,選擇建立目標群組。如需建立新目標群組的詳細資訊,請參閱若要建立目標群組

    建立目標群組後,請在「預設」動作欄位中輸入其名稱。

  7. 在 [安全接聽程式設定] 區段中,在 [預設 SSL/TLS 憑證] 區域中選擇您的憑證

  8. 選擇建立負載平衡器以建立您的 NLB。

  9. (可選,但建議使用)開啟 Network Load Balancer 的存取記錄以維護完整稽核追蹤,如 Network Load Balancer 的存取記錄中所述。

    我們建議您執行此步驟,因為 TLS 連線已在 NLB 終止。因此,Transfer Family AS2 CloudWatch 記錄群組中反映的來源 IP 位址是 NLB 的私有 IP 位址,而非交易夥伴的外部 IP 位址。

Configure ALB

此程序說明如何在 VPC 中設定 Application Load Balancer (NLB)。

建立 Application Load Balancer 器,並將伺服器的 VPC 端點定義為負載平衡器的目標
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon 彈性運算雲端主控台。

  2. 在瀏覽窗格中,選擇 [負載平衡器],然後選擇 [建立負載平衡器]。

  3. Application Load Balancer (應用程式負載平衡器) 下,選擇 Create (建立)。

  4. 在 ALB 主控台中,在連接埠 443 (HTTPS) 上建立新的 HTTP 接聽程式。

  5. (選用)。如果您要設定相互驗證 (MTL),請設定安全性設定和信任存放區。

    1. 將您的 SSL/TLS 憑證附加至接聽程式。

    2. 在 [用戶端憑證處理] 下,選取 [相互驗證 (MTL)]。

    3. 選擇 [以信任存放區驗證]。

    4. 在 [進階 MTL 設定] 下,透過上傳 CA 憑證來選擇或建立信任存放區。

  6. 建立新的目標群組,並將 Transfer Family AS2 伺服器端點的私人 IP 位址新增為連接埠 5080 上的目標。如需建立新目標群組的詳細資訊,請參閱若要建立目標群組

  7. 設定目標群組的健全狀況檢查,以便在連接埠 5080 上使用 TCP 通訊協定。

  8. 建立新規則,將 HTTPS 流量從接聽器轉寄至目標群組。

  9. 設定監聽器以使用您的 SSL/TLS 憑證。

設定負載平衡器之後,用戶端會透過自訂連接埠接聽程式與負載平衡器通訊。然後,負載平衡器會透過連接埠 5080 與伺服器通訊。

若要建立目標群組
  1. 在上一個程序中選擇建立目標群組之後,您就會移至新目標群組的「指定群組詳細資訊」頁面。

  2. 在「基本組態」區段中,輸入下列資訊。

    • 針對 [選擇目標類型],選擇 [IP 位址]。

    • 針對 Target group name (目標群組名稱),輸入目標群組的名稱。

    • 對於通訊協定,您的選擇取決於您使用的是 ALB 還是 NLB。

      • 對於 Network Load Balancer (NLB),請選擇 TCP

      • 對於應用程式負載平衡器 (ALB),請選擇 HTTP

    • 針對連接埠,輸入 5080

    • 針對 [IP 位址類型],請選擇 [IPv4]。

    • 對於 VPC,請選擇您為 Transfer Family AS2 伺服器建立的 VPC。

  3. 在 [健全狀況檢查] 區段中,選擇 [Health 全狀況檢查通訊協定] 的 TCP

  4. 選擇下一步

  5. 在「註冊目標」頁面上,輸入下列資訊:

    • 對於網路,請確認已指定為 Transfer Family AS2 伺服器建立的 VPC。

    • 對於 IPv4 位址,請輸入 Transfer Family AS2 伺服器端點的私人 IPv4 位址。

      如果您的伺服器有多個端點,請選擇 [新增 IPv4 位址] 以新增另一個資料列以輸入另一個 IPv4 位址。重複此程序,直到您輸入所有伺服器端點的私有 IP 位址為止。

    • 確定連接埠已設定為5080

    • 選擇下方的「包含為待決」,將您的項目新增至「檢閱目標」區段。

  6. 在「檢閱目標」區段中,檢閱您的 IP 目標。

  7. 選擇建立目標群組,然後返回上一個建立 NLB 的程序,然後輸入指示的新目標群組。

測試從彈性 IP 地址對服務器的訪問

使用彈性 IP 位址或 Network Load Balancer 的 DNS 名稱,透過自訂 Connect 埠連線至伺服器。

重要

使用負載平衡器上設定之子網路的網路存取控制清單 (網路 ACL),管理從用戶端 IP 位址對伺服器的存取。網路 ACL 權限是在子網路層級設定的,因此規則會套用至使用該子網路的所有資源。您無法使用安全性群組來控制來自用戶端 IP 位址的存取,因為負載平衡器的目標類型是設定為 IP 位址而非執行個體。因此,負載平衡器不會保留來源 IP 位址。如果網路負載平衡器的健康狀態檢查失敗,這表示負載平衡器無法連線到伺服器端點。若要疑難排解此問題,請檢查下列項目:

  • 確認伺服器端點的關聯安全性群組允許從負載平衡器上設定的子網路輸入連線。負載平衡器必須能夠透過連接埠 5080 連線到伺服器端點。

  • 確認伺服器的「狀態」為「線上」。

使用 AS2 連接器傳輸檔案

AS2 連接器會在貿易夥伴之間建立關係,以便將 AS2 訊息從 Transfer Family 伺服器傳輸到外部合作夥伴擁有的目的地。

您可以透過參考連接器 ID 和檔案的路徑,使用「Transfer Family 列」來傳送 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命令會傳回連接器的連接器 ID、URL 和 Amazon 資源名稱 (ARN)。

若要傳回特定連接器的內容,請使用您要使用的 ID 執行下列命令:

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

describe-connector令會傳回連接器的所有內容,包括其 URL、角色、設定檔、訊息配置通知 (MDN)、標籤和監視度量。

您可以檢視 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料夾中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,則會建立下列檔案:

    • 檔案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 會新增至檔案名稱。StartFileTransferAPI 作業 (或其他程序或指令碼呼叫此作業時) 會傳回傳輸 ID。

  • 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 記錄到記錄中的所有狀態碼。不同的郵件處理步驟適用於不同的郵件類型,並且僅用於監視。「已完成」和「失敗」狀態代表處理中的最後一個步驟,並且在 JSON 檔案中可見。

代碼 描述 處理完成了嗎?
處理 郵件正在轉換為最終格式。例如,解壓縮和解密步驟都具有此狀態。
中央傳輸 訊息處理正在傳送 MDN 回應。
MDN 接收 訊息處理正在接收 MDN 回應。
COMPLETED (已完成) 訊息處理已成功完成。此狀態包括為輸入郵件傳送 MDN 或外寄郵件的 MDN 驗證時。
失敗 郵件處理失敗。如需錯誤碼的清單,請參閱AS2 錯誤代碼

範例 JSON 檔案

本節列出輸入和出站傳輸的 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": "/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": "/DOC-EXAMPLE-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" }