如何使用多因素身份验证保护您的实例
在亚马逊云科技,安全是我们的首要任务。我们强烈建议在所有应用程序层实施全面的安全控制,以确保深度防御。这种多层方法有助于保护您的工作负载、数据和基础设施免受潜在威胁。在这篇文章中,我们将介绍在通过安全外壳 (SSH) 连接到实例的同时,使用双因素身份验证,为您的亚马逊 Linux 2023 (AL2023) Amazon Elastic Compute Cloud (Amazon EC2) 实例实现额外的认证安全层。
SSH 访问安全基础知识
连接到 Linux 服务器的最常用工具是 SSH。启动 EC2 实例时,系统会提示您创建新的密钥对或使用现有密钥对使用 SSH 连接到 EC2 实例。密钥对是私钥和公钥的组合,其中公钥存储在实例内的 ~/.ssh/authorized_keys
文件中,而私钥存储在用户的计算机中。包含 SSH 私钥的受损本地计算机构成了重大的安全风险。获得私钥和相应的 EC2 实例用户名的攻击者可以获得未经授权的 SSH 访问您的实例,其权限与受感染的用户账户的权限相同。为了防止任何拥有私钥对的人访问实例,您应该通过多因素身份验证 (MFA) 实现双重身份验证。
配置安全组以允许不受限制的 SSH 访问 (0.0.0.0/0
) EC2 实例的公有 IP 地址会造成严重的安全漏洞。这种做法使您的实例面临来自互联网任何地方的潜在暴力攻击和未经授权的访问尝试。为了克服这个问题,我们要么建议用户限制只能访问安全组中的 "我的 IP",要么在您的实例前设置堡垒主机或跳转箱,然后通过堡垒主机访问您的实例。在此基础上实施 MFA 将加强通过 SSH 访问实例时的安全性。
下图显示了常见的架构反模式:
下图显示了推荐的架构:
先决条件
在继续操作之前,在您的移动设备上安装谷歌身份验证器应用程序——您需要它在亚马逊 Linux 2023 实例上为多重身份验证 (MFA) 生成一次性密码 (OTP)。
配置步骤
在 EC2 实例中安装 Google 身份验证器
登录该实例并安装 Google 身份验证器及其依赖项。
配置 Google 身份验证器
安装软件包后,必须初始化应用程序,以便为您登录的用户生成密钥(例如 ec2-user
),以便向该用户帐户添加身份验证。执行以下命令来初始化应用程序。
这会生成一个二维码,您应该使用谷歌身份验证器应用程序扫描该二维码。然后,扫描完成后,在终端中输入来自应用程序的验证码,或者手动输入账户名称(可以是任何名称),以识别该实例和应用程序中终端中显示的密钥,以注册您的实例。确认代码后,系统将生成紧急刮刮码。安全地存储这些验证码——如果您无法访问 Google Authenticator 应用程序或移动设备,它们将用作备用身份验证方法。每个暂存码只能使用一次。
通过二维码或手动操作在移动应用程序中注册实例详细信息后,在 SSH 终端中,系统会询问您是否应为用户 ec2-user
更新 google_authenticator
文件。键入 y
会将密钥、临时代码和您稍后选择的其他配置选项保存在文件中。运行初始化应用程序,为每个用户账户执行相同的程序,以在每个账户上启用 MFA。
在以下问题中选择 y
拒绝多次使用同一个身份验证令牌来增强安全性并防止中间人攻击。
除非您遇到问题,否则请在以下问题中选择 n
,在 1:30 分钟的时间内获得三个有效代码。
在以下问题中选择 y
以启用速率限制以防止暴力逻辑尝试。
将 SSH 配置为使用 Google 可插拔身份验证模块
默认情况下,PAM 未配置为使用 MFA 进行 SSH 连接。现在您已经配置并运行 MFA 模块,您必须修改 PAM 配置才能使用 MFA 身份验证。
根据您的要求,有两个配置选项可供选择。
选项 1:为实例中的所有用户配置 MFA
将以下内容添加到文件底部,以使用谷歌身份验证器对 SSH 连接强制执行 MFA。启用此选项后,无论是否已为其个人账户配置 MFA,系统都会在 SSH 连接期间提示所有用户输入 MFA。这适用于尝试访问该实例的每个用户,这可能会干扰未配置 MFA 的用户的访问。
重要:在实施此设置之前,请确保所有需要实例访问权限的用户都已正确配置 MFA,以防止潜在的封锁。
选项 2:在不影响其他用户的情况下为特定用户进行配置
如果实例中还有其他服务账户或用户应该能够在没有 MFA 的情况下登录,请在以下语句的末尾添加 nullok
。这意味着未运行 Google 身份验证器初始化的用户不会被要求进行第二次身份验证。
注释密码要求,因为 SSH 密钥对比基于密码的身份验证提供更强的安全性。在此配置中,用户需要一个 SSH 密钥和来自 Google Authenticator 的验证码才能建立 SSH 连接,从而消除密码提示,同时通过双因素身份验证保持强大的安全性。请注意,如果您启用密码身份验证(不注释掉此行),则用户需要提供三个要素:他们的 SSH 密钥、密码和访问实例的 MFA 代码。
保存该文件。必须更改 SSH 配置,使其提示进行第二次身份验证。运行以下命令对配置文件进行更改。
然后,更改 ChallengeResponseAuthentication no
为 ChallengeResponseAuthentication yes
。
最后,你必须让 SSH 知道它应该使用密钥对和交互式身份验证来登录 MFA 模块。在文件底部,添加以下内容:
保存该文件。重启在实例中运行的 SSH 服务以使更改生效。重新启动 SSH 服务(SSH 守护程序)会停止 sshd 主进程并启动一个新进程,但它不会断开现有的 SSH 会话。
要测试解决方案,请打开一个新的终端窗口并通过 SSH 连接到实例,系统会要求您提供验证码。当您从新窗口进行 SSH 时,保持原始终端窗口中的会话处于打开状态。
键入在 Google 身份验证器应用程序上生成的代码,然后您便登录到您的实例。
使用 MFA 可以在登录时为亚马逊 Linux 2023 EC2 实例增加一层安全保护。
清理
为避免产生费用,如果已启动的 Amazon EC2 实例未使用,请停止或终止该实例。
结论
在这篇文章中,您学习了如何通过使用谷歌身份验证器实现多因素身份验证 (MFA) 来增强您的亚马逊 Linux 2023 EC2 实例安全性。此设置要求用户在连接到实例时提供其 SSH 密钥对和应用程序中基于时间的一次性密码,从而增加了一层必要的额外保护。