本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置和使用 SFTP 连接器
连接器的目的是在您的 AWS 存储设备和合作伙伴的 SFTP 服务器之间建立关系。您可以将文件从 Amazon S3 发送到合作伙伴拥有的外部目的地。您也可以使用 SFTP 连接器从合作伙伴的 SFTP 服务器检索文件。
本教程演示了如何使用服务托管和 VPC_LATTICE 出口类型设置 SFTP 连接器,然后在 Amazon S3 存储和 SFTP 服务器之间传输文件。
SFTP 连接器从中检索 SFTP 凭据 AWS Secrets Manager ,以便对远程 SFTP 服务器进行身份验证并建立连接。连接器向远程服务器发送文件或从远程服务器检索文件,并将文件存储在 Amazon S3 中。您可以在服务托管出口(使用托 AWS 管基础设施)或 VPC 出口(使用 Cross-VPC 资源访问权限通过 VPC 路由)之间进行选择。IAM 角色用于允许访问 Amazon S3 存储桶和存储在 Secrets Manager 中的证书。而且你可以登录到亚马逊 CloudWatch。
以下博客文章提供了使用 SFTP 连接器构建 MFT 工作流程的参考架构,包括在使用 SFTP 连接器将文件发送到远程 SFTP 服务器之前使用 PGP 加密文件:使用 SFTP 连接器和 PGP 加密架构安全且合规的托管文件传输
连接器出口类型
SFTP 连接器支持两种输出类型,它们决定了您的连接器如何将流量路由到远程 SFTP 服务器:
-
SERVICE_MAN AGED(默认):使用 AWS 带有静态 IP 地址的 Transfer Family 托管基础设施进行出站连接。
-
VPC:使用 Cross-VPC 资源访问通过您的 VPC 路由流量,启用私有终端节点连接并使用您自己的 NAT 网关。
本教程涵盖了两种出口类型。需要时,选择 VPC 出口类型:
-
连接到您的 VPC 中的私有 SFTP 服务器(私有 IP 地址)
-
通过 Direct Connect 或 VPN 连接到本地 SFTP 服务器
-
通过您的 VPC 路由公有终端节点流量以实现安全控制
-
使用您自己的弹性 IP 地址进行出站连接
步骤 1:创建必要的支持资源
您可以使用 SFTP 连接器在 Amazon S3 和任何远程 SFTP 服务器之间复制文件。在本教程中,我们使用 AWS Transfer Family 服务器作为远程 SFTP 服务器。我们需要创建和配置以下资源:
-
创建 Amazon S3 存储桶以在您的 AWS 环境中存储文件,以及从远程 SFTP 服务器发送和检索文件:。创建 Amazon S3 存储桶
-
在 Secrets Manager 中创建用于访问 Amazon S3 存储空间和我们的密钥的 AWS Identity and Access Management 角色:创建具有必要权限的 IAM 角色。
-
创建使用 SFTP 协议的 Transfer Family 服务器,以及使用 SFTP 连接器在 SFTP 服务器之间传输文件或从 SFTP 服务器传输文件的服务管理用户:。创建 Transfer Family SFTP 服务器和一个用户
-
创建一个 AWS Secrets Manager 密钥来存储 SFTP 连接器用于登录远程 SFTP 服务器的凭据:。创建密钥并将其存储在 AWS Secrets Manager
对于 VPC 出口类型连接器,您还需要:
-
具有相应子网和安全组的 VPC
-
资源网关(至少需要 2 个可用区):创建资源网关(仅限 VPC 出口类型)。
-
指向您的 SFTP 服务器的资源配置:创建资源配置(仅限 VPC 出口类型)。有关更多信息,请参阅《Amazon VPC Lattice User Guide》中的 Resource configurations。
创建 Amazon S3 存储桶
创建 Amazon S3 存储桶
-
登录 AWS Transfer Family 控制台,网址为https://console.aws.amazon.com/s3/
。 -
选择一个地区并输入名称。
在本教程中,我们的存储桶位于中
US East (N. Virginia) us-east-1,名称为sftp-server-storage-east。 -
接受默认值并选择创建存储桶。
有关创建 Amazon S3 存储桶的完整详细信息,请参阅如何创建 S3 存储桶? 在 Amazon 简单存储服务用户指南中。
创建具有必要权限的 IAM 角色
对于访问角色,创建具有以下权限的策略。
按如下方式替换项目:
-
对于
amzn-s3-demo-bucket,本教程使用sftp-server-storage-east。 -
对于
region,本教程使用us-east-1。 -
对于
account-id,请使用您的 AWS 账户 身份证。 -
因为
SecretName-6RandomCharacters,我们using sftp-connector1支持这个名字(你将有自己的六个随机字符作为你的秘密)。
您还必须确保此角色包含信任关系,允许连接器在处理用户的转移请求时访问您的资源。有关建立信任关系的详细信息,请参阅 建立信任关系。
注意
要查看我们在本教程中使用的角色的详细信息,请参阅用户和访问角色的组合。
创建密钥并将其存储在 AWS Secrets Manager
我们需要在 Secrets Manager 中存储一个密钥来存储你的 SFTP 连接器的用户凭证。您可以使用密码、SSH 私钥或两者兼而有之。在本教程中,我们使用的是私钥。
注意
当你在 Secret AWS 账户 s Manager 中存储密钥时,会产生费用。有关定价的信息,请参阅AWS 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 连接器的用户凭证
-
登录 AWS 管理控制台 并打开 AWS Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/
。 -
在左侧导航窗格中,选择密钥。
-
在密钥页面,选择存储新密钥。
-
在选择密钥类型页面上,对于密钥类型,选择其他类型密钥。
-
在Key/value 配对部分中,选择Key/value选项卡。
-
密钥-输入
Username。 -
valu e — 输入我们的用户名
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 连接器
-
打开 AWS Transfer Family 控制台,网址为https://console.aws.amazon.com/transfer/
。 -
在左侧导航窗格中,选择 SFTP 连接器,然后选择创建 SFTP 连接器。
-
对于 Egress 类型,请选择以下选项之一:
-
服务托管(默认):使用 AWS 带有静态 IP 地址的 Transfer Family 托管基础设施进行出站连接。
-
VPC Lattice:使用 Cross-VPC 资源访问通过您的 VPC 路由流量。选择此选项进行私有终端节点连接或使用您自己的 NAT 网关。
重要
创建连接器后,您无法更改出口类型。请根据您的连接要求谨慎选择。
-
-
在连接器配置部分中,提供以下信息:
-
在 URL 中,输入远程 SFTP 服务器的 URL。在本教程中,我们输入用作远程 SFTP 服务器的 Transfer Family 服务器的 URL。
sftp://s-1111aaaa2222bbbb3.server---transfer---us-east-1.amazonaws.com.rproxy.goskope.com1111aaaa2222bbbb3替换为您的 Transfer Family 服务器 ID。 -
对于访问角色,请输入我们之前创建的角色
sftp-connector-role。 -
对于资源配置 ARN(仅限 VPC Lattice 出口类型),请输入您之前创建的资源配置的 ARN:
arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/rcfg-12345678 -
对于日志记录角色,请选择一个在 Principal 元素
transfer.amazonaws.com中包含信任策略的角色。提示:除了将 Transfer Family 添加为可信实体外,您还可以将AWSTransferLoggingAccess AWS 托管策略添加到角色中。中详细介绍了该政策AWSTransferLoggingAccess。
-
-
在 SFTP 配置面板中提供以下信息:
-
对于连接器凭据,请选择包含 SFTP 凭据的 Secrets Manager 资源的名称。在本教程中,选择
aws/transfer/sftp-connector1。 -
对于受信任的主机密钥,请粘贴主机密钥的公共部分。您可以通过
ssh-keyscan为 SFTP 服务器运行来检索此密钥。有关如何格式化和存储可信主机密钥的详细信息,请参阅SftpConnectorConfig数据类型文档。 -
在 “最大并发连接数” 中,选择 1 到 5 之间的整数值:默认值为 5。
-
-
确认所有设置后,选择创建连接器以创建 SFTP 连接器。
您也可以使用创建连接器 AWS 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 解析在创建后可能需要几分钟时间。在此期间,连接器状态将为,PENDINGTestConnection并将返回 “连接器不可用”。等待状态变为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" } }
请注意,ServiceManagedEgressIpAddresses对于 VPC 出口类型连接器,该值为空,因为流量通过您的 VPC 而不是 AWS 托管基础设施路由。
步骤 3:使用 SFTP 连接器发送和检索文件
为简单起见,我们假设您的 Amazon S3 存储桶中已经有文件。
注意
本教程使用了 Amazon S3 存储桶作为源存储位置和目标存储位置。如果您的 SFTP 服务器不使用 Amazon S3 存储,那么无论您在以下命令sftp-server-storage-east中看到的任何地方,都可以将路径替换为可从 SFTP 服务器访问的文件位置的路径。
-
我们将名为 Amazon S3 存储的文件发送
SEND-to-SERVER.txt到 SFTP 服务器。 -
我们将名为的文件
RETRIEVE-to-S3.txt从 SFTP 服务器检索到 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 日志
-
打开 Amazon 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 服务器检索到 Amazon 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 解析可能需要几分钟时间。等待状态变为 “活动” 后再尝试连接。
-
连接超时:验证安全组是否允许您的资源网关子网和目标 SFTP 服务器之间的端口 22 上的流量。
-
资源配置错误:确保您的资源配置指向正确的 IP 地址或 DNS 名称,并且资源网关与您的 SFTP 服务器(用于私有终端节点)位于同一个 VPC 中。有关更多信息,请参阅《Amazon VPC Lattice User Guide》中的 Resource configurations。
-
公共终端节点问题:对于公共终端节点,请确保在资源配置中使用的是 DNS 名称,而不是 IP 地址。确认您的 VPC 具有用于出站互联网访问的 NAT 网关。
-
可用区可用性:资源网关要求子网位于至少 2 个可用区。并非所有可用区都支持 VPC Lattice,请查看您所在地区支持的可用区。
VPC 出口类型的成本注意事项:
-
VPC Lattice 收费 0 美元。 006/GB 作为资源提供者进行数据处理(由 VPC Lattice 直接计费)
-
AWS Transfer Family 吸收了 0 美元。 01/GB 资源使用者成本(前 1 PB)
-
对于通过 VPC 的公共终端节点,可能会收取额外的 NAT 网关和数据传输费用
-
除了标准的 0 美元之外,Transfer Family 不会收取额外的费用。 40/GB 数据处理费
创建用作远程 SFTP 服务器的 Transfer Family 服务器的步骤
接下来,我们将概述创建用作本教程远程 SFTP 服务器的 Transfer Family 服务器的步骤。注意以下几点:
-
我们使用 Transfer Family 服务器来表示远程 SFTP 服务器。典型的 SFTP 连接器用户都有自己的远程 SFTP 服务器。请参阅创建 Transfer Family SFTP 服务器和一个用户。
-
因为我们使用的是 Transfer Family 服务器,所以我们也使用的是服务管理的 SFTP 用户。而且,为简单起见,我们将该用户访问 Transfer Family 服务器所需的权限与他们使用连接器所需的权限相结合。同样,大多数 SFTP 连接器用例都有单独的 SFTP 用户,该用户与 Transfer Family 服务器无关。请参阅创建 Transfer Family SFTP 服务器和一个用户。
-
在本教程中,由于我们在远程 SFTP 服务器上使用 Amazon S3 存储,因此我们需要创建第二个存储桶
sftp-server-storage-east,以便我们可以将文件从一个存储桶传输到另一个存储桶。
创建 Transfer Family SFTP 服务器和一个用户
大多数用户不需要创建 Transfer Family SFTP 服务器和用户,因为您已经有一台包含用户的 SFTP 服务器,并且您可以使用此服务器来往传输文件。但是,在本教程中,为了简单起见,我们使用了 Transfer Family 服务器来充当远程 SFTP 服务器。
按照中所述创建 SFTP-enabled 服务器的步骤创建服务器和步骤 3:添加服务托管用户添加用户。以下是我们在本教程中使用的用户详细信息:
-
创建您的服务管理用户,
sftp-testuser。-
将主目录设置为
/sftp-server-storage-east/sftp-testuser -
创建用户时,即存储公钥。稍后,当你在 Secrets Manager 中创建密钥时,你需要提供相应的私钥。
-
-
角色:
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 创建角色的完整详细信息,请按照中的创建用户角色步骤创建角色。