本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置和使用 SFTP 连接器
连接器的目的是在您的 Amazon 存储设备和合作伙伴的 SFTP 服务器之间建立关系。您可以将文件从 Amazon S3 发送到合作伙伴拥有的外部目的地。您也可以使用 SFTP 连接器从合作伙伴的 SFTP 服务器检索文件。
本教程演示了如何使用服务托管和 VPC_LATTICE 出口类型设置 SFTP 连接器,然后在 Amazon S3 存储和 SFTP 服务器之间传输文件。
SFTP 连接器从中检索 SFTP 凭据 Amazon Secrets Manager ,以便对远程 SFTP 服务器进行身份验证并建立连接。连接器向远程服务器发送文件或从远程服务器检索文件,并将文件存储在 Amazon S3 中。您可以在服务托管出口(使用托 Amazon 管基础设施)或 VPC 出口(使用跨VPC资源访问通过您的 VPC 路由)之间进行选择。IAM 角色用于允许访问 Amazon S3 存储桶和存储在 Secrets Manager 中的证书。而且你可以登录到亚马逊 CloudWatch。
以下博客文章提供了使用 SFTP 连接器构建 MFT 工作流程的参考架构,包括在使用 SFTP 连接器将文件发送到远程 SFTP 服务器之前使用 PGP 加密文件:使用 SFTP 连接器和 PGP 加密架构安全且合规的托管文件传输
连接器出口类型
SFTP 连接器支持两种输出类型,它们决定了您的连接器如何将流量路由到远程 SFTP 服务器:
-
SERVICE_MAN AGED(默认):使用 Amazon 带有静态 IP 地址的 Transfer Family 托管基础设施进行出站连接。
-
VPC:使用跨虚拟私有网络资源访问通过您的 VPC 路由流量,启用私有终端节点连接并使用您自己的 NAT 网关。
本教程涵盖了两种出口类型。需要时,选择 VPC 出口类型:
-
连接到您的 VPC 中的私有 SFTP 服务器(私有 IP 地址)
-
通过 Direct Connect 或 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 服务器之间传输文件或从 SFTP 服务器传输文件的服务管理用户:。创建 Transfer 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 存储桶? 在 Amazon 简单存储服务用户指南中。
创建具有必要权限的 IAM 角色
对于访问角色,创建具有以下权限的策略。
按如下方式替换项目:
-
对于
amzn-s3-demo-bucket,本教程使用sftp-server-storage-east。 -
对于
region,本教程使用us-east-1。 -
对于
account-id,请使用您的 Amazon Web Services 账户 身份证。 -
因为
SecretName-6RandomCharacters,我们using sftp-connector1支持这个名字(你将有自己的六个随机字符作为你的秘密)。
您还必须确保此角色包含信任关系,允许连接器在处理用户的转移请求时访问您的资源。有关建立信任关系的详细信息,请参阅 建立信任关系。
注意
要查看我们在本教程中使用的角色的详细信息,请参阅用户和访问角色的组合。
创建密钥并将其存储在 Amazon Secrets Manager
我们需要在 Secrets Manager 中存储一个密钥来存储你的 SFTP 连接器的用户凭证。您可以使用密码、SSH 私钥或两者兼而有之。在本教程中,我们使用的是私钥。
注意
当你在 Secret Amazon Web Services 账户 s Manager 中存储密钥时,会产生费用。有关定价的信息,请参阅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/。
-
在左侧导航窗格中,选择密钥。
-
在密钥页面,选择存储新密钥。
-
在选择密钥类型页面上,对于密钥类型,选择其他类型密钥。
-
在键/值对部分,选择键/值选项卡。
-
密钥-输入
Username。 -
valu e — 输入我们的用户名
sftp-testuser。
-
-
要输入密钥,我们建议您使用纯文本选项卡。
-
选择添加行,然后输入
PrivateKey。 -
选择纯文本选项卡。该字段现在包含以下文本:
{"Username":"sftp-testuser","PrivateKey":""} -
在空双引号 (“”) 之间粘贴私钥文本(之前保存)。
屏幕应如下所示(关键数据显示为灰色)。
-
-
选择下一步。
-
在配置密钥页面上,输入您的密钥的名称。在本教程中,我们命名了秘密
aws/transfer/sftp-connector1。 -
选择下一步,接受配置轮换页面的默认设置。然后选择下一步。
-
在审核页面,选择存储以创建和存储密钥。
创建资源网关(仅限 VPC 出口类型)
对于 VPC 出口类型连接器,您需要在 VPC 中创建资源网关。资源网关充当跨VPC资源访问的入口点。
创建资源网关
-
运行以下命令创建资源网关(将 VPC ID 和子网 IDs 替换为您的值):
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 连接器。
-
对于 Egress 类型,请选择以下选项之一:
-
服务托管(默认):使用 Amazon 带有静态 IP 地址的 Transfer Family 托管基础设施进行出站连接。
-
VPC Lattice:使用跨虚拟私有云资源访问通过您的 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 -
对于日志记录角色,请选择一个在 Principal 元素
transfer.amazonaws.com中包含信任策略的角色。提示:除了将 Transfer Family 添加为可信实体外,您还可以将 AWSTransferLoggingAccessV3 Amazon 托管策略添加到角色中。中详细介绍了该政策Amazon 托管策略: AWSTransferLoggingAccessV3。
-
-
在 SFTP 配置面板中提供以下信息:
-
对于连接器凭据,请选择包含 SFTP 凭据的 Secrets Manager 资源的名称。在本教程中,选择
aws/transfer/sftp-connector1。 -
对于受信任的主机密钥,请粘贴主机密钥的公共部分。您可以通过
ssh-keyscan为 SFTP 服务器运行来检索此密钥。有关如何格式化和存储可信主机密钥的详细信息,请参阅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 的出口创建 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 而不是 Amazon 托管基础设施路由。
步骤 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 日志
-
打开亚马逊 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 个可用区。并非所有人都 AZs 支持 VPC Lattice — 请查看您所在 AZs 地区的支持情况。
VPC 出口类型的成本注意事项:
-
作为资源提供商,VPC Lattice 收取 0.006 美元/GB 的数据处理费用(由 VPC 莱迪思直接计费)
-
Amazon Transfer Family 吸收了 0.01 美元/GB 的资源消耗成本(前 1 PB)
-
对于通过 VPC 的公共终端节点,可能会收取额外的 NAT 网关和数据传输费用
-
除了标准的 0.40 美元/GB 数据处理费外,Transfer Family 不收取额外费用
创建用作远程 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 的服务器的步骤创建服务器和步骤 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 创建角色的完整详细信息,请按照中的创建用户角色步骤创建角色。