本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Transfer Family 中管理 SSH 和 PGP 密钥
在本节中,您可以找到有关 SSH 密钥的信息,包括如何生成密钥以及如何轮换的信息。有关使用 Transfer Family Amazon Lambda 来管理密钥的详细信息,请参阅博客文章使用 A Amazon Transfer Family 和启用用户自助服务密钥管理 Amazon Lambda
注意
Amazon Transfer Family 接受 RSA、ECDSA 和 ED25519 密钥。
本节还介绍如何生成与管理 Pretty Good Privacy (PGP) 密钥。
所支持的用户和服务器密钥算法
支持以下 Amazon 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 一般参考 中的 Amazon Transfer Family 端点和配额。
作为服务托管身份验证方法的替代方法,您可以使用自定义身份提供商对用户进行身份验证,或者 Amazon Directory Service for Microsoft Active Directory。有关更多信息,请参阅使用自定义身份提供程序或使用微软 Active Directory 的 Amazon 目录服务。
服务器只能使用一种方法(服务托管、目录服务或自定义身份提供程序)对用户进行身份验证,并且该方法在创建服务器后无法更改。
在 macOS、Linux 或 Unix 系统创建 SSH 密钥
在 macOS、Linux 或 Unix 操作系统中,您可以使用 ssh-keygen
命令创建 SSH 公钥和 SSH 私钥(也称为密钥对)。
若要在 macOS、Linux 或 Unix 操作系统上创建 SSH 密钥
-
在 macOS、Linux 或 Unix 操作系统,打开命令终端。
-
Amazon 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_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 密钥对现已准备就绪,可以使用。按照步骤 3 和 4 为服务托管用户存储 SSH 公钥。这些用户在 Transfer Family 服务器端点上传输文件时使用这些密钥。
-
-
导航到
文件并打开它。key_name
.pub -
复制文本并将其粘贴至服务托管用户的 SSH 公钥中。
-
通过 https://console.aws.amazon.com/transfer/
打开 Amazon Transfer Family 控制台,然后从导航窗格中选择 “服务器”。 -
在服务器页面,选择包含要更新用户服务器的服务器 ID。
-
选择要为其添加公钥的目标用户。
-
在 SSH 公钥窗格,选择添加 SSH 公钥。
-
将您生成的公钥文本粘贴至 SSH 公钥文本框中,然后选择添加密钥。
新密钥列于 SSH 公钥窗格。
-
在 Microsoft Windows 上创建 SSH 密钥
Windows 使用略微不同的 SSH 密钥对格式。公有密钥必须采用 PUB
格式,私有密钥必须采用 PPK
格式。在 Windows 上,您可以使用 PuTTYgen 以适当的格式创建 SSH 密钥对。您还可以使用 PuTTYgen 将使用 ssh-keygen
生成的私有密钥转换为 .ppk
文件。
注意
如果您向 WinSCP 提供的私有密钥文件不是 .ppk
格式,该客户端会为您将密钥转换为 .ppk
格式。
要查看有关在 Windows 上使用 PuTTYgen 创建 SSH 密钥的教程,请参阅 SSH.com 网站
将 SSH2 公钥转换至 PEM 格式
Amazon 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 格式的公钥。将 ssh2-key
替换为 SSH2 秘钥名称,将 PEM-key
替换为您的 PEM 秘钥名称。
ssh-keygen -i -f
ssh2-key
.pub >PEM-key
.pub
轮换 SSH 密钥
出于安全原因,我们推荐轮换 SSH 密钥的最佳安全实践。通常,此轮换被指定为安全策略的一部分,并以某种自动化的方式实现。根据安全级别,对于高度敏感的通信,SSH 密钥对可能只使用一次。这样做可以消除因存储密钥而导致的任何风险。但是,更常见的做法是将 SSH 凭证存储一段时间,并设置一个不会给用户带来过多负担的间隔。通常,时间间隔为 3 个月。
有两种方法用于执行 SSH 密钥轮换:
-
在控制台上,您可以上传新的 SSH 公钥和删除现有 SSH 公钥。
-
使用 API,您可以使用 AP DeleteSshPublicKeyI 删除用户的安全外壳 (SSH) 公钥,使用 ImportSshPublicKeyAPI 向用户账户添加新的安全外壳 (SSH) 公钥,从而更新现有用户。
生成和管理 PGP 密钥
您可以对 Transfer Family 通过工作流程处理的文件使用 Pretty Good Privacy (PGP) 解密。要在工作流程步骤中使用解密,请提供 PGP 密钥。
Amazon 存储博客上有一篇文章描述了如何使用 Transfer Family Managed 工作流程、使用 PGP 加密和解密文件以及,无需编写任何代码即可简单地解密文件
生成 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
-
注意
我们不支持 ccurve25519 密钥。
有用的 gpg
子命令
以下是一些有用的gpg
子命令:
-
gpg --help
— 此命令列出了可用选项,可能还包括一些示例。 -
gpg --list-keys
— 此命令列出了您创建的所有密钥对的详细信息。 -
gpg --fingerprint
— 此命令列出了所有密钥对的详细信息,包括每个密钥的指纹。 -
gpg --export -a
— 此命令导出生成密钥时user-name
使用密钥的公钥部分。user-name
管理 PGP 密钥
要管理您的 PGP 密钥,请使用 Amazon Secrets Manager。
注意
您的秘钥名称包括 Transfer Family 服务器 ID。这意味着您应在 Amazon Secrets Manager中存储 PGP 秘钥信息之前识别或创建服务器。
如果您想为所有用户使用同一个密钥和密码,则可以将 PGP 密钥区块信息存储在机密名称 aws/transfer/
下,其中 server-id
/@pgp-default
是 Transfer Family 服务器的 ID。如果没有与正在执行工作流程的用户server-id
匹配的密钥,Transfer Family 将使用此默认密钥。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
,则会创建一个使用 ECC Curve 25519 加密算法的密钥对,而我们目前不支持 PGP 密钥。 -
对于 2.3.0 之前版本的
GnuPG
,您可以使用以下命令,原因是 RSA 是默认的加密类型。gpg --gen-key
重要
密钥生成过程中,您必须提供密码和电子邮箱地址。请务必记下这些值。本过程后续在 Amazon Secrets Manager 中输入密钥详细信息时,必须提供密码。您必须提供相同的电子邮件地址才能在下一步中导出私钥。
-
-
运行以下命令以导出私钥。要使用此命令,请将
替换为用于保存私钥块的文件名,并将private.pgp
替换为生成密钥对时使用的电子邮件地址。marymajor@example.com
gpg --output
private.pgp
--armor --export-secret-keymarymajor@example.com
-
用于存储 Amazon Secrets Manager 您的 PGP 密钥。
-
登录 Amazon Web Services Management Console 并打开 Amazon Secrets Manager 控制台,网址为 https://console.aws.amazon.com/secretsmanager/
。 -
在左侧导航窗格中,选择密钥。
-
在密钥页面,选择存储新密钥。
-
在选择密钥类型页面上,为密钥类型选择其他密钥类型。
-
在秘钥/值对部分,选择秘钥/值选项卡。
-
密钥 - 输入
PGPPrivateKey
。注意
必须准确输入
PGPPrivateKey
字符串:切勿在字符前面或字符之间添加任何空格。 -
值 — 将您的私钥文本粘贴至值字段。您可以在文件中找到私钥文本(例如
private.pgp
),该文件是在您之前导出密钥时指定的文件。密钥开头为-----BEGIN PGP PRIVATE KEY BLOCK-----
,结尾为-----END PGP PRIVATE KEY BLOCK-----
。注意
确保文本块仅包含私钥,且不包含公钥。
-
-
选择添加行,然后在秘钥/值对部分选择秘钥/值选项卡。
-
键 — 输入
PGPPassphrase
。注意
必须准确输入
PGPPassphrase
字符串:切勿在字符前面或字符之间添加任何空格。 -
值 – 输入您在生成 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。
注意
当您选择签名/加密文件时,请务必取消选择签名身份:我们目前不支持对加密文件进行签名。
如果您对加密文件进行签名并尝试使用解密工作流程将其上传到 Transfer Family 服务器,则会收到以下错误:
Encrypted file with signed message unsupported
-
GnuPG 主要版本:2.4、2.3、2.2、2.0 和 1.4。
请注意,其他 PGP 客户端也可运行,但只有此处提到的客户端通过 Transfer Family 进行了测试。