設定 AS2 組態 - AWS Transfer Family

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

設定 AS2 組態

本教學課程會逐步說明如何使用 設定適用性聲明 2 (AS2) 組態 AWS Transfer Family。完成此處所述的步驟後,您將擁有AS2-enabled伺服器,已準備好接受來自範例交易合作夥伴的 AS2 訊息。您也會有一個連接器,可用來傳送 AS2 訊息給範例交易合作夥伴。

注意

範例設定的某些部分使用 AWS Command Line Interface (AWS CLI)。如果您尚未安裝 AWS CLI,請參閱AWS Command Line Interface 《 使用者指南》中的安裝或更新最新版本的 AWS CLI

  1. 為自己和交易合作夥伴建立憑證。如果您有可使用的現有憑證,您可以略過本節。

    此程序會在 中說明步驟 1:建立 AS2 的憑證

  2. 匯入您在步驟 1 中建立的憑證。

    此程序說明於 步驟 2:將憑證匯入為 Transfer Family 憑證資源

  3. 若要設定您的交易合作夥伴,請建立本機設定檔和合作夥伴設定檔。

    此程序會在 中說明步驟 3:為您和您的交易合作夥伴建立設定檔

  4. 建立使用 AS2 通訊協定的 AWS Transfer Family 伺服器。或者,您可以將彈性 IP 地址新增至伺服器,使其面向網際網路。

    此程序說明於 步驟 4:建立使用 AS2 通訊協定的 Transfer Family 伺服器

    注意

    您必須建立 Transfer Family 伺服器,僅限傳入傳輸。如果您只執行傳出傳輸,則不需要 Transfer Family 伺服器。

  5. 建立您與交易合作夥伴之間的協議。

    此程序會在 中說明步驟 5:建立您與合作夥伴之間的協議

    注意

    您必須建立僅限傳入傳輸的協議。如果您只執行傳出傳輸,則不需要協議。

  6. 在您和您的交易合作夥伴之間建立連接器。

    此程序說明於 步驟 6:在您和合作夥伴之間建立連接器

    注意

    您必須建立僅限傳出傳輸的連接器。如果您只執行傳入傳輸,則不需要連接器。

  7. 測試 AS2 檔案交換。

    此程序說明於 步驟 7:使用 Transfer 系列測試透過 AS2 交換檔案

完成這些步驟後,您可以執行下列動作:

  • 使用 Transfer Family start-file-transfer AWS Command Line Interface (AWS CLI) 命令將檔案傳送至AS2-enabled合作夥伴伺服器。

  • 透過虛擬私有雲端 (VPC) 端點,從連接埠 5080 上AS2-enabled合作夥伴伺服器接收檔案。

步驟 1:建立 AS2 的憑證

AS2 交換中的雙方都需要 X.509 憑證。您可以透過任何您喜歡的方式建立這些憑證。本主題說明如何從命令列使用 OpenSSL 來建立根憑證,然後簽署次級憑證。雙方必須產生自己的憑證。

注意

AS2 憑證的金鑰長度必須至少為 2048 位元,最多為 4096 位元。

若要透過合作夥伴傳輸檔案,請注意下列事項:

  • 您可以將憑證連接至設定檔。憑證包含公有或私有金鑰。

  • 您的貿易合作夥伴會傳送其公有金鑰給您,而您會將公有金鑰傳送給他們。

  • 您的貿易合作夥伴會使用公有金鑰加密訊息,並使用其私有金鑰簽署訊息。相反地,您可以使用合作夥伴的公有金鑰加密訊息,並使用私有金鑰簽署訊息。

    注意

    如果您偏好使用 GUI 管理金鑰, Portecle是您可以使用的一個選項。

產生範例憑證
重要

