Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(inspector): add minimal L2 interface for Inspector assessment template and fromCfnAssessmentTemplate() #33614

Merged
merged 4 commits into from
Mar 2, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions packages/aws-cdk-lib/aws-inspector/lib/assessment-template.ts
Original file line number Diff line number Diff line change
@@ -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;
}
}();
}
}
1 change: 1 addition & 0 deletions packages/aws-cdk-lib/aws-inspector/lib/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './inspector.generated';
export * from './assessment-template';
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { App, Stack } from '../../core';
import { AssessmentTemplate, CfnAssessmentTarget, CfnAssessmentTemplate, IAssessmentTemplate } from '../lib';

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);
});
});
});
Loading