<返回更多

如何安全地配置 AWS EC2 实例

2022-09-04  网易号  qaseven
加入收藏
AWS EC2 是 AWS 最受欢迎和使用最广泛的服务之一。在本文中,了解一些有助于安全配置我们的 EC2 实例的方法。

 

Ayush Priya 的这篇文章最初发表在Kloudle 博客上。

AWS 的 Elastic Compute Cloud(通常称为 EC2)是一项服务,允许组织启动可用于托管和运行应用程序、数据库等的虚拟机。EC2 实例具有多种选项,从选择 CPU 内核数量到磁盘空间、内存和操作系统等等。EC2 服务还包含不同的配置选项和设置,供实例使用。本叔说过,“能力越大,责任越大”,在这种情况下,有很多设置可供选择,就会出现很多错误配置。因此,本文将介绍如何安全地配置我们的 EC2 实例。

 

EC2 实例的安全配置

 

尽管这不是为保护您的实例而采取的详尽操作列表,但这些配置是一个很好的起点,因为它们易于理解和实施。随着人们熟悉 AWS 及其各种其他服务,可以采取其他(高级)措施来进一步加强 EC2 实例的安全性。目前,我们将坚持直接适用于 EC2 实例的安全设置列表。

 

启用 IMDSv2

 

实例元数据服务 (IMDS) 提供有关实例的信息以及与其关联的各种参数,例如在启动时指定的用户数据。IMDSv1 将凭证存储在端点中,可以检索这些凭证,然后使用这些凭证通过 AWS CLI 执行操作。在凭据被渗透的情况下,这可能是毁灭性的。因此,引入了 IMDSv2 来阻止针对滥用元数据端点的各种攻击。IMDSv2 使用会话但不将会话令牌作为信息存储在端点本身中,因此在后续调用中生成令牌后无法检索令牌。

 

通过控制台为新实例启用 IMDSv2

 

启动实例时,在“配置实例详细信息”页面下,导航到“高级详细信息”部分,然后:

 

  1. 为“元数据可访问”选项选择“启用”。
  2. 为“元数据版本”选项选择“V2(需要令牌)”。

 

 

使用 AWS CLI 为新实例启用 IMDSv2

 

要在使用 AWS CLI 启动实例时启用 IMDSv2,请在命令中使用以下标志:

aws ec2 run-instances --image-id \--metadata-options "HttpEndpoint=enabled,HttpTokens=required"

 

使用 AWS CLI 为现有实例启用 IMDSv2

 

运行以下 AWS CLI 命令以修改实例并启用 IMDSv2:

aws ec2 modify-instance-metadata-options --instance-id --http-tokens required --http-endpoint enabled

 

实施最小许可安全组规则

 

安全组是定义允许的入站和出站可访问性以及从实例到各种其他资源、在公共互联网上以及在 VPC 内的防火墙。重要的是要确保我们只公开在实例上运行的那些需要的服务,并将访问权限限制在需要它的用户/组。为此,我们需要添加尽可能明确的安全组规则。例如,不使用 0.0.0.0/0 作为 SSH 协议的允许源,我们可以指定需要访问实例的团队明确使用的通用 VPN 作为源。

AWS 有大量文档用于创建和管理可用的安全组和规则。

 

定期修补

 

修补是指将软件更新应用到操作系统以进行性能升级、错误修复和由维护操作系统的供应商发布的安全修复的活动。

修补的步骤因操作系统而异,但基本思路是相同的:使用操作系统的机制检查是否有可用的补丁/更新并应用它。某些补丁程序还需要重新启动系统,尽管情况并非总是如此。

例如,可以执行以下步骤来修补运行 Ubuntu 18.04 作为操作系统的 EC2 实例:

 

  1. SSH 进入 EC2 实例
  2. 运行sudo apt update。
  3. 运行sudo apt upgrade。
  4. 运行sudo reboot。
使用 SSM 代理并行修补多台计算机

 

如果我们处理的实例数量很少,手动应用补丁就可以了;比如说,10。但在大多数现实生活中,这个数字通常比这个大,因此手动修补成为一项相当艰巨的任务。值得庆幸的是,AWS 有一项名为 Systems Manager 的服务,简称 SSM。SSM 可以同时在多台机器上执行命令,省去了一次手动访问一台机器的麻烦,使其成为一个非常有用的工具。

“如何在云上修补 Pwnkit 漏洞 (CVE-2021-4034)”在“使用 SSM 修补 AWS 和 GCP 上的多台机器 > AWS”部分下解释了如何使用 AWS SSM 修补多个 EC2 服务器。

 

为 EBS 卷启用定期备份

 

存储在 EC2 实例上的数据应定期备份,以避免因磁盘故障、数据损坏等导致数据丢失问题。AWS Data Lifecycle Manager 是一项服务,可用于创建备份计划以自动备份我们的 EBS 卷.

 

通过 AWS 控制台启用定期备份

 

