傳送和接收 AS2 訊息 - AWS Transfer Family

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

傳送和接收 AS2 訊息

本節說明傳送和接收 AS2 訊息的程序。它還提供與 AS2 訊息相關聯的檔案名稱和位置的詳細資訊。

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

加密演算法 HTTP HTTPS 備註
AES128_CBC Yes Yes
AES192_CBC Yes Yes
AES256_CBC Yes Yes
DES_EDE3_CBC Yes Yes Only use this algorithm if you must support a legacy client that requires it, as it is a weak encryption algorithm.
NONE No Yes If you are sending messages to a Transfer Family server, you can only select NONE if you are using an Application Load Balancer (ALB).

接收 AS2 訊息程序

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

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

  2. 合作夥伴的遠端 AS2 伺服器會簽署和加密檔案內容,然後將 HTTP POST 請求傳送至 Transfer Family 上託管的 AS2 傳入端點。

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

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

  5. 稽核線索會寫入 Amazon CloudWatch,其中包含交換的詳細資訊。

  6. 解密的檔案可在名為 的資料夾中使用inbox/processed

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

透過 HTTPS 傳送和接收 AS2 訊息

本節說明如何設定 Transfer Family 伺服器,該伺服器使用 AS2 通訊協定透過 HTTPS 傳送和接收訊息。

透過 HTTPS 傳送 AS2 訊息

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

  • 針對 URL,指定 HTTPS URL

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

    注意

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

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

透過 HTTPS 接收 AS2 訊息

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

先決條件

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

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

    注意

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

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

    注意

    彈性 IP 地址的數量必須符合您搭配伺服器端點使用的可用區域數量。

您可以設定 Network Load Balance (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標頭。

此標頭說明於 https://developer.mozilla.org 網站上的 X-Forwarded-Proto

TLS/SSL 終止 支援 TLS/SSL 終止 支援 TLS/SSL 終止
相互 TLS (mTLS) Transfer Family 目前不支援使用 NLB for mTLS 支援 mTLS
Configure NLB

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

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

  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 (ALB)。

建立 Application Load Balancer 並將伺服器的 VPC 端點定義為負載平衡器的目標
  1. 開啟位於 https://https://console.aws.amazon.com/ec2/ 的 Amazon Elastic Compute Cloud 主控台。

  2. 從導覽窗格中,選擇負載平衡器,然後選擇建立負載平衡器

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

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

  5. (選用)。如果您想要設定交互身分驗證 (mTLS),請設定安全設定和信任存放區。

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

    2. 用戶端憑證處理下,選取相互身分驗證 (mTLS)

    3. 選擇使用信任存放區驗證

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

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

  7. 設定目標群組的運作狀態檢查,以在連接埠 5080 上使用 HTTP 通訊協定。

  8. 建立新的規則,將 HTTPS 流量從接聽程式轉送到目標群組。

  9. 設定接聽程式以使用您的 SSL/TLS 憑證。

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

若要建立目標群組
  1. 在先前程序中選擇建立目標群組後,系統會將您導向至新目標群組的指定群組詳細資訊頁面。

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

    • 針對選擇目標類型,選擇 IP 地址

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

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

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

      • 針對 Application Load Balancer (ALB),選擇 HTTP

    • 針對連接埠,輸入 5080

    • 針對 IP 地址類型,選擇 IPv4

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

  3. 運作狀態檢查區段中,選擇運作狀態檢查通訊協定

    • 針對 ALB,選擇 HTTP

    • 針對 NLB,選擇 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 名稱,透過自訂連接埠連線至伺服器。

重要

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

  • 確認伺服器端點相關聯的安全群組允許從負載平衡器上設定的子網路傳入連線。負載平衡器必須能夠透過連接埠 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 "/amzn-s3-demo-source-bucket/myfile1.txt" "/amzn-s3-demo-source-bucket/myfile2.txt"

若要取得連接器的詳細資訊,請執行下列命令:

aws transfer list-connectors

list-connectors 命令會傳回連接器IDs、URLs 和 Amazon Resource Name (ARNs)。

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

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

describe-connector 命令會傳回連接器的所有屬性,包括其 URL、角色、設定檔、訊息處置通知 (MDNs)、標籤和監控指標。

您可以檢視 JSON 和 MDN 檔案,確認合作夥伴已成功收到檔案。這些檔案是根據中所述的慣例命名檔案名稱和位置。如果您在建立連接器時設定了記錄角色,您也可以檢查 CloudWatch 日誌是否有 AS2 訊息的狀態。

若要檢視 AS2 連接器詳細資訊,請參閱 檢視 AS2 連接器詳細資訊。如需建立 AS2 連接器的詳細資訊,請參閱 設定 AS2 連接器

傳送 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-enabled的現有伺服器實作整合。如需支援組態的詳細資訊,請參閱 AS2 組態

檔案名稱和位置

本節討論 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,則會建立下列檔案:

    • 檔案ExampleFileInS3Payload.c4d6b6c7-23ea-4b8c-9ada-0cb811dc8b35@44313c54b0a46a36.dat

    • JSONExampleFileInS3Payload.c4d6b6c7-23ea-4b8c-9ada-0cb811dc8b35@44313c54b0a46a36.dat.json

    • MDNExampleFileInS3Payload.c4d6b6c7-23ea-4b8c-9ada-0cb811dc8b35@44313c54b0a46a36.dat.mdn

對於傳出傳輸,命名類似,差別在於沒有傳入訊息檔案,而且傳輸訊息的傳輸 ID 會新增至檔案名稱。StartFileTransfer API 操作 (或另一個程序或指令碼呼叫此操作時) 會傳回傳輸 ID。

  • 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,則會建立下列檔案:

    • JSONExampleFileOutTestOutboundSyncMdn.dedf4601-4e90-4043-b16b-579af35e0d83.fbe18db8-7361-42ff-8ab6-49ec1e435f34@c9c705f0baaaabaa.dat.json

    • MDNExampleFileOutTestOutboundSyncMdn.dedf4601-4e90-4043-b16b-579af35e0d83.fbe18db8-7361-42ff-8ab6-49ec1e435f34@c9c705f0baaaabaa.dat.mdn

您也可以檢查 CloudWatch 日誌以檢視傳輸的詳細資訊,包括任何失敗的 。

狀態碼

下表列出當您或合作夥伴傳送 AS2 訊息時,可以記錄到 CloudWatch 日誌的所有狀態碼。不同的訊息處理步驟適用於不同的訊息類型,且僅用於監控。COMPLETED 和 FAILED 狀態代表處理中的最後一個步驟,並顯示在 JSON 檔案中。

代碼 描述 處理完成?
處理中 訊息正在轉換為其最終格式。例如,解壓縮和解密步驟都具有此狀態。
MDN_TRANSMIT 訊息處理正在傳送 MDN 回應。
MDN_RECEIVE 訊息處理正在接收 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": "/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" }