为 AS2 启用您的服务器终端节点 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 AS2 启用您的服务器终端节点

本主题介绍如何使用设置适用性声明 2 (AS2) 配置Amazon Transfer Family。完成此处描述的步骤后,您将拥有一台支持 AS2 的服务器,可以接受来自示例贸易伙伴的 AS2 消息,以及一个可用于向示例交易伙伴发送 AS2 消息的连接器。

  1. 为自己和您的贸易伙伴创建证书。如果您有可以使用的现有证书,则可以跳过本节。

    有关此过程的说明,请参见步骤 1:为 AS2 创建证书

  2. 创建使用 AS2 协议的Amazon Transfer Family服务器。或者,您可以向服务器添加弹性 IP 地址,使其面向 Internet。

    有关此过程的说明,请参见步骤 2:创建使用 AS2 协议的Transfer Family 服务器

  3. 导入已在步骤 1 中创建的证书。

    有关此过程的说明,请参见步骤 3:将证书作为 Transfer Family 证书资源导入

  4. 创建本地资料和合作伙伴档案以设置您的贸易伙伴。

    有关此过程的说明,请参见第 4 步:为您和您的贸易伙伴创建个人资料

  5. 在您和您的贸易伙伴之间创建协议。

    有关此过程的说明,请参见第 5 步:创建您与合作伙伴之间的协议

  6. 在您和您的贸易伙伴之间创建连接器。

    有关此过程的说明,请参见第 6 步:创建您和伴侣之间的连接器

  7. 测试 AS2 文件交换。

    有关此过程的说明,请参见步骤 7:使用 Transfer Family 测试在 AS2 上交换文件

完成这些步骤后,您可以执行以下操作:

  • 使用 Transfer Familystart-file-transferAmazon Command Line Interface (Amazon CLI) 命令将文件发送到启用 AS2 的远程合作伙伴服务器。

  • 通过您的虚拟私有云 (VPC) 终端节点从端口 5080 上启用 AS2 的远程合作伙伴服务器接收文件。

步骤 1:为 AS2 创建证书

AS2 交易所中的双方都需要 X.509 证书。您可以按照自己喜欢的任何方式创建这些证书。本主题介绍如何从命令行使用 OpenSSL 创建根证书,然后签署次级证书。双方都必须生成自己的证书。

要与合作伙伴传输文件,请注意以下事项:

  • 您可以将证书附加到配置文件。证书包含公钥或私钥。

  • 您的贸易伙伴将他们的公钥发送给您,而您则将您的公钥发送给他们。

  • 您的贸易伙伴使用您的公钥对消息进行加密,并使用其私钥对其进行签名。相反,您可以使用合作伙伴的公钥加密消息,然后使用私钥对其进行签名。

    注意

    如果你更喜欢使用 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 州、地区或省 组织所在州、地区或省。(地区不是指您的Amazon Web Services 区域。)
    L 所在地名称 组织所在城市。
    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 的服务器Amazon CLI。如果要改为使用控制台,请参阅创建启用 AS2 的服务器

与创建 SFTP 或 FTPSAmazon Transfer Family 服务器的方式类似,您可以使用create-serverAmazon 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-abcdef01subnet-subnet-abcdef01subnet-021345ab)。

  • 允许您的贸易伙伴通过 TCP 端口 5080 传入流量的安全组的一个或多个 ID(例如 sg-1234567890abcdef0sg-abcdef01234567890)。

  • (可选)您要与 VPC 终端节点关联的弹性 IP 地址。

  • 如果您的贸易伙伴未通过 VPN 连接到您的 VPC,则需要互联网网关。有关更多信息,请参阅Amazon VPC 用户指南》中的使用互联网网Connect 互联网。

创建启用 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命令会自动为您创建一个 DNS 记录,其中包含服务器的公有 IP 地址。要让您的贸易伙伴访问服务器,您需要向他们提供以下信息。在这种情况下,your-region指的是你的Amazon Web Services 区域。

    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 和区域。

      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
  4. (可选)配置日志角色。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

现在,通过运行以下命令来创建合作伙伴简介。此命令仅使用您的合作伙伴的公钥证书。要使用此命令,请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 替换为您的组织名称,将 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-id your-server-id \ --local-profile-id your-profile-id --partner-profile-id your-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-id your-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-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 地址关联到您的 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 消息的状态。