請勿將私有金鑰傳送給合作夥伴。在此範例中,您會為一方產生一組自我簽署的公有和私有金鑰。如果您要做為兩個交易合作夥伴進行測試,您可以重複這些指示來產生兩組金鑰:每個交易合作夥伴各一組。在此情況下,您不需要產生兩個根憑證授權單位 CAs)。

  1. 執行下列命令以產生具有 2048 位元長模數的 RSA 私有金鑰。

    /usr/bin/openssl genrsa -out root-ca-key.pem 2048
  2. 執行下列命令,使用您的 root-ca-key.pem 檔案建立自我簽署憑證。

    /usr/bin/openssl req \ -x509 -new -nodes -sha256 \ -days 1825 \ -subj "/C=US/ST=MA/L=Boston/O=TransferFamilyCustomer/OU=IT-dept/CN=ROOTCA" \ -key root-ca-key.pem \ -out root-ca.pem

    -subj 引數包含下列值。

    名稱 描述
    C 國家代碼 組織所在國家/地區的兩個字母代碼。
    ST 狀態、區域或省份 組織所在的州、區域或省。(在此情況下,區域不會參考您的 AWS 區域。)
    L Locality name (地區名稱) 組織所在的城市。
    O 組織名稱 組織的完整法定名稱,包括字尾,例如 LLC、Corp 等。
    OU 組織單位名稱 您組織中處理此憑證的部門。
    CN 一般名稱或完整網域名稱 (FQDN) 在此情況下,我們正在建立根憑證,因此值為 ROOTCA。在這些範例中,我們使用 CN 來描述憑證的目的。
  3. 為您的本機設定檔建立簽署金鑰和加密金鑰。

    /usr/bin/openssl genrsa -out signing-key.pem 2048 /usr/bin/openssl genrsa -out encryption-key.pem 2048
    注意

    有些AS2-enabled伺服器,例如 OpenAS2,會要求您使用相同的憑證來簽署和加密。在這種情況下,您可以匯入相同的私有金鑰和憑證,以達成這兩個目的。若要這樣做,請執行此命令,而非先前的兩個命令:

    /usr/bin/openssl genrsa -out signing-and-encryption-key.pem 2048
  4. 執行下列命令,為要簽署的根金鑰建立憑證簽署請求 (CSRs)。

    /usr/bin/openssl req -new -key signing-key.pem -subj \ "/C=US/ST=MA/L=Boston/O=TransferFamilyCustomer/OU=IT-dept/CN=Signer" -out signing-key-csr.pem
    /usr/bin/openssl req -new -key encryption-key.pem -subj \ "/C=US/ST=MA/L=Boston/O=TransferFamilyCustomer/OU=IT-dept/CN=Encrypter" -out encryption-key-csr.pem
  5. 接著,您必須建立 signing-cert.conf 檔案和 encryption-cert.conf 檔案。

    • 使用文字編輯器建立具有下列內容signing-cert.conf的檔案:

      authorityKeyIdentifier=keyid,issuer keyUsage = digitalSignature, nonRepudiation
    • 使用文字編輯器建立具有下列內容encryption-cert.conf的檔案:

      authorityKeyIdentifier=keyid,issuer keyUsage = dataEncipherment
  6. 最後,您可以執行下列命令來建立簽署的憑證。

    /usr/bin/openssl x509 -req -sha256 -CAcreateserial -days 1825 -in signing-key-csr.pem -out signing-cert.pem -CA \ root-ca.pem -CAkey root-ca-key.pem -extfile signing-cert.conf
    /usr/bin/openssl x509 -req -sha256 -CAcreateserial -days 1825 -in encryption-key-csr.pem -out encryption-cert.pem \ -CA root-ca.pem -CAkey root-ca-key.pem -extfile encryption-cert.conf

步驟 2:將憑證匯入為 Transfer Family 憑證資源

此程序說明如何使用 匯入憑證 AWS CLI。如果您想要改用 Transfer Family 主控台,請參閱 匯入 AS2 憑證

若要匯入您在步驟 1 中建立的簽署和加密憑證,請執行下列import-certificate命令。如果您使用相同的憑證進行加密和簽署,請匯入相同的憑證兩次 (一次使用 SIGNING,另一次ENCRYPTION使用 )。

注意

如果您有同時包含憑證及其鏈結的檔案,您可以僅使用 certificate 參數將該檔案提供給import-certificate命令。例如:

aws transfer import-certificate --usage ENCRYPTION --certificate file://combined-cert-and-chain-file.pem

如果您使用 certificate 參數來上傳憑證及其鏈結,請勿使用 certificate-chain 參數。

如果您結合憑證及其鏈結,您的金鑰會使用傳統 PEM 標準進行格式化,其中包括每 64 個字元換行「\n」。儲存的憑證在功能上等同於您上傳的憑證,唯一的差別是透過 的DescribeCertificate回應 AWS CLI 將包含這些換行字元。

aws transfer import-certificate --usage SIGNING --certificate file://signing-cert.pem \ --private-key file://signing-key.pem --certificate-chain file://root-ca.pem

此命令會傳回您的簽署 CertificateId。在下一節中,此憑證 ID 稱為 my-signing-cert-id

aws transfer import-certificate --usage ENCRYPTION --certificate file://encryption-cert.pem \ --private-key file://encryption-key.pem --certificate-chain file://root-ca.pem

此命令會傳回您的加密 CertificateId。在下一節中,此憑證 ID 稱為 my-encrypt-cert-id

接著,執行下列命令來匯入合作夥伴的加密和簽署憑證。

aws transfer import-certificate --usage ENCRYPTION --certificate file://partner-encryption-cert.pem \ --certificate-chain file://partner-root-ca.pem

此命令會傳回合作夥伴的加密 CertificateId。在下一節中,此憑證 ID 稱為 partner-encrypt-cert-id

aws transfer import-certificate --usage SIGNING --certificate file://partner-signing-cert.pem \ --certificate-chain file://partner-root-ca.pem

此命令會傳回合作夥伴的簽署 CertificateId。在下一節中,此憑證 ID 稱為 partner-signing-cert-id

步驟 3:為您和您的交易合作夥伴建立設定檔

此程序說明如何使用 建立 AS2 設定檔 AWS CLI。如果您想要改用 Transfer Family 主控台,請參閱 建立 AS2 設定檔

執行下列命令來建立本機 AS2 設定檔。此命令會參考包含公有和私有金鑰的憑證。

aws transfer create-profile --as2-id MYCORP --profile-type LOCAL --certificate-ids \ my-signing-cert-id my-encrypt-cert-id

此命令會傳回您的設定檔 ID。在下一節中,此 ID 稱為 my-profile-id

現在執行下列命令來建立合作夥伴設定檔。此命令只會使用您合作夥伴的公有金鑰憑證。若要使用此命令,user input placeholders請以您自己的資訊取代 ;例如,合作夥伴的 AS2 名稱和憑證 IDs。

aws transfer create-profile --as2-id PARTNER-COMPANY --profile-type PARTNER --certificate-ids \ partner-signing-cert-id partner-encrypt-cert-id

此命令會傳回合作夥伴的設定檔 ID。在下一節中,此 ID 稱為 partner-profile-id

注意

在先前的命令中,以您的組織名稱取代 MYCORP,並以您交易合作夥伴的組織名稱取代 PARTNER-COMPANY

步驟 4:建立使用 AS2 通訊協定的 Transfer Family 伺服器

此程序說明如何使用 Transfer Family 建立AS2-enabled 的伺服器 AWS CLI。

注意

許多範例步驟使用從檔案載入參數的命令。如需使用檔案載入參數的詳細資訊,請參閱如何從檔案載入參數

如果您想要改用 主控台,請參閱 使用 Transfer Family 主控台建立 AS2 伺服器

與建立 SFTP 或 FTPS AWS Transfer Family 伺服器的方式類似,您可以使用 create-server AWS CLI 命令的 --protocols AS2 參數來建立AS2-enabled 的伺服器。目前,Transfer Family 僅支援使用 AS2 通訊協定的 VPC 端點類型和 Amazon S3 儲存。

