EC2 实例的安全配置
虽然这不是保护实例的详尽操作列表,但这些配置是一个很好的起点,因为它们易于理解和实施。随着人们熟悉 AWS 及其各种其他服务,可以采取额外的(高级)措施来进一步加强 EC2 实例的安全性。现在,我们将坚持直接适用于 EC2 实例的安全设置列表。
启用 IMDSv2
实例元数据服务 (IMDS) 提供有关实例的信息以及与其关联的各种参数,例如在启动时指定的用户数据。IMDSv1 将凭据存储在端点中,可以检索这些凭据,然后使用这些凭据通过 AWS CLI 执行操作。在凭证被渗透的情况下,这可能是毁灭性的。因此,引入了 IMDSv2 来阻止针对滥用元数据端点的各种攻击。IMDSv2 使用会话但不将会话令牌作为信息存储在端点本身中,因此无法在后续调用中生成令牌后检索令牌。
通过控制台为新实例启用 IMDSv2
启动实例时,在“配置实例详细信息”页面下,导航到“高级详细信息”部分,然后:
为“元数据可访问”选项选择“已启用”。
为“元数据版本”选项选择“V2(需要令牌)”。
为“元数据版本”选项选择“V2(需要令牌)”
使用 AWS CLI 为新实例启用 IMDSv2
要在使用 AWS CLI 启动实例时启用 IMDSv2,请在命令中使用以下标志:
aws ec2 run-instances --image-id <IMAGE_ID> \
<other required options for your instance> \
--metadata-options "HttpEndpoint=enabled,HttpTokens=required"
使用 AWS CLI 为现有实例启用 IMDSv2
运行以下 AWS CLI 命令以修改实例并启用 IMDSv2:
aws ec2 modify-instance-metadata-options \
--instance-id <INSTANCE_ID> \
--http-tokens required \
--http-endpoint enabled
实施最宽松的安全组规则
安全组是防火墙,用于定义在公共 Internet 上以及 VPC 内允许进出实例到各种其他资源的入站和出站可达性。重要的是要确保我们只公开在实例上运行的那些需要的服务,并将访问权限限制为仅需要它的用户/组。为此,我们需要添加尽可能明确的安全组规则。例如,我们可以指定一个公共 VPN,而不是使用 0.0.0.0/0 作为 SSH 协议的允许源,需要访问该实例的团队将其明确用作源。
AWS 拥有大量用于创建和管理可用的安全组和规则的文档。
定期修补
打补丁是指将软件更新应用到操作系统以实现性能升级、错误修复和维护操作系统的供应商发布的安全修复的活动。
打补丁的步骤因操作系统而异,但思路基本相同:使用操作系统的机制来检查是否有可用的补丁/更新并应用它。一些补丁还需要重新启动系统,但情况并非总是如此。
例如,可以执行以下步骤来修补运行 Ubuntu 18.04 作为操作系统的 EC2 实例:
SSH 进入 EC2 实例
运行sudo apt update。
运行sudo apt upgrade。
运行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 启用定期备份,请按照以下步骤操作:
导航到 EC2 详细信息页面,然后选择“弹性块存储”子菜单下的“生命周期管理器”链接。
选择“EBS 快照策略”并单击“下一步”按钮。
选择“EBS 快照策略”并单击“下一步”按钮
选择目标资源类型(Volume 或 Instance ),并指定标记以标识所选资源类型。单击“添加”按钮。
选择目标资源类型(Volume 或 Instance ),并指定标记以标识所选资源类型。 单击“添加”按钮。
添加备份策略的描述。
添加备份策略的描述
为策略添加必要的标签。
为策略添加必要的标签
确保在“策略状态”部分中选择了“已启用”选项,然后单击“下一步”按钮。
确保在“策略状态”部分中选择了“已启用”选项,然后单击“下一步”按钮
根据要求添加备份计划的详细信息。理想情况下,建议每日备份。
根据要求添加备份计划的详细信息
向下滚动并单击“审查政策”按钮。
向下滚动并单击“查看政策”按钮
最后,单击“创建策略”按钮以创建备份策略和计划。
单击“创建策略”按钮以创建备份策略和计划
使用 AWS CLI 启用定期备份
获取将用于为 EBS 卷创建备份的 IAM 角色的 ARN。
最后,运行以下 AWS CLI 命令:
aws dlm create-lifecycle-policy \
--description "My first policy" \
--state ENABLED \
--execution-role-arn <ARN_OF_IAM_ROLE> \
--policy-details file:///path/to/policy.json
加密 EBS 卷
应对 EBS 卷进行加密,以确保它们保存的数据不会被可能已访问该卷的未授权实体读取或滥用。我们可以启用配置,在所有 EBS 卷创建时默认强制加密。
通过控制台启用加密
要使用 AWS CLI 为 AWS 账户启用默认加密,可以使用以下步骤:
导航到 EC2 仪表板页面并单击“EBS 加密”链接。
导航到 EC2 仪表板页面并单击“EBS 加密”链接
单击“管理”按钮。
单击“管理”按钮
为“始终加密新 EBS 卷”设置选中“启用”复选框,然后单击“更新 EBS 加密”按钮。
为“始终加密新 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 加密设置后对创建的快照进行加密的需要。也就是说,可能存在我们需要加密的未加密的旧快照,这可以通过创建未加密快照的副本来完成。对于新的复制快照,我们将启用加密。
通过控制台启用快照加密
要通过控制台为现有的未加密快照启用加密,可以执行以下步骤:
导航到 EC2 仪表板。
单击“弹性块存储”子菜单下的“快照”链接。
选择要为其制作加密副本的快照,单击“操作”下拉列表,然后单击“复制快照”选项。