in packages/@aws-c2a/presets/lib/iam-changes.ts [22:88]
public static BroadeningPermissions(): PresetRules {
const rules = new IamChanges();
const rootBindings = new Rule([Change.INSERT, Change.INSERT_PROP, Change.UPDATE_PROP]);
// Lambda Permissions
IAM_LAMBDA_PERMISSION.forEach(resource => {
const { component, rule: componentBindings } = generateComponent(resource, rootBindings);
generateHighRiskChild(componentBindings, component, {
change: Change.INSERT,
});
});
// Managed Policies
Object.entries(IAM_MANAGED_POLICIES).forEach(([resource, policies]) => {
const { component, rule: componentBindings } = generateComponent(resource, rootBindings);
policies.forEach(policy => {
generateHighRiskChild(componentBindings, component, {
change: Change.INSERT_PROP,
targetPath: ['Properties', policy, '*'],
});
generateHighRiskChild(componentBindings, component, {
change: Change.INSERT,
equals: '*',
sourcePath: ['Properties', policy, '*'],
});
componentBindings.createChild({
conditions: [
Change.INSERT.appliesTo(component),
Change.INSERT.equals('*', ChangeType.NEW, { sourcePath: ['Properties', policy, '*'] }),
],
risk: RuleRisk.High,
target: Change.INSERT,
});
});
});
// Inline Identity Policies
Object.entries(IAM_INLINE_IDENTITY_POLICIES).forEach(([resource, policies]) => {
const { component, rule: componentBindings } = generateComponent(resource, rootBindings);
policies.forEach(policy => {
generateStatementRules(componentBindings, component, 'PolicyDocument', policy, '*');
generateHighRiskChild(componentBindings, component, {
change: Change.INSERT_PROP,
equals: 'Allow',
targetPath: ['Properties', policy, '*'],
sourcePath: ['PolicyDocument', 'Statement', '*'],
});
});
});
// Inline Resource Policies
Object.entries(IAM_INLINE_RESOURCE_POLICIES).forEach(([resource, policies]) => {
const { component, rule: componentBindings } = generateComponent(resource, rootBindings);
policies.forEach(policy => {
generateStatementRules(componentBindings, component, policy);
});
});
// Policy Resources
IAM_POLICY_RESOURCES.forEach(resource => {
const { component, rule: componentBindings } = generateComponent(resource, rootBindings);
generateStatementRules(componentBindings, component);
});
rules.addRules(rootBindings.toJSON());
return rules;
}