要从控制台使用 Amazon Data Lifecycle Manager 启用定期备份,请执行以下步骤:

 

  1. 导航到 EC2 详细信息页面,然后选择“Elastic Block Storage”子菜单下的“Lifecycle Manager”链接。
  2. 选择“EBS 快照策略”并单击“下一步”按钮。

 

 

  1. 选择目标资源类型(Volume 或 Instance),并指定标签来标识选择的资源类型。单击“添加”按钮。

 

 

  1. 添加备份策略的描述。

 

 

  1. 为策略添加必要的标签。

 

 

  1. 确保在“策略状态”部分中选择了“启用”选项,然后单击“下一步”按钮。

 

 

  1. 根据要求添加备份计划的详细信息。理想情况下,建议每天备份一次。

 

 

  1. 向下滚动并单击“查看政策”按钮。

 

 

  1. 最后,单击“创建策略”按钮以创建备份策略和计划。

 

 

使用 AWS CLI 启用定期备份

 

要使用带有 AWS CLI 的 Amazon Data Lifecycle Manager 启用定期备份,请执行以下步骤:

 

  1. 创建一个名为 policy.json 的文件,并根据需要在替换配置的文件中添加以下内容。

 

{“资源类型”:[“体积”],“目标标签”:[{"Key": "createdBy",“价值”:“阿尤什”}],“时间表”:[{"名称": "每日快照",“复制标签”:是的,“添加标签”:[{“键”:“类型”,“价值”:“我的每日快照”}],“创建规则”:{“间隔”:24,“间隔单位”:“小时”,《时代》:[“03:00”]},“保留规则”:{“计数”:5}}]}

 

  1. 获取将用于为 EBS 卷创建备份的 IAM 角色的 ARN。
  2. 最后,运行以下 AWS CLI 命令:

 

aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn --policy-details file:///path/to/policy.json

 

加密 EBS 卷

 

EBS 卷应该被加密,以确保它们持有的数据不会被可能已获得该卷访问权限的未经授权的实体读取或滥用。我们可以启用配置以在创建时默认对所有 EBS 卷强制加密。

 

通过控制台启用加密

 

要使用 AWS CLI 为 AWS 账户启用默认加密,可以使用以下步骤:

 

  1. 导航到 EC2 仪表板页面并单击“EBS 加密”链接。

 

 

  1.  

 

 

  1. 选中“始终加密新 EBS 卷”设置的复选框“启用”,然后单击“更新 EBS 加密”按钮。

 

 

使用 AWS CLI 启用加密

 

要使用 AWS CLI 为 AWS 账户默认启用加密,可以使用以下命令:

aws ec2 enable-ebs-encryption-by-default

 

补充说明

 

上述配置会加密在账户中创建的新 EBS 卷。要加密现有的卷,AWS 的文档可以作为参考。

 

加密 EBS 快照

 

EBS 快照用作 EBS 卷的备份,可用于恢复实例状态、从备份中启动新实例等。由于 EBS 快照本质上等同于 EBS 卷本身,因此确保快照及其加密对应的 EBS 卷是必要的。

EC2 快照的一个很好的特性是,当为加密卷创建快照时,默认情况下该快照也会被加密。这消除了对启用 EBS 加密设置后创建的快照的加密需求,我们在上一节中配置了加密 EBS 卷。话虽如此,可能存在我们需要加密的未加密旧快照,这可以通过创建未加密快照的副本来完成。对于新复制的快照,我们将启用加密。

 

通过控制台为快照启用加密

 

要通过控制台为现有的未加密快照启用加密,可以执行以下步骤:

 

  1. 导航到 EC2 仪表板。
  2. 单击“Elastic Block Storage”子菜单下的“Snapshots”链接。
  3. 选择要为其制作加密副本的快照,单击“操作”下拉菜单,然后单击“复制快照”选项。

 

 

  1. 在“复制快照”页面中,确保选中“加密”部分下的“加密此快照”复选框,然后单击“复制快照”按钮。

 

 

  1. 或者,可以选择不同的 KMS 密钥来代替默认密钥。
使用 AWS CLI 为快照启用加密

 

要使用 AWS CLI 为现有快照启用加密,可以运行以下命令:

aws ec2 copy-snapshot --source-region --source-snapshot-id --encrypted --kms-key-id

 

使用可信 AMI

 

Amazon 系统映像或 AMI 是 EC2 实例的启动配置包,需要在启动实例时指定。这些 AMI 可以由任何人创建,并与特定的 AWS 账户共享,或者通过将其公开来与所有人共享。这可能导致共享恶意 AMI 的可能性。因此,作为一项安全措施,我们应该为我们的实例自己创建和使用 AMI,或者使用仅由受信任的供应商发布的公共 AMI。Amazon linux Image 就是这样一种受信任的 AMI,它由 Amazon 自己创建和维护。其他镜像也可以信任,尽管基于供应商,而不是名称,例如,可以创建镜像并将其命名为 Ubuntu,但发布者实际上可能与维护和发布 Ubuntu 操作系统的 Canonical Group 没有关联。

