diff --git a/packages/aws-cdk-lib/aws-inspector/lib/assessment-template.ts b/packages/aws-cdk-lib/aws-inspector/lib/assessment-template.ts new file mode 100644 index 0000000000000..f5b5338a7fe7d --- /dev/null +++ b/packages/aws-cdk-lib/aws-inspector/lib/assessment-template.ts @@ -0,0 +1,37 @@ +import { Construct } from 'constructs'; +import { CfnAssessmentTemplate } from './inspector.generated'; +import { IResource, Resource } from '../../core'; + +/** + * Interface for an Inspector Assessment Template + */ +export interface IAssessmentTemplate extends IResource { + /** + * The Amazon Resource Name (ARN) of the assessment template. + * @attribute + */ + readonly assessmentTemplateArn: string; +} + +/** + * An Amazon Inspector assessment template. + * TODO: This class should implement IAssessmentTemplate when writing the L2 construct + */ +export class AssessmentTemplate extends Resource { + /** + * Creates an AssessmentTemplate from an existing CfnAssessmentTemplate. + * + * This method is provided to bridge the gap with L2 constructs since no L2 constructs + * exist for Inspector resources yet. It allows working with CfnAssessmentTemplate (L1) + * resources through the IAssessmentTemplate interface. + */ + public static fromCfnAssessmentTemplate(scope: Construct, id: string, template: CfnAssessmentTemplate): IAssessmentTemplate { + return new class extends Resource implements IAssessmentTemplate { + public readonly assessmentTemplateArn: string; + constructor() { + super(scope, id); + this.assessmentTemplateArn = template.attrArn; + } + }(); + } +} diff --git a/packages/aws-cdk-lib/aws-inspector/lib/index.ts b/packages/aws-cdk-lib/aws-inspector/lib/index.ts index dc769c1590df5..1d86dcfe350cc 100644 --- a/packages/aws-cdk-lib/aws-inspector/lib/index.ts +++ b/packages/aws-cdk-lib/aws-inspector/lib/index.ts @@ -1 +1,2 @@ export * from './inspector.generated'; +export * from './assessment-template'; diff --git a/packages/aws-cdk-lib/aws-inspector/test/assessment-template.test.ts b/packages/aws-cdk-lib/aws-inspector/test/assessment-template.test.ts new file mode 100644 index 0000000000000..330e1a22da4f8 --- /dev/null +++ b/packages/aws-cdk-lib/aws-inspector/test/assessment-template.test.ts @@ -0,0 +1,54 @@ +import { App, Stack } from '../../core'; +import { AssessmentTemplate, CfnAssessmentTarget, CfnAssessmentTemplate, IAssessmentTemplate } from '..'; + +describe('AssessmentTemplate', () => { + let app: App; + let stack: Stack; + let assessmentTarget: CfnAssessmentTarget; + + beforeEach(() => { + app = new App(); + stack = new Stack(app, 'Stack'); + assessmentTarget = new CfnAssessmentTarget(stack, 'AssessmentTarget', { + assessmentTargetName: 'MyAssessmentTarget', + }); + }); + + describe('fromCfnAssessmentTemplate', () => { + test('creates an IAssessmentTemplate from a CfnAssessmentTemplate', () => { + // GIVEN + const cfnAssessmentTemplate = new CfnAssessmentTemplate(stack, 'MyCfnAssessmentTemplate', { + assessmentTargetArn: assessmentTarget.attrArn, + durationInSeconds: 3600, + // https://docs.aws.amazon.com/inspector/v1/userguide/inspector_rules-arns.html#us-east-1 + rulesPackageArns: ['arn:aws:inspector:us-east-1:316112463485:rulespackage/0-gEjTy7T7'], + }); + + // WHEN + const assessmentTemplate = AssessmentTemplate.fromCfnAssessmentTemplate(stack, 'MyAssessmentTemplate', cfnAssessmentTemplate); + + // THEN + expect(assessmentTemplate.assessmentTemplateArn).toBe(cfnAssessmentTemplate.attrArn); + }); + + test('can be used where IAssessmentTemplate is expected', () => { + // GIVEN + const cfnAssessmentTemplate = new CfnAssessmentTemplate(stack, 'MyCfnAssessmentTemplate', { + assessmentTargetArn: 'arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX', + assessmentTemplateName: 'MyTemplate', + durationInSeconds: 3600, + rulesPackageArns: ['arn:aws:inspector:us-east-1:316112463485:rulespackage/0-gEjTy7T7'], + }); + + // WHEN + const assessmentTemplate = AssessmentTemplate.fromCfnAssessmentTemplate(stack, 'ImportedTemplate', cfnAssessmentTemplate); + + // THEN - this function accepts an IAssessmentTemplate + function acceptsIAssessmentTemplate(template: IAssessmentTemplate) { + return template.assessmentTemplateArn; + } + + expect(acceptsIAssessmentTemplate(assessmentTemplate)).toBe(cfnAssessmentTemplate.attrArn); + }); + }); +});