什么是亚马逊检查员

前提

扫描目标

  • 托管 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.html

Amazon 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 代理
安装

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の導入

  • 配置 Amazon Inspector

Amazon Inspectorの導入
  • 可以看到已经扫描过了
    Amazon Inspectorの導入

向与服务器关联的 IAM 角色添加权限

  • 将“AmazonSSMManagedInstanceCore”绑定到 EC2 角色以使 EC2 成为托管实例
  • 如果未附加,则不会进行托管实例化

一种通过 SecurityHub 将 Amazon Inspector 检测到的内容发送到松弛通道的机制

Amazon Inspector 为 Amazon EventBridge 为新生成的调查结果、新汇总的调查结果以及调查结果状态的变化创建一个事件。事件是在尽力而为的基础上发出的。

使用 CDK (Typescript) 创建资源

通过 SecurityHub 通知的模式

  • 创建堆栈的脚本
lib/inspector-finding-stack.ts
import * 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

相关文章: