UNPKG

cdk-secure-string-parameter

Version:

SecureStringParameter Custom Resource for CDK. Enables storing encrypted secrets in version control and using those values in creating SSM SecureString Parameters

62 lines 9.66 kB
"use strict"; /** * This file is copied from https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/aws-ssm/lib/util.ts */ Object.defineProperty(exports, "__esModule", { value: true }); exports.AUTOGEN_MARKER = void 0; exports.arnForParameterName = arnForParameterName; const aws_cdk_lib_1 = require("aws-cdk-lib"); exports.AUTOGEN_MARKER = '$$autogen$$'; /** * Renders an ARN for an SSM parameter given a parameter name. * @param scope definition scope * @param parameterName the parameter name to include in the ARN * @param physicalName optional physical name specified by the user (to auto-detect separator) */ function arnForParameterName(scope, parameterName, options = {}) { const physicalName = options.physicalName; const nameToValidate = physicalName || parameterName; if (!aws_cdk_lib_1.Token.isUnresolved(nameToValidate) && nameToValidate.includes('/') && !nameToValidate.startsWith('/')) { throw new Error(`Parameter names must be fully qualified (if they include "/" they must also begin with a "/"): ${nameToValidate}`); } if (isSimpleName()) { return aws_cdk_lib_1.Stack.of(scope).formatArn({ service: 'ssm', resource: 'parameter', arnFormat: aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME, resourceName: parameterName, }); } else { return aws_cdk_lib_1.Stack.of(scope).formatArn({ service: 'ssm', resource: `parameter${parameterName}`, }); } /** * Determines the ARN separator for this parameter: if we have a concrete * parameter name (or explicitly defined physical name), we will parse them * and decide whether a "/" is needed or not. Otherwise, users will have to * explicitly specify `simpleName` when they import the ARN. */ function isSimpleName() { // look for a concrete name as a hint for determining the separator const concreteName = !aws_cdk_lib_1.Token.isUnresolved(parameterName) ? parameterName : physicalName; if (!concreteName || aws_cdk_lib_1.Token.isUnresolved(concreteName)) { if (options.simpleName === undefined) { throw new Error('Unable to determine ARN separator for SSM parameter since the parameter name is an unresolved token. Use "fromAttributes" and specify "simpleName" explicitly'); } return options.simpleName; } const result = !concreteName.startsWith('/'); // if users explicitly specify the separator and it conflicts with the one we need, it's an error. if (options.simpleName !== undefined && options.simpleName !== result) { if (concreteName === exports.AUTOGEN_MARKER) { throw new Error('If "parameterName" is not explicitly defined, "simpleName" must be "true" or undefined since auto-generated parameter names always have simple names'); } throw new Error(`Parameter name "${concreteName}" is ${result ? 'a simple name' : 'not a simple name'}, but "simpleName" was explicitly set to ${options.simpleName}. Either omit it or set it to ${result}`); } return result; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBa0JILGtEQXNEQztBQXRFRCw2Q0FBc0Q7QUFHekMsUUFBQSxjQUFjLEdBQUcsYUFBYSxDQUFDO0FBTzVDOzs7OztJQUtJO0FBQ0osU0FBZ0IsbUJBQW1CLENBQUMsS0FBaUIsRUFBRSxhQUFxQixFQUFFLFVBQXNDLEVBQUc7SUFDckgsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUMxQyxNQUFNLGNBQWMsR0FBRyxZQUFZLElBQUksYUFBYSxDQUFDO0lBRXJELElBQUksQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNHLE1BQU0sSUFBSSxLQUFLLENBQUMsa0dBQWtHLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDdEksQ0FBQztJQUVELElBQUksWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUNuQixPQUFPLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMvQixPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtZQUN4QyxZQUFZLEVBQUUsYUFBYTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9CLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLFlBQVksYUFBYSxFQUFFO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7UUFLSTtJQUNKLFNBQVMsWUFBWTtRQUNuQixtRUFBbUU7UUFDbkUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBRXRELElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQywrSkFBK0osQ0FBQyxDQUFDO1lBQ25MLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QyxrR0FBa0c7UUFDbEcsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBRXRFLElBQUksWUFBWSxLQUFLLHNCQUFjLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzSkFBc0osQ0FBQyxDQUFDO1lBQzFLLENBQUM7WUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixZQUFZLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLG1CQUFtQiw0Q0FBNEMsT0FBTyxDQUFDLFVBQVUsaUNBQWlDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaE4sQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGZpbGUgaXMgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvbWFpbi9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1zc20vbGliL3V0aWwudHNcbiAqL1xuXG5pbXBvcnQgeyBBcm5Gb3JtYXQsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGNvbnN0IEFVVE9HRU5fTUFSS0VSID0gJyQkYXV0b2dlbiQkJztcblxuZXhwb3J0IGludGVyZmFjZSBBcm5Gb3JQYXJhbWV0ZXJOYW1lT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBoeXNpY2FsTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgc2ltcGxlTmFtZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICAqIFJlbmRlcnMgYW4gQVJOIGZvciBhbiBTU00gcGFyYW1ldGVyIGdpdmVuIGEgcGFyYW1ldGVyIG5hbWUuXG4gICogQHBhcmFtIHNjb3BlIGRlZmluaXRpb24gc2NvcGVcbiAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSB0aGUgcGFyYW1ldGVyIG5hbWUgdG8gaW5jbHVkZSBpbiB0aGUgQVJOXG4gICogQHBhcmFtIHBoeXNpY2FsTmFtZSBvcHRpb25hbCBwaHlzaWNhbCBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlciAodG8gYXV0by1kZXRlY3Qgc2VwYXJhdG9yKVxuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFybkZvclBhcmFtZXRlck5hbWUoc2NvcGU6IElDb25zdHJ1Y3QsIHBhcmFtZXRlck5hbWU6IHN0cmluZywgb3B0aW9uczogQXJuRm9yUGFyYW1ldGVyTmFtZU9wdGlvbnMgPSB7IH0pOiBzdHJpbmcge1xuICBjb25zdCBwaHlzaWNhbE5hbWUgPSBvcHRpb25zLnBoeXNpY2FsTmFtZTtcbiAgY29uc3QgbmFtZVRvVmFsaWRhdGUgPSBwaHlzaWNhbE5hbWUgfHwgcGFyYW1ldGVyTmFtZTtcblxuICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChuYW1lVG9WYWxpZGF0ZSkgJiYgbmFtZVRvVmFsaWRhdGUuaW5jbHVkZXMoJy8nKSAmJiAhbmFtZVRvVmFsaWRhdGUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBmdWxseSBxdWFsaWZpZWQgKGlmIHRoZXkgaW5jbHVkZSBcIi9cIiB0aGV5IG11c3QgYWxzbyBiZWdpbiB3aXRoIGEgXCIvXCIpOiAke25hbWVUb1ZhbGlkYXRlfWApO1xuICB9XG5cbiAgaWYgKGlzU2ltcGxlTmFtZSgpKSB7XG4gICAgcmV0dXJuIFN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ3NzbScsXG4gICAgICByZXNvdXJjZTogJ3BhcmFtZXRlcicsXG4gICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgcmVzb3VyY2VOYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdzc20nLFxuICAgICAgcmVzb3VyY2U6IGBwYXJhbWV0ZXIke3BhcmFtZXRlck5hbWV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgICogRGV0ZXJtaW5lcyB0aGUgQVJOIHNlcGFyYXRvciBmb3IgdGhpcyBwYXJhbWV0ZXI6IGlmIHdlIGhhdmUgYSBjb25jcmV0ZVxuICAgICogcGFyYW1ldGVyIG5hbWUgKG9yIGV4cGxpY2l0bHkgZGVmaW5lZCBwaHlzaWNhbCBuYW1lKSwgd2Ugd2lsbCBwYXJzZSB0aGVtXG4gICAgKiBhbmQgZGVjaWRlIHdoZXRoZXIgYSBcIi9cIiBpcyBuZWVkZWQgb3Igbm90LiBPdGhlcndpc2UsIHVzZXJzIHdpbGwgaGF2ZSB0b1xuICAgICogZXhwbGljaXRseSBzcGVjaWZ5IGBzaW1wbGVOYW1lYCB3aGVuIHRoZXkgaW1wb3J0IHRoZSBBUk4uXG4gICAgKi9cbiAgZnVuY3Rpb24gaXNTaW1wbGVOYW1lKCk6IGJvb2xlYW4ge1xuICAgIC8vIGxvb2sgZm9yIGEgY29uY3JldGUgbmFtZSBhcyBhIGhpbnQgZm9yIGRldGVybWluaW5nIHRoZSBzZXBhcmF0b3JcbiAgICBjb25zdCBjb25jcmV0ZU5hbWUgPSAhVG9rZW4uaXNVbnJlc29sdmVkKHBhcmFtZXRlck5hbWUpID8gcGFyYW1ldGVyTmFtZSA6IHBoeXNpY2FsTmFtZTtcbiAgICBpZiAoIWNvbmNyZXRlTmFtZSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoY29uY3JldGVOYW1lKSkge1xuXG4gICAgICBpZiAob3B0aW9ucy5zaW1wbGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIEFSTiBzZXBhcmF0b3IgZm9yIFNTTSBwYXJhbWV0ZXIgc2luY2UgdGhlIHBhcmFtZXRlciBuYW1lIGlzIGFuIHVucmVzb2x2ZWQgdG9rZW4uIFVzZSBcImZyb21BdHRyaWJ1dGVzXCIgYW5kIHNwZWNpZnkgXCJzaW1wbGVOYW1lXCIgZXhwbGljaXRseScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaW1wbGVOYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9ICFjb25jcmV0ZU5hbWUuc3RhcnRzV2l0aCgnLycpO1xuXG4gICAgLy8gaWYgdXNlcnMgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBzZXBhcmF0b3IgYW5kIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBvbmUgd2UgbmVlZCwgaXQncyBhbiBlcnJvci5cbiAgICBpZiAob3B0aW9ucy5zaW1wbGVOYW1lICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zaW1wbGVOYW1lICE9PSByZXN1bHQpIHtcblxuICAgICAgaWYgKGNvbmNyZXRlTmFtZSA9PT0gQVVUT0dFTl9NQVJLRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJZiBcInBhcmFtZXRlck5hbWVcIiBpcyBub3QgZXhwbGljaXRseSBkZWZpbmVkLCBcInNpbXBsZU5hbWVcIiBtdXN0IGJlIFwidHJ1ZVwiIG9yIHVuZGVmaW5lZCBzaW5jZSBhdXRvLWdlbmVyYXRlZCBwYXJhbWV0ZXIgbmFtZXMgYWx3YXlzIGhhdmUgc2ltcGxlIG5hbWVzJyk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIG5hbWUgXCIke2NvbmNyZXRlTmFtZX1cIiBpcyAke3Jlc3VsdCA/ICdhIHNpbXBsZSBuYW1lJyA6ICdub3QgYSBzaW1wbGUgbmFtZSd9LCBidXQgXCJzaW1wbGVOYW1lXCIgd2FzIGV4cGxpY2l0bHkgc2V0IHRvICR7b3B0aW9ucy5zaW1wbGVOYW1lfS4gRWl0aGVyIG9taXQgaXQgb3Igc2V0IGl0IHRvICR7cmVzdWx0fWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==