cdk-aspects
Version:
Useful aspects built to streamline CDK infra-as-code apps
55 lines • 4.05 kB
JavaScript
;
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