aws-delivlib
Version:
A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.
82 lines • 6.58 kB
JavaScript
"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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