當您使用 create-server命令為 Transfer Family AS2-enabled 的伺服器時,系統會自動為您建立 VPC 端點。此端點公開 TCP 連接埠 5080,以便接受 AS2 訊息。

如果您想要公開 VPC 端點至網際網路,您可以將彈性 IP 地址與 VPC 端點建立關聯。

若要使用這些指示,您需要下列項目:

  • VPC 的 ID (例如 vpc-abcdef01)。

  • VPC 子網路IDs (例如 subnet-abcdef01netnet-abcdef01netnet-021345ab)。

  • 一或多個安全群組 IDs,允許來自您交易合作夥伴的 TCP 連接埠 5080 傳入流量 (例如 sg-1234567890abcdef0sg-abcdef01234567890)。

  • (選用) 您要與 VPC 端點建立關聯的彈性 IP 地址。

  • 如果您的交易合作夥伴未透過 VPN 連接到 VPC,則需要網際網路閘道。如需詳細資訊,請參閱「Amazon VPC 使用者指南」中的使用網際網路閘道連接至網際網路

建立AS2-enabled的伺服器
  1. 執行下列命令。將每個 user input placeholder 替換成您自己的資訊。

    aws transfer create-server --endpoint-type VPC \ --endpoint-details VpcId=vpc-abcdef01,SubnetIds=subnet-abcdef01,subnet-abcdef01,subnet- 021345ab,SecurityGroupIds=sg-abcdef01234567890,sg-1234567890abcdef0 --protocols AS2 \ --protocol-details As2Transports=HTTP
  2. (選用) 您可以將 VPC 端點設為公有。您只能透過 update-server操作將彈性 IP 地址連接至 Transfer Family 伺服器。下列命令會停止伺服器、使用彈性 IP 地址更新伺服器,然後再次啟動伺服器。

    aws transfer stop-server --server-id your-server-id
    aws transfer update-server --server-id your-server-id --endpoint-details \ AddressAllocationIds=eipalloc-abcdef01234567890,eipalloc-1234567890abcdef0,eipalloc-abcd012345ccccccc
    aws transfer start-server --server-id your-server-id

    start-server命令會自動為您建立 DNS 記錄,其中包含伺服器的公有 IP 地址。若要讓您的交易合作夥伴存取 伺服器,請為他們提供下列資訊。在此情況下, your-region會參考您的 AWS 區域。

    s-your-server-id.server.transfer.your-region.amazonaws.com

    您提供給交易合作夥伴的完整 URL 如下:

    http://s-your-server-id.server.transfer.your-region.amazonaws.com:5080

  3. 若要測試是否可存取AS2-enabled伺服器,請使用下列命令。請確定您的伺服器可以透過 VPC 端點的私有 DNS 地址或透過公有端點存取 (如果您將彈性 IP 地址與端點建立關聯)。

    如果您的伺服器設定正確,連線將會成功。不過,您會收到 HTTP 狀態碼 400 (無效的請求) 回應,因為您未傳送有效的 AS2 訊息。

    • 對於公有端點 (如果您在上一個步驟中與彈性 IP 地址相關聯),請執行下列命令,取代您的伺服器 ID 和區域。

      curl -vv -X POST http://s-your-server-id.transfer.your-region.amazonaws.com:5080
    • 如果您要在 VPC 中連線,請執行下列命令來查詢 VPC 端點的私有 DNS 名稱。

      aws transfer describe-server --server-id s-your-server-id

      describe-server命令會在 VpcEndpointId 參數中傳回您的 VPC 端點 ID。使用此值來執行下列命令。

      aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-your-vpc-endpoint-id

      describe-vpc-endpoints命令會傳回具有數個DnsName參數的DNSEntries陣列。在下列命令中使用區域 DNS 名稱 (不包含可用區域的名稱)。

      curl -vv -X POST http://vpce-your-vpce.vpce-svc-your-vpce-svc.your-region.vpce.amazonaws.com:5080

      例如,下列命令顯示上一個命令中預留位置的範例值。

      curl -vv -X POST http://vpce-0123456789abcdefg-fghij123.vpce-svc-11111aaaa2222bbbb.us-east-1.vpce.amazonaws.com:5080
  4. (選用) 設定記錄角色。Transfer Family 會將以結構化 JSON 格式傳送和接收的訊息狀態記錄到 Amazon CloudWatch logs。若要讓 Transfer Family 存取您帳戶中的 CloudWatch 日誌,您必須在伺服器上設定記錄角色。

    建立信任 的 AWS Identity and Access Management (IAM) 角色transfer.amazonaws.com,並連接 AWSTransferLoggingAccess受管政策。如需詳細資訊,請參閱建立 IAM 角色和政策。請記下您剛建立之 IAM 角色的 Amazon Resource Name (ARN),並執行下列update-server命令將其與伺服器建立關聯:

    aws transfer update-server --server-id your-server-id --logging-role arn:aws:iam::your-account-id:role/logging-role-name
    注意

    即使記錄角色是選用的,我們強烈建議進行設定,以便您可以查看訊息的狀態並對組態問題進行故障診斷。

步驟 5:建立您與合作夥伴之間的協議

此程序說明如何使用 建立 AS2 協議 AWS CLI。如果您想要改用 Transfer Family 主控台,請參閱 建立 AS2 協議

協議結合了兩個設定檔 (本機和合作夥伴)、其憑證,以及允許雙方之間傳入 AS2 傳輸的伺服器組態。您可以執行下列命令來列出您的項目。

aws transfer list-profiles --profile-type LOCAL aws transfer list-profiles --profile-type PARTNER aws transfer list-servers

此步驟需要具有對儲存貯體之讀取/寫入存取權的 Amazon S3 儲存貯體和 IAM 角色。建立此角色的指示與 Transfer Family SFTP、FTP 和 FTPS 通訊協定相同,可在 中使用建立 IAM 角色和政策

若要建立協議,您需要下列項目:

  • 存放 AS2 檔案的 Amazon S3 儲存貯體名稱 (以及物件字首,如有指定)。我們建議您為不同的檔案類型指定不同的目錄。

  • 可存取儲存貯體之 IAM 角色的 ARN

  • 您的 Transfer Family 伺服器 ID

  • 您的設定檔 ID 和合作夥伴的設定檔 ID

將下列程式碼儲存到檔案中,例如 agreementDetails.json。將每個 user input placeholder 替換成您自己的資訊。

{ "Description": "ExampleAgreementName", "ServerId": "your-server-id", "LocalProfileId": "your-profile-id", "PartnerProfileId": "your-partner-profile-id", "AccessRole": "arn:aws:iam::111111111111:role/TransferAS2AccessRole", "Status": "ACTIVE", "PreserveFilename": "ENABLED", "EnforceMessageSigning": "ENABLED", "CustomDirectories": { "FailedFilesDirectory": "/amzn-s3-demo-destination-bucket/AS2-failed", "MdnFilesDirectory": "/amzn-s3-demo-destination-bucket/AS2-mdn", "PayloadFilesDirectory": "/amzn-s3-demo-destination-bucket/AS2-payload", "StatusFilesDirectory": "/amzn-s3-demo-destination-bucket/AS2-status", "TemporaryFilesDirectory": "/amzn-s3-demo-destination-bucket/AS2-temp" } }
注意

若要使用單一基礎目錄而非個別目錄,請從先前的程式碼中移除CustomDirectories該行及其個別目錄行,並改用下列參數:

"BaseDirectory": "/amzn-s3-demo-destination-bucket/AS2-inbox"

請勿同時使用基本目錄和個別目錄參數,否則命令將會失敗。

然後執行以下命令。

aws transfer create-agreement --cli-input-json file://agreementDetails.json

如果成功,此命令會傳回協議的 ID。然後,您可以使用下列命令檢視協議的詳細資訊。

aws transfer describe-agreement --agreement-id agreement-id --server-id your-server-id

步驟 6:在您和合作夥伴之間建立連接器

