You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS CDK激活ECR增强扫描(持续扫描)

AWS CDK启用ECR增强持续扫描的实现方法

ECR原生的ImageScanningConfigurationProperty确实不支持配置增强扫描和持续扫描,可通过以下两种方式实现需求:

方案一:使用CustomResource调用ECR API

这是兼容性最广的方案,适用于所有支持Inspector V2的区域:

步骤1:启用Inspector V2

增强扫描依赖Inspector V2服务,先在栈中启用其ECR镜像扫描能力:

import * as cdk from 'aws-cdk-lib';
import * as inspector from 'aws-cdk-lib/aws-inspectorv2';
import { Construct } from 'constructs';

export class EcrEnhancedScanStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new inspector.CfnEnable(this, 'EnableInspectorV2', {
      resourceTypes: ['ECR_IMAGE']
    });
  }
}

步骤2:创建ECR仓库并配置增强扫描

通过CustomResource调用ECR的PutImageScanningConfiguration API,设置增强和持续扫描参数:

import * as cdk from 'aws-cdk-lib';
import * as ecr from 'aws-cdk-lib/aws-ecr';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as customresources from 'aws-cdk-lib/custom-resources';
import { Construct } from 'constructs';

export class EcrEnhancedScanStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 启用Inspector V2
    new inspector.CfnEnable(this, 'EnableInspectorV2', {
      resourceTypes: ['ECR_IMAGE']
    });

    // 创建ECR仓库
    const repo = new ecr.Repository(this, 'MyEcrRepo', {
      repositoryName: 'my-app-repo',
      imageScanningConfiguration: {
        scanOnPush: true
      }
    });

    // 给CustomResource的Lambda角色赋予ECR配置权限
    const scanConfigRole = new iam.Role(this, 'EcrScanConfigRole', {
      assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
      inlinePolicies: {
        EcrScanPolicy: new iam.PolicyDocument({
          statements: [
            new iam.PolicyStatement({
              actions: ['ecr:PutImageScanningConfiguration'],
              resources: [repo.repositoryArn]
            })
          ]
        })
      }
    });

    // 配置增强持续扫描
    new customresources.AwsCustomResource(this, 'EcrEnhancedScanConfig', {
      onUpdate: {
        service: 'ECR',
        action: 'putImageScanningConfiguration',
        parameters: {
          repositoryName: repo.repositoryName,
          imageScanningConfiguration: {
            scanOnPush: true,
            enhancedScanEnabled: true,
            continuousScanEnabled: true
          }
        },
        physicalResourceId: customresources.PhysicalResourceId.of(`EcrEnhancedScan-${repo.repositoryName}`)
      },
      role: scanConfigRole,
      installLatestAwsSdk: true
    });
  }
}

方案二:直接使用CloudFormation原生属性(部分区域支持)

部分AWS区域的CloudFormation已更新CfnRepository的imageScanningConfiguration属性,支持直接设置增强和持续扫描参数,可尝试以下代码:

import * as cdk from 'aws-cdk-lib';
import * as ecr from 'aws-cdk-lib/aws-ecr';
import { Construct } from 'constructs';

export class EcrEnhancedScanStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new ecr.CfnRepository(this, 'MyEcrRepo', {
      repositoryName: 'my-app-repo',
      imageScanningConfiguration: {
        scanOnPush: true,
        enhancedScanEnabled: true,
        continuousScanEnabled: true
      }
    });
  }
}

若部署时报错,说明当前区域暂不支持该属性,需切换到方案一。

关键说明

  • 增强扫描必须依赖Inspector V2,未启用会导致配置失败。
  • continuousScanEnabled需搭配enhancedScanEnabled: true使用,单独设置无效。
  • CustomResource的onUpdate会在栈创建、更新时触发,确保扫描配置始终生效。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:43:18