Skip to content

Commit

Permalink
chore(integ): use new RDS CA certificate for DocDB instances
Browse files Browse the repository at this point in the history
  • Loading branch information
jericht committed Jan 17, 2024
1 parent 04e4ab8 commit 8174374
Showing 1 changed file with 31 additions and 3 deletions.
34 changes: 31 additions & 3 deletions integ/lib/storage-struct.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import {
RemovalPolicy,
Stack,
} from 'aws-cdk-lib';
import { DatabaseCluster } from 'aws-cdk-lib/aws-docdb';
import {
CfnDBInstance,
DatabaseCluster,
} from 'aws-cdk-lib/aws-docdb';
import {
InstanceClass,
InstanceSize,
Expand Down Expand Up @@ -107,8 +110,8 @@ export class StorageStruct extends Construct {
});

let cacert;
let database;
let databaseConnection;
let database: DatabaseCluster | MongoDbInstance | undefined;
let databaseConnection: DatabaseConnection | undefined;
let databaseSecret: ISecret;

// Check if the test requires a DocDB or MongoDB to be created. If neither is provided, the Repository construct will create a DocDB itself.
Expand All @@ -133,6 +136,11 @@ export class StorageStruct extends Construct {
});
databaseSecret = database.secret!;

// Use new CA certificate on DB instances, expiring in 2121
// See https://docs.aws.amazon.com/documentdb/latest/developerguide/ca_cert_rotation.html
const dbInstances = database.instanceIdentifiers.map((_, i) => database!.node.findChild(`Instance${i+1}`) as CfnDBInstance);
applyNewRdsCaCertificate(dbInstances);

// Create a database connection for the DocDB
databaseConnection = DatabaseConnection.forDocDB({
database: database,
Expand Down Expand Up @@ -244,6 +252,22 @@ export class StorageStruct extends Construct {
},
});

if (database === undefined && databaseConnection === undefined) {
// Repository should have created a DocDB for us, so apply the new RDS CA cert to its instances
const dbConstruct = this.repo.databaseConnection.databaseConstruct;
if (!(dbConstruct instanceof DatabaseCluster)) {
throw new Error(
'Cannot apply new RDS CA certificates to DocDB instances created by Repository construct. Expected DatabaseConnection.databaseConstruct' +
` to be a DatabaseCluster construct, but got ${dbConstruct} (${typeof dbConstruct})`,
);
}

// Use new CA certificate on DB instances, expiring in 2121
// See https://docs.aws.amazon.com/documentdb/latest/developerguide/ca_cert_rotation.html
const dbInstances = dbConstruct.instanceIdentifiers.map((_, i) => dbConstruct.node.findChild(`Instance${i+1}`) as CfnDBInstance);
applyNewRdsCaCertificate(dbInstances);
}

if( !database ) {
database = this.repo.node.findChild('DocumentDatabase') as DatabaseCluster;
databaseSecret = database.secret!;
Expand All @@ -256,3 +280,7 @@ export class StorageStruct extends Construct {
this.efs = ( deadlineEfs || this.repo.node.findChild('FileSystem') as FileSystem );
}
}

function applyNewRdsCaCertificate(instances: CfnDBInstance[]): void {
instances.forEach(instance => instance.caCertificateIdentifier = 'rds-ca-rsa4096-g1');
}

0 comments on commit 8174374

Please sign in to comment.