配置 SFTP 连接器 - AWS Transfer Family

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

配置 SFTP 连接器

本主题介绍如何创建 SFTP 连接器、与之关联的安全算法、如何存储用于保存凭据的密钥、有关格式化私钥的详细信息以及测试连接器的说明。

创建 SFTP 连接器

此过程说明如何使用 AWS Transfer Family 控制台或 AWS CLI创建 SFTP 连接器。

Console
若要创建 SFTP 连接器
  1. 打开 AWS Transfer Family 控制台,网址为 https://console.aws.amazon.com/transfer/

  2. 在导航窗格中,选择连接,然后选择创建连接器

  3. 选择 SFTP 作为连接器类型,以创建 SFTP 连接器,然后选择“下一步”

    Transfer Family 控制台显示“创建连接器”页面,您可以在其中选择连接器类型。已选择 SFTP。
  4. 连接器配置部分中,提供以下信息:

    • URL 中,输入远程 SFTP 服务器的 URL。例如 sftp://AnyCompany.com,此 URL 的格式必须为 sftp://partner-SFTP-server-url

      注意

      (可选)您可以在 URL 中提供端口号。格式为 sftp://partner-SFTP-server-url:port-number。默认端口号(未指定端口时)为端口 22。

    • 对于访问角色,请选择要使用的 (IAM) 角色的 Amazon 资源名称 AWS Identity and Access Management (ARN)。

      • 确保此角色提供对 StartFileTransfer 请求中所使用文件位置父目录提供读取和写入权限。

      • 请确保此角色为 secretsmanager:GetSecretValue 提供访问密钥的权限

        注意

        在策略中,您必须为密钥指定 ARN。ARN 包含机密名称,但在名称后面附加了六个随机的字母数字字符。密钥的 ARN 格式如下。

        arn:aws:secretsmanager:region:account-id:secret:aws/transfer/SecretName-6RandomCharacters
      • 此角色还应包含一个信任关系,从而允许服务器在为用户的传输请求提供服务时访问您的资源。有关建立信任关系的详细信息,请参阅 建立信任关系

      以下示例授予访问亚马逊 S3 中的 DOC-EXAMPLE-BUCK ET 以及存储在 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" } ] }
      注意

      对于访问角色,该示例授予对单个密钥的访问权限。但是,您可以使用通配符,如果您想为多个用户和密钥重复使用相同的 IAM 角色,这样可以节省工作量。例如,以下资源语句为名称以 aws/transfer 开头的所有密钥授予权限。

      "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/*"

      您也可以将包含您的 SFTP 凭据的密钥存储在另一个 AWS 账户中。有关启用跨账户秘密访问的详细信息,请参阅其他账户中用户的 AWS Secrets Manager 密钥权限

    • (可选)对于日志记录角色,选择连接器用于将事件推送到 CloudWatch 日志的 IAM 角色。以下示例策略列出了记录 SFTP 连接器事件的必要权限。

      { "Version": "2012-10-17", "Statement": [{ "Sid": "SFTPConnectorPermissions", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/transfer/*" ] }] }
  5. SFTP Configuration 面板中提供以下信息:

    • 对于 Connector 凭据,从下拉列表中选择包含 SFTP 用户私钥或密码的密钥的名称。 AWS Secrets Manager 您必须创建密钥并以特定方式存储它。有关更多信息,请参阅 存储密钥以与 SFTP 连接器配合使用

    • 对于受信任的主机密钥,请粘贴用于标识外部服务器的主机密钥的公共部分。您可以添加多个密钥,方法是选择“添加可信主机密钥”来添加其他密钥。您可以对 SFTP 服务器使用 ssh-keyscan 命令以检索必要的密钥。有关 Transfer Family 支持的受信任主机密钥的格式和类型的详细信息,请参阅 SFTPConnectorConfig

  6. 在 “加密算法选项” 部分,从 “安全策略” 字段的下拉列表中选择一个安全策略。安全策略允许您选择连接器支持的加密算法。有关可用安全策略和算法的详细信息,请参阅AWS Transfer Family SFTP 连接器的安全策略

  7. (可选)对于标签 部分的 ,以键/值对格式输入一个或多个标签。

  8. 确认所有设置后,选择创建连接器以创建 SFTP 连接器。如果成功创建了连接器,则会出现一个屏幕,其中包含分配的静态 IP 地址列表和测试连接按钮。使用按钮测试新连接器的配置。

    成功创建 SFTP 连接器后出现的连接器创建屏幕。它包含一个用于测试连接的按钮以及此连接器的服务管理静态 IP 地址列表。

连接器”页面会出现,其中新 SFTP 连接器的 ID 已添加到列表中。要查看连接器的详细信息,请参阅 查看 SFTP 连接器详细信息

CLI

可使用 create-connector 命令创建连接器。要使用此命令创建 SFTP 连接器,必须提供以下信息。

  • 远程 SFTP 服务器的 URL。例如 sftp://AnyCompany.com,此 URL 的格式必须为 sftp://partner-SFTP-server-url

  • 访问角色。选择 AWS Identity and Access Management IAM 角色的 Amazon 资源名称(ARN)。

    • 确保此角色提供对 StartFileTransfer 请求中所使用文件位置父目录提供读取和写入权限。

    • 请确保此角色为 secretsmanager:GetSecretValue 提供访问密钥的权限

      注意

      在策略中,您必须为密钥指定 ARN。ARN 包含机密名称,但在名称后面附加了六个随机的字母数字字符。密钥的 ARN 格式如下。

      arn:aws:secretsmanager:region:account-id:secret:aws/transfer/SecretName-6RandomCharacters
    • 此角色还应包含一个信任关系,从而允许服务器在为用户的传输请求提供服务时访问您的资源。有关建立信任关系的详细信息,请参阅 建立信任关系

    以下示例授予访问亚马逊 S3 中的 DOC-EXAMPLE-BUCK ET 以及存储在 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" } ] }
    注意

    对于访问角色,该示例授予对单个密钥的访问权限。但是,您可以使用通配符,如果您想为多个用户和密钥重复使用相同的 IAM 角色,这样可以节省工作量。例如,以下资源语句为名称以 aws/transfer 开头的所有密钥授予权限。

    "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/*"

    您也可以将包含您的 SFTP 凭据的密钥存储在另一个 AWS 账户中。有关启用跨账户秘密访问的详细信息,请参阅其他账户中用户的 AWS Secrets Manager 密钥权限

  • (可选)为连接器选择用于将事件推送到 CloudWatch 日志的 IAM 角色。以下示例策略列出了记录 SFTP 连接器事件的必要权限。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "SFTPConnectorPermissions", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/transfer/*" ] }] }
  • 提供以下 SFTP 配置信息。

    • 中包含 SFTP 用户的私钥或密码 AWS Secrets Manager 的密钥的 ARN。

    • 用于识别外部服务器的主机密钥的公共部分。如果您愿意,可以提供多个可信的主机密钥。

    提供 SFTP 信息的最简单方法是将其保存到文件中。例如,将以下示例文本复制到名为 testSFTPConfig.json 的文件中。

    // Listing for testSFTPConfig.json { "UserSecretId": "arn:aws::secretsmanager:us-east-2:123456789012:secret:aws/transfer/example-username-key", "TrustedHostKeys": [ "sftp.example.com ssh-rsa AAAAbbbb...EEEE=" ] }
  • 为连接器指定安全策略,输入安全策略名称。

注意

SecretId 可以是整个 ARN,也可以是密钥的名称(前面列表中的example-username-key)。

运行以下命令以创建配置。

aws transfer create-connector --url "sftp://partner-SFTP-server-url" \ --access-role your-IAM-role-for-bucket-access \ --logging-role arn:aws:iam::your-account-id:role/service-role/AWSTransferLoggingAccess \ --sftp-config file:///path/to/testSFTPConfig.json --security-policy-name security-policy-name

存储密钥以与 SFTP 连接器配合使用

你可以使用 Secrets Manager 来存储 SFTP 连接器的用户凭证。创建密钥时,必须提供用户名。此外,您可以提供密码、私钥或两者兼而有之。有关更多信息,请参阅 SFTP 连接器配额

注意

当你在 Secret AWS 账户 s Manager 中存储密钥时,会产生费用。有关定价的信息,请参阅 AWS Secrets Manager 定价

若要在 Secrets Manager 中存储 SFTP 连接器的用户凭证
  1. 登录 AWS Management Console 并打开 AWS Secrets Manager 控制台,网址为 https://console.aws.amazon.com/secretsmanager/

  2. 在左侧导航窗格中,选择密钥

  3. 密钥页面,选择存储新密钥

  4. 选择密钥类型页面上,对于密钥类型,选择其他类型密钥

  5. 键/值对部分,选择键/值选项卡。

    • — 输入Username

    • — 输入有权连接到合作伙伴服务器的用户名。

  6. 如果要提供密码,请选择添加行,然后在键/值对部分中,选择键/值选项卡。

    选择添加行,然后在键/值对部分选择键/值选项卡。

    • — 输入Password

    • – 输入用户的密码。

  7. 如果要提供私钥,请参阅 生成并格式化 SFTP 连接器私钥,其中介绍了如何输入私钥数据。

    注意

    您输入的私钥数据必须与在远程 SFTP 服务器中为该用户存储的公钥相对应。

  8. 选择下一步

  9. 配置密钥页面,输入密钥的名称和描述。建议对名称使用前缀 aws/transfer/。例如,您可以将密钥命名为 aws/transfer/connector-1

  10. 选择下一步,接受配置轮换页面的默认设置。然后选择下一步

  11. 审核页面,选择存储以创建和存储密钥。

生成并格式化 SFTP 连接器私钥

有关生成公钥/私钥对的完整详细信息,请参见。在 macOS、Linux 或 Unix 系统创建 SSH 密钥

例如,要生成用于 SFTP 连接器的私钥,以下示例命令会生成正确的密钥类型(将 key_name 替换为密钥对的实际文件名):

ssh-keygen -t rsa -b 4096 -m PEM -f key_name -N ""
注意

创建用于 SFTP 连接器的密钥对时,请不要使用密码。要使 SFTP 配置正常运行,必须使用空密码。

此命令创建一个 RSA 密钥对,密钥大小为 4096 位。密钥以传统 PEM 格式生成,Transfer Family 需要使用该格式才能与 SFTP 连接器密钥一起使用。密钥保存在当前目录 key_namekey_name.pub(私钥)和(公钥)中:即运行ssh-keygen命令的目录。

注意

Transfer Family 不支持用于 SFTP 连接器的密钥采用 OpenSSH 格式 (-----BEGIN OPENSSH PRIVATE KEY-----)。密钥必须采用旧版 PEM 格式(-----BEGIN RSA PRIVATE KEY----------BEGIN EC PRIVATE KEY-----)。通过在运行命令时提供 -m PEM 选项,您可以使用 ssh-keygen 工具转换密钥。

生成密钥后,必须确保私钥采用 JSON 格式的嵌入式换行符 (”\ n “) 进行格式化。

使用命令将您现有的私钥转换为正确的格式,即带有嵌入式换行符的 JSON 格式。在这里,我们提供了jq和 Powershell 的示例。你可以使用任何你想要的工具或命令将私钥转换为带有嵌入式换行符的 JSON 格式。

jq command

此示例使用jq命令,该命令可从 Download jq 中下载

jq -sR . path-to-private-key-file

例如,如果您的私钥文件位于中~/.ssh/my_private_key,则命令如下所示。

jq -sR . ~/.ssh/my_private_key

这会将正确格式的密钥(带有嵌入的换行符)输出到标准输出。

PowerShell

如果您使用的是 Windows,则可以使用将密钥 PowerShell 转换为正确的格式。以下 Powershell 命令将私钥转换为正确的格式。

Get-Content -Raw path-to-private-key-file | ConvertTo-Json
将私钥数据添加到密钥中以用于 SFTP 连接器
  1. 在 Secrets Manager 控制台中,存储其他类型的密钥时,选择纯文本选项卡。文本应为空,只带有左右大括号 {}。

  2. 使用以下格式粘贴您的用户名、私钥数据和/或密码。要获取私钥数据,请粘贴您在步骤 1 中运行的命令的输出。

    {"Username":"SFTP-USER","Password":"SFTP-USER-PASSWORD","PrivateKey":"PASTE-PRIVATE-KEY-DATA-HERE"}
    以纯文本形式显示秘密,显示示例文本。

    如果正确粘贴了私钥数据,则在选择“键/值”选项卡时应该会看到以下内容。请注意,私钥数据是显示的 line-by-line,而不是以连续的文本字符串的形式显示。

    在 “键/值” 选项卡中显示详细信息的密钥。
  3. 继续执行步骤 8 中的 存储密钥以与 SFTP 连接器配合使用 过程,并遵循该过程直至结束。

测试 SFTP 连接器

创建 SFTP 连接器后,我们建议您在尝试使用新连接器传输任何文件之前对其进行测试。

若要测试 SFTP 连接器
  1. 打开 AWS Transfer Family 控制台,网址为 https://console.aws.amazon.com/transfer/

  2. 在左侧导航窗格中,选择连接器,然后选择一个连接器。

  3. 操作菜单中选择 测试连接

    Transfer Family 控制台显示了选定的 SFTP 连接器,并突出显示了“测试连接”操作。

系统会返回一条消息,指示测试是通过还是失败。如果测试失败,系统会根据测试失败的原因提供错误消息。

SFTP 连接器测试连接面板,显示测试成功。
SFTP 连接器测试连接面板显示测试失败:错误消息表明连接器的访问角色不正确。
注意

要使用 API 测试您的连接器,请参阅 TestConnectionAPI 文档。