aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
58 lines (47 loc) • 1.8 kB
text/typescript
import * as iam from '../../aws-iam';
import * as cdk from '../../core';
import { SecretValue } from '../../core';
import * as secretsmanager from '../lib';
class SecretsManagerStack extends cdk.Stack {
constructor(scope: cdk.App, id: string) {
super(scope, id);
const role = new iam.Role(this, 'TestRole', { assumedBy: new iam.AccountRootPrincipal() });
/// !show
// Default secret
const secret = new secretsmanager.Secret(this, 'Secret');
secret.grantRead(role);
const user = new iam.User(this, 'User', {
password: secret.secretValue,
});
// Templated secret
const templatedSecret = new secretsmanager.Secret(this, 'TemplatedSecret', {
generateSecretString: {
secretStringTemplate: JSON.stringify({ username: 'user' }),
generateStringKey: 'password',
},
});
new iam.User(this, 'OtherUser', {
// 'userName' is not actually a secret, so it's okay to use `unsafeUnwrap` to convert
// the `SecretValue` into a 'string'.
userName: templatedSecret.secretValueFromJson('username').unsafeUnwrap(),
password: templatedSecret.secretValueFromJson('password'),
});
// Secret with predefined value
const accessKey = new iam.AccessKey(this, 'AccessKey', { user });
new secretsmanager.Secret(this, 'PredefinedSecret', {
secretStringValue: accessKey.secretAccessKey,
});
// JSON secret
new secretsmanager.Secret(this, 'JSONSecret', {
secretObjectValue: {
username: SecretValue.unsafePlainText(user.userName),
database: SecretValue.unsafePlainText('foo'),
password: accessKey.secretAccessKey,
},
});
/// !hide
}
}
const app = new cdk.App();
new SecretsManagerStack(app, 'Integ-SecretsManager-Secret');
app.synth();