From 8a1987a7b2c06bf8cbca36a8cc07ba5554655559 Mon Sep 17 00:00:00 2001 From: David Rubio Vidal Date: Thu, 30 Jun 2022 14:18:47 +0200 Subject: [PATCH] feat: add audit logs to scaffolder-backend plugin Signed-off-by: David Rubio Vidal --- app-config.yaml | 9 ++++++ .../scaffolder-backend/src/service/router.ts | 30 ++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app-config.yaml b/app-config.yaml index a56a3df9d1..5806ad31b9 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -286,6 +286,15 @@ scaffolder: # email: scaffolder@backstage.io # Use to customize the default commit message when new components are created # defaultCommitMessage: 'Initial commit' + # Use to customize the audit log emitted when a template task is created + auditlog: + enabled: true + # Properties of the user entity metadata (i.e. userEntity.metadata.name) + identityMetadata: + - name + # Annotations under the user entity metadata (i.e. userEntity.metadata.annotations['name/of-annotation']) + # identityAnnotations: + # # - name/of-annotation auth: ### Add auth.keyStore.provider to more granularly control how to store JWK data when running diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 809f64c4c9..c254994a26 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -193,7 +193,35 @@ export async function createRouter( ? await catalogClient.getEntityByRef(userEntityRef, { token }) : undefined; - logger.info(`POST /v2/tasks from ${userEntity?.metadata.name}`); + const auditlogEnabled = config.getOptionalBoolean( + 'scaffolder.auditlog.enabled', + ); + + if (auditlogEnabled) { + const identityMetadata = config.getOptionalStringArray( + 'scaffolder.auditlog.identityMetadata', + ); + const identityAnnotations = config.getOptionalStringArray( + 'scaffolder.auditlog.identityAnnotations', + ); + + const logMe: { [key: string]: string }[] = []; + + identityMetadata?.forEach((prop: string) => + logMe.push({ [prop]: userEntity?.metadata[prop] as string }), + ); + identityAnnotations?.forEach((prop: string) => + logMe.push({ + [prop]: userEntity?.metadata.annotations?.[prop] as string, + }), + ); + + logger.info( + `Scaffolding template '${templateRef}'. ${ + logMe.length > 0 && JSON.stringify(logMe) + }`, + ); + } const values = req.body.values;