了解如何使用 Amazon Inspector 来自动化管理漏洞和确保合规性。
AWS 云为我们提供了无与伦比的灵活性和伸缩性,使我们能够在需要时轻松地创建资源。但云提供商通常会强调一条重要的规则:
- 根据需要使用和管理你的资源,确保你的设置符合最佳实践,并定期审查和优化你的架构。同时,务必始终保持安全性是首要任务。
注意,具体“金规”内容可能因不同的云服务商而有所不同。
他们管“云安全”,我们则负责“云中的安全”。
所以,挽起袖子吧——是时候保护你在云环境里存放的东西了。
AWS环境需要一位警惕的守护者,默默监控资源,精准识别漏洞。这便是Amazon Inspector——AWS自带的安全专家,始终在岗,确保您的云安全无忧。
它会扫描你的工作负载情况,检查你的 EC2 实例、Lambda 函数或代码、容器镜像,并告诉你是否有任何不正常的地方。最棒的是,它不仅发现问题,还会教你如何解决。
在本博客系列中,我们将带您一步步了解 Amazon Inspector,指导您如何设置,并展示它如何帮助您防范潜在的网络威胁。
在第一部分中,我们将涵盖基础知识:什么是Amazon Inspector,如何启动和运行它,以及如何理解其发现。
咱们开始吧
设置:Amazon 检查器- 设置个人账户
如果你没有使用 AWS 组,或者不想聚合发现,或集中管理 Inspector 设置,你可以在成员账户或单独账户中启用 Inspector。
- 在 AWS 控制台中选择相应的区域。
- 在搜索框中输入 Amazon Inspector 并进入。
- 启用 Inspector。
对于这个演示,我将启动 EC2 扫描,Lambda 标准代码扫描和 ECR 扫描。
Inspector 提供 15 天试用期。如果您希望继续使用 Inspector,可以参考定价信息 https://aws.amazon.com/inspector/pricing/。
- 代理管理员账号
如果你希望在组织内管理Inspector,并进行设置管理,在中央位置聚合发现,我建议你启用组织级别的委托管理员。
-
登录到 AWS Organizations 管理账户,然后前往 Amazon Inspector。
-
在“委托管理员账户ID”栏,输入您要设置为委托管理员的AWS账户的12位ID,然后点击“委托”。
启用后,登录到受托管理账户。然后进入 Inspector --> 账户管理。
- 从委托管理员账户,你可以决定为哪个成员账户启用 Inspector,并选择哪种扫描类型。请看下面的截图。
理解扫描类型
- Amazon EC2 扫描: 这种扫描方式会收集您的 EC2 实例的相关信息,并与安全公告进行对比,检查软件漏洞和网络风险。开启后,它会扫描您帐户中符合条件的实例,查找这些潜在问题。
- Amazon ECR 扫描: 在 Amazon ECR 中扫描容器镜像,将私有仓库的基本扫描升级为增强扫描。
- 标准扫描: 对过去90天内调用或更新的Lambda函数进行默认扫描,检查代码中的漏洞。
- Lambda 代码扫描: 专注于扫描 Lambda 函数中的自定义应用代码,查找过去 90 天内被调用或更新的代码中的漏洞。
在本博客的第一部分里,我将重点介绍EC2和“Lambda Scan”。
EC2 扫描任务对于 EC2,扫描可以是基于代理的扫描(使用SSM代理)或无代理的扫描(使用Amazon EBS快照)。Amazon Inspector的EC2扫描会从您的实例中抓取元数据,并将其与安全通告进行比较,以检测软件包漏洞问题和网络可达性问题。网络可达性扫描每24小时运行一次,而软件包漏洞扫描则根据具体的扫描方式采取不同的时间表。
默认地,Inspector 会扫描由 SSM 管理的实例资源。
设置扫描。
要为EC2配置扫描类型,前往常规设置 -> EC2设置。
你需要选择混合模式以同时支持基于代理和无代理。
这是一张关于AWS Inspector对EC2扫描类型的图片。
我不会详细讨论基于代理(Agent-Based)和无代理(Agent-Less)的区别。记住,基于代理的是SSM代理版本。如果你已安装了SSM代理并且EC2角色绑定了AmazonSSMManagedInstanceCore策略,那么Inspector就能够扫描该实例。
无代理使用EBS快照。Amazon Inspector会为实例中的每个卷创建一个EBS快照。快照会被保存在你的账户中,并使用InspectorScan作为标签键,标签值为唯一的扫描ID。在本演示中,我同时使用了这两种方法。
现在我们有了Inspector,它可以用来扫描EC2实例。让我们创建EC2实例。如果你已经有了EC2实例的话,那就更好了,因为几分钟内Inspector就会开始扫描并且展示发现。
为了确保,基于代理的 Inspector 扫描会确保 EC2 实例上附加了策略 AmazonSSMManagedInstanceCore。
如果没有上传上述策略的话,检查员将执行无代理扫描,那么您已经在 Inspector 的 EC2 设置中选择了混合扫描选项。
我已经有了一个EC2实例,并且在Inspector仪表板上也能看得到。
这是一张AWS Inspector概览图。
你可以在资源覆盖 -> EC2 实例 中看到 EC2 实例。在这篇博客里,我创建了一个能进行代理扫描和无代理扫描的 EC2 实例。如下面的截图所示的,我有两个基于代理的扫描和一个无代理扫描的实例。
了解和解决安全漏洞
要查看发现,前往发现 > 实例,应该能看到每个实例记录的发现。点击实例ID,就能看到详细信息。
随便选一个发现,你就能在右边的窗格里看到详细信息。
这里的好处在于,不仅找到问题,还会指导如何解决它。在我的情况下,它建议通过运行 sudo apt-get update
来升级软件包。我尝试并更新了。在您的情况下,可能需要采取不同的措施。
运行该命令后,列出了相关的软件包升级及其对应的发布说明。
我选择了最近的软件更新包进行升级。完成之后不久,工具会更新结果报告。
你可以看到,高风险发现的数量从12降到了4,而中等风险发现的数量则从61降到了44。
不包括 EC2 扫描这一部分
你可能在想,如果我不想用 Inspector 扫描 EC2 实例,能不能排除特定的实例。我们为此提供了相应的设置,你可以简单地给你的 EC2 实例添加一个标签,标签的键为 InspectorEc2Exclusion。我的情况是,我创建了一个 EC2 实例,并给它添加了一个标签,标签的键为 InspectorEc2Exclusion,值为 True。
检查员不会扫描这个实例,因为它会检测到这个标签,所以因此,在概览实例中,这个实例因标签的原因也被排除在扫描范围之外。
如下面截图所示,我标记的实例没有被扫描到。
Lambda 扫描器现在是时候来试一试 AWS Lambda 了。如激活步骤所示,希望你已经激活了 Lambda 扫描。确保你已经启用了标准扫描和代码扫描。
这是演示的一部分,我编写了简单的Node.js代码,代码中直接写入了凭据,这些凭据是指直接写在代码里的账户名和密码。
import requests # 请确保 'requests' 库已添加到 Lambda 环境中
def lambda_handler(event, context):
# 使用硬编码的敏感信息(这是一种脆弱的做法)
api_key = "aspoklew0233qvdsrw3rq"
secret_token = "qw3sda2343"
# 不安全的 HTTP 连接(建议使用 HTTPS)
url = "http://example.com/insecure-endpoint"
# 使用硬编码的敏感信息发送请求
try:
headers = {
"Authorization": f"Bearer {secret_token}",
"x-api-key": api_key
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print("请求成功,返回:", response.text)
else:
print(f"请求失败,状态码为 {response.status_code}")
return {
"statusCode": response.status_code,
"body": response.text
}
except Exception as e:
print("发生错误,详情如下:", e)
return {
"statusCode": 500,
"body": "请求发生错误"
}
全屏 退出全屏
一旦我们部署了上述lambda函数,Inspector会自动扫描它以查找任何潜在的漏洞。要查看发现的结果,可以在Inspector -> 发现结果 -> Lambda函数部分中查看。
你应该能够看到有关这些弱点的详细情况。
它还指出了存在漏洞的代码片段的具体位置。
它还建议了应对措施,例如将密钥存储在AWS Secrets Manager中并通过角色访问它。
我希望这篇博客能让你对使用Amazon Inspector有点感觉。Amazon Inspector为EC2实例和Lambda函数这两种资源提供了强大的安全评估,帮助你快速检测漏洞和错误配置。通过这些工具,你可以增强你的云安全态势,主动应对风险,并保持一个更健壮的AWS环境。
继续在云上构建并部署安全任务吧!!