in source/lib/compliant-framework-stack.ts [923:1024]
private addStepFunctionInitializeOrganization(): tasks.LambdaInvoke {
const functionName = 'CompliantFramework-InitializeOrganization'
const lambdaFunction = new lambda.Function(this, 'initializeOrganizationFunction', {
functionName,
code: new lambda.AssetCode('lambda/initialize_organization'),
handler: 'index.lambda_handler',
timeout: cdk.Duration.seconds(300),
runtime: lambda.Runtime.PYTHON_3_8,
initialPolicy: [
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
'logs:CreateLogGroup',
'logs:CreateLogStream',
'logs:PutLogEvents'
],
resources: [this.formatArn({
service: 'logs',
resource: 'log-group',
sep: ':',
resourceName: functionName
})]
}),
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
'ssm:GetParameter'
],
resources: [this.formatArn({
service: 'ssm',
resource: 'parameter',
sep: '/',
resourceName: '*'
})]
}),
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
'organizations:ListRoots',
'organizations:DescribeOrganization',
'organizations:CreateOrganization'
],
resources: ['*']
}),
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
'organizations:ListOrganizationalUnitsForParent',
'organizations:CreateOrganizationalUnit',
],
resources: [
this.formatArn({
service: 'organizations',
region: '',
resource: 'ou',
sep: '/',
resourceName: 'o-*/ou-*'
}),
this.formatArn({
service: 'organizations',
region: '',
resource: 'root',
sep: '/',
resourceName: 'o-*/r-*'
})
]
}),
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
'iam:CreateServiceLinkedRole'
],
resources: [
this.formatArn({
service: 'iam',
region: '',
account: '*',
resource: 'role',
sep: '/',
resourceName: 'aws-service-role/*'
})
]
})
]
})
this.suppressWarnings(lambdaFunction)
const cfnLambdaFunctionDefPolicy = lambdaFunction.role?.node.tryFindChild('DefaultPolicy')?.node.findChild('Resource') as iam.CfnPolicy;
cfnLambdaFunctionDefPolicy.cfnOptions.metadata = {
cfn_nag: {
rules_to_suppress: [{
id: 'W12',
reason: `Lambda permission actions require use of * resource`
}]
}
};
return new tasks.LambdaInvoke(this, 'Initialize Organization', {
lambdaFunction
})
}