image-scanner-with-trivy
Version:
Scan container images with Trivy in CDK deployment
97 lines • 12.2 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScanLogsOutput = exports.SbomFormat = exports.ScanLogsOutputType = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
* Enum for ScanLogsOutputType
*/
var ScanLogsOutputType;
(function (ScanLogsOutputType) {
/**
* Output scan logs to CloudWatch Logs.
*/
ScanLogsOutputType["CLOUDWATCH_LOGS"] = "cloudWatchLogs";
/**
* Output scan logs to S3 bucket.
*/
ScanLogsOutputType["S3"] = "s3";
})(ScanLogsOutputType || (exports.ScanLogsOutputType = ScanLogsOutputType = {}));
/**
* SBOM (Software Bill of Materials) output format for Trivy scans.
*/
var SbomFormat;
(function (SbomFormat) {
/**
* CycloneDX JSON format.
*/
SbomFormat["CYCLONEDX"] = "cyclonedx";
/**
* SPDX JSON format.
*/
SbomFormat["SPDX_JSON"] = "spdx-json";
/**
* SPDX Tag-Value format (human-readable).
*/
SbomFormat["SPDX"] = "spdx";
})(SbomFormat || (exports.SbomFormat = SbomFormat = {}));
/**
* Represents the output of the scan logs.
*/
class ScanLogsOutput {
/**
* Scan logs output to CloudWatch Logs log group.
*
* **Note on Large Scan Results**: CloudWatch Logs has a limit of 1 MB per log event.
* If Trivy scan results exceed this limit, they will be automatically
* split into multiple log events. Each chunk will be prefixed with `[part X/Y]` to
* indicate the sequence, ensuring no data loss while staying within CloudWatch Logs quotas.
* **For large scan results, we recommend using S3 output instead** to avoid fragmentation
* and make it easier to view complete results.
*/
static cloudWatchLogs(options) {
return new CloudWatchLogsOutput(options);
}
/**
* Scan logs output to S3 bucket.
*/
static s3(options) {
return new S3Output(options);
}
}
exports.ScanLogsOutput = ScanLogsOutput;
_a = JSII_RTTI_SYMBOL_1;
ScanLogsOutput[_a] = { fqn: "image-scanner-with-trivy.ScanLogsOutput", version: "2.4.3" };
class CloudWatchLogsOutput extends ScanLogsOutput {
constructor(options) {
super();
this.logGroup = options.logGroup;
}
bind(grantee) {
// Most Lambdas are granted AWSLambdaBasicExecutionRole and can write to any CloudWatch Logs.
// However, just in case AWSLambdaBasicExecutionRole is not granted, allow writing to CloudWatch Logs.
this.logGroup.grantWrite(grantee);
return {
type: ScanLogsOutputType.CLOUDWATCH_LOGS,
logGroupName: this.logGroup.logGroupName,
};
}
}
class S3Output extends ScanLogsOutput {
constructor(options) {
super();
this.bucket = options.bucket;
this.prefix = options.prefix;
this.sbomFormat = options.sbomFormat;
}
bind(grantee) {
this.bucket.grantWrite(grantee);
return {
type: ScanLogsOutputType.S3,
bucketName: this.bucket.bucketName,
prefix: this.prefix,
sbomFormat: this.sbomFormat,
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1sb2dzLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2FuLWxvZ3Mtb3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUE7O0dBRUc7QUFDSCxJQUFZLGtCQVNYO0FBVEQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCx3REFBa0MsQ0FBQTtJQUNsQzs7T0FFRztJQUNILCtCQUFTLENBQUE7QUFDWCxDQUFDLEVBVFcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUFTN0I7QUFFRDs7R0FFRztBQUNILElBQVksVUFhWDtBQWJELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHFDQUF1QixDQUFBO0lBQ3ZCOztPQUVHO0lBQ0gscUNBQXVCLENBQUE7SUFDdkI7O09BRUc7SUFDSCwyQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLFVBQVUsMEJBQVYsVUFBVSxRQWFyQjtBQStFRDs7R0FFRztBQUNILE1BQXNCLGNBQWM7SUFDbEM7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFrQztRQUM3RCxPQUFPLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFzQjtRQUNyQyxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7O0FBcEJILHdDQTBCQzs7O0FBRUQsTUFBTSxvQkFBcUIsU0FBUSxjQUFjO0lBTS9DLFlBQVksT0FBa0M7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUFtQjtRQUM3Qiw2RkFBNkY7UUFDN0Ysc0dBQXNHO1FBQ3RHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLE9BQU87WUFDTCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtZQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO1NBQ3pDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxjQUFjO0lBY25DLFlBQVksT0FBc0I7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRU0sSUFBSSxDQUFDLE9BQW1CO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhDLE9BQU87WUFDTCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcmFudGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuXG4vKipcbiAqIEVudW0gZm9yIFNjYW5Mb2dzT3V0cHV0VHlwZVxuICovXG5leHBvcnQgZW51bSBTY2FuTG9nc091dHB1dFR5cGUge1xuICAvKipcbiAgICogT3V0cHV0IHNjYW4gbG9ncyB0byBDbG91ZFdhdGNoIExvZ3MuXG4gICAqL1xuICBDTE9VRFdBVENIX0xPR1MgPSAnY2xvdWRXYXRjaExvZ3MnLFxuICAvKipcbiAgICogT3V0cHV0IHNjYW4gbG9ncyB0byBTMyBidWNrZXQuXG4gICAqL1xuICBTMyA9ICdzMycsXG59XG5cbi8qKlxuICogU0JPTSAoU29mdHdhcmUgQmlsbCBvZiBNYXRlcmlhbHMpIG91dHB1dCBmb3JtYXQgZm9yIFRyaXZ5IHNjYW5zLlxuICovXG5leHBvcnQgZW51bSBTYm9tRm9ybWF0IHtcbiAgLyoqXG4gICAqIEN5Y2xvbmVEWCBKU09OIGZvcm1hdC5cbiAgICovXG4gIENZQ0xPTkVEWCA9ICdjeWNsb25lZHgnLFxuICAvKipcbiAgICogU1BEWCBKU09OIGZvcm1hdC5cbiAgICovXG4gIFNQRFhfSlNPTiA9ICdzcGR4LWpzb24nLFxuICAvKipcbiAgICogU1BEWCBUYWctVmFsdWUgZm9ybWF0IChodW1hbi1yZWFkYWJsZSkuXG4gICAqL1xuICBTUERYID0gJ3NwZHgnLFxufVxuXG4vKipcbiAqIE91dHB1dCBjb25maWd1cmF0aW9ucyBmb3Igc2NhbiBsb2dzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5Mb2dzT3V0cHV0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzY2FuIGxvZ3Mgb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogU2NhbkxvZ3NPdXRwdXRUeXBlO1xufVxuXG4vKipcbiAqIE91dHB1dCBjb25maWd1cmF0aW9uIGZvciBzY2FuIGxvZ3MgdG8gQ2xvdWRXYXRjaCBMb2dzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkV2F0Y2hMb2dzT3V0cHV0T3B0aW9ucyBleHRlbmRzIFNjYW5Mb2dzT3V0cHV0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQ2xvdWRXYXRjaCBMb2dzIGxvZyBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHNjYW4gbG9ncyBvdXRwdXQgdG8gQ2xvdWRXYXRjaCBMb2dzIGxvZyBncm91cC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbG91ZFdhdGNoTG9nc091dHB1dFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsb2cgZ3JvdXAgdG8gb3V0cHV0IHNjYW4gbG9ncy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwOiBJTG9nR3JvdXA7XG59XG5cbi8qKlxuICogT3V0cHV0IGNvbmZpZ3VyYXRpb24gZm9yIHNjYW4gbG9ncyB0byBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUzNPdXRwdXRPcHRpb25zIGV4dGVuZHMgU2NhbkxvZ3NPdXRwdXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBTMyBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcmVmaXggZm9yIFMzIG9iamVjdHMuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBTQk9NIGZvcm1hdCB0byBvdXRwdXQgaW4gYWRkaXRpb24gdG8gc2NhbiBsb2dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNCT00gb3V0cHV0XG4gICAqL1xuICByZWFkb25seSBzYm9tRm9ybWF0PzogU2JvbUZvcm1hdDtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzY2FuIGxvZ3Mgb3V0cHV0IHRvIFMzIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM091dHB1dFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgdG8gb3V0cHV0IHNjYW4gbG9ncy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHByZWZpeCBmb3IgUzMgb2JqZWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFNCT00gZm9ybWF0IHRvIG91dHB1dCBpbiBhZGRpdGlvbiB0byBzY2FuIGxvZ3MuXG4gICAqIFdoZW4gc3BlY2lmaWVkLCBTQk9NIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCB1cGxvYWRlZCB0byBTMy5cbiAgICpcbiAgICogKipOb3RlKio6IFNCT00gZ2VuZXJhdGlvbiBpcyBub3QgYSB2dWxuZXJhYmlsaXR5IHNjYW4uIFdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkOlxuICAgKiAtIFRyaXZ5IGdlbmVyYXRlcyBhIFNvZnR3YXJlIEJpbGwgb2YgTWF0ZXJpYWxzIChTQk9NKSBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSB2dWxuZXJhYmlsaXR5IHNjYW5cbiAgICogLSBUaGUgc2NhbiB3aWxsIG5vdCBmYWlsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBmYWlsT25WdWxuZXJhYmlsaXR5YCBzZXR0aW5nXG4gICAqIC0gU05TIG5vdGlmaWNhdGlvbnMgKGB2dWxuc05vdGlmaWNhdGlvblRvcGljYCkgd2lsbCBub3QgYmUgc2VudCBzaW5jZSBubyB2dWxuZXJhYmlsaXRpZXMgYXJlIGRldGVjdGVkXG4gICAqIC0gVGhlIFNCT00gZmlsZSBhbmQgc3RkZXJyIGxvZ3Mgd2lsbCBiZSB1cGxvYWRlZCB0byBTM1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNCT00gb3V0cHV0XG4gICAqL1xuICByZWFkb25seSBzYm9tRm9ybWF0PzogU2JvbUZvcm1hdDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBvdXRwdXQgb2YgdGhlIHNjYW4gbG9ncy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNjYW5Mb2dzT3V0cHV0IHtcbiAgLyoqXG4gICAqIFNjYW4gbG9ncyBvdXRwdXQgdG8gQ2xvdWRXYXRjaCBMb2dzIGxvZyBncm91cC5cbiAgICpcbiAgICogKipOb3RlIG9uIExhcmdlIFNjYW4gUmVzdWx0cyoqOiBDbG91ZFdhdGNoIExvZ3MgaGFzIGEgbGltaXQgb2YgMSBNQiBwZXIgbG9nIGV2ZW50LlxuICAgKiBJZiBUcml2eSBzY2FuIHJlc3VsdHMgZXhjZWVkIHRoaXMgbGltaXQsIHRoZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5XG4gICAqIHNwbGl0IGludG8gbXVsdGlwbGUgbG9nIGV2ZW50cy4gRWFjaCBjaHVuayB3aWxsIGJlIHByZWZpeGVkIHdpdGggYFtwYXJ0IFgvWV1gIHRvXG4gICAqIGluZGljYXRlIHRoZSBzZXF1ZW5jZSwgZW5zdXJpbmcgbm8gZGF0YSBsb3NzIHdoaWxlIHN0YXlpbmcgd2l0aGluIENsb3VkV2F0Y2ggTG9ncyBxdW90YXMuXG4gICAqICoqRm9yIGxhcmdlIHNjYW4gcmVzdWx0cywgd2UgcmVjb21tZW5kIHVzaW5nIFMzIG91dHB1dCBpbnN0ZWFkKiogdG8gYXZvaWQgZnJhZ21lbnRhdGlvblxuICAgKiBhbmQgbWFrZSBpdCBlYXNpZXIgdG8gdmlldyBjb21wbGV0ZSByZXN1bHRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjbG91ZFdhdGNoTG9ncyhvcHRpb25zOiBDbG91ZFdhdGNoTG9nc091dHB1dFByb3BzKTogU2NhbkxvZ3NPdXRwdXQge1xuICAgIHJldHVybiBuZXcgQ2xvdWRXYXRjaExvZ3NPdXRwdXQob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBsb2dzIG91dHB1dCB0byBTMyBidWNrZXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHMzKG9wdGlvbnM6IFMzT3V0cHV0UHJvcHMpOiBTY2FuTG9nc091dHB1dCB7XG4gICAgcmV0dXJuIG5ldyBTM091dHB1dChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiBmb3Igc2NhbiBsb2dzLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGJpbmQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IFNjYW5Mb2dzT3V0cHV0T3B0aW9ucztcbn1cblxuY2xhc3MgQ2xvdWRXYXRjaExvZ3NPdXRwdXQgZXh0ZW5kcyBTY2FuTG9nc091dHB1dCB7XG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIG91dHB1dCBzY2FuIGxvZ3MuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ0dyb3VwOiBJTG9nR3JvdXA7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2xvdWRXYXRjaExvZ3NPdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmxvZ0dyb3VwID0gb3B0aW9ucy5sb2dHcm91cDtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKGdyYW50ZWU6IElHcmFudGFibGUpOiBDbG91ZFdhdGNoTG9nc091dHB1dE9wdGlvbnMge1xuICAgIC8vIE1vc3QgTGFtYmRhcyBhcmUgZ3JhbnRlZCBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUgYW5kIGNhbiB3cml0ZSB0byBhbnkgQ2xvdWRXYXRjaCBMb2dzLlxuICAgIC8vIEhvd2V2ZXIsIGp1c3QgaW4gY2FzZSBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUgaXMgbm90IGdyYW50ZWQsIGFsbG93IHdyaXRpbmcgdG8gQ2xvdWRXYXRjaCBMb2dzLlxuICAgIHRoaXMubG9nR3JvdXAuZ3JhbnRXcml0ZShncmFudGVlKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBTY2FuTG9nc091dHB1dFR5cGUuQ0xPVURXQVRDSF9MT0dTLFxuICAgICAgbG9nR3JvdXBOYW1lOiB0aGlzLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIFMzT3V0cHV0IGV4dGVuZHMgU2NhbkxvZ3NPdXRwdXQge1xuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCB0byBvdXRwdXQgc2NhbiBsb2dzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcmVmaXggZm9yIFMzIG9iamVjdHMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFNCT00gZm9ybWF0LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzYm9tRm9ybWF0PzogU2JvbUZvcm1hdDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTM091dHB1dFByb3BzKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYnVja2V0ID0gb3B0aW9ucy5idWNrZXQ7XG4gICAgdGhpcy5wcmVmaXggPSBvcHRpb25zLnByZWZpeDtcbiAgICB0aGlzLnNib21Gb3JtYXQgPSBvcHRpb25zLnNib21Gb3JtYXQ7XG4gIH1cblxuICBwdWJsaWMgYmluZChncmFudGVlOiBJR3JhbnRhYmxlKTogUzNPdXRwdXRPcHRpb25zIHtcbiAgICB0aGlzLmJ1Y2tldC5ncmFudFdyaXRlKGdyYW50ZWUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFNjYW5Mb2dzT3V0cHV0VHlwZS5TMyxcbiAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxuICAgICAgc2JvbUZvcm1hdDogdGhpcy5zYm9tRm9ybWF0LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==