本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 AS2 启用您的服务器终端节点
本主题介绍如何使用设置适用性声明 2 (AS2) 配置Amazon Transfer Family。完成此处描述的步骤后,您将拥有一台支持 AS2 的服务器,可以接受来自示例贸易伙伴的 AS2 消息,以及一个可用于向示例交易伙伴发送 AS2 消息的连接器。
-
为自己和您的贸易伙伴创建证书。如果您有可以使用的现有证书,则可以跳过本节。
有关此过程的说明,请参见步骤 1:为 AS2 创建证书。
-
创建使用 AS2 协议的Amazon Transfer Family服务器。或者,您可以向服务器添加弹性 IP 地址,使其面向 Internet。
有关此过程的说明,请参见步骤 2:创建使用 AS2 协议的Transfer Family 服务器。
-
导入已在步骤 1 中创建的证书。
有关此过程的说明,请参见步骤 3:将证书作为 Transfer Family 证书资源导入。
-
创建本地资料和合作伙伴档案以设置您的贸易伙伴。
有关此过程的说明,请参见第 4 步:为您和您的贸易伙伴创建个人资料。
-
在您和您的贸易伙伴之间创建协议。
有关此过程的说明,请参见第 5 步:创建您与合作伙伴之间的协议。
-
在您和您的贸易伙伴之间创建连接器。
有关此过程的说明,请参见第 6 步:创建您和伴侣之间的连接器。
-
测试 AS2 文件交换。
有关此过程的说明,请参见步骤 7:使用 Transfer Family 测试在 AS2 上交换文件。
完成这些步骤后,您可以执行以下操作:
-
使用 Transfer Family
start-file-transfer
Amazon Command Line Interface (Amazon CLI) 命令将文件发送到启用 AS2 的远程合作伙伴服务器。 -
通过您的虚拟私有云 (VPC) 终端节点从端口 5080 上启用 AS2 的远程合作伙伴服务器接收文件。
步骤 1:为 AS2 创建证书
AS2 交易所中的双方都需要 X.509 证书。您可以按照自己喜欢的任何方式创建这些证书。本主题介绍如何从命令行使用 OpenSSL
要与合作伙伴传输文件,请注意以下事项:
-
您可以将证书附加到配置文件。证书包含公钥或私钥。
-
您的贸易伙伴将他们的公钥发送给您,而您则将您的公钥发送给他们。
-
您的贸易伙伴使用您的公钥对消息进行加密,并使用其私钥对其进行签名。相反,您可以使用合作伙伴的公钥加密消息,然后使用私钥对其进行签名。
注意 如果你更喜欢使用 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
州、地区或省 组织所在州、地区或省。(地区不是指您的Amazon Web Services 区域。) L
所在地名称 组织所在城市。 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 的服务器Amazon CLI。如果要改为使用控制台,请参阅创建启用 AS2 的服务器。
与创建 SFTP 或 FTPSAmazon Transfer Family 服务器的方式类似,您可以使用create-server
Amazon CLI命令的--protocols AS2
参数创建支持 AS2 的服务器。目前,Transfer Family 仅支持 VPC 终端节点类型和采用 AS2 协议的 Amazon S3 存储。
当您使用create-server
命令为 Transfer Family 创建启用 AS2 的服务器时,系统会自动为您创建 VPC 终端节点。此端点暴露了 TCP 端口 5080,以便它可以接受 AS2 消息。
如果您想向互联网公开您的 VPC 终端节点,可以将弹性 IP 地址与您的 VPC 终端节点相关联。
要使用这些说明,您需要以下内容:
-
您的 VPC 的 ID(例如 vpc-abcdef01)。
-
您的 VPC 子网的 ID(例如 subnet-abcdef01、subnet-subnet-abcdef01、subnet-021345ab)。
-
允许您的贸易伙伴通过 TCP 端口 5080 传入流量的安全组的一个或多个 ID(例如 sg-1234567890abcdef0 和 sg-abcdef01234567890)。
-
(可选)您要与 VPC 终端节点关联的弹性 IP 地址。
-
如果您的贸易伙伴未通过 VPN 连接到您的 VPC,则需要互联网网关。有关更多信息,请参阅《Amazon VPC 用户指南》中的使用互联网网Connect 互联网。
创建启用 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
命令会自动为您创建一个 DNS 记录,其中包含服务器的公有 IP 地址。要让您的贸易伙伴访问服务器,您需要向他们提供以下信息。在这种情况下,
指的是你的Amazon Web Services 区域。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 和区域。
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
命令返回一个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 格式记录发送和接收消息的状态到亚马逊 CloudWatch 日志。要向 Transfer Family 提供对您账户中 CloudWatch 日志的访问权限,您必须在服务器上配置日志角色。
创建一个信任的Amazon 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
注意 尽管日志角色是可选的,但我们强烈建议您对其进行设置,以便您可以查看消息状态并解决配置问题。
步骤 3:将证书作为 Transfer Family 证书资源导入
此过程介绍如何使用导入证书Amazon 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 配置文件Amazon 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
替换为您的组织名称,将 PART NER-COMPAN
Y 替换为贸易伙伴组织的名称。
第 5 步:创建您与合作伙伴之间的协议
此过程介绍如何使用创建 AS2 协议Amazon 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 /DESTINATION-EXAMPLE-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 连接器Amazon CLI。如果你想改用 Transfer Family 控制台,请参阅创建 AS2 连接器。
您可以使用StartFileTransfer
API 操作使用连接器将存储在 Amazon S3 中的文件发送到贸易伙伴的 AS2 终端节点。您可以通过运行以下命令找到之前创建的配置文件。
aws transfer list-profiles
创建连接器时,必须提供合作伙伴的 AS2 服务器 URL。将下面的文本复制到名为的文件中testAS2Config.json
。
{ "LocalProfileId": "
your-profile-id
", "PartnerProfileId": "partner-profile-id
", "MdnResponse": "SYNC", "Compression": "ZLIB", "EncryptionAlgorithm": "AES256_CBC", "SigningAlgorithm": "SHA256", "MdnSigningAlgorithm": "DEFAULT", "MessageSubject": "Your Message Subject
" }
然后运行以下命令以创建连接器。
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 地址关联到您的 VPC 终端节点,Transfer Family 会自动创建一个包含您的公有 IP 地址的 DNS 名称。子域名是您的Amazon Transfer Family服务器 ID(格式为s-1234567890abcdef0
)。按照以下格式将服务器网址提供给贸易伙伴。
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 终端节点 ID 为vpce-1234abcd5678efghi
。然后,您将使用以下命令检索 DNS 名称。
aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-1234abcd5678efghi
此命令返回运行以下命令所需的 VPC 终端节点的所有详细信息。
DNS 名称列在DnsEntries
阵列中。您的贸易伙伴必须位于您的 VPC 内才能访问您的 VPC 终端节点(例如,通过Amazon PrivateLink或 VPN)。采用以下格式将 VPC 终端节点网址提供给合作伙伴。
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
向您的贸易伙伴发送文件
您可以使用 Transfer Family 通过在以下命令中引用连接器 ID 和文件路径来发送文件。
aws transfer start-file-transfer --connector-id c-
1234567890abcdef0
\ --send-file-paths "/SOURCE-EXAMPLE-BUCKET/myfile1.txt
" "/SOURCE-EXAMPLE-BUCKET/myfile2.txt
"
要查找连接器的详细信息,请运行命令aws transfer
list-connectors
。此命令返回连接器的连接器 ID、URL 和 ARN。然后,您可以使用要使用的 ID 运行命令aws transfer
describe-connector --connector-id
。此命令返回的所有详细信息your-connector-id
。your-connector-id
成功的传输将存储在您在中指定的base-directory
参数中指定的位置第 5 步:创建您与合作伙伴之间的协议。如果传输成功完成,则文件将存储为/path-defined-in-the-
agrement /processed/ orig inal_Filename.messageid.original_Extension
。在此示例中,Destination-example-bucket/as2-inbox/processed/myFile1。 m@@ essageId
.txt 和 Destination-example-bucket/as2-inbox/processed/myFile2。 m@@ essageId
.txt。如果您在创建连接器时配置了日志角色,则还可以检查 CloudWatch 日志,了解 AS2 消息的状态。