Skip to content

Commit afbe6ff

Browse files
committed
Move KMS key creation to S3Bucket construct for better encapsulation
1 parent 27fd74f commit afbe6ff

File tree

2 files changed

+7
-14
lines changed

2 files changed

+7
-14
lines changed

packages/cdk/constructs/S3Bucket.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,30 @@ import {Key} from "aws-cdk-lib/aws-kms"
1010

1111
export interface S3BucketProps {
1212
readonly bucketName: string
13-
readonly kmsKey: Key
1413
readonly versioned: boolean
1514
}
1615

1716
export class S3Bucket extends Construct {
1817
public readonly bucket: Bucket
19-
public readonly kmsKey?: Key
18+
public readonly kmsKey: Key
2019

2120
constructor(scope: Construct, id: string, props: S3BucketProps) {
2221
super(scope, id)
2322

23+
this.kmsKey = new Key(this, "BucketKey", {
24+
enableKeyRotation: true,
25+
description: `KMS key for ${props.bucketName} S3 bucket encryption`
26+
})
27+
2428
this.bucket = new Bucket(this, props.bucketName, {
2529
blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
2630
encryption: BucketEncryption.KMS,
27-
encryptionKey: props.kmsKey,
31+
encryptionKey: this.kmsKey,
2832
removalPolicy: RemovalPolicy.DESTROY,
2933
autoDeleteObjects: true,
3034
enforceSSL: true,
3135
versioned: props.versioned ?? false,
3236
objectOwnership: ObjectOwnership.BUCKET_OWNER_ENFORCED
3337
})
34-
35-
this.kmsKey = props.kmsKey
3638
}
3739
}

packages/cdk/resources/Storage.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {Construct} from "constructs"
2-
import {Key} from "aws-cdk-lib/aws-kms"
32
import {S3Bucket} from "../constructs/S3Bucket"
43

54
export interface StorageProps {
@@ -8,21 +7,13 @@ export interface StorageProps {
87

98
export class Storage extends Construct {
109
public readonly kbDocsBucket: S3Bucket
11-
public readonly kbDocsKey: Key
1210

1311
constructor(scope: Construct, id: string, props: StorageProps) {
1412
super(scope, id)
1513

16-
// Create customer-managed KMS key for knowledge base document encryption
17-
this.kbDocsKey = new Key(this, "KbDocsKey", {
18-
enableKeyRotation: true,
19-
description: "KMS key for encrypting knowledge base documents"
20-
})
21-
2214
// Create S3 bucket for knowledge base documents with encryption
2315
this.kbDocsBucket = new S3Bucket(this, "DocsBucket", {
2416
bucketName: `${props.stackName}-Docs`,
25-
kmsKey: this.kbDocsKey,
2617
versioned: true
2718
})
2819
}

0 commit comments

Comments
 (0)