什么是亚马逊检查员
- 常见问题解答:https://aws.amazon.com/jp/inspector/faqs/
- Amazon Inspector 是一种工具,用于扫描托管 EC2 实例/ECR 映像以查找已安装软件中的漏洞和网络可访问性问题
前提
-
Amazon Inspector v2 已发布并使用最新版本
-
好像有个老版本叫Amazon Inspector Classic,但是设置项很多,有点麻烦。
- 好像和v2一样可以一站式完成,所以没有采用这个
- 公式:https://docs.aws.amazon.com/inspector/v1/userguide/inspector_getting-started.html
- 公式:https://aws.amazon.com/jp/premiumsupport/knowledge-center/set-up-amazon-inspector/
- https://qiita.com/y-araki-qiita/items/1a96dd27e6076679a5ae
扫描目标
- 托管 EC2 实例
- 容器工作负载(ECR 映像)
打开 Amazon Inspector 后,将自动扫描这些资源。
扫描项目
在扫描 EC2 包中的漏洞时,这里EC2 实例必须是托管实例,如中所述
此外,在 EC2 实例上这里您必须使用 中描述的受支持的操作系统。
问:如何安装和配置 Amazon Systems Manager 代理?
要成功扫描 Amazon EC2 实例中的软件漏洞,Amazon Inspector 要求这些实例由 AWS Systems Manager (SSM) 和 SSM 代理管理。有关启用和配置 AWS 系统的说明,请参阅 AWS Systems Manager 用户指南中的 Systems Manager 先决条件有关托管实例的信息,请参阅 AWS Systems Manager 用户指南中的托管实例部分。另一方面,网络可达性扫描没有先决条件,因此无需安装 SSM 代理,对支持的操作系统也没有限制。
https://docs.aws.amazon.com/inspector/latest/user/enable-disable-scanning-ec2.htmlAmazon Inspector 不需要 SSM 代理扫描 Amazon EC2 实例以查找开放网络路径。
扫描时间
- Inspector 扫描是自动的
- 当前未提供手动扫描功能
Amazon Inspector 会自动发现并扫描位于 Amazon Elastic Container Registry (Amazon ECR) 中的 Amazon EC2 实例和容器映像,以发现软件漏洞和意外的网络暴露。
Amazon Inspector 在以下情况下启动 EC2 实例的漏洞扫描:
只要 Amazon Inspector 发现 EC2 实例
当您启动新实例时
在现有实例上安装新软件时
当 Amazon Inspector 将新的常见漏洞和暴露 (CVE) 项目添加到其数据库时
EC2 实例的网络可达性扫描每 24 小时执行一次。安装程序
在 EC2 上安装 AWS Systems Manager (SSM) 代理
- 为了扫描包漏洞,EC2 实例必须是托管实例,因此必须安装 SSM 代理
安装
- 公式:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html
- 公式:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/agent-install-al2.html
SSM 代理默认安装在 2017 年 9 月及之后的基于 Amazon Linux 的 Amazon 系统映像 (AMI) 上。 SSM 代理也默认安装在 Amazon Linux 2 AMI 和 Amazon Linux 2 ECS 优化的基础 AMI 上。其他版本的 Linux 需要手动安装 SSM 代理。
- 检查是否在 EC2 服务器内安装了 SSM 代理
- 原来是安装的(AmazonLinux2中好像默认包含)
- 但是,我必须更新到最新版本才能成为托管实例,因此我再次运行了安装命令。
$ yum list installed | grep ssm amazon-ssm-agent.x86_64 3.0.529.0-1.amzn2 @amzn2-core $ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm $ sudo systemctl status amazon-ssm-agent ● amazon-ssm-agent.service - amazon-ssm-agent Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled) Active: active (running) since 水 2022-07-20 12:03:18 JST; 11s ago
安装后,将 AmazonSSMManagedInstanceCore 权限添加到与每个 EC2 实例关联的 IAM 角色
然后,确认它在 Fleet Manager 中显示为托管实例
配置 Amazon Inspector
- https://dev.classmethod.jp/articles/amazon-inspector-v2-released/
- 使用 Amazon Inspector v2,您不再需要在 EC2 上安装 Inspector 代理
- 不再需要创建目标和模板并运行扫描
- 对于 v2,一旦您先激活它,其余部分将自动扫描。
- 确保只扫描托管实例
- 可以看到已经扫描过了
![]()
向与服务器关联的 IAM 角色添加权限
- 将“AmazonSSMManagedInstanceCore”绑定到 EC2 角色以使 EC2 成为托管实例
- 如果未附加,则不会进行托管实例化
一种通过 SecurityHub 将 Amazon Inspector 检测到的内容发送到松弛通道的机制
- 当 Inspector 扫描检测到潜在漏洞时会生成调查结果,并将有关调查结果的事件发送到 EventBridge
Amazon Inspector 为 Amazon EventBridge 为新生成的调查结果、新汇总的调查结果以及调查结果状态的变化创建一个事件。事件是在尽力而为的基础上发出的。
建立通过 EventBridge 通知 Slack 的机制
由 Inspector 检测 → 集成到 SecurityHub → 在 EventBridge 流程中通知 Slack → SNS 主题 → 订阅 → 聊天机器人
- 启用 Inspector 后,会自动集成到 SecurityHub 中,因此无需特殊设置。
官方的:https://docs.aws.amazon.com/ja_jp/inspector/latest/user/findings-managing-automating-responses.html
https://dev.classmethod.jp/articles/notify-inspector-v2-findings-using-chatbot/
使用 CDK (Typescript) 创建资源
通过 SecurityHub 通知的模式
- 创建堆栈的脚本
lib/inspector-finding-stack.tsimport * as cdk from 'aws-cdk-lib' import * as sns from 'aws-cdk-lib/aws-sns' import * as iam from 'aws-cdk-lib/aws-iam' import * as events from 'aws-cdk-lib/aws-events' import * as targets from 'aws-cdk-lib/aws-events-targets' export interface InspectorFindingStackprops {} export class InspectorFindingStack extends cdk.Stack { public readonly snsTopicInspectorFinding: sns.Topic // Inspector Finding SNS Topic private createSnsTopicInspectorFinding(name: string): sns.Topic { const accountId = cdk.Stack.of(this).account const snsInspectorFinding = new sns.Topic(this, `${name}`, { displayName: 'Inspector Finding Notification', topicName: name }) snsInspectorFinding.addToResourcePolicy( new iam.PolicyStatement({ sid: 'default_statement', effect: iam.Effect.ALLOW, principals: [new iam.AnyPrincipal()], actions: [ 'SNS:GetTopicAttributes', 'SNS:SetTopicAttributes', 'SNS:AddPermission', 'SNS:RemovePermission', 'SNS:DeleteTopic', 'SNS:Subscribe', 'SNS:ListSubscriptionsByTopic', 'SNS:Publish', 'SNS:Receive' ], resources: [snsInspectorFinding.topicArn], conditions: { StringEquals: { 'AWS:SourceOwner': accountId } } }) ) snsInspectorFinding.addToResourcePolicy( new iam.PolicyStatement({ sid: 'SNSPublishingPermissions', effect: iam.Effect.ALLOW, principals: [new iam.ServicePrincipal('events.amazonaws.com')], actions: ['SNS:Publish'], resources: [snsInspectorFinding.topicArn] }) ) return snsInspectorFinding } // Inspector EventBridge private createInspectorFindingEvent(name: string, sns: sns.Topic): void { const InspectorFindingRule = new events.Rule(this, `${name}-InspectorFinding`, { eventPattern: { source: ['aws.securityhub'], detailType: ['Security Hub Findings - Imported'], detail: { findings: { ProductName: ['Inspector'], RecordState: ['ACTIVE'], Severity: { Label: ['CRITICAL'] } // スコアと重要度ラベルの関係 // 0 ... INFORMATIONAL // 0.1 - 3.9 ... LOW // 4.0 - 6.9 ... MEDIUM // 7.0 - 8.9 ... HIGH // 9.0 - 10.0 ... CRITICAL } } }, ruleName: name }) InspectorFindingRule.addTarget(new targets.SnsTopic(sns)) } constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props) this.snsTopicInspectorFinding = this.createSnsTopicInspectorFinding( `${id}-sns-topic-inspector-finding` ) this.createInspectorFindingEvent(`${id}-inspector-finding-event`, this.snsTopicInspectorFinding) } }
- 初始化并实例化堆栈以运行 CDK
- 创建聊天机器人堆栈的ts文件可以单独创建,但是这次由于篇幅限制,假设您将手动创建聊天机器人并将其链接到sns主题。
bin.ex/inspector.ts#!/usr/bin/env node import * as cdk from 'aws-cdk-lib' import { InspectorFindingStack } from '../lib/inspector-finding-stack' const app = new cdk.App() const prefix = app.node.tryGetContext('prefix') // コマンドの引数から取得 const inspectorFindingStack = new InspectorFindingStack(app, `${prefix}-inspector-finding`)
- 运行 CDK
$ cdk bootstrap # 新規でCDKを実行する場合のみ $ cdk --app 'npx ts-node --prefer-ts-exts bin.ex/inspector.ts' synth -c prefix=${プロジェクト名} $ cdk --app 'npx ts-node --prefer-ts-exts bin.ex/inspector.ts' diff -c prefix=${プロジェクト名} $ cdk --app 'npx ts-node --prefer-ts-exts bin.ex/inspector.ts' deploy ${スタック名} -c prefix=${プロジェクト名}直接从 Inspector 通知而不通过 SecurityHub 时
- 除事件规则外相同
eventPattern: { source: ['aws.inspector2'], detailType: ['Inspector2 Finding'], detail: { status: ['ACTIVE'], severity: ['MEDIUM,HIGH,CRITICAL'] // スコアと重要度ラベルの関係 // 0 ... INFORMATIONAL // 0.1 - 3.9 ... LOW // 4.0 - 6.9 ... MEDIUM // 7.0 - 8.9 ... HIGH // 9.0 - 10.0 ... CRITICAL }
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308623465.html