本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
密钥管理
在本节中,您可以找到有关 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 密钥
-
在 macOS、Linux 或 Unix 操作系统上,打开命令终端。
-
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
注意
是 SSH key pair 文件名。key_name
下面是此类
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
命令时(如前所示),它将公有密钥和私有密钥创建为当前目录中的文件。 -
-
导航到该
文件并将其打开。key_name
.pub -
复制文本并将其粘贴到服务管理用户的 SSH 公钥中。
-
通过 https://console.aws.amazon.com/transfer/
打开Amazon Transfer Family控制台,然后从导航窗格中选择 “服务器”。 -
在服务器页面上,选择包含要更新的用户的服务器的服务器 ID。
-
选择要为其添加公钥的用户。
-
在 SSH 公钥窗格中,选择添加 SSH 公钥。
-
将生成的公钥文本粘贴到 SSH 公钥文本框中,然后选择添加密钥。
新密钥在 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) 公钥。
生成和管理 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
是 Transfer Family 服务器的 ID。如果没有与执行工作流程的用户server-id
匹配的密钥,则使用此默认密钥。user-name
或者,您也可以为特定用户创建密钥。在这种情况下,密钥名称的格式为aws/transfer/
,其中server-id
/user-name
与运行 Transfer Family 服务器工作流的用户相匹配。user-name
每个 Transfer Family 服务器每位用户最多可以存储 3 个密钥。
配置 PGP 密钥以用于解密
-
通过运行以下命令并回答所有提示生成 PGP key pair。
gpg --gen-key
重要 在密钥生成过程中,您必须提供密码和电子邮件地址。请务必记下这些值。在此过程的Amazon Secrets Manager后面部分中输入密钥的详细信息时,必须提供密码。并且您必须提供相同的电子邮件地址才能在下一步中导出私钥。
-
运行以下命令以导出私有密钥。要使用此命令,请
用保存私钥块的文件名替换为生成key pair 时使用的电子邮件地址。private.pgp
marymajor@example.com
gpg --output
private.pgp
--armor --export-secret-keymarymajor@example.com
-
Amazon Secrets Manager用于存储您的 PGP 密钥。
-
登录Amazon Web Services Management Console并通过 https://console.aws.amazon.com/secretsmanager/
打开主Amazon Secrets Manager机。 -
在左侧导航窗格中,选择 S ets。
-
在 “密钥” 页面上,选择 “存储新密钥”。
-
在 “选择密钥类型” 页面上,对于 “密钥类型”,选择 “其他类型的密钥”。
-
在 “键/值对” 部分中,选择 “键/值” 选项卡。
-
密钥 —输入
PGPPrivateKey
。 -
v alue — 将您的私钥文本粘贴到值字段中。您可以在本过程前面导出密钥时指定的文件(例如
private.pgp
)中找到私钥的文本。密钥以开头-----BEGIN PGP PRIVATE KEY BLOCK-----
,结尾为-----END PGP PRIVATE KEY BLOCK-----
。注意 确保文本块仅包含私钥,而不包含公钥。
-
-
选择 “添加行”,然后在 “键/值对” 部分中选择 “键/值” 选项卡。
-
密钥 —输入
PGPPassphrase
。 -
valu e — 输入您在生成 PGP key pair 时使用的密码。
注意 您最多可以添加 3 组密钥和密钥短语。要添加第二组,请新增两行,
PGPPassphrase2
为密钥输入PGPPrivateKey2
和,然后粘贴另一个私钥和密码。要添加第三组,键值必须为PGPPrivateKey3
和PGPPassphrase3
。 -
-
选择 Next(下一步)。
-
在 Configure sect(配置密钥)页面上,输入密钥的名称和描述。
-
如果您要创建默认密钥,即可供任何 Transfer Family 用户使用的密钥,请输入
aws/transfer/
。server-id
/@pgp-default
替换为包含有解密步骤的工作流的服务器的 ID。server-id
-
如果您要创建供特定 Transfer Family 用户使用的密钥,请输入
aws/transfer/
。替换server-id
/user-name
为包含具有解密步骤的工作流的服务器的 ID,server-id
替换为正在运行工作流的用户的名称。存储在user-name
Transfer Family 服务器正在使用的身份提供商中。user-name
-
-
选择 “下一步” 并接受 “配置轮换” 页面上的默认设置。然后选择下一步。
-
在 “查看” 页面上,选择 “存储” 以创建和存储密钥。
-
以下屏幕截图显示了特定 Transfer Family 服务器marymajor
的用户的详细信息。此示例显示了三个密钥及其对应的密码。
