本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置和使用 SFTP 连接器
连接器的目的是在您的 Amazon 存储和合作伙伴的 SFTP 服务器之间建立关系。您可以将文件从 Amazon S3 发送到合作伙伴拥有的外部目的地。您也可以使用 SFTP 连接器从合作伙伴的 SFTP 服务器检索文件。
本教程说明如何使用服务托管和 VPC_LATTICE 出口类型设置一个 SFTP 连接器,然后在 Amazon S3 存储和 SFTP 服务器之间传输文件。
SFTP 连接器从中检索 SFTP 凭据 Amazon Secrets Manager ,以对远程 SFTP 服务器进行身份验证并建立连接。连接器向远程服务器发送文件或从远程服务器检索文件,并将文件存储在 Amazon S3 中。您可以选择服务管理出口(使用托 Amazon 管基础设施)或 VPC 出口(使用 Cross-VPC 资源访问通过您的 VPC 进行路由)。IAM 角色用于允许访问 Amazon S3 存储桶和存储在密钥管理器中的证书。而且你可以登录亚马逊 CloudWatch。
以下博客文章提供了使用 SFTP 连接器构建 MFT 工作流程的参考架构,包括在使用 SFTP 连接器将文件发送到远程 SFTP 服务器之前使用 PGP 对文件进行加密:使用 SFTP 连接器和 PGP 加密架构安全且合规的托管文件传输。 Amazon Transfer Family
连接器出口类型
SFTP 连接器支持两种出口类型,它们决定您的连接器如何将流量路由到远程 SFTP 服务器:
-
SERVICE_MANAGED(默认):使用 T Amazon ransfer 系列托管的基础设施和静态 IP 地址进行出站连接。
-
VPC:使用 Cross-VPC 资源访问通过您的 VPC 路由流量,启用私有终端节点连接并使用您自己的 NAT 网关。
本教程涵盖了两种出口类型。当您需要时,请选择 VPC 出口类型:
-
连接到您的 VPC 中的私有 SFTP 服务器(私有 IP 地址)
-
通过直接连接或 VPN 连接到本地 SFTP 服务器
-
通过您的 VPC 路由公有终端节点流量以进行安全控制
-
使用自己的弹性 IP 地址进行出站连接
第 1 步:创建必要的支持资源
您可以使用 SFTP 连接器在 Amazon S3 和任何远程 SFTP 服务器之间复制文件。在本教程中,我们使用 Amazon Transfer Family 服务器作为远程 SFTP 服务器。我们需要创建和配置以下资源:
-
创建 Amazon S3 存储桶以在您的 Amazon 环境中存储文件,并从远程 SFTP 服务器发送和检索文件:创建 Amazon S3 存储桶
-
在 Secrets Manager 中创建一个用于访问 Amazon S3 存储空间和我们的密钥的 Amazon Identity and Access Management 角色:创建具有必要权限的 IAM 角色.
-
创建使用 SFTP 协议的 Transfer Family 服务器,并创建使用 SFTP 连接器将文件传输到 SFTP 服务器或从服务器传输文件的服务管理用户:创建 Transft Family SFTP 服务器和用户
-
创建一个 Amazon Secrets Manager 密钥,用于存储 SFTP 连接器登录远程 SFTP 服务器时使用的凭据:。在中创建和存储密钥 Amazon Secrets Manager
对于 VPC 出口类型连接器,您还需要:
-
具有适当子网和安全组的 VPC
-
资源网关(至少需要 2 个可用区):创建资源网关(仅限 VPC 出口类型)。
-
指向您的 SFTP 服务器的资源配置:创建资源配置(仅限 VPC 出口类型)。有关更多信息,请参阅《Amazon VPC Lattice User Guide》中的 Resource configurations。
创建 Amazon S3 存储桶
创建 Amazon S3 存储桶
-
登录 Amazon Transfer Family 控制台,网址为https://console.aws.amazon.com/s3/
。 -
选择一个地区并输入一个名称。
在本教程中,我们的存储桶在里面
US East (N. Virginia) us-east-1,名称是sftp-server-storage-east。 -
接受默认设置并选择创建存储桶。
有关创建 Amazon S3 存储桶的完整详细信息,请参阅如何创建 S3 存储桶?在《亚马逊简单存储服务用户指南》中。
创建具有必要权限的 IAM 角色
对于访问角色,创建具有以下权限的策略。
按如下方式替换物品:
-
对于
amzn-s3-demo-bucket,本教程使用sftp-server-storage-east. -
对于
region,本教程使用us-east-1. -
对于
account-id,请使用您的 Amazon Web Services 账户 ID。 -
因为
SecretName-6RandomCharacters,我们要的是using sftp-connector1名字(你的秘密将有自己的六个随机字符)。
您还必须确保此角色包含信任关系,允许连接器在处理用户的传输请求时访问您的资源。有关建立信任关系的详细信息,请参阅 建立信任关系。
注意
要查看我们在教程中使用的角色的详细信息,请参阅用户和访问权限的组合角色。
在中创建和存储密钥 Amazon Secrets Manager
我们需要在密钥管理器中存储一个密钥来存储您的 SFTP 连接器的用户凭证。您可以使用密码、SSH 私钥或两者。在本教程中,我们使用的是私钥。
注意
当你在密钥管理器中存储密钥时, Amazon Web Services 账户 会产生费用。有关定价的信息,请参阅Amazon Secrets Manager 定价
在开始存储密钥的过程之前,请检索和格式化您的私钥。私钥必须与在远程 SFTP 服务器上为用户配置的公钥相对应。在我们的教程中,私钥必须对应于为我们的测试用户存储在我们用作远程服务器的 Transfer Family SFTP 服务器上的公钥。
为此,请运行以下命令:
jq -sR .path-to-private-key-file
例如,如果您的私钥文件位于中~/.ssh/sftp-testuser-privatekey,则命令如下所示。
jq -sR . ~/.ssh/sftp-testuser-privatekey
这会将正确格式(带有嵌入式换行符)的密钥输出到标准输出。将此文本复制到某个地方,因为您需要将其粘贴到以下过程中(在步骤 6 中)。
若要在 Secrets Manager 中存储 SFTP 连接器的用户凭证
-
登录 Amazon Web Services 管理控制台 并打开 Amazon Secrets Manager 控制台,地址为https://console.aws.amazon.com/secretsmanager/
。 -
在左侧导航窗格中,选择密钥。
-
在密钥页面,选择存储新密钥。
-
在选择密钥类型页面上,对于密钥类型,选择其他类型密钥。
-
在Key/value 配对部分中,选择Key/value选项卡。
-
密钥 —输入
Username。 -
值 — 输入我们用户的姓名
sftp-testuser。
-
-
要输入密钥,我们建议您使用纯文本选项卡。
-
选择添加行,然后输入
PrivateKey。 -
选择纯文本选项卡。该字段现在包含以下文本:
{"Username":"sftp-testuser","PrivateKey":""} -
在空的双引号 (“”) 之间粘贴您的私钥文本(之前保存)。
屏幕应如下所示(关键数据显示为灰色)。
-
-
选择下一步。
-
在配置密钥页面上,输入密钥的名称。在本教程中,我们将秘密命名
aws/transfer/sftp-connector1。 -
选择下一步,接受配置轮换页面的默认设置。然后选择下一步。
-
在审核页面,选择存储以创建和存储密钥。
创建资源网关(仅限 VPC 出口类型)
对于 VPC 出口类型连接器,您需要在 VPC 中创建资源网关。资源网关用作 Cross-VPC 资源访问的入口点。
创建资源网关
-
运行以下命令创建资源网关(将 VPC ID 和子网 ID 替换为您的值):
aws vpc-lattice create-resource-gateway \ --name my-sftp-resource-gateway \ --vpc-identifier vpc-12345678 \ --subnet-ids subnet-12345678 subnet-87654321注意
资源网关要求在至少 2 个可用区中建立子网。
-
记下响应中的资源网关 ID,以便在下一步中使用。
创建资源配置(仅限 VPC 出口类型)
创建指向您的 SFTP 服务器的资源配置。这可以是您的 VPC 中服务器的私有 IP 地址,也可以是外部服务器的公有 DNS 名称。有关资源配置的更多信息,请参阅 Amazon VPC Lattice 用户指南中的资源配置。
创建资源配置
-
对于私有 SFTP 服务器,请运行:
aws vpc-lattice create-resource-configuration \ --name my-sftp-resource-config \ --port-ranges 22 \ --type SINGLE \ --resource-gateway-identifier rgw-12345678 \ --resource-configuration-definition ipResource={ipAddress="10.0.1.100"} -
对于公共 SFTP 服务器(仅限 DNS 名称),运行:
aws vpc-lattice create-resource-configuration \ --name my-public-sftp-resource-config \ --port-ranges 22 \ --type SINGLE \ --resource-gateway-identifier rgw-12345678 \ --resource-configuration-definition dnsResource={domainName="sftp.example.com"}注意
公共终端必须使用 DNS 名称,而不是 IP 地址。
-
记下响应中的资源配置 ARN,以便在创建连接器时使用。
步骤 2:创建和测试 SFTP 连接器
在本节中,我们将创建一个 SFTP 连接器,该连接器使用我们之前创建的所有资源。有关更多详细信息,请参阅创建 SFTP 连接器。
若要创建 SFTP 连接器
-
在处打开 Amazon Transfer Family 控制台https://console.aws.amazon.com/transfer/
。 -
在左侧导航窗格中,选择 SFTP 连接器,然后选择创建 SFTP 连接器。
-
对于出口类型,请选择以下选项之一:
-
服务管理(默认):使用 T Amazon ransfer 系列托管基础架构和静态 IP 地址进行出站连接。
-
VPC Lattice:使用 Cross-VPC 资源访问通过您的 VPC 路由流量。选择此选项可实现私有终端节点连接或使用您自己的 NAT 网关。
重要
创建连接器后,您无法更改出口类型。根据您的连接要求谨慎选择。
-
-
在连接器配置部分中,提供以下信息:
-
对于 URL,请输入远程 SFTP 服务器的 URL。在本教程中,我们输入了用作远程 SFTP 服务器的 Transfer Family 服务器的 URL。
sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com1111aaaa2222bbbb3替换为您的 Transfer Family 服务器 ID。 -
对于访问角色,请输入我们之前创建的角色
sftp-connector-role。 -
对于资源配置 ARN(仅限 VPC Lattice 出口类型),请输入您之前创建的资源配置的 ARN:
arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/rcfg-12345678 -
对于 Logging 角色,
transfer.amazonaws.com在 Principal 元素中选择一个包含信任策略的角色。提示:除了将 Transfer Family 添加为可信实体外,您还可以向该角色添加AWSTransferLoggingAccessV3 Amazon 托管策略。有关该政策的详细描述,请参见Amazon 管理策略: AWSTransferLoggingAccessV3。
-
-
在 SFTP 配置面板中提供以下信息:
-
对于连接器凭据,请选择包含 SFTP 凭据的密钥管理器资源的名称。要查看教程,请选择
aws/transfer/sftp-connector1。 -
对于可信主机密钥,粘贴主机密钥的公共部分。您可以通过运行
ssh-keyscanSFTP 服务器来检索此密钥。有关如何格式化和存储可信主机密钥的详细信息,请参阅SftpConnectorConfig数据类型文档。 -
对于最大并发连接数,选择介于 1 到 5 之间的整数值:默认值为 5。
-
-
确认所有设置后,选择创建连接器以创建 SFTP 连接器。
您也可以使用创建连接器 Amazon Command Line Interface。
-
要使用服务管理的出口创建 SFTP 连接器,请运行以下命令:
aws transfer create-connector \ --url "sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com" \ --access-role "arn:aws::iam::account-id:role/sftp-connector-role" \ --sftp-config UserSecretId="aws/transfer/sftp-connector1",TrustedHostKeys="ssh-rsa AAAAB3NzaC..." -
要创建带 VPC-based 出口的 SFTP 连接器,请运行以下命令:
aws transfer create-connector \ --url "sftp://my.sftp.server.com:22" \ --access-role "arn:aws::iam::account-id:role/sftp-connector-role" \ --sftp-config UserSecretId="aws/transfer/sftp-connector1",TrustedHostKeys="ssh-rsa AAAAB3NzaC..." \ --egress-config VpcLattice={ResourceConfigurationArn="arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/rcfg-12345678",PortNumber=22}
创建 SFTP 连接器后,我们建议您在尝试使用新连接器传输任何文件之前对其进行测试。
注意
对于 VPC 出口类型连接器,DNS 解析在创建后可能需要几分钟。在此期间,连接器状态将是PENDING并将TestConnection返回 “连接器不可用”。等待状态变成,ACTIVE然后再尝试传输文件。
当您描述 VPC 出口类型连接器时,响应包含新字段:
{ "Connector": { "AccessRole": "arn:aws:iam::219573224423:role/sftp-connector-role", "Arn": "arn:aws:transfer:us-east-1:219573224423:connector/c-5dfa309ccabf40759", "ConnectorId": "c-5dfa309ccabf40759", "Status": "ACTIVE", "EgressConfig": { "ResourceConfigurationArn": "arn:aws:vpc-lattice:us-east-1:025066256552:resourceconfiguration/rcfg-079259b27a357a190" }, "EgressType": "VPC", "ServiceManagedEgressIpAddresses": null, "SftpConfig": { "TrustedHostKeys": [ "ssh-rsa AAAAB3NzaC..." ], "UserSecretId": "aws/transfer/sftp-connector1" }, "Url": "sftp://my.sftp.server.com:22" } }
请注意,对于 VPC 出口类型连接器,该值为空,因为流量ServiceManagedEgressIpAddresses是通过您的 VPC 而不是 Amazon 托管基础设施进行路由。
第 3 步:使用 SFTP 连接器发送和检索文件
为简单起见,我们假设您的 Amazon S3 存储桶中已经有文件。
注意
本教程使用了 Amazon S3 存储桶作为源存储位置和目标存储位置。如果您的 SFTP 服务器不使用 Amazon S3 存储,那么无论您在以下命令sftp-server-storage-east中看到什么位置,都可以将该路径替换为可从 SFTP 服务器访问的文件位置路径。
-
我们将一个名为 Amazon S3 存储
SEND-to-SERVER.txt的文件发送到 SFTP 服务器。 -
我们将一个名为 SFTP 服务器
RETRIEVE-to-S3.txt的文件检索到 Amazon S3 存储中。
注意
在以下命令中,connector-id替换为您的连接器 ID。
首先,我们将文件从 Amazon S3 存储桶发送到远程 SFTP 服务器。在命令提示符下运行以下命令:
aws transfer start-file-transfer --connector-id c-connector-id--send-file-paths "/sftp-server-storage-east/SEND-to-SERVER.txt" / --remote-directory-path "/sftp-server-storage-east/incoming"
你的sftp-server-storage-east存储桶现在应该看起来像这样。
如果您未按预期看到该文件,请检查您的 CloudWatch 日志。
查看您的 CloudWatch 日志
-
在以下位置打开亚马逊 CloudWatch 控制台 https://console.aws.amazon.com/cloudwatch/
-
从左侧导航菜单中选择日志组。
-
在搜索栏中输入您的连接器 ID 以查找您的日志。
-
选择搜索返回的日志流。
-
展开最新的日志条目。
如果成功,日志条目如下所示:
{ "operation": "SEND", "timestamp": "2023-12-18T15:26:57.346283Z", "connector-id": "connector-id", "transfer-id": "transfer-id", "file-transfer-id": "transfer-id/file-transfer-id", "url": "sftp://server-id.server.transfer.us-east-1.amazonaws.com", "file-path": "/sftp-server-storage-east/SEND-to-SERVER.txt", "status-code": "COMPLETED", "start-time": "2023-12-18T15:26:56.915864Z", "end-time": "2023-12-18T15:26:57.298122Z", "account-id": "account-id", "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/connector-id", "remote-directory-path": "/sftp-server-storage-east/incoming" }
如果文件传输失败,则日志条目包含一条错误消息,指明了问题。错误的常见原因是 IAM 权限问题和文件路径不正确。
接下来,我们将文件从 SFTP 服务器检索到亚马逊 S3 存储桶中。在命令提示符下运行以下命令:
aws transfer start-file-transfer --connector-id c-connector-id--retrieve-file-paths "/sftp-server-storage-east/RETRIEVE-to-S3.txt" --local-directory-path "/sftp-server-storage-east/incoming"
如果传输成功,您的 Amazon S3 存储桶将包含传输的文件,如下所示。
如果成功,日志条目如下所示:
{ "operation": "RETRIEVE", "timestamp": "2023-12-18T15:36:40.017800Z", "connector-id": "c-connector-id", "transfer-id": "transfer-id", "file-transfer-id": "transfer-id/file-transfer-id", "url": "sftp://s-server-id.server.transfer.us-east-1.amazonaws.com", "file-path": "/sftp-server-storage-east/RETRIEVE-to-S3.txt", "status-code": "COMPLETED", "start-time": "2023-12-18T15:36:39.727626Z", "end-time": "2023-12-18T15:36:39.895726Z", "account-id": "account-id", "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/c-connector-id", "local-directory-path": "/sftp-server-storage-east/incoming" }
排除 VPC 出口类型连接器故障
如果您在使用 VPC 出口类型连接器时遇到问题,请检查以下内容:
-
连接器状态为 “待处理”:VPC 连接器的 DNS 解析可能需要几分钟。等待状态变为 ACTIVE 后再尝试连接。
-
连接超时:验证安全组是否允许资源网关子网和目标 SFTP 服务器之间的端口 22 流量。
-
资源配置错误:确保您的资源配置指向正确的 IP 地址或 DNS 名称,并且资源网关与您的 SFTP 服务器位于同一 VPC 中(适用于私有终端节点)。有关更多信息,请参阅《Amazon VPC Lattice User Guide》中的 Resource configurations。
-
公共终端节点问题:对于公共终端节点,请确保您在资源配置中使用的是 DNS 名称,而不是 IP 地址。确认您的 VPC 具有用于出站互联网访问的 NAT 网关。
-
可用区可用性:资源网关需要在至少 2 个可用区中建立子网。并非所有可用区都支持 VPC 莱迪思——请查看您所在地区支持的可用区。
VPC 出口类型的成本注意事项:
-
VPC Lattice 收费 0 美元。006/GB 作为资源提供商进行数据处理(由 VPC Lattice 直接计费)
-
Amazon Transfer Family 吸收了 0 美元。01/GB 资源消耗成本(前 1 PB)
-
对于通过 VPC 的公共终端节点,可能会收取额外的 NAT 网关和数据传输费用
-
除了标准的 0 美元外,不收取额外的 Transfer Family 费用。40/GB 数据处理费
创建 Transfer Family 服务器以用作远程 SFTP 服务器的过程
下面,我们将概述创建用作本教程远程 SFTP 服务器的 Transfer Family 服务器的步骤。注意以下几点:
-
我们使用 Transfer Family 服务器来代表远程 SFTP 服务器。典型的 SFTP 连接器用户有自己的远程 SFTP 服务器。请参阅创建 Transft Family SFTP 服务器和用户。
-
因为我们使用的是 Transfer Family 服务器,所以我们也在使用服务管理的 SFTP 用户。而且,为简单起见,我们将该用户访问 Transfer Family 服务器所需的权限与他们使用我们的连接器所需的权限相结合。同样,大多数 SFTP 连接器用例都有单独的 SFTP 用户,该用户与 Transfer Family 服务器无关。请参阅创建 Transft Family SFTP 服务器和用户。
-
在本教程中,由于我们使用 Amazon S3 存储作为远程 SFTP 服务器,因此我们需要创建第二个存储桶
sftp-server-storage-east,这样我们才能将文件从一个存储桶传输到另一个存储桶。
创建 Transft Family SFTP 服务器和用户
大多数用户无需创建 Transfer Family SFTP 服务器和用户,因为您已经拥有一台包含用户的 SFTP 服务器,并且您可以使用此服务器来回传输文件。但是,在本教程中,为简单起见,我们使用 Transfer Family 服务器作为远程 SFTP 服务器。
按照中所述创建 SFTP-enabled 服务器的步骤创建服务器和步骤 3:添加服务托管用户添加用户。以下是我们在本教程中使用的用户详细信息:
-
创建您的服务管理用户,
sftp-testuser。-
将主目录设置为
/sftp-server-storage-east/sftp-testuser -
当你创建用户时,你会存储一个公钥。之后,当你在密钥管理器中创建密钥时,你需要提供相应的私钥。
-
-
角色:
sftp-connector-role。在本教程中,我们为 SFTP 用户和访问 SFTP 连接器使用相同的 IAM 角色。当你为组织创建连接器时,你可能有不同的用户和访问角色。 -
服务器主机密钥:创建连接器时需要使用服务器主机密钥。您可以通过运行
ssh-keyscan服务器来检索此密钥。例如,如果您的服务器 ID 为s-1111aaaa2222bbbb3,且其端点位于us-east-1,则以下命令将检索服务器主机密钥:ssh-keyscan s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com将此文本复制到某个地方,因为您需要将其粘贴到步骤 2:创建和测试 SFTP 连接器程序中。
用户和访问权限的组合角色
在本教程中,我们使用的是单一的组合角色。我们将此角色既用于我们的 SFTP 用户,也用于访问连接器。如果您要执行教程中的任务,以下示例包含此角色的详细信息。
以下示例授予访问我们在 Amazon S3 中的两个存储桶以及存储在 Secrets Manager 中的名为aws/transfer/sftp-connector1的密钥所需的权限。在本教程中,这个角色被命名为sftp-connector-role。
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::sftp-server-storage-east", "arn:aws:s3:::sftp-server-storage-east" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": [ "arn:aws:s3:::sftp-server-storage-east/*", "arn:aws:s3:::sftp-server-storage-east/*" ] }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:aws/transfer/sftp-connector1-6RandomCharacters" } ] }
有关为 Transfer Family 创建角色的完整详细信息,请按照中创建用户角色描述的步骤创建角色。