此程序說明如何使用 建立 AS2 連接器 AWS CLI。如果您想要改為使用 Transfer Family 主控台,請參閱 設定 AS2 連接器

您可以使用 StartFileTransfer API 操作,透過連接器將存放在 Amazon S3 中的檔案傳送到交易合作夥伴的 AS2 端點。您可以執行下列命令,找到先前建立的設定檔。

aws transfer list-profiles

建立連接器時,您必須提供合作夥伴的 AS2 伺服器 URL。將下列文字複製到名為 的檔案testAS2Config.json

{ "Compression": "ZLIB", "EncryptionAlgorithm": "AES256_CBC", "LocalProfileId": "your-profile-id", "MdnResponse": "SYNC", "MdnSigningAlgorithm": "DEFAULT", "MessageSubject": "Your Message Subject", "PartnerProfileId": "partner-profile-id", "PreserveContentType": "FALSE", "SigningAlgorithm": "SHA256" }
注意

對於 EncryptionAlgorithm,除非您必須支援需要的舊版用戶端,否則請勿指定DES_EDE3_CBC演算法,因為它是一種較弱的加密演算法。

然後執行下列命令來建立連接器。

aws transfer create-connector --url "http://partner-as2-server-url" \ --access-role your-IAM-role-for-bucket-access \ --logging-role arn:aws:iam::your-account-id:role/service-role/AWSTransferLoggingAccess \ --as2-config file:///path/to/testAS2Config.json

步驟 7:使用 Transfer 系列測試透過 AS2 交換檔案

從您的交易合作夥伴接收檔案

如果您將公有彈性 IP 地址與 VPC 端點建立關聯,Transfer Family 會自動建立包含公有 IP 地址的 DNS 名稱。子網域是您的 AWS Transfer Family 伺服器 ID (格式為 s-1234567890abcdef0)。以下列格式將您的伺服器 URL 提供給您的交易合作夥伴。

http://s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com:5080

如果您未將公有彈性 IP 地址與 VPC 端點建立關聯,請查詢 VPC 端點的主機名稱,該端點可以透過連接埠 5080 上的交易合作夥伴 HTTP POST 接受 AS2 訊息。若要擷取 VPC 端點詳細資訊,請使用下列命令。

aws transfer describe-server --server-id s-1234567890abcdef0

例如,假設上述命令傳回 的 VPC 端點 IDvpce-1234abcd5678efghi。然後,您可以使用下列命令來擷取 DNS 名稱。

aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-1234abcd5678efghi

此命令會傳回執行下列命令所需的 VPC 端點的所有詳細資訊。

DNS 名稱會列在DnsEntries陣列中。您的交易合作夥伴必須位於您的 VPC 內,才能存取您的 VPC 端點 (例如透過 AWS PrivateLink 或 VPN)。以下列格式將您的 VPC 端點 URL 提供給合作夥伴。

http://vpce-your-vpce-id.vpce-svc-your-vpce-svc-id.your-region.vpce.amazonaws.com:5080

例如,下列 URL 會顯示先前命令中預留位置的範例值。

http://vpce-0123456789abcdefg-fghij123.vpce-svc-11111aaaa2222bbbb.us-east-1.vpce.amazonaws.com:5080

在此範例中,成功的傳輸會存放在您在 中指定的 base-directory 參數中指定的位置步驟 5:建立您與合作夥伴之間的協議。如果我們成功接收名為 myfile1.txt和 的檔案myfile2.txt,檔案會儲存為 /path-defined-in-the-agreement/processed/original_filename.messageId.original_extension。在這裡,檔案會儲存為 /amzn-s3-demo-destination-bucket/AS2-inbox/processed/myfile1.messageId.txt/amzn-s3-demo-destination-bucket/AS2-inbox/processed/myfile2.messageId.txt

如果您在建立 Transfer Family 伺服器時設定記錄角色,您也可以檢查 CloudWatch 日誌是否有 AS2 訊息的狀態。

傳送檔案給您的交易合作夥伴

您可以使用 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 訊息的狀態。