设置 AS2 配置 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

设置 AS2 配置

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

注意

示例设置的某些部分使用 Amazon Command Line Interface (Amazon CLI)。如果您尚未安装 Amazon CLI,请参阅Amazon Command Line Interface 用户指南 Amazon CLI中的安装或更新最新版本的。

  1. 为自己和您的交易伙伴创建证书。如果您拥有可以使用的现有证书,则可跳过此部分。

    步骤 1:创建 AS2 证书 中介绍了此过程。

  2. 创建使用 AS2 协议的 Amazon 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 交换文件 中介绍了此过程。

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

  • 使用 Transfer Family start-file-transfer Amazon Command Line Interface (Amazon 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 州、地区或省 组织所在的州、地区或省。(在本例中,区域不是指您的 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 Amazon CLI创建启用 AS2 的服务器。

注意

许多示例步骤都使用从文件加载参数的命令。有关使用文件加载参数的更多详细信息,请参阅如何从文件加载参数

如果要改用控制台,请参阅使用 Transfer Family 控制台创建 AS2 服务器

与创建 SFTP 或 FTPS Amazon Transfer Family 服务器的方式类似,您可以使用命令的--protocols AS2参数创建支持 AS2 的服务器。create-server Amazon CLI 目前,Transfer Family 仅支持 VPC 端点类型和采用 AS2 协议的 Amazon S3 存储。

当您使用create-server命令为 Transfer Family 创建启用 AS2 的服务器时,系统会自动为您创建一个 VPC 端点。此端点公开 TCP 端口 5080,以便它可以接受 AS2 消息。

如果您想向互联网公开您的 VPC 端点,可以将弹性 IP 地址与您的 VPC 端点关联起来。

要使用这些说明,您需要以下内容:

  • 您的 VPC 的 ID(例如 vpc-abcdef01)。

  • 您的 VPC 子网的 ID(例如 sub net-abcdef01、01、subnet-021345ab)。subnet-subnet-abcdef

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

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

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

    您提供给交易伙伴的完整 URL 如下:

    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命令返回一个包含多个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
  4. (可选)配置日志记录角色。Transfer Family 以结构化 JSON 格式将发送和接收的消息的状态记录到亚马逊 CloudWatch 日志中。要让 Transfer Family 能够访问您账户中的 CloudWatch 日志,您必须在服务器上配置日志角色。

    创建信任transfer.amazonaws.com的 Amazon Identity and Access Management (IAM) 角色并附加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 证书资源导入

此过程介绍如何使用 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 步:为您和您的交易伙伴创建配置文件

此过程说明如何使用 Amazon CLI创建 AS2 配置文件。如果您想改用 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 替换为您的组织名称,将 PARTNER-COMPANY 替换为交易伙伴的组织名称。

第 5 步:创建您与合作伙伴之间的协议

此过程介绍如何使用 Amazon CLI创建 AS2 协议。如果您想改用 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 步:创建您与合作伙伴之间的连接器

此过程介绍如何使用 Amazon CLI创建 AS2 连接器。如果您想改用 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 地址与 VPC 端点相关联,Transfer Family 会自动创建包含您的公有 IP 地址的 DNS 名称。子域名是您的 Amazon 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 端点 ID vpce-1234abcd5678efghi。然后,您可以使用以下命令检索 DNS 名称。

aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-1234abcd5678efghi

此命令返回运行以下命令所需的 VPC 端点的所有详细信息。

DNS 名称列在DnsEntries数组中。您的交易伙伴必须在您的 VPC 内才能访问您的 VPC 端点(例如通过 Amazon 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

在此示例中,成功的传输存储在您在第 5 步:创建您与合作伙伴之间的协议中指定的base-directory参数中指定的位置。如果我们成功接收名为myfile1.txtmyfile2.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 消息的状态。

向您的交易伙伴发送文件

您可以使用 Transfer Family 通过引用连接器 ID 和文件路径发送 AS2 消息,如以下 start-file-transfer Amazon Command Line Interface (Amazon 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 消息的状态。