本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 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:建立 AS2 的憑證。
-
匯入您在步驟 1 中建立的憑證。
此程序說明於 步驟 2:將憑證匯入為 Transfer Family 憑證資源。
-
若要設定您的交易合作夥伴,請建立本機設定檔和合作夥伴設定檔。
此程序會在 中說明步驟 3:為您和您的交易合作夥伴建立設定檔。
-
建立使用 AS2 通訊協定的 AWS Transfer Family 伺服器。或者,您可以將彈性 IP 地址新增至伺服器,使其面向網際網路。
此程序說明於 步驟 4:建立使用 AS2 通訊協定的 Transfer Family 伺服器。
注意
您必須建立 Transfer Family 伺服器,僅限傳入傳輸。如果您只執行傳出傳輸,則不需要 Transfer Family 伺服器。
-
建立您與交易合作夥伴之間的協議。
此程序會在 中說明步驟 5:建立您與合作夥伴之間的協議。
注意
您必須建立僅限傳入傳輸的協議。如果您只執行傳出傳輸,則不需要協議。
-
在您和您的交易合作夥伴之間建立連接器。
此程序說明於 步驟 6:在您和合作夥伴之間建立連接器。
注意
您必須建立僅限傳出傳輸的連接器。如果您只執行傳入傳輸,則不需要連接器。
-
測試 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)。
-
執行下列命令以產生具有 2048 位元長模數的 RSA 私有金鑰。
/usr/bin/openssl genrsa -out root-ca-key.pem 2048
-
執行下列命令,使用您的
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
來描述憑證的目的。 -
為您的本機設定檔建立簽署金鑰和加密金鑰。
/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
-
執行下列命令,為要簽署的根金鑰建立憑證簽署請求 (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 -
接著,您必須建立
signing-cert.conf
檔案和encryption-cert.conf
檔案。-
使用文字編輯器建立具有下列內容
signing-cert.conf
的檔案:authorityKeyIdentifier=keyid,issuer keyUsage = digitalSignature, nonRepudiation
-
使用文字編輯器建立具有下列內容
encryption-cert.conf
的檔案:authorityKeyIdentifier=keyid,issuer keyUsage = dataEncipherment
-
-
最後,您可以執行下列命令來建立簽署的憑證。
/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
現在執行下列命令來建立合作夥伴設定檔。此命令只會使用您合作夥伴的公有金鑰憑證。若要使用此命令,
請以您自己的資訊取代 ;例如,合作夥伴的 AS2 名稱和憑證 IDs。user input placeholders
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-abcdef01、netnet-abcdef01、netnet-021345ab)。
-
一或多個安全群組 IDs,允許來自您交易合作夥伴的 TCP 連接埠 5080 傳入流量 (例如 sg-1234567890abcdef0 和 sg-abcdef01234567890)。
-
(選用) 您要與 VPC 端點建立關聯的彈性 IP 地址。
-
如果您的交易合作夥伴未透過 VPN 連接到 VPC,則需要網際網路閘道。如需詳細資訊,請參閱「Amazon VPC 使用者指南」中的使用網際網路閘道連接至網際網路。
建立AS2-enabled的伺服器
-
執行下列命令。將每個
替換成您自己的資訊。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 -
(選用) 您可以將 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 地址。若要讓您的交易合作夥伴存取 伺服器,請為他們提供下列資訊。在此情況下,
會參考您的 AWS 區域。your-region
s-
your-server-id
.server.transfer.your-region
.amazonaws.com您提供給交易合作夥伴的完整 URL 如下:
http://s-
your-server-id
.server.transfer.your-region
.amazonaws.com:5080 -
若要測試是否可存取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
-
-
(選用) 設定記錄角色。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-idyour-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-roleyour-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 訊息的狀態。