設定 AS2 組態 - AWS Transfer Family

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

設定 AS2 組態

本教學課程將逐步介紹如何使用設定適用性陳述式 2 (AS2) 組態。 AWS Transfer Family完成此處描述的步驟後,您將擁有一台已啟用 AS2 的伺服器,可接受來自範例交易夥伴的 AS2 訊息。您也將擁有一個連接器,可用來傳送 AS2 訊息給範例交易夥伴。

注意

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

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

    此程序會在中描述步驟 1:為 AS2 建立憑證

  2. 建立使用 AS2 通訊協定的 AWS Transfer Family 伺服器。或者,您可以將彈性 IP 地址添加到服務器以使其面向互聯網。

    此程序會在中描述步驟 2:建立使用 AS2 通訊協定的 Transfer Family 伺服器

    注意

    您必須建立 Transfer Family 伺服器,只能用於輸入轉移作業。如果您只執行對外傳輸,則不需要 Transfer Family 伺服器。

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

    此程序會在中描述步驟 3:將憑證匯入為 Transfer Family 憑證資源

  4. 若要設定您的交易夥伴,請建立當地個人檔案和合作夥伴個人檔案。

    此程序會在中描述步驟 4:為您和您的交易夥伴建立個人檔案

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

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

    注意

    您必須僅針對入埠移轉建立協議。如果您只執行對外轉移,則不需要合約。

  6. 在您與交易夥伴之間建立連接器。

    此程序會在中描述步驟 6:在您和合作夥伴之間建立連接器

    注意

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

  7. 測試 AS2 檔案交換。

    此程序會在中描述第 7 步:使用 Transfer Family 列測試在 AS2 上交換文件

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

  • 使用「傳送系列」start-file-transfer AWS Command Line Interface (AWS CLI) 指令,將檔案傳送至啟用 AS2 的遠端夥伴伺服器。

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

步驟 1:為 AS2 建立憑證

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

注意

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

若要與合作夥伴一起傳輸檔案,請注意下列事項:

  • 您可以將憑證附加到設定檔。憑證包含公開或私密金鑰。

  • 您的交易夥伴將他們的公鑰發送給您,然後您將其發送給您的密鑰。

  • 您的交易夥伴會使用您的公開金鑰加密訊息,並使用他們的私密金鑰簽署訊息。相反,您可以使用合作夥伴的公鑰對消息進行加密,並使用私鑰對其進行簽名。

    注意

    如果您喜歡使用 GUI 管理密鑰,Portecle則可以使用其中一個選項。

若要產生範例憑證
重要

不要將您的私鑰發送給您的伴侶。在此範例中,您會為一方產生一組自我簽署的公開金鑰和私密金鑰。如果您要同時擔任兩個交易夥伴進行測試,您可以重複這些指示來產生兩組金鑰:每個交易夥伴各一組金鑰。在此情況下,您不需要產生兩個根憑證授權單位 (CA)。

  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 的伺服器 (例如 OpenAS2) 會要求您使用相同的憑證來進行簽署和加密。在這種情況下,您可以為這兩種目的導入相同的私鑰和證書。若要這麼做,請執行這個命令,而不是先前的兩個命令:

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

    /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:建立使用 AS2 通訊協定的 Transfer Family 伺服器

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

注意

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

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

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

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

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

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

  • VPC 的識別碼 (例如,虛擬私人雲端 01)。

  • VPC 子網路的識別碼 (例如,子網路 -abcdef01、子網路 -021345ab)。

  • 一或多個安全性群組識別碼,這些識別碼允許來自您的交易夥伴傳入 TCP 連接埠 5080 的流量 (例如,sg-123 4567890)。

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

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

若要建立已啟用 AS2 的伺服器
  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命令會自動為您建立包含伺服器公用 IP 位址的 DNS 記錄。為了讓交易夥伴能夠存取伺服器,您必須向他們提供下列資訊。在這種情況下,your-region指的是您的 AWS 區域.

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

    您提供給交易夥伴的完整網址如下:

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

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

    如果您的伺服器設定正確,連線就會成功。但是,您將收到 HTTP 狀態碼 400(錯誤請求)響應,因為您沒有發送有效的 AS2 消息。

    • 對於公共端點(如果您在上一步中關聯了彈性 IP 地址),請運行以下命令,替換您的服務器 ID 和 Region。

      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 端點識別碼。使用此值執行下列命令。

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

      這個describe-vpc-endpoints命令返回一個數DNSEntries組,有幾個DnsName參數。在下列命令中使用區域 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 日誌。若要讓 Transfer Family 能夠存取您帳戶中的記 CloudWatch 錄,您必須在伺服器上設定記錄角色。

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

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

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

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

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

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

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

步驟 4:為您和您的交易夥伴建立個人檔案

此程序說明如何使用建立 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 名稱和憑證 ID。

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 替換為您組織的名稱,將「合作夥伴公司」替換為您的交易夥伴組織的名稱。

步驟 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 角色和政策

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

  • Amazon S3 儲存貯體名稱 (以及物件前綴,如果指定)

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

  • 您的 Transfer Family 服務器 ID

  • 您的個人資料 ID 和合作夥伴的個人資料 ID

執行下列命令以建立協定。

aws transfer create-agreement --description "ExampleAgreementName" --server-id your-server-id \ --local-profile-id your-profile-id --partner-profile-id your-partner-profile-id --base-directory /DOC-EXAMPLE-DESTINATION-BUCKET/AS2-inbox \ --access-role arn:aws:iam::111111111111:role/TransferAS2AccessRole

如果成功,此命令會傳回協定的 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", "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 Family 列測試在 AS2 上交換文件

接收來自交易夥伴的檔案

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

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

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

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

例如,假設上述命令傳回的 VPC 端點識別碼。vpce-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. 在這裡,文件存儲為/DOC-EXAMPLE-DESTINATION-BUCKET/AS2-inbox/processed/myfile1.messageId.txt/DOC-EXAMPLE-DESTINATION-BUCKET/AS2-inbox/processed/myfile2.messageId.txt

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

傳送檔案給交易夥伴

您可以透過參考連接器 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 訊息的狀態。