设置AS2配置 - AWS Transfer Family

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

设置AS2配置

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

注意

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

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

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

  2. 创建使用该AS2协议的 AWS 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 Famil AS2 y 测试文件交换情况 中介绍了此过程。

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

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

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

步骤 1:为创建证书 AS2

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

注意

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 州、地区或省 组织所在的州、地区或省。(在本例中,区域不是指您的 AWS 区域。)
    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:创建使用该AS2协议的 Transfer Family 服务器

此过程说明了如何使用 Transfer Family 创建AS2启用了 Transfer Famil AWS CLI y 的服务器。

注意

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

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

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

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

如果您想将您的VPC终端节点公开到互联网,可以将弹性 IP 地址与您的VPC终端节点相关联。

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

  • 您的 IDVPC(例如,vpc-abcdef01)。

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

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

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

  • 如果您的贸易伙伴未VPC通过a连接到您的贸易伙伴VPN,则需要一个互联网网关。有关更多信息,请参阅亚马逊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命令会自动为您创建一条包含服务器公有 IP 地址的DNS记录。要让您的交易伙伴访问服务器,您需要向他们提供以下信息。在这种情况下,your-region 指的是您的 AWS 区域。

    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的 AWS 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 证书资源导入

此过程介绍如何使用 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

现在,通过运行以下命令来创建合作伙伴配置文件。此命令仅使用合作伙伴的公钥证书。要使用此命令,请将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 写上你的贸易伙伴组织的名称。

第 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 Famil SFTP y 相同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 步:创建您与合作伙伴之间的连接器

此过程说明了如何使用创建AS2连接器 AWS CLI。如果您想改用 Transfer Family 控制台,请参阅 配置AS2连接器

您可以使用该StartFileTransferAPI操作通过连接器将存储在 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 Famil AS2 y 测试文件交换情况

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

如果您将公有弹性 IP 地址与VPC终端节点相关联,Transfer Family 会自动创建一个包含您的公有 IP 地址的DNS名称。子域名是您的 AWS Transfer Family 服务器 ID(格式为s-1234567890abcdef0)。按照以下格式URL向您的贸易伙伴提供您的服务器。

http://s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com:5080

如果您没有将公有弹性 IP 地址与您的VPC终端节点相关联,请通过端口 5080 查找可以接受HTTPPOST来自贸易伙伴的AS2消息的VPC终端节点的主机名。要检索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终端节点(例如,通过 AWS PrivateLink 或 aVPN)。按照以下格式URL向您的合作伙伴提供您的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

在此示例中,成功的传输存储在您在 第 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 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命令会返回连接器IDsURLs、以及连接器的 Amazon 资源名称 (ARNs)。

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

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

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

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