密钥管理 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

密钥管理

在本节中,您可以找到有关 SSH 密钥的信息,包括如何生成密钥和如何轮换密钥。

注意

Amazon Transfer Family 接受 RSA、ECDSA 和 ED25519 密钥。

本节还介绍如何生成和管理 Pretty Good Privacy (PGP) 密钥。

支持的用户和服务器密钥算法

支持在内部使用以下密钥算法Amazon Transfer Family:

  • 对于 ED25519:ssh-ed25519

  • 对于 RSA:

    • rsa-sha2-256

    • rsa-sha2-512

  • 对于 ECDSA:

    • ecdsa-sha2-nistp256

    • ecdsa-sha2-nistp384

    • ecdsa-sha2-nistp521

注意

我们支持ssh-rsa SHA1 支持我们较早的安全策略(除外的所有政策TransferSecurityPolicy-2022-03)。

生成 SSH 密钥

您可以将服务器设置为使用服务管理的身份验证方法对用户进行身份验证,其中用户名和 SSH 密钥存储在服务中。用户的 SSH 公钥作为用户的属性上传到服务器。服务器使用此密钥作为基于密钥的标准身份验证过程的一部分。每个用户均可使用单个服务器存档多个公有 SSH 密钥。有关每位用户可以存储的密钥数量的限制,请参阅《Amazon一般参考》中的Amazon服务配额

作为服务托管身份验证方法的替代方法,您可以使用自定义身份提供商对用户进行身份验证。这允许您使用 Amazon API Gateway 终端节点插入现有身份提供商。有关更多信息,请参阅使用 API Gateway 方法进行身份验证

服务器只能使用一种方法(服务管理或自定义身份提供商)对用户进行身份验证,并且该方法在创建服务器后无法更改。

在 macOS、Linux 或 Unix 上创建 SSH 密钥

在 macOS、Linux 或 Unix 操作系统上,您可以使用ssh-keygen命令创建 SSH 公钥和 SSH 私钥,也称为key pair。

注意

有关在 Windows 上使用 PuTTYgen 创建 SSH 密钥的教程,请参阅 SSH.com 网站。

在 macOS、Linux 或 Unix 操作系统上创建 SSH 密钥
  1. 在 macOS、Linux 或 Unix 操作系统上,打开命令终端。

  2. Amazon Transfer Family接受 RSA、ECDSA-和 ED25519 格式的密钥。根据要生成的密钥对的类型选择相应的命令。

    • 要生成 RSA 4096 位key pair,请执行以下操作:

      ssh-keygen -t rsa -b 4096 -N "" -f key_name
    • 要生成 ECDSA 521 位密钥对(ECDSA 的位大小为 256、384 和 521),请执行以下操作:

      ssh-keygen -t ecdsa -b 521 -N "" -f key_name
    • 要生成 ED25519 key pair,请执行以下操作:

      ssh-keygen -t ed25519 -N "" -f key_name
    注意

    key_name是 SSH key pair 文件名。

    下面是此类ssh-keygen输出的示例。

    ssh-keygen -t rsa -b 4096 -N "" -f key_name Generating public/private rsa key pair. Your identification has been saved in key_name. Your public key has been saved in key_name.pub. The key fingerprint is: SHA256:8tDDwPmanTFcEzjTwPGETVWOGW1nVz+gtCCE8hL7PrQ bob.amazon.com The key's randomart image is: +---[RSA 4096]----+ | . ....E | | . = ... | |. . . = ..o | | . o + oo = | | + = .S.= * | | . o o ..B + o | | .o.+.* . | | =o*+*. | | ..*o*+. | +----[SHA256]-----+
    注意

    当您运行 ssh-keygen 命令时(如前所示),它将公有密钥和私有密钥创建为当前目录中的文件。

  3. 导航到该key_name.pub文件并将其打开。

  4. 复制文本并将其粘贴到服务管理用户的 SSH 公钥中。

    1. 通过 https://console.aws.amazon.com/transfer/ 打开Amazon Transfer Family控制台,然后从导航窗格中选择 “服务器”。

    2. 服务器页面上,选择包含要更新的用户的服务器的服务器 ID

    3. 选择要为其添加公钥的用户。

    4. SSH 公钥窗格中,选择添加 SSH 公钥

      
                                        Amazon Transfer Family控制台,显示所选用户的用户详细信息。
    5. 将生成的公钥文本粘贴到 SSH 公钥文本框中,然后选择添加密钥

      
                                        Amazon Transfer Family控制台,显示添加公钥的 “添加密钥” 页面。

      新密钥在 SSH 公钥窗格中列出。

      
                                        Amazon Transfer Family控制台,在 SSH 公钥部分显示新添加的公钥。

在微软 Windows 上创建 SSH 密钥

