配置SFTP连接器 - AWS Transfer Family

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

配置SFTP连接器

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

创建SFTP连接器

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

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

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

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

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

    • 对于 URL,URL为远程SFTP服务器输入。例如,URL必须将其格式化为sftp://partner-SFTP-server-urlsftp://AnyCompany.com

      注意

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

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

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

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

        注意

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

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

      以下示例授予访问所需的权限 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" } ] }
      注意

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

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

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

    • (可选)对于 Logging IAM 角色,选择连接器用于将事件推送到 CloudWatch 日志的角色。以下示例策略列出了记录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配置” 部分中,提供以下信息:

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

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

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

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

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

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

CLI

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

  • URL适用于远程SFTP服务器。例如,URL必须将其格式化为sftp://partner-SFTP-server-urlsftp://AnyCompany.com

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

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

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

      注意

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

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

    以下示例授予访问所需的权限 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" } ] }
    注意

    对于访问角色,该示例授予对单个密钥的访问权限。但是,你可以使用通配符,如果你想为多个用户和密钥重复使用同一个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配置信息。

    • 中 AWS Secrets Manager 包含SFTP用户私钥或密码的密钥的。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

SFTP连接器算法

创建SFTP连接器时,会将以下安全算法附加到该连接器。

类型 算法
SSH密码

aes256-gcm@openssh.com

aes128-gcm@openssh.com

aes256-ctr

aes192-ctr

SSH密钥交换方法 (KEX)

curve25519-sha256

curve25519-sha256@libssh.org

diffie-hellman-group16-sha512

diffie-hellman-group18-sha512

diffie-hellman-group-exchange-sha256

SSH MAC

hmac-sha2-512-etm@openssh.com

hmac-sha2-256-etm@openssh.com

hmac-sha2-512

hmac-sha2-256

SSH主机密钥

ecdsa-sha2-nistp256

ecdsa-sha2-nistp384

ecdsa-sha2-nistp521

rsa-sha2-512

rsa-sha2-256

存储密钥以便与SFTP连接器一起使用

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

注意

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

将SFTP连接器的用户凭据存储在 Secrets Manager 中
  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 使用您的 key pair 的实际文件名):

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连接器的按键的开放SSH格式 (-----BEGIN OPENSSH PRIVATE KEY-----)。密钥必须PEM采用格式(-----BEGIN RSA PRIVATE KEY----------BEGIN EC PRIVATE KEY-----)。通过在运行命令时提供 -m PEM 选项,您可以使用 ssh-keygen 工具转换密钥。

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

使用命令将您现有的私钥转换为正确的格式,即带有嵌入式换行符的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文档。