Skip to content

Commit c6c54fd

Browse files
committed
Create SecretWithParameter construct for secret and SSM parameter
1 parent 13f56b4 commit c6c54fd

File tree

3 files changed

+46
-26
lines changed

3 files changed

+46
-26
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import {Construct} from "constructs"
2+
import * as cdk from "aws-cdk-lib"
3+
import * as ssm from "aws-cdk-lib/aws-ssm"
4+
import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager"
5+
6+
export interface SecretWithParameterProps {
7+
secretName: string
8+
parameterName: string
9+
description: string
10+
secretValue: string
11+
}
12+
13+
export class SecretWithParameter extends Construct {
14+
public readonly secret: secretsmanager.Secret
15+
public readonly parameter: ssm.StringParameter
16+
17+
constructor(scope: Construct, id: string, props: SecretWithParameterProps) {
18+
super(scope, id)
19+
20+
this.secret = new secretsmanager.Secret(this, "Secret", {
21+
secretName: props.secretName,
22+
description: props.description,
23+
secretStringValue: cdk.SecretValue.unsafePlainText(props.secretValue)
24+
})
25+
26+
this.parameter = new ssm.StringParameter(this, "Parameter", {
27+
parameterName: props.parameterName,
28+
stringValue: `{{resolve:secretsmanager:${this.secret.secretName}}}`,
29+
description: `Reference to ${props.description}`,
30+
tier: ssm.ParameterTier.STANDARD
31+
})
32+
}
33+
}

packages/cdk/nagSuppressions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ export const nagSuppressions = (stack: Stack) => {
235235
// Suppress secrets without rotation
236236
safeAddNagSuppression(
237237
stack,
238-
"/EpsAssistMeStack/Secrets/SlackBotTokenSecret/Resource",
238+
"/EpsAssistMeStack/Secrets/SlackBotToken/Secret/Resource",
239239
[
240240
{
241241
id: "AwsSolutions-SMG4",
@@ -246,7 +246,7 @@ export const nagSuppressions = (stack: Stack) => {
246246

247247
safeAddNagSuppression(
248248
stack,
249-
"/EpsAssistMeStack/Secrets/SlackBotSigningSecret/Resource",
249+
"/EpsAssistMeStack/Secrets/SlackBotSigning/Secret/Resource",
250250
[
251251
{
252252
id: "AwsSolutions-SMG4",

packages/cdk/resources/Secrets.ts

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Construct} from "constructs"
2-
import * as cdk from "aws-cdk-lib"
32
import * as ssm from "aws-cdk-lib/aws-ssm"
43
import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager"
4+
import {SecretWithParameter} from "../constructs/SecretWithParameter"
55

66
export interface SecretsProps {
77
slackBotToken: string
@@ -17,36 +17,23 @@ export class Secrets extends Construct {
1717
constructor(scope: Construct, id: string, props: SecretsProps) {
1818
super(scope, id)
1919

20-
// Create secrets in Secrets Manager
21-
this.slackBotTokenSecret = new secretsmanager.Secret(this, "SlackBotTokenSecret", {
20+
const slackBotToken = new SecretWithParameter(this, "SlackBotToken", {
2221
secretName: "/eps-assist/slack/bot-token",
22+
parameterName: "/eps-assist/slack/bot-token/parameter",
2323
description: "Slack Bot OAuth Token for EPS Assist",
24-
secretStringValue: cdk.SecretValue.unsafePlainText(JSON.stringify({
25-
token: props.slackBotToken
26-
}))
24+
secretValue: JSON.stringify({token: props.slackBotToken})
2725
})
2826

29-
this.slackBotSigningSecret = new secretsmanager.Secret(this, "SlackBotSigningSecret", {
27+
const slackBotSigning = new SecretWithParameter(this, "SlackBotSigning", {
3028
secretName: "/eps-assist/slack/signing-secret",
29+
parameterName: "/eps-assist/slack/signing-secret/parameter",
3130
description: "Slack Signing Secret",
32-
secretStringValue: cdk.SecretValue.unsafePlainText(JSON.stringify({
33-
secret: props.slackSigningSecret
34-
}))
31+
secretValue: JSON.stringify({secret: props.slackSigningSecret})
3532
})
3633

37-
// Create SSM parameters that reference the secrets
38-
this.slackBotTokenParameter = new ssm.StringParameter(this, "SlackBotTokenParameter", {
39-
parameterName: "/eps-assist/slack/bot-token/parameter",
40-
stringValue: `{{resolve:secretsmanager:${this.slackBotTokenSecret.secretName}}}`,
41-
description: "Reference to Slack Bot Token in Secrets Manager",
42-
tier: ssm.ParameterTier.STANDARD
43-
})
44-
45-
this.slackSigningSecretParameter = new ssm.StringParameter(this, "SlackSigningSecretParameter", {
46-
parameterName: "/eps-assist/slack/signing-secret/parameter",
47-
stringValue: `{{resolve:secretsmanager:${this.slackBotSigningSecret.secretName}}}`,
48-
description: "Reference to Slack Signing Secret in Secrets Manager",
49-
tier: ssm.ParameterTier.STANDARD
50-
})
34+
this.slackBotTokenSecret = slackBotToken.secret
35+
this.slackBotSigningSecret = slackBotSigning.secret
36+
this.slackBotTokenParameter = slackBotToken.parameter
37+
this.slackSigningSecretParameter = slackBotSigning.parameter
5138
}
5239
}

0 commit comments

Comments
 (0)