Windows 使用略微不同的 SSH 密钥对格式。公有密钥必须采用 PUB 格式,私有密钥必须采用 PPK 格式。在 Windows 上,您可以使用 PuTTYgen 以适当的格式创建 SSH 密钥对。您还可以使用 PuTTYgen 将使用 ssh-keygen 生成的私有密钥转换为 .ppk 文件。

注意

如果您向 WinSCP 提供非.ppk格式的私钥文件,则该客户端会为您将密钥转换为.ppk格式。

有关在 Windows 上使用 PuTTYgen 创建 SSH 密钥的教程,请参阅 SSH.com 网站

轮换密钥

为了安全起见,我们建议使用轮换 SSH 密钥的最佳做法。通常,这种轮换被指定为安全策略的一部分,并以某种自动方式实施。根据安全级别,对于高度敏感的通信,SSH key pair 可能只使用一次。这样做可以消除因存储密钥而导致的任何风险。但是,更常见的做法是将 SSH 凭证存储一段时间并设置一个不会给用户带来过重负担的间隔。通常,时间间隔为 3 个月。

有两种方法用于执行 SSH 密钥轮换:

  • 在控制台上,您可以上传新的 SSH 公钥并删除现有的 SSH 公钥。

  • 使用 API,您可以更新现有用户,方法是使用 DeleteSshPublicKeyAPI 删除用户的安全外壳 (SSH) 公钥,使用 ImportSshPublicKeyAPI 向用户账户添加新的安全外壳 (SSH) 公钥。

Console
在控制台中执行密钥轮换
  1. 通过 https://console.aws.amazon.com/transfer/ 打开Amazon Transfer Family主机。

  2. 导航到 “服务器” 页面。

  3. 在 “服务器 ID” 列中选择标识符以查看服务器详细信息页面。

  4. 在 “用户” 下,选中要轮换 SSH 公钥的用户的复选框,然后选择 “操作”,然后选择 “添加密钥” 以查看 “添加密钥” 页面。

    选择用户名以查看 “用户详细信息” 页面,然后选择 “添加 SSH 公钥” 以查看 “添加密钥” 页面。

  5. 输入新的 SSH 公钥并选择添加密钥

    重要

    SSH 公有密钥的格式取决于您生成的密钥类型。

    • 对于 RSA 密钥,格式为ssh-rsa string

    • 对于 ED25519 密钥,格式为ssh-ed25519 string

    • 对于 ECDSA 密钥,密钥以ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521、或开头,具体取决于您生成的密钥的大小。接着是开头的字符串string,与其他键类型类似。

    您将返回到用户详细信息页面,您刚才输入的新 SSH 公钥将显示在 SSH 公钥部分中。

  6. 选中想要删除的旧 You 密钥的复选框,然后选择 D elete

  7. 输入单词确认删除操作delete,然后选择 “删除”。

API
使用 API 执行密钥轮换
  1. 在 macOS、Linux 或 Unix 操作系统上,打开命令终端。

  2. 通过输入以下命令,检索想要删除的 SSH 密钥。要使用此命令,请使用您的 TserverID ransfer Family 服务器的服务器 ID 替换,然后username替换为您的用户名。

    aws transfer describe-user --server-id='serverID' --user-name='username'

    该命令返回有关用户的详细信息。复制该"SshPublicKeyId":字段的内容。您在此过程的稍后部分需要输入此值。

    "SshPublicKeys": [ { "SshPublicKeyBody": "public-key", "SshPublicKeyId": "keyID", "DateImported": 1621969331.072 } ],
  3. 接下来,为您的用户导入一个新的 SSH 密钥。在 提示符中,输入以下命令。要使用此命令,请serverID替换为 Transfer Family 服务器的服务器 ID,username替换为您的用户名,然后public-key替换为新公钥的指纹。

    aws transfer import-ssh-public-key --server-id='serverID' --user-name='username' --ssh-public-key-body='public-key'

    如果命令成功,则不返回任何输出。

  4. 最后,通过运行以下命令删除旧密钥即可。要使用此命令,请serverID使用您的 Transfer Family 服务器的服务器 IDusername 替换,替换为您的用户名,然后keyID-from-step-2替换为在此过程的步骤 2 中复制的密钥 ID 值

    aws transfer delete-ssh-public-key --server-id='serverID' --user-name='username' --ssh-public-key-id='keyID-from-step-2'
  5. (可选)要确认旧密钥已不存在,请重复步骤 2。

生成和管理 PGP 密钥

您可以对 Transfer Family 通过工作流程处理的文件使用 Pretty Good Privacy (PGP) 解密。要在工作流程步骤中使用解密,必须提供 PGP 密钥。

生成 PGP 密钥

生成 PGP 密钥的方法取决于您的操作系统和所使用的密钥生成软件的版本。

如果你使用的是 Linux 或 Unix,请使用你的软件包安装程序进行安装gpg。根据您的 Linux 发行版,以下命令之一应该适合您。

