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;