in source/lib/cfn-nag-helper.ts [22:53]
public static addSuppressions(resource: cdk.CfnResource, suppressions: CfnNagSuppression | CfnNagSuppression[]) {
let rules = [];
if (suppressions instanceof Array) {
for (const suppression of suppressions) {
rules.push({ id: suppression.Id, reason: suppression.Reason });
}
} else {
rules.push({ id: suppressions.Id, reason: suppressions.Reason });
}
if (resource.cfnOptions.metadata?.cfn_nag) {
// If the CfnResource already contains some suppressions, we don't want to erase them.
const existingRules = resource.cfnOptions.metadata.cfn_nag.rules_to_suppress;
rules = [...existingRules, ...rules];
}
// It's possible that multiple constructs try to add the same suppression.
// We only keep one occurrence (last) of each.
// Based on https://stackoverflow.com/a/56768137
const uniqueRules = [
...new Map(
rules.map(rule => [rule.id, rule])
).values()
];
resource.cfnOptions.metadata = {
cfn_nag: {
rules_to_suppress: uniqueRules
}
};
}