sudo yum install gnupg
sudo apt-get install gnupg

对于 Windows 或 macOS,你可以从 https://gnupg.org/download/ 下载你需要的内容。

安装 PGP 密钥生成器软件后,运行gpg --gen-key命令生成key pair。Transfer Family 支持与 OpenPGP RFC 一致的密钥格式和对称加密算法。

以下是一些有用的子命令,可用于gpg

  • gpg --help— 此命令列出了可用选项,可能包括一些示例。

  • gpg --list-keys— 此命令列出了您创建的所有密钥对的详细信息。

  • gpg --fingerprint— 此命令列出所有密钥对的详细信息,包括每个密钥的指纹。

  • gpg --export -a user-name— 此命令导出密钥生成时user-name使用的密钥的公钥部分。

管理 PGP 密钥

要管理您的 PGP 密钥,您必须使用Amazon Secrets Manager。

如果您想为所有用户使用一个密钥和密码,则可以将 PGP 密钥块信息存储在机密名称aws/transfer/server-id/@pgp-default下,其中server-id是 Transfer Family 服务器的 ID。如果没有与执行工作流程的用户user-name匹配的密钥,则使用此默认密钥。

或者,您也可以为特定用户创建密钥。在这种情况下,密钥名称的格式为aws/transfer/server-id/user-name,其中user-name与运行 Transfer Family 服务器工作流的用户相匹配。

注意

每个 Transfer Family 服务器每位用户最多可以存储 3 个密钥。

配置 PGP 密钥以用于解密
  1. 通过运行以下命令并回答所有提示生成 PGP key pair。

    gpg --gen-key
    重要

    在密钥生成过程中,您必须提供密码和电子邮件地址。请务必记下这些值。在此过程的Amazon Secrets Manager后面部分中输入密钥的详细信息时,必须提供密码。并且您必须提供相同的电子邮件地址才能在下一步中导出私钥。

  2. 运行以下命令以导出私有密钥。要使用此命令,请private.pgp用保存私钥块的文件名替换为生成key pair 时使用的电子邮件地址。marymajor@example.com

    gpg --output private.pgp --armor --export-secret-key marymajor@example.com
  3. Amazon Secrets Manager用于存储您的 PGP 密钥。

    1. 登录Amazon Web Services Management Console并通过 https://console.aws.amazon.com/secretsmanager/ 打开主Amazon Secrets Manager机。

    2. 在左侧导航窗格中,选择 S ets

    3. 在 “密钥” 页面上,选择 “存储新密钥”。

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

    5. 在 “键/值对” 部分中,选择 “键/值” 选项卡。

      • 密钥 —输入PGPPrivateKey

      • v alue — 将您的私钥文本粘贴到值字段中。您可以在本过程前面导出密钥时指定的文件(例如private.pgp)中找到私钥的文本。密钥以开头-----BEGIN PGP PRIVATE KEY BLOCK-----,结尾为-----END PGP PRIVATE KEY BLOCK-----

        注意

        确保文本块仅包含私钥,而不包含公钥。

    6. 选择 “添加行”,然后在 “键/值对” 部分中选择 “键/值” 选项卡。

      • 密钥 —输入PGPPassphrase

      • valu e — 输入您在生成 PGP key pair 时使用的密码。

      Amazon Secrets Manager控制台,显示您为管理 PGP 密钥而输入的密钥和值。
      注意

      您最多可以添加 3 组密钥和密钥短语。要添加第二组,请新增两行,PGPPassphrase2为密钥输入PGPPrivateKey2和,然后粘贴另一个私钥和密码。要添加第三组,键值必须为PGPPrivateKey3PGPPassphrase3

    7. 选择 Next(下一步)

    8. Configure sect(配置密钥)页面上,输入密钥的名称和描述。

      • 如果您要创建默认密钥,即可供任何 Transfer Family 用户使用的密钥,请输入aws/transfer/server-id/@pgp-defaultserver-id替换为包含有解密步骤的工作流的服务器的 ID。

      • 如果您要创建供特定 Transfer Family 用户使用的密钥,请输入aws/transfer/server-id/user-name。替换server-id为包含具有解密步骤的工作流的服务器的 ID,user-name替换为正在运行工作流的用户的名称。存储在user-name Transfer Family 服务器正在使用的身份提供商中。

    9. 选择 “下一步” 并接受 “配置轮换” 页面上的默认设置。然后选择下一步

    10. 在 “查看” 页面上,选择 “存储” 以创建和存储密钥。

以下屏幕截图显示了特定 Transfer Family 服务器marymajor的用户的详细信息。此示例显示了三个密钥及其对应的密码。


                        Amazon Secrets Manager控制台显示 Transfer Family 服务器和用户的密钥详细信息页面,其中包含三个密钥和密码。