本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
密钥管理
在本节中,您可以找到有关SSH密钥的信息,包括如何生成密钥以及如何轮换密钥。有关使用 Transfer Family AWS Lambda 来管理密钥的详细信息,请参阅博客文章使用 A AWS Transfer Family 和启用用户自助服务密钥管理 AWS Lambda
注意
AWS Transfer Family 接受RSAECDSA、和ED25519密钥。
本节还介绍如何生成和管理 Pretty Good Privacy (PGP) 密钥。
所支持的用户和服务器密钥算法
支持以下 AWS Transfer Family中的用户和服务器秘钥对算法。
注意
有关在工作流程中用于PGP解密的算法,请参阅密钥对PGP支持的算法。
-
对于ED25519:
ssh-ed25519
-
对于RSA:
-
rsa-sha2-256
-
rsa-sha2-512
-
-
对于ECDSA:
-
ecdsa-sha2-nistp256
-
ecdsa-sha2-nistp384
-
ecdsa-sha2-nistp521
-
注意
我们SHA1支持ssh-rsa
我们较旧的安全政策。有关详细信息,请参阅加密算法。
为服务托管用户生成SSH密钥
您可以将服务器设置为使用服务托管身份验证方法对用户进行身份验证,其中用户名和SSH密钥存储在服务中。用户的公SSH钥作为用户的属性上传到服务器。服务器将此密钥用作密钥标准身份验证过程的一部分。每个用户可以在一台服务器上存档多个公SSH钥。有关每个用户可以存储的密钥数量限制,请参阅中的 Amazon Web Services 一般参考 中的 AWS Transfer Family 端点和配额。
作为服务托管身份验证方法的替代方法,您可以使用自定义身份提供商对用户进行身份验证,或者 AWS Directory Service for Microsoft Active Directory。有关更多信息,请参阅使用自定义身份提供程序 或使用 Di AWS rectory Service 身份提供商。
服务器只能使用一种方法(服务托管、目录服务或自定义身份提供程序)对用户进行身份验证,并且该方法在创建服务器后无法更改。
在 macOS、Linux 或 Unix 上创建SSH密钥
在 macOS、Linux 或 Unix 操作系统上,您可以使用ssh-keygen
命令来创建SSH公钥和SSH私钥,也称为密钥对。
在 macOS、Linux 或 Unix 操作系统上创建SSH密钥
-
在 macOS、Linux 或 Unix 操作系统,打开命令终端。
-
AWS Transfer Family 接受 RSA-、ECDSA-和 ED25519-格式的密钥。根据您生成的密钥对类型选择相应的命令。
注意
在以下示例中,我们未指定密码:在这种情况下,该工具会要求您输入密码,然后重复密码进行验证。创建密码可以更好地保护您的私钥,还可以提高系统整体安全性。您无法恢复密码:如果您忘记了密码,则必须创建新的密钥。
但是,如果要生成服务器主机密钥,则必须通过在命令中指定
-N ""
选项(或者在出现提示时按Enter
两次)指定空密码,原因是 Transfer Family 服务器无法在启动时请求密码。-
要生成 RSA 4096 位密钥对,请执行以下操作:
ssh-keygen -t rsa -b 4096 -f
key_name
-
要生成 ECDSA 521 位密钥对(ECDSA位大小为 256、384 和 521),请执行以下操作:
ssh-keygen -t ecdsa -b 521 -f
key_name
-
要生成ED25519密钥对,请执行以下操作:
ssh-keygen -t ed25519 -f
key_name
注意
是 SSH key pair 文件名。key_name
下面是
ssh-keygen
输出的示例。ssh-keygen -t rsa -b 4096 -f key_name Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: 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
命令时(如前所示),它将公有密钥和私有密钥创建为当前目录中的文件。您的SSH密钥对(key pair)现已准备就绪,可以使用。按照步骤 3 和 4 为服务托管用户存储SSH公钥。这些用户在 Transfer Family 服务器端点上传输文件时使用这些密钥。
-
-
导航到
文件并打开它。key_name
.pub -
复制文本并将其粘贴到服务管理用户的SSH公钥中。
-
打开 AWS Transfer Family 控制台 https://console.aws.amazon.com/transfer/
,然后从导航窗格中选择 “服务器”。 -
在服务器页面,选择包含要更新用户服务器的服务器 ID。
-
选择要为其添加公钥的目标用户。
-
在SSH公钥窗格中,选择添加SSH公钥。
-
将您生成的公钥文本粘贴到SSH公钥文本框中,然后选择添加密钥。
新密钥将在SSH公钥窗格中列出。
-
在微软 Windows 上创建SSH密钥
Windows 使用的密SSH钥对格式略有不同。公有密钥必须采用 PUB
格式,私有密钥必须采用 PPK
格式。在 Windows 上,你可以使用 P uTTYgen 来创建相应格式的SSH密钥对。您也可以使用 P uTTYgen 将使用生成的私钥ssh-keygen
转换为.ppk
文件。
注意
如果您向 Win SCP 提供非.ppk
格式的私钥文件,则该客户端会主动为您将该密钥转换为.ppk
格式。
有关在 Windows uTTYgen 上使用 P 创建SSH密钥的教程,请访问 SSH .com 网站
将SSH2公钥转换为PEM格式
AWS Transfer Family 仅接受PEM格式化的公钥。如果您有SSH2公钥,则需要对其进行转换。SSH2公钥的格式如下:
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20160402" AAAAB3NzaC1yc2EAAAABJQAAAgEAiL0jjDdFqK/kYThqKt7THrjABTPWvXmB3URI : : ---- END SSH2 PUBLIC KEY ----
PEM公钥的格式如下:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAA...
运行以下命令将SSH2格式化的公钥转换为-格式的PEM公钥。Replace(替换) ssh2-key
用你的SSH2密钥的名字,以及 PEM-key
用你的PEM密钥的名字。
ssh-keygen -i -f
ssh2-key
.pub >PEM-key
.pub
旋转SSH密钥
为了安全起见,我们建议采用轮换SSH密钥的最佳做法。通常,此轮换被指定为安全策略的一部分,并以某种自动化的方式实现。根据安全级别,对于高度敏感的通信,SSH密钥对(key pair)可能只能使用一次。这样做可以消除因存储密钥而导致的任何风险。但是,将SSH凭据存储一段时间并设置一个不会给用户带来过度负担的间隔更为常见。通常,时间间隔为 3 个月。
有两种方法可用于执行SSH密钥轮换:
-
在控制台上,您可以上传新的SSH公钥和删除现有的SSH公钥。
-
使用可以更新现有用户API,方法是使用删除用户的 Secure Shell (SSH) 公钥,使用ImportSshPublicKeyAPI向用户账户添加新的安全外壳 (SSH) 公钥。DeleteSshPublicKeyAPI
生成和管理PGP密钥
你可以对 Transfer Family 通过工作流程处理的文件使用 Pretty Good Privacy (PGP) 解密。要在工作流程步骤中使用解密,必须提供密钥。PGP
AWS 存储博客上有一篇文章描述了如何加密和解密文件,使用和加密和解密
生成PGP密钥
生成PGP密钥时使用的方法取决于您的操作系统和所使用的密钥生成软件的版本。
如果您使用的是 Linux 或 Unix,请使用软件包安装程序安装 gpg
。根据您的 Linux 发行版,在以下选择适用于您的命令。
sudo yum install gnupg
sudo apt-get install gnupg
对于 Windows 或 macOS,您可以从 https://gnupg.org/download/
安装PGP密钥生成器软件后,运行gpg
--full-gen-key
或gpg --gen-key
命令生成密钥对。
注意
如果您使用的版本是 GnuPG
2.3.0 或以上,则必须运行 gpg --full-gen-key
。当系统提示您输入要创建的密钥类型时,选择RSA或ECC。但是,如果您选择ECC,请务必选择其中一个 NIST 或者 BrainPool 用于椭圆曲线。不要选择 Curve 25519.
PGP密钥对支持的算法
PGP密钥对支持以下算法:
-
RSA
-
Elgamal
-
ECC:
-
NIST
-
BrainPool
-
注意
不支持 Curve25519 秘钥。
有用的 gpg
子命令
以下是一些有用的gpg
子命令:
-
gpg --help
— 此命令列出了可用选项,可能还包括一些示例。 -
gpg --list-keys
— 此命令列出了您创建的所有密钥对的详细信息。 -
gpg --fingerprint
— 此命令列出了所有密钥对的详细信息,包括每个密钥的指纹。 -
gpg --export -a
— 此命令导出生成密钥时user-name
使用密钥的公钥部分。user-name
管理PGP密钥
要管理您的PGP密钥,必须使用 AWS Secrets Manager。
注意
您的秘钥名称包括 Transfer Family 服务器 ID。这意味着在存储PGP密钥信息之前,您应该已经识别或创建了服务器 AWS 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密的密钥
-
根据您使用的版本GPG,运行以下命令之一以生成不使用 Curve 25519 加密算法的PGP密钥对。
-
如果您使用的是
GnuPG
版本为 2.3.0 或以上,请运行以下命令:gpg --full-gen-key
您可选择
RSA
,或如果您选择ECC
,您可为此椭圆曲线选择NIST
或BrainPool
。如果gpg --gen-key
改为运行,则会创建一个使用 C ECC urve 25519 加密算法的密钥对,而我们目前不支持PGP密钥。 -
对于 2.3.0
GnuPG
之前的版本,您可以使用以下命令,因为RSA这是默认的加密类型。gpg --gen-key
重要
密钥生成过程中,您必须提供密码和电子邮箱地址。请务必记下这些值。本过程后续在 AWS Secrets Manager 中输入密钥详细信息时,必须提供密码。您必须提供相同的电子邮件地址才能在下一步中导出私钥。
-
-
运行以下命令以导出私钥。要使用此命令,请将
替换为用于保存私钥块的文件名,并将private.pgp
替换为生成密钥对时使用的电子邮件地址。marymajor@example.com
gpg --output
private.pgp
--armor --export-secret-keymarymajor@example.com
-
AWS Secrets Manager 用于存储您的PGP密钥。
-
登录 AWS Management Console 并打开 AWS Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/
。 -
在左侧导航窗格中,选择密钥。
-
在密钥页面,选择存储新密钥。
-
在选择密钥类型页面上,为密钥类型选择其他密钥类型。
-
在秘钥/值对部分,选择秘钥/值选项卡。
-
密钥 - 输入
PGPPrivateKey
。注意
必须准确输入
PGPPrivateKey
字符串:切勿在字符前面或字符之间添加任何空格。 -
值 — 将您的私钥文本粘贴至值字段。您可以在文件中找到私钥文本(例如
private.pgp
),该文件是在您之前导出密钥时指定的文件。密钥开头为-----BEGIN PGP PRIVATE KEY BLOCK-----
,结尾为-----END PGP PRIVATE KEY BLOCK-----
。注意
确保文本块仅包含私钥,且不包含公钥。
-
-
选择添加行,然后在秘钥/值对部分选择秘钥/值选项卡。
-
键 — 输入
PGPPassphrase
。注意
必须准确输入
PGPPassphrase
字符串:切勿在字符前面或字符之间添加任何空格。 -
valu e — 输入生成密钥对PGP时使用的密码。
注意
您最多可添加 3 组密钥和密码。若要添加第二组,请添加两行新行,为秘钥输入
PGPPrivateKey2
和PGPPassphrase2
,并粘贴至其他私钥和密码。若要添加第三组,秘钥值必须为PGPPrivateKey3
和PGPPassphrase3
。 -
-
选择下一步。
-
在配置密钥页面,输入密钥的名称和描述。
-
如果您要创建默认密钥,即可供任何 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
的详细信息。此示例显示三个密钥及其对应的密码。
支持的PGP客户端
以下客户端已通过 Transfer Family 进行了测试,可用于生成PGP密钥和加密您打算通过工作流程解密的文件。
-
Gpg4win + Kleopatra。
注意
当您选择签名/加密文件时,请务必取消选择签名身份:我们目前不支持对加密文件进行签名。
-
GnuPG 主要版本:2.4、2.3、2.2、2.0 和 1.4。
请注意,其他PGP客户可能也可以使用,但只有此处提到的客户已通过 Transfer Family 进行了测试。