设置 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. 导入已在第 1 步中创建的证书。

    第 2 步:将证书作为 Transfer Family 证书资源导入 中介绍了此过程。

  3. 要设置您的交易伙伴,请创建本地配置文件和合作伙伴配置文件。

    第 3 步:为您和您的贸易伙伴创建档案 中介绍了此过程。

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

    步骤 4:创建使用该 AS2协议的 Transfer Family 服务器 中介绍了此过程。

    注意

    您必须仅为入站传输创建 Transfer Family 服务器。如果您只执行出站传输,则不需要 Transfer Family 服务器。

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

    第 5 步:创建您与合作伙伴之间的协议 中介绍了此过程。

    注意

    您必须仅为入站传输创建协议。如果您只执行出站传输,则无需协议。

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

    第 6 步:创建您与合作伙伴之间的连接器 中介绍了此过程。

    注意

    您必须仅为出站传输创建连接器。如果您仅执行入站传输,则不需要连接器。

  7. 测试 AS2 文件交换。

    第 7 步:使用 Transfer Famil AS2 y 测试文件交换情况 中介绍了此过程。

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

  • 使用 Transfer AS2 Family start-file-transfer Amazon Command Line Interface (Amazon CLI) 命令将文件发送到启用远程功能的伙伴服务器。

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

步骤 1:为创建证书 AS2

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

注意

AS2 证书的密钥长度必须至少为 2048 位,最多为 4096 位。

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

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

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

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

    注意

    如果您更喜欢使用 GUI 管理密钥,Portecle 则是您可以使用的一个选项。

生成示例证书
重要

不要将您的私钥发送给您的合作伙伴。在此示例中,您为一方生成一组自签名的公钥和私钥。如果您打算同时充当两个交易伙伴进行测试,则可以重复这些说明以生成两组密钥:每个交易伙伴一组。在这种情况下,您无需生成两个根证书颁发机构 (CAs)。

  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启用了 Open 的服务器(例如 Op AS2 en)要求您使用相同的证书进行签名和加密。在这种情况下,您可以为这两个目的导入相同的私钥和证书。为此,请运行以下命令而不是之前的两个命令:

    /usr/bin/openssl genrsa -out signing-and-encryption-key.pem 2048
  4. 运行以下命令创建证书签名请求 (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
  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 步:将证书作为 Transfer Family 证书资源导入

此过程介绍如何使用 Amazon 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响应 Amazon 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 配置文件 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 姓名和证书 IDs。

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启用了 Transfer Famil Amazon CLI y 的服务器。

注意

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

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

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

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

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

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

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

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

  • 允许贸易伙伴通过 TCP 端口 5080 传入流量的一个或多个 IDs 安全组(例如 sg-1234567890abcdef0 和 sg-abcdef0123 4567890)。

  • (可选)您要与 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
    注意

    尽管日志记录角色是可选的,但我们强烈建议您对其进行设置,以便您可以查看消息的状态并对配置问题进行故障排除。

第 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 角色,该角色 read/write 可以访问和访问存储桶。创建此角色的说明与 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-id your-server-id

第 6 步:创建您与合作伙伴之间的连接器

此过程说明了如何使用创建 AS2 连接器 Amazon 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-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 Famil AS2 y 测试文件交换情况

从您的交易伙伴那里接收文件

如果您将公有弹性 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。在这里,文件存储为 /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 Amazon Command Line Interface (Amazon 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 资源名称 (ARNs)。

要返回特定连接器的属性,请使用要使用的 ID 运行以下命令:

aws transfer describe-connector --connector-id your-connector-id

describe-connector命令返回连接器的所有属性,包括其 URL、角色、配置文件、邮件处置通知 (MDNs)、标签和监控指标。

您可以通过查看 JSON 和 MDN 文件来确认合作伙伴已成功接收文件。这些文件是根据 文件名和位置 中描述的约定命名的。如果您在创建连接器时配置了日志记录角色,则还可以检查 CloudWatch 日志中的 AS2 消息状态。