UNPKG

aws-delivlib

Version:

A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.

82 lines 6.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const os = require("os"); const path = require("path"); const util = require("util"); const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager"); const cfn = require("./_cloud-formation"); const _exec = require("./_exec"); const _rmrf = require("./_rmrf"); const mkdtemp = util.promisify(fs.mkdtemp); const readFile = util.promisify(fs.readFile); const secretsManager = new client_secrets_manager_1.SecretsManager(); exports.handler = cfn.customResourceHandler(handleEvent); async function handleEvent(event, context) { if (event.RequestType !== cfn.RequestType.DELETE) { cfn.validateProperties(event.ResourceProperties, { Description: false, KeySize: true, KmsKeyId: false, SecretName: true, }); } switch (event.RequestType) { case cfn.RequestType.CREATE: return _createSecret(event, context); case cfn.RequestType.UPDATE: return _updateSecret(event, context); case cfn.RequestType.DELETE: return _deleteSecret(event); } } async function _createSecret(event, context) { const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'x509PrivateKey-')); try { const pkeyFile = path.join(tmpDir, 'private_key.pem'); await _exec('openssl', 'genrsa', '-out', pkeyFile, event.ResourceProperties.KeySize); const result = await secretsManager.createSecret({ ClientRequestToken: context.awsRequestId, Description: event.ResourceProperties.Description, KmsKeyId: event.ResourceProperties.KmsKeyId, Name: event.ResourceProperties.SecretName, SecretString: await readFile(pkeyFile, { encoding: 'utf8' }), }); return { Ref: result.ARN, SecretArn: result.ARN, }; } finally { await _rmrf(tmpDir); } } async function _deleteSecret(event) { if (event.PhysicalResourceId.startsWith('arn:')) { await secretsManager.deleteSecret({ SecretId: event.PhysicalResourceId, ForceDeleteWithoutRecovery: true, }); } return { Ref: event.PhysicalResourceId }; } async function _updateSecret(event, context) { const props = event.ResourceProperties; const oldProps = event.OldResourceProperties; for (const key of ['KeySize', 'SecretName']) { if (oldProps[key] !== props[key]) { throw new Error(`The ${key} property cannot be updated, but it was changed from ${oldProps[key]} to ${props[key]}`); } } const result = await secretsManager.updateSecret({ ClientRequestToken: context.awsRequestId, Description: props.Description, KmsKeyId: props.KmsKeyId, SecretId: event.PhysicalResourceId, }); return { Ref: result.ARN, SecretArn: result.ARN, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFFN0IsNEVBQWlFO0FBRWpFLDBDQUEwQztBQUUxQyxpQ0FBa0M7QUFHbEMsaUNBQWtDO0FBRWxDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksdUNBQWMsRUFBRSxDQUFDO0FBRTVDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXpELEtBQUssVUFBVSxXQUFXLENBQUMsS0FBZ0IsRUFBRSxPQUF1QjtJQUNsRSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7UUFDaEQsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtZQUMvQyxXQUFXLEVBQUUsS0FBSztZQUNsQixPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxRQUFRLEtBQUssQ0FBQyxXQUFXLEVBQUU7UUFDekIsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDekIsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQ3pCLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENB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