|
11 | 11 | * and limitations under the License. |
12 | 12 | */ |
13 | 13 |
|
14 | | -import * as path from 'path'; |
15 | 14 | import * as cdk from '@aws-cdk/core'; |
16 | 15 | import * as codebuild from '@aws-cdk/aws-codebuild'; |
| 16 | +import * as dynamodb from '@aws-cdk/aws-dynamodb'; |
| 17 | +import * as fs from 'fs'; |
17 | 18 | import * as iam from '@aws-cdk/aws-iam'; |
| 19 | +import * as kms from '@aws-cdk/aws-kms'; |
18 | 20 | import * as lambda from '@aws-cdk/aws-lambda'; |
| 21 | +import * as path from 'path'; |
| 22 | +import * as s3 from '@aws-cdk/aws-s3'; |
19 | 23 | import * as s3assets from '@aws-cdk/aws-s3-assets'; |
20 | 24 | import * as secrets from '@aws-cdk/aws-secretsmanager'; |
21 | | -import * as dynamodb from '@aws-cdk/aws-dynamodb'; |
22 | 25 | import * as sfn from '@aws-cdk/aws-stepfunctions'; |
| 26 | +import * as sns from '@aws-cdk/aws-sns'; |
23 | 27 | import * as tasks from '@aws-cdk/aws-stepfunctions-tasks'; |
24 | | -import * as s3 from '@aws-cdk/aws-s3'; |
25 | | -import { CdkDeployProject, PrebuiltCdkDeployProject } from '@aws-accelerator/cdk-accelerator/src/codebuild'; |
| 28 | + |
26 | 29 | import { AcceleratorStack, AcceleratorStackProps } from '@aws-accelerator/cdk-accelerator/src/core/accelerator-stack'; |
27 | | -import { createRoleName, createName } from '@aws-accelerator/cdk-accelerator/src/core/accelerator-name-generator'; |
| 30 | +import { CdkDeployProject, PrebuiltCdkDeployProject } from '@aws-accelerator/cdk-accelerator/src/codebuild'; |
| 31 | +import { createName, createRoleName } from '@aws-accelerator/cdk-accelerator/src/core/accelerator-name-generator'; |
| 32 | + |
| 33 | +import { AddTagsToResourcesTask } from './tasks/add-tags-to-resources-task'; |
| 34 | +import { CDKBootstrapTask } from './tasks/cdk-bootstrap'; |
28 | 35 | import { CodeTask } from '@aws-accelerator/cdk-accelerator/src/stepfunction-tasks'; |
| 36 | +import { CreateAdConnectorTask } from './tasks/create-adconnector-task'; |
29 | 37 | import { CreateControlTowerAccountTask } from './tasks/create-control-tower-account-task'; |
30 | 38 | import { CreateOrganizationAccountTask } from './tasks/create-organization-account-task'; |
31 | | -import { CreateAdConnectorTask } from './tasks/create-adconnector-task'; |
32 | 39 | import { CreateStackTask } from './tasks/create-stack-task'; |
33 | 40 | import { RunAcrossAccountsTask } from './tasks/run-across-accounts-task'; |
34 | | -import * as fs from 'fs'; |
35 | | -import * as sns from '@aws-cdk/aws-sns'; |
36 | 41 | import { StoreOutputsTask } from './tasks/store-outputs-task'; |
37 | 42 | import { StoreOutputsToSSMTask } from './tasks/store-outputs-to-ssm-task'; |
38 | | -import { CDKBootstrapTask } from './tasks/cdk-bootstrap'; |
39 | | -import * as kms from '@aws-cdk/aws-kms'; |
40 | 43 |
|
41 | 44 | const VPC_CIDR_POOL_TABLE = 'cidr-vpc-assign'; |
42 | 45 | const SUBNET_CIDR_POOL_TABLE = 'cidr-subnet-assign'; |
@@ -969,16 +972,61 @@ export namespace InitialSetup { |
969 | 972 | resultPath: 'DISCARD', |
970 | 973 | }); |
971 | 974 |
|
972 | | - const addTagsToSharedResourcesTask = new CodeTask(this, 'Add Tags to Shared Resources', { |
973 | | - functionProps: { |
974 | | - code: lambdaCode, |
975 | | - handler: 'index.addTagsToSharedResourcesStep', |
| 975 | + // S3 bucket for Add Tags to Shared Resources Lambda fns |
| 976 | + const addTagsToSharedResourcesBucket = new s3.Bucket(this, 'AddTagsToSharedResourcesBucket', { |
| 977 | + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, |
| 978 | + encryption: s3.BucketEncryption.S3_MANAGED, |
| 979 | + removalPolicy: cdk.RemovalPolicy.RETAIN, |
| 980 | + lifecycleRules: [ |
| 981 | + { |
| 982 | + id: '1DayDelete', |
| 983 | + enabled: true, |
| 984 | + expiration: cdk.Duration.days(1), |
| 985 | + }, |
| 986 | + ], |
| 987 | + }); |
| 988 | + addTagsToSharedResourcesBucket.addToResourcePolicy( |
| 989 | + new iam.PolicyStatement({ |
| 990 | + actions: ['s3:GetObject*', 's3:PutObject*', 's3:DeleteObject*', 's3:GetBucket*', 's3:List*'], |
| 991 | + resources: [addTagsToSharedResourcesBucket.arnForObjects('*'), addTagsToSharedResourcesBucket.bucketArn], |
| 992 | + principals: [pipelineRole], |
| 993 | + }), |
| 994 | + ); |
| 995 | + // Allow only https requests |
| 996 | + addTagsToSharedResourcesBucket.addToResourcePolicy( |
| 997 | + new iam.PolicyStatement({ |
| 998 | + actions: ['s3:*'], |
| 999 | + resources: [addTagsToSharedResourcesBucket.bucketArn, addTagsToSharedResourcesBucket.arnForObjects('*')], |
| 1000 | + principals: [new iam.AnyPrincipal()], |
| 1001 | + conditions: { |
| 1002 | + Bool: { |
| 1003 | + 'aws:SecureTransport': 'false', |
| 1004 | + }, |
| 1005 | + }, |
| 1006 | + effect: iam.Effect.DENY, |
| 1007 | + }), |
| 1008 | + ); |
| 1009 | + |
| 1010 | + //State Machine and associated resources for Adding Tags to Shared Resources |
| 1011 | + const addTagsToSharedResourcesStateMachine = new sfn.StateMachine(this, 'Add Tags To Resources Sfn', { |
| 1012 | + stateMachineName: `${props.acceleratorPrefix}AddTagsToSharedResources_sfn`, |
| 1013 | + definition: new AddTagsToResourcesTask(this, 'AddTagsToSharedResources', { |
| 1014 | + lambdaCode, |
976 | 1015 | role: pipelineRole, |
977 | | - }, |
978 | | - functionPayload: { |
| 1016 | + name: 'Add Tags To Shared Resources', |
| 1017 | + }), |
| 1018 | + }); |
| 1019 | + |
| 1020 | + const addTagsToSharedResourcesTask = new tasks.StepFunctionsStartExecution(this, 'Add Tags To Resources', { |
| 1021 | + stateMachine: addTagsToSharedResourcesStateMachine, |
| 1022 | + integrationPattern: sfn.IntegrationPattern.RUN_JOB, |
| 1023 | + input: sfn.TaskInput.fromObject({ |
| 1024 | + 'accounts.$': '$.accounts', |
| 1025 | + acceleratorPrefix: props.acceleratorPrefix, |
979 | 1026 | assumeRoleName: props.stateMachineExecutionRole, |
980 | 1027 | outputTableName: outputsTable.tableName, |
981 | | - }, |
| 1028 | + s3Bucket: addTagsToSharedResourcesBucket.bucketName, |
| 1029 | + }), |
982 | 1030 | resultPath: 'DISCARD', |
983 | 1031 | }); |
984 | 1032 |
|
|
0 commit comments