UNPKG

cdk-aspects

Version:

Useful aspects built to streamline CDK infra-as-code apps

55 lines 4.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.S3RequireEncryptionValidation = void 0; const lib_1 = require("aws-cdk-lib/aws-s3/lib"); const core_1 = require("aws-cdk-lib/core"); const severity_level_1 = require("../aspect-utils/severity-level"); class S3RequireEncryptionValidation { constructor(props = {}) { var _a; Object.defineProperty(this, "props", { enumerable: true, configurable: true, writable: true, value: props }); Object.defineProperty(this, "_annotationLevel", { enumerable: true, configurable: true, writable: true, value: void 0 }); this._annotationLevel = (_a = this.props.severity) !== null && _a !== void 0 ? _a : severity_level_1.Severity.ERROR; } visit(resource) { if (resource instanceof lib_1.CfnBucket) { this._verifyCfnBucketEncryption(resource); } else if (resource instanceof lib_1.Bucket) { // L2 Bucket construct stores the underlying CfnBucket in _resource // ref: https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/aws-s3/lib/bucket.ts#L2370 const possibleCfnBucket = resource._resource; if (possibleCfnBucket instanceof lib_1.CfnBucket) { this._verifyCfnBucketEncryption(possibleCfnBucket); } } } _verifyCfnBucketEncryption(cfnBucket, annotationResource = cfnBucket) { if (cfnBucket.bucketEncryption === undefined) { const annotationMessage = `S3 bucket ${annotationResource.node.id} is required to have encryption enabled`; switch (this._annotationLevel) { case severity_level_1.Severity.INFO: core_1.Annotations.of(annotationResource).addInfo(annotationMessage); break; case severity_level_1.Severity.WARNING: core_1.Annotations.of(annotationResource).addWarning(annotationMessage); break; default: core_1.Annotations.of(annotationResource).addError(annotationMessage); break; } } } } exports.S3RequireEncryptionValidation = S3RequireEncryptionValidation; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1lbmNyeXB0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3MzL3JlcXVpcmUtZW5jcnlwdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBMEQ7QUFDMUQsMkNBQTREO0FBRTVELG1FQUF5RDtBQU16RCxNQUFhLDZCQUE2QjtJQUd4QyxZQUFxQixRQUE0QyxFQUFFOztRQUF2RDs7OzttQkFBUyxLQUFLO1dBQXlDO1FBRmxEOzs7OztXQUEwQjtRQUd6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsbUNBQUkseUJBQVEsQ0FBQyxLQUFLLENBQUE7SUFDL0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFvQjtRQUMvQixJQUFJLFFBQVEsWUFBWSxlQUFTLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDM0MsQ0FBQzthQUFNLElBQUksUUFBUSxZQUFZLFlBQU0sRUFBRSxDQUFDO1lBQ3RDLG1FQUFtRTtZQUNuRSxnR0FBZ0c7WUFDaEcsTUFBTSxpQkFBaUIsR0FDckIsUUFDRCxDQUFDLFNBQVMsQ0FBQTtZQUNYLElBQUksaUJBQWlCLFlBQVksZUFBUyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1lBQ3BELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxTQUFvQixFQUNwQixxQkFBaUMsU0FBUztRQUUxQyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxNQUFNLGlCQUFpQixHQUFHLGFBQWEsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUseUNBQXlDLENBQUE7WUFDMUcsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyx5QkFBUSxDQUFDLElBQUk7b0JBQ2hCLGtCQUFXLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUE7b0JBQzdELE1BQUs7Z0JBQ1AsS0FBSyx5QkFBUSxDQUFDLE9BQU87b0JBQ25CLGtCQUFXLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUE7b0JBQ2hFLE1BQUs7Z0JBQ1A7b0JBQ0Usa0JBQVcsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtvQkFDOUQsTUFBSztZQUNULENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBekNELHNFQXlDQyJ9