cdk-sops-secrets
Version:
CDK Constructs that syncs your sops secrets into AWS SecretsManager secrets.
73 lines • 11.8 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MultiStringParameter = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
const core_1 = require("aws-cdk-lib/core");
const constructs_1 = require("constructs");
const SopsSync_1 = require("./SopsSync");
const structuredData_1 = require("./structuredData");
class MultiStringParameter extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
this.encryptionKey = props.encryptionKey;
this.stack = core_1.Stack.of(scope);
this.env = {
account: this.stack.account,
region: this.stack.region,
};
this.keyPrefix = props.keyPrefix ?? '/';
this.keySeparator = props.keySeparator ?? '/';
const keys = this.parseFile(props.sopsFilePath, this.keySeparator)
.filter((key) => !key.startsWith('sops'))
.map((value) => {
// As we flatten array to [number] path notations, we have to fix this for parameter store
let fixedKey = value.replace(/\[/g, this.keySeparator);
fixedKey = fixedKey.replace(/\]/g, this.keySeparator);
if (fixedKey.endsWith(this.keySeparator)) {
fixedKey = fixedKey.slice(0, -1);
}
fixedKey = fixedKey.replace(this.keySeparator + this.keySeparator, this.keySeparator);
// The secret name can contain ASCII letters, numbers, and the following characters: /_+=.@-
const allowedChars = '/_+=.@-';
for (let i = 0; i < fixedKey.length; i++) {
const char = fixedKey[i];
if (!((char >= 'a' && char <= 'z') ||
(char >= 'A' && char <= 'Z') ||
(char >= '0' && char <= '9') ||
allowedChars.includes(char))) {
fixedKey = fixedKey.slice(0, i) + '_' + fixedKey.slice(i + 1);
}
}
return `${this.keyPrefix}${fixedKey}`;
});
keys.forEach((key) => {
new aws_ssm_1.StringParameter(this, 'Resource' + key, {
parameterName: key,
description: props.description,
tier: aws_ssm_1.ParameterTier.STANDARD,
stringValue: ' ',
});
});
this.sync = new SopsSync_1.SopsSync(this, 'SopsSync', {
encryptionKey: this.encryptionKey,
resourceType: SopsSync_1.ResourceType.PARAMETER_MULTI,
flattenSeparator: this.keySeparator,
parameterNames: keys,
target: this.keyPrefix,
...props,
});
}
parseFile(sopsFilePath, keySeparator) {
const fileFormat = (0, structuredData_1.inferStructuredFileFormat)(sopsFilePath);
if (fileFormat === undefined) {
throw new Error(`Unsupported sopsFileFormat for multiple parameters: ${sopsFilePath.split('.').pop()}`);
}
return Object.keys((0, structuredData_1.flattenStructuredFile)(sopsFilePath, keySeparator, fileFormat));
}
}
exports.MultiStringParameter = MultiStringParameter;
_a = JSII_RTTI_SYMBOL_1;
MultiStringParameter[_a] = { fqn: "cdk-sops-secrets.MultiStringParameter", version: "2.8.1" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlTdHJpbmdQYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTXVsdGlTdHJpbmdQYXJhbWV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxpREFBcUU7QUFDckUsMkNBQThEO0FBQzlELDJDQUF1QztBQUV2Qyx5Q0FBcUU7QUFDckUscURBRzBCO0FBaUIxQixNQUFhLG9CQUFxQixTQUFRLHNCQUFTO0lBUWpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQUc7WUFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQztRQUU5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFhLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNoRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4QyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNiLDBGQUEwRjtZQUMxRixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUss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IjpbImltcG9ydCB7IElLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IFBhcmFtZXRlclRpZXIsIFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgUmVzb3VyY2VFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU29wc0NvbW1vblBhcmFtZXRlclByb3BzIH0gZnJvbSAnLi9Tb3BzU3RyaW5nUGFyYW1ldGVyJztcbmltcG9ydCB7IFJlc291cmNlVHlwZSwgU29wc1N5bmMsIFNvcHNTeW5jT3B0aW9ucyB9IGZyb20gJy4vU29wc1N5bmMnO1xuaW1wb3J0IHtcbiAgZmxhdHRlblN0cnVjdHVyZWRGaWxlLFxuICBpbmZlclN0cnVjdHVyZWRGaWxlRm9ybWF0LFxufSBmcm9tICcuL3N0cnVjdHVyZWREYXRhJztcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVN0cmluZ1BhcmFtZXRlclByb3BzIGV4dGVuZHMgU29wc0NvbW1vblBhcmFtZXRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzZXBlcmF0b3IgdXNlZCB0byBzZXBlcmF0ZSBrZXlzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJy8nXG4gICAqL1xuICByZWFkb25seSBrZXlTZXBhcmF0b3I/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHVzZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJy8nXG4gICAqL1xuICByZWFkb25seSBrZXlQcmVmaXg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aVN0cmluZ1BhcmFtZXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IHN5bmM6IFNvcHNTeW5jO1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5OiBJS2V5O1xuICByZWFkb25seSBzdGFjazogU3RhY2s7XG4gIHJlYWRvbmx5IGVudjogUmVzb3VyY2VFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkga2V5UHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleVNlcGFyYXRvcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNdWx0aVN0cmluZ1BhcmFtZXRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXk7XG4gICAgdGhpcy5zdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICB0aGlzLmVudiA9IHtcbiAgICAgIGFjY291bnQ6IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5zdGFjay5yZWdpb24sXG4gICAgfTtcbiAgICB0aGlzLmtleVByZWZpeCA9IHByb3BzLmtleVByZWZpeCA/PyAnLyc7XG4gICAgdGhpcy5rZXlTZXBhcmF0b3IgPSBwcm9wcy5rZXlTZXBhcmF0b3IgPz8gJy8nO1xuXG4gICAgY29uc3Qga2V5cyA9IHRoaXMucGFyc2VGaWxlKHByb3BzLnNvcHNGaWxlUGF0aCEsIHRoaXMua2V5U2VwYXJhdG9yKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoJ3NvcHMnKSlcbiAgICAgIC5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIEFzIHdlIGZsYXR0ZW4gYXJyYXkgdG8gW251bWJlcl0gcGF0aCBub3RhdGlvbnMsIHdlIGhhdmUgdG8gZml4IHRoaXMgZm9yIHBhcmFtZXRlciBzdG9yZVxuICAgICAgICBsZXQgZml4ZWRLZXkgPSB2YWx1ZS5yZXBsYWNlKC9cXFsvZywgdGhpcy5rZXlTZXBhcmF0b3IpO1xuICAgICAgICBmaXhlZEtleSA9IGZpeGVkS2V5LnJlcGxhY2UoL1xcXS9nLCB0aGlzLmtleVNlcGFyYXRvcik7XG4gICAgICAgIGlmIChmaXhlZEtleS5lbmRzV2l0aCh0aGlzLmtleVNlcGFyYXRvcikpIHtcbiAgICAgICAgICBmaXhlZEtleSA9IGZpeGVkS2V5LnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBmaXhlZEtleSA9IGZpeGVkS2V5LnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5rZXlTZXBhcmF0b3IgKyB0aGlzLmtleVNlcGFyYXRvcixcbiAgICAgICAgICB0aGlzLmtleVNlcGFyYXRvcixcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUaGUgc2VjcmV0IG5hbWUgY2FuIGNvbnRhaW4gQVNDSUkgbGV0dGVycywgbnVtYmVycywgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogL18rPS5ALVxuICAgICAgICBjb25zdCBhbGxvd2VkQ2hhcnMgPSAnL18rPS5ALSc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4ZWRLZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyID0gZml4ZWRLZXlbaV07XG4gICAgICAgICAgaWYgKCEoXG4gICAgICAgICAgICAoY2hhciA+PSAnYScgJiYgY2hhciA8PSAneicpIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAnQScgJiYgY2hhciA8PSAnWicpIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAnMCcgJiYgY2hhciA8PSAnOScpIHx8XG4gICAgICAgICAgICBhbGxvd2VkQ2hhcnMuaW5jbHVkZXMoY2hhcilcbiAgICAgICAgICApKSB7XG4gICAgICAgICAgICBmaXhlZEtleSA9IGZpeGVkS2V5LnNsaWNlKDAsIGkpICsgJ18nICsgZml4ZWRLZXkuc2xpY2UoaSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7dGhpcy5rZXlQcmVmaXh9JHtmaXhlZEtleX1gO1xuICAgICAgfSk7XG5cbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCAnUmVzb3VyY2UnICsga2V5LCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IGtleSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICB0aWVyOiBQYXJhbWV0ZXJUaWVyLlNUQU5EQVJELFxuICAgICAgICBzdHJpbmdWYWx1ZTogJyAnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN5bmMgPSBuZXcgU29wc1N5bmModGhpcywgJ1NvcHNTeW5jJywge1xuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgcmVzb3VyY2VUeXBlOiBSZXNvdXJjZVR5cGUuUEFSQU1FVEVSX01VTFRJLFxuICAgICAgZmxhdHRlblNlcGFyYXRvcjogdGhpcy5rZXlTZXBhcmF0b3IsXG4gICAgICBwYXJhbWV0ZXJOYW1lczoga2V5cyxcbiAgICAgIHRhcmdldDogdGhpcy5rZXlQcmVmaXgsXG4gICAgICAuLi4ocHJvcHMgYXMgU29wc1N5bmNPcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VGaWxlKHNvcHNGaWxlUGF0aDogc3RyaW5nLCBrZXlTZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmaWxlRm9ybWF0ID0gaW5mZXJTdHJ1Y3R1cmVkRmlsZUZvcm1hdChzb3BzRmlsZVBhdGgpO1xuICAgIGlmIChmaWxlRm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuc3VwcG9ydGVkIHNvcHNGaWxlRm9ybWF0IGZvciBtdWx0aXBsZSBwYXJhbWV0ZXJzOiAke3NvcHNGaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhcbiAgICAgIGZsYXR0ZW5TdHJ1Y3R1cmVkRmlsZShzb3BzRmlsZVBhdGgsIGtleVNlcGFyYXRvciwgZmlsZUZvcm1hdCksXG4gICAgKTtcbiAgfVxufVxuIl19