本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置和使用SFTP连接器
连接器的目的是在您的 AWS 存储设备和合作伙伴的SFTP服务器之间建立关系。您可以将文件从 Amazon S3 发送到合作伙伴拥有的外部目的地。您也可以使用SFTP连接器从合作伙伴的SFTP服务器检索文件。
本教程说明如何设置SFTP连接器,然后在 Amazon S3 存储和SFTP服务器之间传输文件。
SFTP连接器从中检索SFTP凭据 AWS Secrets Manager 以向远程SFTP服务器进行身份验证并建立连接。连接器向远程服务器发送文件或从远程服务器检索文件,并将文件存储在 Amazon S3 中。IAM角色用于允许访问 Amazon S3 存储桶和存储在 Secrets Manager 中的证书。而且你可以登录到亚马逊 CloudWatch。
步骤 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服务器传输文件的服务管理用户:创建一个 Transf SFTP er Family 服务器和一个用户。
-
创建一个 AWS Secrets Manager 密钥来存储SFTP连接器用于登录远程SFTP服务器的凭据:创建密钥并将其存储在 AWS Secrets Manager.
创建 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角色
对于访问角色,创建具有以下权限的策略。
以下示例授予访问所需的权限 DOC-EXAMPLE-BUCKET
在 Amazon S3 中,指定的密钥存储在 Secrets Manager 中。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:region
:account-id
:secret:aws/transfer/SecretName-6RandomCharacters
" } ] }
按如下方式替换项目:
-
对于
DOC-EXAMPLE-BUCKET
,本教程使用s3-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 中)。
将SFTP连接器的用户凭据存储在 Secrets Manager 中
-
登录 AWS Management Console 并打开 AWS Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/
。 -
在左侧导航窗格中,选择密钥。
-
在密钥页面,选择存储新密钥。
-
在选择密钥类型页面上,对于密钥类型,选择其他类型密钥。
-
在键/值对部分,选择键/值选项卡。
-
键 — 输入
Username
。 -
valu e — 输入我们的用户名
sftp-testuser
。
-
-
要输入密钥,我们建议您使用纯文本选项卡。
-
选择添加行,然后输入
PrivateKey
。 -
选择纯文本选项卡。该字段现在包含以下文本:
{"Username":"sftp-testuser","PrivateKey":""}
-
在空双引号 (“”) 之间粘贴私钥文本(之前保存)。
屏幕应如下所示(关键数据显示为灰色)。
-
-
选择下一步。
-
在配置密钥页面上,输入您的密钥的名称。在本教程中,我们命名了秘密
aws/transfer/sftp-connector1
。 -
选择下一步,接受配置轮换页面的默认设置。然后选择下一步。
-
在审核页面,选择存储以创建和存储密钥。
步骤 2:创建和测试SFTP连接器
在本节中,我们将创建一个使用我们之前创建的所有资源的SFTP连接器。有关更多详细信息,请参阅配置SFTP连接器。
创建SFTP连接器
-
打开 AWS Transfer Family 控制台,网址为https://console.aws.amazon.com/transfer/
。 -
在导航窗格中,选择连接,然后选择创建连接器。
-
选择连接SFTP器类型以创建SFTP连接器,然后选择 “下一步”。
-
在连接器配置部分中,提供以下信息:
-
对于 URL,请URL输入远程SFTP服务器的。在本教程中,我们输入URL了用作远程服务器的 Transfer Family SFTP 服务器。
sftp://s-
1111aaaa2222bbbb3
.server---transfer---us-east-1.amazonaws.com.rproxy.goskope.comReplace(替换)
1111aaaa2222bbbb3
使用你的 Transfer Family 服务器 ID。 -
对于访问角色,请输入我们之前创建的角色
sftp-connector-role
。 -
对于 “记录” 角色,选择
AWSTransferLoggingAccess
。注意
AWSTransferLoggingAccess是一个 AWS 托管策略。中详细介绍了该政策AWS 托管策略: AWSTransferLoggingAccess。
-
-
在 “SFTP配置” 部分中,提供以下信息:
-
对于 Connector 凭据,请选择包含SFTP凭据的 Secrets Manager 资源的名称。在本教程中,选择
aws/transfer/sftp-connector1
。 -
对于受信任的主机密钥,请粘贴主机密钥的公共部分。您可以通过
ssh-keyscan
为SFTP服务器运行来检索此密钥。有关如何格式化和存储可信主机密钥的详细信息,请参阅 SftpConnectorConfig数据类型文档。
-
-
确认所有设置后,选择创建连接器以创建SFTP连接器。
创建SFTP连接器后,我们建议您在尝试使用新连接器传输任何文件之前对其进行测试。
步骤 3:使用SFTP连接器发送和检索文件
为简单起见,我们假设您的 Amazon S3 存储桶中已经有文件。
注意
本教程使用了 Amazon S3 存储桶作为源存储位置和目标存储位置。如果您的SFTP服务器不使用 Amazon S3 存储,那么无论您在以下命令sftp-server-storage-east
中看到的任何地方,都可以将路径替换为可从SFTP服务器访问的文件位置的路径。
-
我们将名为
SEND-to-SERVER.txt
Amazon S3 存储的文件发送到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 "/s3-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": "/s3-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": "500655546075", "connector-arn": "arn:aws:transfer:us-east-1:500655546075: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 "/s3-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": "500655546075", "connector-arn": "arn:aws:transfer:us-east-1:500655546075:connector/c-connector-id
", "local-directory-path": "/s3-storage-east/incoming" }
创建用作远程服务器的 Transfer Family SFTP 服务器的步骤
接下来,我们将概述创建用作本教程远程服务器的 Transfer Family SFTP 服务器的步骤。请注意以下几点:
-
我们使用 Transfer Family 服务器来表示远程SFTP服务器。典型的SFTP连接器用户都有自己的远程SFTP服务器。请参阅 创建一个 Transf SFTP er Family 服务器和一个用户。
-
因为我们使用的是 Transfer Family 服务器,所以我们也使用的是服务管理SFTP用户。而且,为简单起见,我们将该用户访问 Transfer Family 服务器所需的权限与他们使用连接器所需的权限相结合。同样,大多数SFTP连接器用例都有与 Transfer Family 服务器无关的单独SFTP用户。请参阅 创建一个 Transf SFTP er Family 服务器和一个用户。
-
在本教程中,由于我们在远程SFTP服务器上使用 Amazon S3 存储,因此我们需要创建第二个存储桶
s3-storage-east
,以便我们可以将文件从一个存储桶传输到另一个存储桶。
创建一个 Transf SFTP er Family 服务器和一个用户
大多数用户不需要创建 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:::s3-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:::s3-storage-east/*" ] }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:500655546075:secret:aws/transfer/sftp-connector1-
6RandomCharacters
" } ] }
有关为 Transfer Family 创建角色的完整详细信息,请按照中的创建用户角色步骤创建角色。