本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 AS2 組態
本教學課程將逐步介紹如何使用設定適用性陳述式 2 (AS2) 組態。 AWS Transfer Family完成此處描述的步驟後,您將擁有一台已啟用 AS2 的伺服器,可接受來自範例交易夥伴的 AS2 訊息。您也將擁有一個連接器,可用來傳送 AS2 訊息給範例交易夥伴。
注意
範例設定的某些部分使用 AWS Command Line Interface (AWS CLI)。如果您尚未安裝 AWS CLI,請參閱《使用指南》 AWS CLI中的〈安裝或更新最新版本的AWS Command Line Interface〉。
-
為您自己和交易夥伴建立憑證。如果您有可以使用的現有憑證,則可以略過本節。
此程序會在中描述步驟 1:為 AS2 建立憑證。
-
建立使用 AS2 通訊協定的 AWS Transfer Family 伺服器。或者,您可以將彈性 IP 地址添加到服務器以使其面向互聯網。
此程序會在中描述步驟 2:建立使用 AS2 通訊協定的 Transfer Family 伺服器。
注意
您必須建立 Transfer Family 伺服器,只能用於輸入轉移作業。如果您只執行對外傳輸,則不需要 Transfer Family 伺服器。
-
匯入您在步驟 1 中建立的憑證。
此程序會在中描述步驟 3:將憑證匯入為 Transfer Family 憑證資源。
-
若要設定您的交易夥伴,請建立當地個人檔案和合作夥伴個人檔案。
此程序會在中描述步驟 4:為您和您的交易夥伴建立個人檔案。
-
建立您與交易夥伴之間的協議。
此程序會在中描述步驟 5:建立您與合作夥伴之間的協議。
注意
您必須僅針對入埠移轉建立協議。如果您只執行對外轉移,則不需要合約。
-
在您與交易夥伴之間建立連接器。
此程序會在中描述步驟 6:在您和合作夥伴之間建立連接器。
注意
您必須僅為輸出傳輸建立連接器。如果您只執行輸入傳輸,則不需要連接器。
-
測試 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)。
-
執行下列命令以產生具有 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 的伺服器 (例如 OpenAS2) 會要求您使用相同的憑證來進行簽署和加密。在這種情況下,您可以為這兩種目的導入相同的私鑰和證書。若要這麼做,請執行這個命令,而不是先前的兩個命令:
/usr/bin/openssl genrsa -out signing-and-encryption-key.pem 2048
-
執行下列命令,為要簽署的根金鑰建立憑證簽署要求 (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 -
接下來,您必須創建一個
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:建立使用 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 的伺服器
-
執行下列命令。將每個
替換成您自己的資訊。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
命令會自動為您建立包含伺服器公用 IP 位址的 DNS 記錄。為了讓交易夥伴能夠存取伺服器,您必須向他們提供下列資訊。在這種情況下,
指的是您的 AWS 區域.your-region
s-
your-server-id
.server.transfer.your-region
.amazonaws.com您提供給交易夥伴的完整網址如下:
http://s-
your-server-id
.server.transfer.your-region
.amazonaws.com:5080 -
若要測試啟用 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
-
-
(選擇性) 設定記錄角色。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
現在,通過運行以下命令創建合作夥伴配置文件。這個命令只會使用合作夥伴的公開金鑰憑證。若要使用此指令,請以您自己
的資訊取代;例如,您的合作夥伴的 AS2 名稱和憑證 ID。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
替換為您組織的名稱,將「合作夥伴公司
」替換為您的交易夥伴組織的名稱。
步驟 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-idyour-server-id
\ --local-profile-idyour-profile-id
--partner-profile-idyour-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-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
", "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 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 訊息的狀態。