在启动映像时选择的 AMI 并不完全是与实例关联的配置,因此在此安全措施的情况下无需采取特定步骤。正在使用的 AMI 需要在使用前和启动实例时进行信任审查:

 

  1. 使用控制台,需要从现有的可用列表中选择 AMI。
  2. 使用 AWS CLI,需要提供适当的 AMI ID 来启动实例。
利用 IAM 角色允许实例使用 AWS 资源

 

IAM 角色用于委派权限以对 AWS 资源执行操作并执行其所需角色。当 IAM 角色附加到 EC2 实例时,称为实例角色,服务器可以使用该实例角色执行允许的操作;例如,将本地备份上传到 S3 存储桶。

最小权限访问是一种安全最佳实践,我们添加角色(或在其他情况下,IAM 用户)执行其工作所需的确切权限。将此原则应用于附加到实例的 IAM 角色,仅应将实例执行其作业所需的权限添加到实例角色中,而不是其他任何内容。这可确保在凭据泄露的情况下,将损害降至最低。

为 IAM 角色配置最低权限是非常上下文相关的;即,它不能一概而论。因此,提供实例和各种用例可以使用的不同可能权限组合的详尽列表超出了本文的范围。

 

使用 VPC 和子网隔离机器
虚拟私有云

 

Virtual Private Cloud 或 VPC 是一种 AWS 服务,允许用户创建逻辑上相互隔离的虚拟网络。具体来说说EC2实例,举个例子,我们可以想到一些EC2实例只需要访问内部资源,不需要访问互联网的情况。对于此类实例,我们可以创建一个不允许来自 Inte.NET 的入站和出站连接的 VPC,因此只能在同一 VPC 中的资源之间进行通信。AWS 的文档可用于了解如何创建新的 VPC。

 

通过控制台创建 VPC

 

执行以下步骤以创建新的 VPC:

 

  1. 导航到 VPC 管理页面。
  2. 单击“启动 VPC 向导”按钮。

 

 

  1. 选择“具有单个公共子网的 VPC”选项,然后单击“选择”按钮。如果我们愿意,我们可以稍后添加更多子网。

 

 

  1. 为 VPC 提供 IPv4 CIDR 块,然后单击“创建 VPC”按钮。

 

 

使用 AWS CLI 创建 VPC

 

运行以下命令创建一个新的 VPC,指定的 CIDR 为 192.168.0.0/16:

aws ec2 create-vpc --cidr-block 192.168.0.0/16

 

子网

 

子网是 VPC 中的子组件,可以在较小的虚拟网络中进一步隔离资源。例如,使用 CIDR 块 192.168.0.0/16 创建的 VPC 可以具有子网 192.168.1.0/24 和 192.168.2.0/24,其中两个子网位于同一个 VPC 中,但彼此隔离。

 

通过控制台创建子网

 

执行以下步骤以创建新的 VPC:

 

  1. 导航到 VPC 管理页面。
  2. 单击“虚拟私有云”菜单的“子网”链接。

 

 

  1. 单击“创建子网”按钮。

 

 

  1. 选择 VPC 以在其中创建子网。

 

 

  1. 添加子网的 CIDR 块以及可选的名称和标签。

 

 

  1. 最后,单击“创建子网”按钮。

 

 

使用 AWS CLI 创建子网

 

运行以下命令在 CIDR 块 192.168.1.0/24 内创建新子网:

aws ec2 create-subnet --vpc-id --cidr-block 192.168.1.0/24

 

为实例启用详细监控

 

默认情况下,EC2 实例从启动时就已进行基本监控。基本监控固然不错,但往往不够。这里提供了对 EC2 实例的详细监控,例如 CPU 信用指标、实例指标等。

 

通过控制台启用详细监控

 

执行以下步骤以通过控制台启用对 EC2 实例的详细监控:

 

  1. 导航到 EC2 仪表板。
  2. 选择需要开启详细监控的实例。点击“操作”下拉菜单,在“监控和故障排除”子菜单下选择“管理详细监控选项”。

 

 

  1. 确保选中“启用”复选框,然后单击“保存”按钮。

 

 

使用 AWS CLI 启用详细监控

 

运行以下 AWS CLI 命令以启用对现有实例的详细监控:

aws ec2 monitor-instances --instance-ids

运行以下 AWS CLI 命令以在启动新实例时启用详细监控:

aws ec2 run-instances --image-id --monitoring Enabled=true #Amongst other options/flags

 

结论

 

EC2 是 AWS 提供的一项广泛使用的服务,用于运行我们的应用程序等等。凭借其广泛的可用性列表,还有一长串适用于这些实例的选项,这可能导致错误配置或使用不安全的默认配置。

在本文中,我们了解了我们可以采取的各种安全措施来保护我们的 EC2 实例,其中一些是通过直接在 EC2 实例上应用设置,例如使用受信任的 AMI 或启用 IMDSv2,还有一些与实例切线一致,例如使用 VPC 将各种实例相互隔离或加密 EBS 卷和快照。在所有这些情况下,我们看到了为什么强烈建议使用这些配置,如果不是完全强制应用的话。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>