// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`IoT Device Simulator stack test 1`] = ` { "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "ServiceprincipalMap": { "af-south-1": { "states": "states.af-south-1.amazonaws.com", }, "ap-east-1": { "states": "states.ap-east-1.amazonaws.com", }, "ap-northeast-1": { "states": "states.ap-northeast-1.amazonaws.com", }, "ap-northeast-2": { "states": "states.ap-northeast-2.amazonaws.com", }, "ap-northeast-3": { "states": "states.ap-northeast-3.amazonaws.com", }, "ap-south-1": { "states": "states.ap-south-1.amazonaws.com", }, "ap-south-2": { "states": "states.ap-south-2.amazonaws.com", }, "ap-southeast-1": { "states": "states.ap-southeast-1.amazonaws.com", }, "ap-southeast-2": { "states": "states.ap-southeast-2.amazonaws.com", }, "ap-southeast-3": { "states": "states.ap-southeast-3.amazonaws.com", }, "ca-central-1": { "states": "states.ca-central-1.amazonaws.com", }, "cn-north-1": { "states": "states.cn-north-1.amazonaws.com", }, "cn-northwest-1": { "states": "states.cn-northwest-1.amazonaws.com", }, "eu-central-1": { "states": "states.eu-central-1.amazonaws.com", }, "eu-central-2": { "states": "states.eu-central-2.amazonaws.com", }, "eu-north-1": { "states": "states.eu-north-1.amazonaws.com", }, "eu-south-1": { "states": "states.eu-south-1.amazonaws.com", }, "eu-south-2": { "states": "states.eu-south-2.amazonaws.com", }, "eu-west-1": { "states": "states.eu-west-1.amazonaws.com", }, "eu-west-2": { "states": "states.eu-west-2.amazonaws.com", }, "eu-west-3": { "states": "states.eu-west-3.amazonaws.com", }, "me-central-1": { "states": "states.me-central-1.amazonaws.com", }, "me-south-1": { "states": "states.me-south-1.amazonaws.com", }, "sa-east-1": { "states": "states.sa-east-1.amazonaws.com", }, "us-east-1": { "states": "states.us-east-1.amazonaws.com", }, "us-east-2": { "states": "states.us-east-2.amazonaws.com", }, "us-gov-east-1": { "states": "states.us-gov-east-1.amazonaws.com", }, "us-gov-west-1": { "states": "states.us-gov-west-1.amazonaws.com", }, "us-iso-east-1": { "states": "states.amazonaws.com", }, "us-iso-west-1": { "states": "states.amazonaws.com", }, "us-isob-east-1": { "states": "states.amazonaws.com", }, "us-west-1": { "states": "states.us-west-1.amazonaws.com", }, "us-west-2": { "states": "states.us-west-2.amazonaws.com", }, }, "Solution": { "Config": { "KeyPrefix": "SOLUTION_NAME_PLACEHOLDER/VERSION_PLACEHOLDER", "S3Bucket": "BUCKET_NAME_PLACEHOLDER", "SendAnonymousUsage": "Yes", "SolutionId": "SO0041", "SolutionName": "SOLUTION_NAME_PLACEHOLDER", "Version": "VERSION_PLACEHOLDER", }, }, }, "Metadata": { "AWS::CloudFormation::Interface": { "ParameterGroups": [ { "Label": { "default": "Console access", }, "Parameters": [ "UserEmail", ], }, ], "ParameterLabels": { "UserEmail": { "default": "* Console Administrator Email", }, }, }, }, "Outputs": { "APIEndpoint": { "Description": "The API endpoint", "Value": { "Fn::Join": [ "", [ "https://", { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, ".execute-api.", { "Ref": "AWS::Region", }, ".amazonaws.com/prod", ], ], }, }, "APIIoTDeviceSimulatorApiEndpoint38AE6122": { "Value": { "Fn::Join": [ "", [ "https://", { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, ".execute-api.", { "Ref": "AWS::Region", }, ".", { "Ref": "AWS::URLSuffix", }, "/", { "Ref": "APIIoTDeviceSimulatorApiDeploymentStageprodEBDF0099", }, "/", ], ], }, }, "ConsoleClientId": { "Description": "The console client ID", "Value": { "Ref": "ConsoleUserPoolClient72810FD1", }, }, "ConsoleURL": { "Description": "The URL to access the console", "Value": { "Fn::Join": [ "", [ "https://", { "Fn::GetAtt": [ "ConsoleDistributionCloudFrontDistribution725A4837", "DomainName", ], }, ], ], }, }, "DeviceTypesTable": { "Description": "The device types table name.", "Value": { "Ref": "storageIDSDeviceTypesTable01F2060C", }, }, "IdentityPoolId": { "Description": "The ID for the Cognitio Identity Pool", "Value": { "Ref": "ConsoleIdentityPool389115C6", }, }, "SimulationsTable": { "Description": "The simulations table name", "Value": { "Ref": "storageIDSSimulationsTable052FC452", }, }, "UUID": { "Description": "The solution UUID", "Value": { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UUID", ], }, }, "UserPoolId": { "Description": "The Cognito User Pool ID", "Value": { "Ref": "ConsoleUserPoolEC556DE1", }, }, }, "Parameters": { "UserEmail": { "AllowedPattern": "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$", "ConstraintDescription": "User E-Mail must be a valid E-Mail address.", "Description": "The user E-Mail to access the UI", "Type": "String", }, }, "Resources": { "APIApiRequestValidatorC6EB6FA1": { "Properties": { "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, "ValidateRequestBody": true, "ValidateRequestParameters": true, }, "Type": "AWS::ApiGateway::RequestValidator", }, "APIIoTDeviceSimulatorApi789EED4C": { "Properties": { "Description": "IoT Device Simulator Rest API", "EndpointConfiguration": { "Types": [ "REGIONAL", ], }, "Name": "IoTDeviceSimulatorApi", "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::ApiGateway::RestApi", }, "APIIoTDeviceSimulatorApiAccount46D2BA16": { "DeletionPolicy": "Retain", "DependsOn": [ "APIIoTDeviceSimulatorApi789EED4C", ], "Properties": { "CloudWatchRoleArn": { "Fn::GetAtt": [ "APIIoTDeviceSimulatorApiCloudWatchRole28B7B1FA", "Arn", ], }, }, "Type": "AWS::ApiGateway::Account", "UpdateReplacePolicy": "Retain", }, "APIIoTDeviceSimulatorApiCloudWatchRole28B7B1FA": { "DeletionPolicy": "Retain", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": [ { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs", ], ], }, ], "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", "UpdateReplacePolicy": "Retain", }, "APIIoTDeviceSimulatorApiDeployment3C1BA3951db056031fdce112fa315a0dc108e90c": { "DependsOn": [ "APIApiRequestValidatorC6EB6FA1", "APIIoTDeviceSimulatorApidevicetypestypeidANY9009DE71", "APIIoTDeviceSimulatorApidevicetypestypeidOPTIONS2E1262D2", "APIIoTDeviceSimulatorApidevicetypestypeid9C625350", "APIIoTDeviceSimulatorApidevicetypesANY814B7130", "APIIoTDeviceSimulatorApidevicetypesOPTIONS9AA68147", "APIIoTDeviceSimulatorApidevicetypes69DA3CE2", "APIIoTDeviceSimulatorApiOPTIONS4EA20DA2", "APIIoTDeviceSimulatorApisimulationsimidANY7341FEEB", "APIIoTDeviceSimulatorApisimulationsimidOPTIONS3A8ADE0C", "APIIoTDeviceSimulatorApisimulationsimidC20C5A22", "APIIoTDeviceSimulatorApisimulationANY7B648289", "APIIoTDeviceSimulatorApisimulationOPTIONS3B6D882D", "APIIoTDeviceSimulatorApisimulationAB87A18B", ], "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W68", "reason": "The solution does not require the usage plan.", }, ], }, }, "Properties": { "Description": "IoT Device Simulator Rest API", "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Deployment", }, "APIIoTDeviceSimulatorApiDeploymentStageprodEBDF0099": { "DependsOn": [ "APIIoTDeviceSimulatorApiAccount46D2BA16", ], "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W64", "reason": "The solution does not require the usage plan.", }, ], }, }, "Properties": { "AccessLogSetting": { "DestinationArn": { "Fn::GetAtt": [ "APILogsB6A8DF10", "Arn", ], }, "Format": "{"requestId":"$context.requestId","ip":"$context.identity.sourceIp","user":"$context.identity.user","caller":"$context.identity.caller","requestTime":"$context.requestTime","httpMethod":"$context.httpMethod","resourcePath":"$context.resourcePath","status":"$context.status","protocol":"$context.protocol","responseLength":"$context.responseLength"}", }, "DeploymentId": { "Ref": "APIIoTDeviceSimulatorApiDeployment3C1BA3951db056031fdce112fa315a0dc108e90c", }, "MethodSettings": [ { "DataTraceEnabled": false, "HttpMethod": "*", "LoggingLevel": "INFO", "ResourcePath": "/*", }, ], "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, "StageName": "prod", "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], "TracingEnabled": true, }, "Type": "AWS::ApiGateway::Stage", }, "APIIoTDeviceSimulatorApiOPTIONS4EA20DA2": { "Properties": { "AuthorizationType": "NONE", "HttpMethod": "OPTIONS", "Integration": { "IntegrationResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": "'Authorization,Content-Type,X-Amz-Date,X-Amz-Security-Token,X-Api-Key'", "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE,OPTIONS'", "method.response.header.Access-Control-Allow-Origin": "'*'", }, "StatusCode": "200", }, ], "RequestTemplates": { "application/json": "{ statusCode: 200 }", }, "Type": "MOCK", }, "MethodResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": true, "method.response.header.Access-Control-Allow-Methods": true, "method.response.header.Access-Control-Allow-Origin": true, }, "StatusCode": "200", }, ], "ResourceId": { "Fn::GetAtt": [ "APIIoTDeviceSimulatorApi789EED4C", "RootResourceId", ], }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApidevicetypes69DA3CE2": { "Properties": { "ParentId": { "Fn::GetAtt": [ "APIIoTDeviceSimulatorApi789EED4C", "RootResourceId", ], }, "PathPart": "devicetypes", "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Resource", }, "APIIoTDeviceSimulatorApidevicetypesANY814B7130": { "Properties": { "AuthorizationType": "AWS_IAM", "HttpMethod": "ANY", "Integration": { "ContentHandling": "CONVERT_TO_TEXT", "IntegrationHttpMethod": "POST", "IntegrationResponses": [ { "StatusCode": "200", }, ], "PassthroughBehavior": "WHEN_NO_MATCH", "Type": "AWS_PROXY", "Uri": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":apigateway:", { "Ref": "AWS::Region", }, ":lambda:path/2015-03-31/functions/", { "Fn::GetAtt": [ "simulatormicroservices752C24A5", "Arn", ], }, "/invocations", ], ], }, }, "MethodResponses": [ { "ResponseModels": { "application/json": "Empty", }, "StatusCode": "200", }, ], "RequestParameters": { "method.request.querystring.nextToken": false, }, "RequestValidatorId": { "Ref": "APIApiRequestValidatorC6EB6FA1", }, "ResourceId": { "Ref": "APIIoTDeviceSimulatorApidevicetypes69DA3CE2", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApidevicetypesOPTIONS9AA68147": { "Properties": { "AuthorizationType": "NONE", "HttpMethod": "OPTIONS", "Integration": { "IntegrationResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": "'Authorization,Content-Type,X-Amz-Date,X-Amz-Security-Token,X-Api-Key'", "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE,OPTIONS'", "method.response.header.Access-Control-Allow-Origin": "'*'", }, "StatusCode": "200", }, ], "RequestTemplates": { "application/json": "{ statusCode: 200 }", }, "Type": "MOCK", }, "MethodResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": true, "method.response.header.Access-Control-Allow-Methods": true, "method.response.header.Access-Control-Allow-Origin": true, }, "StatusCode": "200", }, ], "ResourceId": { "Ref": "APIIoTDeviceSimulatorApidevicetypes69DA3CE2", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApidevicetypestypeid9C625350": { "Properties": { "ParentId": { "Ref": "APIIoTDeviceSimulatorApidevicetypes69DA3CE2", }, "PathPart": "{typeid}", "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Resource", }, "APIIoTDeviceSimulatorApidevicetypestypeidANY9009DE71": { "Properties": { "AuthorizationType": "AWS_IAM", "HttpMethod": "ANY", "Integration": { "ContentHandling": "CONVERT_TO_TEXT", "IntegrationHttpMethod": "POST", "IntegrationResponses": [ { "StatusCode": "200", }, ], "PassthroughBehavior": "WHEN_NO_MATCH", "Type": "AWS_PROXY", "Uri": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":apigateway:", { "Ref": "AWS::Region", }, ":lambda:path/2015-03-31/functions/", { "Fn::GetAtt": [ "simulatormicroservices752C24A5", "Arn", ], }, "/invocations", ], ], }, }, "MethodResponses": [ { "ResponseModels": { "application/json": "Empty", }, "StatusCode": "200", }, ], "RequestParameters": { "method.request.querystring.nextToken": false, }, "RequestValidatorId": { "Ref": "APIApiRequestValidatorC6EB6FA1", }, "ResourceId": { "Ref": "APIIoTDeviceSimulatorApidevicetypestypeid9C625350", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApidevicetypestypeidOPTIONS2E1262D2": { "Properties": { "AuthorizationType": "NONE", "HttpMethod": "OPTIONS", "Integration": { "IntegrationResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": "'Authorization,Content-Type,X-Amz-Date,X-Amz-Security-Token,X-Api-Key'", "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE,OPTIONS'", "method.response.header.Access-Control-Allow-Origin": "'*'", }, "StatusCode": "200", }, ], "RequestTemplates": { "application/json": "{ statusCode: 200 }", }, "Type": "MOCK", }, "MethodResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": true, "method.response.header.Access-Control-Allow-Methods": true, "method.response.header.Access-Control-Allow-Origin": true, }, "StatusCode": "200", }, ], "ResourceId": { "Ref": "APIIoTDeviceSimulatorApidevicetypestypeid9C625350", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApisimulationAB87A18B": { "Properties": { "ParentId": { "Fn::GetAtt": [ "APIIoTDeviceSimulatorApi789EED4C", "RootResourceId", ], }, "PathPart": "simulation", "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Resource", }, "APIIoTDeviceSimulatorApisimulationANY7B648289": { "Properties": { "AuthorizationType": "AWS_IAM", "HttpMethod": "ANY", "Integration": { "ContentHandling": "CONVERT_TO_TEXT", "IntegrationHttpMethod": "POST", "IntegrationResponses": [ { "StatusCode": "200", }, ], "PassthroughBehavior": "WHEN_NO_MATCH", "Type": "AWS_PROXY", "Uri": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":apigateway:", { "Ref": "AWS::Region", }, ":lambda:path/2015-03-31/functions/", { "Fn::GetAtt": [ "simulatormicroservices752C24A5", "Arn", ], }, "/invocations", ], ], }, }, "MethodResponses": [ { "ResponseModels": { "application/json": "Empty", }, "StatusCode": "200", }, ], "RequestParameters": { "method.request.querystring.nextToken": false, }, "RequestValidatorId": { "Ref": "APIApiRequestValidatorC6EB6FA1", }, "ResourceId": { "Ref": "APIIoTDeviceSimulatorApisimulationAB87A18B", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApisimulationOPTIONS3B6D882D": { "Properties": { "AuthorizationType": "NONE", "HttpMethod": "OPTIONS", "Integration": { "IntegrationResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": "'Authorization,Content-Type,X-Amz-Date,X-Amz-Security-Token,X-Api-Key'", "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE,OPTIONS'", "method.response.header.Access-Control-Allow-Origin": "'*'", }, "StatusCode": "200", }, ], "RequestTemplates": { "application/json": "{ statusCode: 200 }", }, "Type": "MOCK", }, "MethodResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": true, "method.response.header.Access-Control-Allow-Methods": true, "method.response.header.Access-Control-Allow-Origin": true, }, "StatusCode": "200", }, ], "ResourceId": { "Ref": "APIIoTDeviceSimulatorApisimulationAB87A18B", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApisimulationsimidANY7341FEEB": { "Properties": { "AuthorizationType": "AWS_IAM", "HttpMethod": "ANY", "Integration": { "ContentHandling": "CONVERT_TO_TEXT", "IntegrationHttpMethod": "POST", "IntegrationResponses": [ { "StatusCode": "200", }, ], "PassthroughBehavior": "WHEN_NO_MATCH", "Type": "AWS_PROXY", "Uri": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":apigateway:", { "Ref": "AWS::Region", }, ":lambda:path/2015-03-31/functions/", { "Fn::GetAtt": [ "simulatormicroservices752C24A5", "Arn", ], }, "/invocations", ], ], }, }, "MethodResponses": [ { "ResponseModels": { "application/json": "Empty", }, "StatusCode": "200", }, ], "RequestParameters": { "method.request.querystring.nextToken": false, }, "RequestValidatorId": { "Ref": "APIApiRequestValidatorC6EB6FA1", }, "ResourceId": { "Ref": "APIIoTDeviceSimulatorApisimulationsimidC20C5A22", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APIIoTDeviceSimulatorApisimulationsimidC20C5A22": { "Properties": { "ParentId": { "Ref": "APIIoTDeviceSimulatorApisimulationAB87A18B", }, "PathPart": "{simid}", "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Resource", }, "APIIoTDeviceSimulatorApisimulationsimidOPTIONS3A8ADE0C": { "Properties": { "AuthorizationType": "NONE", "HttpMethod": "OPTIONS", "Integration": { "IntegrationResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": "'Authorization,Content-Type,X-Amz-Date,X-Amz-Security-Token,X-Api-Key'", "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE,OPTIONS'", "method.response.header.Access-Control-Allow-Origin": "'*'", }, "StatusCode": "200", }, ], "RequestTemplates": { "application/json": "{ statusCode: 200 }", }, "Type": "MOCK", }, "MethodResponses": [ { "ResponseParameters": { "method.response.header.Access-Control-Allow-Headers": true, "method.response.header.Access-Control-Allow-Methods": true, "method.response.header.Access-Control-Allow-Origin": true, }, "StatusCode": "200", }, ], "ResourceId": { "Ref": "APIIoTDeviceSimulatorApisimulationsimidC20C5A22", }, "RestApiId": { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, }, "Type": "AWS::ApiGateway::Method", }, "APILogsB6A8DF10": { "DeletionPolicy": "Delete", "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W84", "reason": "CloudWatch Logs are already encrypted by default.", }, ], }, }, "Properties": { "RetentionInDays": 90, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::Logs::LogGroup", "UpdateReplacePolicy": "Delete", }, "AppRegistryAssociation": { "Properties": { "Application": { "Fn::GetAtt": [ "ApplicationD9CED6CE", "Id", ], }, "Resource": { "Ref": "AWS::StackId", }, "ResourceType": "CFN_STACK", }, "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", }, "ApplicationD9CED6CE": { "Properties": { "Description": { "Fn::Join": [ "", [ "(", { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, ") - ", { "Fn::FindInMap": [ "Solution", "Config", "SolutionName", ], }, " Version ", { "Fn::FindInMap": [ "Solution", "Config", "Version", ], }, ], ], }, "Name": { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "SolutionName", ], }, { "Ref": "AWS::Region", }, { "Ref": "AWS::AccountId", }, { "Ref": "AWS::StackName", }, ], ], }, "Tags": { "SolutionId": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, "Solutions:ApplicationType": "AWS-Solutions", "Solutions:SolutionID": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, "Solutions:SolutionName": { "Fn::FindInMap": [ "Solution", "Config", "SolutionName", ], }, "Solutions:SolutionVersion": { "Fn::FindInMap": [ "Solution", "Config", "Version", ], }, }, }, "Type": "AWS::ServiceCatalogAppRegistry::Application", }, "CommonResourcesCloudWatchLogsPolicyB8257A4C": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":logs:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":log-group:/aws/lambda/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "CommonResourcesCloudWatchLogsPolicyB8257A4C", "Roles": [ { "Ref": "CustomResourcesHelperLambdaRole9A7E3677", }, { "Ref": "simulatorEngineLambdaRoleE774CD29", }, { "Ref": "simulatorMicroservicesRole0AC1A17A", }, ], }, "Type": "AWS::IAM::Policy", }, "CommonResourcesLogBucketFC1ABCC9": { "DeletionPolicy": "Retain", "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W35", "reason": "This bucket is to store S3 logs, so it does not require access logs.", }, { "id": "W51", "reason": "This bucket is to store S3 logs, so it does not require S3 policy.", }, ], }, }, "Properties": { "AccessControl": "LogDeliveryWrite", "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "OwnershipControls": { "Rules": [ { "ObjectOwnership": "ObjectWriter", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConsoleDistributionCloudFrontDistribution725A4837": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W70", "reason": "Since the distribution uses the CloudFront domain name, CloudFront automatically sets the security policy to TLSv1 regardless of the value of MinimumProtocolVersion", }, ], }, }, "Properties": { "DistributionConfig": { "Comment": "IoT Device Simulator Distribution", "CustomErrorResponses": [ { "ErrorCode": 403, "ResponseCode": 200, "ResponsePagePath": "/index.html", }, { "ErrorCode": 404, "ResponseCode": 200, "ResponsePagePath": "/index.html", }, ], "DefaultCacheBehavior": { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "TargetOriginId": "TestDLTStackConsoleDistributionCloudFrontDistributionOrigin1BAEFFEA9", "ViewerProtocolPolicy": "redirect-to-https", }, "DefaultRootObject": "index.html", "Enabled": true, "HttpVersion": "http2", "IPV6Enabled": true, "Logging": { "Bucket": { "Fn::GetAtt": [ "CommonResourcesLogBucketFC1ABCC9", "RegionalDomainName", ], }, "Prefix": "console-cf/", }, "Origins": [ { "DomainName": { "Fn::GetAtt": [ "ConsoleDistributionS3Bucket51F4E4E5", "RegionalDomainName", ], }, "Id": "TestDLTStackConsoleDistributionCloudFrontDistributionOrigin1BAEFFEA9", "S3OriginConfig": { "OriginAccessIdentity": { "Fn::Join": [ "", [ "origin-access-identity/cloudfront/", { "Ref": "ConsoleDistributionCloudFrontDistributionOrigin1S3OriginD5D71BC0", }, ], ], }, }, }, ], }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::CloudFront::Distribution", }, "ConsoleDistributionCloudFrontDistributionOrigin1S3OriginD5D71BC0": { "Properties": { "CloudFrontOriginAccessIdentityConfig": { "Comment": "Identity for TestDLTStackConsoleDistributionCloudFrontDistributionOrigin1BAEFFEA9", }, }, "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", }, "ConsoleDistributionS3Bucket51F4E4E5": { "DeletionPolicy": "Retain", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "LifecycleConfiguration": { "Rules": [ { "NoncurrentVersionTransitions": [ { "StorageClass": "GLACIER", "TransitionInDays": 90, }, ], "Status": "Enabled", }, ], }, "LoggingConfiguration": { "DestinationBucketName": { "Ref": "CommonResourcesLogBucketFC1ABCC9", }, "LogFilePrefix": "console-s3/", }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConsoleDistributionS3BucketPolicy0C20C26B": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "F16", "reason": "Public website bucket policy requires a wildcard principal", }, ], }, }, "Properties": { "Bucket": { "Ref": "ConsoleDistributionS3Bucket51F4E4E5", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConsoleDistributionS3Bucket51F4E4E5", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConsoleDistributionS3Bucket51F4E4E5", "Arn", ], }, "/*", ], ], }, ], }, { "Action": "s3:GetObject", "Effect": "Allow", "Principal": { "CanonicalUser": { "Fn::GetAtt": [ "ConsoleDistributionCloudFrontDistributionOrigin1S3OriginD5D71BC0", "S3CanonicalUserId", ], }, }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConsoleDistributionS3Bucket51F4E4E5", "Arn", ], }, "/*", ], ], }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConsoleIDSIoTPolicy51CF0454": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W11", "reason": "Cannot specify the resource to attach policy to identity.", }, ], }, }, "Properties": { "PolicyDocument": { "Statement": [ { "Action": "iot:Connect", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":client/*", ], ], }, }, { "Action": "iot:Subscribe", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":topicfilter/*", ], ], }, }, { "Action": "iot:Receive", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":topic/*", ], ], }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IoT::Policy", }, "ConsoleIdentityPool389115C6": { "Properties": { "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { "ClientId": { "Ref": "ConsoleUserPoolClient72810FD1", }, "ProviderName": { "Fn::GetAtt": [ "ConsoleUserPoolEC556DE1", "ProviderName", ], }, "ServerSideTokenCheck": false, }, ], }, "Type": "AWS::Cognito::IdentityPool", }, "ConsoleIdentityPoolAuthenticatedRole8F32DA79": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W11", "reason": "iot:AttachPrincipalPolicy does not allow for resource specification", }, ], }, }, "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated", }, "StringEquals": { "cognito-identity.amazonaws.com:aud": { "Ref": "ConsoleIdentityPool389115C6", }, }, }, "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Description": { "Fn::Join": [ "", [ { "Ref": "AWS::StackName", }, " Identity Pool authenticated role", ], ], }, "Policies": [ { "PolicyDocument": { "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":execute-api:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":", { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, "/prod/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ExecuteApiPolicy", }, { "PolicyDocument": { "Statement": [ { "Action": [ "geo:SearchPlaceIndexForText", "geo:GetMapGlyphs", "geo:GetMapSprites", "geo:GetMapStyleDescriptor", "geo:SearchPlaceIndexForPosition", "execute-api:Invoke", "geo:GetMapTile", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "IotDeviceSimulatorMap", "MapArn", ], }, { "Fn::GetAtt": [ "IotDeviceSimulatorPlaceIndex", "IndexArn", ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "LocationServicePolicy", }, { "PolicyDocument": { "Statement": [ { "Action": "iot:AttachPrincipalPolicy", "Effect": "Allow", "Resource": "*", }, { "Action": "iot:Connect", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":client/*", ], ], }, }, { "Action": "iot:Subscribe", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":topicfilter/*", ], ], }, }, { "Action": "iot:Receive", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":topic/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "IoTPolicy", }, ], "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "ConsoleIdentityPoolRoleAttachement8552A306": { "Properties": { "IdentityPoolId": { "Ref": "ConsoleIdentityPool389115C6", }, "Roles": { "authenticated": { "Fn::GetAtt": [ "ConsoleIdentityPoolAuthenticatedRole8F32DA79", "Arn", ], }, }, }, "Type": "AWS::Cognito::IdentityPoolRoleAttachment", }, "ConsoleUser3BA0F436": { "Properties": { "DesiredDeliveryMediums": [ "EMAIL", ], "ForceAliasCreation": true, "UserAttributes": [ { "Name": "email", "Value": { "Ref": "UserEmail", }, }, { "Name": "email_verified", "Value": "true", }, ], "UserPoolId": { "Ref": "ConsoleUserPoolEC556DE1", }, "Username": { "Ref": "UserEmail", }, }, "Type": "AWS::Cognito::UserPoolUser", }, "ConsoleUserPoolClient72810FD1": { "Properties": { "AllowedOAuthFlows": [ "implicit", "code", ], "AllowedOAuthFlowsUserPoolClient": true, "AllowedOAuthScopes": [ "profile", "phone", "email", "openid", "aws.cognito.signin.user.admin", ], "CallbackURLs": [ "https://example.com", ], "ClientName": { "Fn::Join": [ "", [ { "Ref": "AWS::StackName", }, "-userpool-client", ], ], }, "GenerateSecret": false, "PreventUserExistenceErrors": "ENABLED", "RefreshTokenValidity": 1440, "SupportedIdentityProviders": [ "COGNITO", ], "TokenValidityUnits": { "RefreshToken": "minutes", }, "UserPoolId": { "Ref": "ConsoleUserPoolEC556DE1", }, }, "Type": "AWS::Cognito::UserPoolClient", }, "ConsoleUserPoolEC556DE1": { "DeletionPolicy": "Delete", "Properties": { "AccountRecoverySetting": { "RecoveryMechanisms": [ { "Name": "verified_phone_number", "Priority": 1, }, { "Name": "verified_email", "Priority": 2, }, ], }, "AdminCreateUserConfig": { "AllowAdminCreateUserOnly": true, "InviteMessageTemplate": { "EmailMessage": { "Fn::Join": [ "", [ "

You are invited to join IoT Device Simulator.
https://", { "Fn::GetAtt": [ "ConsoleDistributionCloudFrontDistribution725A4837", "DomainName", ], }, "

Please sign in to IoT Device Simulator using the temporary credentials below:
Username: {username}
Password: {####}

", ], ], }, "EmailSubject": "[IoT Device Simulator] Login information", }, }, "AutoVerifiedAttributes": [ "email", ], "EmailVerificationMessage": "The verification code to your new account is {####}", "EmailVerificationSubject": "Verify your new account", "Policies": { "PasswordPolicy": { "MinimumLength": 12, "RequireLowercase": true, "RequireNumbers": true, "RequireSymbols": true, "RequireUppercase": true, }, }, "SmsVerificationMessage": "The verification code to your new account is {####}", "UserPoolAddOns": { "AdvancedSecurityMode": "ENFORCED", }, "UserPoolName": { "Fn::Join": [ "", [ { "Ref": "AWS::StackName", }, "-user-pool", ], ], }, "UserPoolTags": { "SolutionId": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, "UsernameAttributes": [ "email", ], "VerificationMessageTemplate": { "DefaultEmailOption": "CONFIRM_WITH_CODE", "EmailMessage": "The verification code to your new account is {####}", "EmailSubject": "Verify your new account", "SmsMessage": "The verification code to your new account is {####}", }, }, "Type": "AWS::Cognito::UserPool", "UpdateReplacePolicy": "Delete", }, "CustomResourcesConsoleConfig312242CD": { "DeletionPolicy": "Delete", "Properties": { "ConfigFileName": "aws_config.js", "DestinationBucket": { "Ref": "ConsoleDistributionS3Bucket51F4E4E5", }, "Resource": "CreateConfig", "ServiceToken": { "Fn::GetAtt": [ "CustomResourcesHelperLambda2682DCBF", "Arn", ], }, "configObj": { "Fn::Join": [ "", [ "{"aws_iot_endpoint":"", { "Fn::GetAtt": [ "CustomResourcesEndpointAddressF8CE08A0", "IOT_ENDPOINT", ], }, "","API":{"endpoints":[{"name":"ids","endpoint":"https://", { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, ".execute-api.", { "Ref": "AWS::Region", }, ".amazonaws.com/prod","region":"", { "Ref": "AWS::Region", }, ""}]},"Auth":{"identityPoolId":"", { "Ref": "ConsoleIdentityPool389115C6", }, "","region":"", { "Ref": "AWS::Region", }, "","userPoolId":"", { "Ref": "ConsoleUserPoolEC556DE1", }, "","userPoolWebClientId":"", { "Ref": "ConsoleUserPoolClient72810FD1", }, ""},"aws_iot_policy_name":"", { "Ref": "ConsoleIDSIoTPolicy51CF0454", }, "","aws_project_region":"", { "Ref": "AWS::Region", }, "","geo":{"AmazonLocationService":{"region":"", { "Ref": "AWS::Region", }, "","maps":{"items":{"", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "REDUCED_STACK_NAME", ], }, "-IotDeviceSimulatorMap-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, "":{"style":"VectorEsriNavigation"}},"default":"", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "REDUCED_STACK_NAME", ], }, "-IotDeviceSimulatorMap-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, ""},"search_indices":{"items":["", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "REDUCED_STACK_NAME", ], }, "-IoTDeviceSimulatorPlaceIndex-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, ""],"default":"", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "REDUCED_STACK_NAME", ], }, "-IoTDeviceSimulatorPlaceIndex-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, ""}}}}", ], ], }, }, "Type": "Custom::CopyConfigFiles", "UpdateReplacePolicy": "Delete", }, "CustomResourcesCopyConsoleFiles52D180C5": { "DeletionPolicy": "Delete", "Properties": { "DestinationBucket": { "Ref": "ConsoleDistributionS3Bucket51F4E4E5", }, "ManifestFile": "site-manifest.json", "Resource": "CopyS3Assets", "ServiceToken": { "Fn::GetAtt": [ "CustomResourcesHelperLambda2682DCBF", "Arn", ], }, "SourceBucket": { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, "SourcePrefix": { "Fn::FindInMap": [ "Solution", "Config", "KeyPrefix", ], }, }, "Type": "Custom::CopyConsoleFiles", "UpdateReplacePolicy": "Delete", }, "CustomResourcesCopyRouteFiles4A609857": { "DeletionPolicy": "Delete", "Properties": { "DestinationBucket": { "Ref": "storageRoutesBucketBB9EF62B", }, "ManifestFile": "routes-manifest.json", "Resource": "CopyS3Assets", "ServiceToken": { "Fn::GetAtt": [ "CustomResourcesHelperLambda2682DCBF", "Arn", ], }, "SourceBucket": { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, "SourcePrefix": { "Fn::FindInMap": [ "Solution", "Config", "KeyPrefix", ], }, }, "Type": "Custom::CopyRouteFiles", "UpdateReplacePolicy": "Delete", }, "CustomResourcesCustomResourceLambdaIoTPolicy2D60FB8D": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W12", "reason": "To connect IoT and attach IoT policy to Cognito identity cannot speficy the specific resources.", }, ], }, }, "Properties": { "PolicyDocument": { "Statement": [ { "Action": "iot:DetachPolicy", "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "CustomResourceLambdaIoTPolicy", "Roles": [ { "Ref": "CustomResourcesHelperLambdaRole9A7E3677", }, ], }, "Type": "AWS::IAM::Policy", }, "CustomResourcesDetachIoTPolicyFE439AD7": { "DeletionPolicy": "Delete", "Properties": { "IotPolicyName": { "Ref": "ConsoleIDSIoTPolicy51CF0454", }, "Resource": "DetachIoTPolicy", "ServiceToken": { "Fn::GetAtt": [ "CustomResourcesHelperLambda2682DCBF", "Arn", ], }, }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "CustomResourcesEndpointAddressF8CE08A0": { "DeletionPolicy": "Delete", "Properties": { "Resource": "DescribeIoTEndpoint", "ServiceToken": { "Fn::GetAtt": [ "CustomResourcesHelperLambda2682DCBF", "Arn", ], }, }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "CustomResourcesHelperLambda2682DCBF": { "DependsOn": [ "CommonResourcesCloudWatchLogsPolicyB8257A4C", "CustomResourcesHelperLambdaRoleDefaultPolicyD48B1BDC", "CustomResourcesHelperLambdaRole9A7E3677", ], "Properties": { "Code": { "S3Bucket": { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, "S3Key": { "Fn::Join": [ "", [ { "Fn::FindInMap": [ "Solution", "Config", "KeyPrefix", ], }, "/custom-resource.zip", ], ], }, }, "Description": "IoT Device Simulator custom resource function", "Environment": { "Variables": { "SOLUTION_ID": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, "SOLUTION_VERSION": { "Fn::FindInMap": [ "Solution", "Config", "Version", ], }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomResourcesHelperLambdaRole9A7E3677", "Arn", ], }, "Runtime": "nodejs18.x", "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], "Timeout": 240, }, "Type": "AWS::Lambda::Function", }, "CustomResourcesHelperLambdaRole9A7E3677": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W11", "reason": "iot:DescribeEndpoint cannot specify the resource.", }, ], }, }, "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Path": "/", "Policies": [ { "PolicyDocument": { "Statement": [ { "Action": "iot:DescribeEndpoint", "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "customResourcePolicy", }, ], "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "CustomResourcesHelperLambdaRoleDefaultPolicyD48B1BDC": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":s3:::", { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, ], ], }, { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":s3:::", { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, "/", { "Fn::FindInMap": [ "Solution", "Config", "KeyPrefix", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConsoleDistributionS3Bucket51F4E4E5", "Arn", ], }, "/*", ], ], }, }, { "Action": [ "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "storageRoutesBucketBB9EF62B", "Arn", ], }, "/*", ], ], }, }, { "Action": "iot:ListTargetsForPolicy", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":policy/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "CustomResourcesHelperLambdaRoleDefaultPolicyD48B1BDC", "Roles": [ { "Ref": "CustomResourcesHelperLambdaRole9A7E3677", }, ], }, "Type": "AWS::IAM::Policy", }, "CustomResourcesUUID1685434C": { "DeletionPolicy": "Delete", "Properties": { "Resource": "CreateUUID", "ServiceToken": { "Fn::GetAtt": [ "CustomResourcesHelperLambda2682DCBF", "Arn", ], }, "StackName": { "Ref": "AWS::StackName", }, }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "DefaultApplicationAttributeGroup41AD7209": { "Properties": { "Attributes": { "applicationType": "AWS-Solutions", "solutionID": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, "solutionName": { "Fn::FindInMap": [ "Solution", "Config", "SolutionName", ], }, "version": { "Fn::FindInMap": [ "Solution", "Config", "Version", ], }, }, "Description": "Attribute group for solution information", "Name": { "Fn::Join": [ "-", [ "S01", { "Ref": "AWS::Region", }, { "Ref": "AWS::StackName", }, ], ], }, "Tags": { "SolutionId": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, }, "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroup", }, "DefaultApplicationAttributeGroupApplicationAttributeGroupAssociation79c82458105c95BE0F88": { "Properties": { "Application": { "Fn::GetAtt": [ "ApplicationD9CED6CE", "Id", ], }, "AttributeGroup": { "Fn::GetAtt": [ "DefaultApplicationAttributeGroup41AD7209", "Id", ], }, }, "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", }, "IotDeviceSimulatorMap": { "Properties": { "Configuration": { "Style": "VectorEsriNavigation", }, "MapName": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "REDUCED_STACK_NAME", ], }, "-IotDeviceSimulatorMap-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, ], ], }, "PricingPlan": "RequestBasedUsage", }, "Type": "AWS::Location::Map", }, "IotDeviceSimulatorPlaceIndex": { "Properties": { "DataSource": "Esri", "IndexName": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "REDUCED_STACK_NAME", ], }, "-IoTDeviceSimulatorPlaceIndex-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, ], ], }, "PricingPlan": "RequestBasedUsage", }, "Type": "AWS::Location::PlaceIndex", }, "simulatorEngineLambda17530EFE": { "DependsOn": [ "simulatorEngineLambdaRoleDefaultPolicy9ECE33DE", "simulatorEngineLambdaRoleE774CD29", ], "Properties": { "Code": { "S3Bucket": { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, "S3Key": { "Fn::Join": [ "", [ { "Fn::FindInMap": [ "Solution", "Config", "KeyPrefix", ], }, "/simulator.zip", ], ], }, }, "Description": "IoT Device Simulator function", "Environment": { "Variables": { "IOT_ENDPOINT": { "Fn::GetAtt": [ "CustomResourcesEndpointAddressF8CE08A0", "IOT_ENDPOINT", ], }, "ROUTE_BUCKET": { "Ref": "storageRoutesBucketBB9EF62B", }, "SEND_ANONYMOUS_METRIC": { "Fn::FindInMap": [ "Solution", "Config", "SendAnonymousUsage", ], }, "SIM_TABLE": { "Ref": "storageIDSSimulationsTable052FC452", }, "SOLUTION_ID": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, "UUID": { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UUID", ], }, "VERSION": { "Fn::FindInMap": [ "Solution", "Config", "Version", ], }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "simulatorEngineLambdaRoleE774CD29", "Arn", ], }, "Runtime": "nodejs18.x", "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "simulatorEngineLambdaRoleDefaultPolicy9ECE33DE": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "storageRoutesBucketBB9EF62B", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "storageRoutesBucketBB9EF62B", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "simulatorEngineLambdaRoleDefaultPolicy9ECE33DE", "Roles": [ { "Ref": "simulatorEngineLambdaRoleE774CD29", }, ], }, "Type": "AWS::IAM::Policy", }, "simulatorEngineLambdaRoleE774CD29": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Path": "/", "Policies": [ { "PolicyDocument": { "Statement": [ { "Action": "s3:GetObject", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "storageRoutesBucketBB9EF62B", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "S3Policy", }, { "PolicyDocument": { "Statement": [ { "Action": "dynamodb:GetItem", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "storageIDSSimulationsTable052FC452", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "DynamoDBPolicy", }, { "PolicyDocument": { "Statement": [ { "Action": "iot:Publish", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":iot:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":topic/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "IoTPolicy", }, ], "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "simulatorMicroservicesRole0AC1A17A": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Path": "/", "Policies": [ { "PolicyDocument": { "Statement": [ { "Action": [ "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:BatchGetItem", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "storageIDSSimulationsTable052FC452", "Arn", ], }, { "Fn::GetAtt": [ "storageIDSDeviceTypesTable01F2060C", "Arn", ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "DynamoDBPolicy", }, ], "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "simulatorMicroservicesRoleDefaultPolicy8F21950B": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Ref": "simulatorStepFunctionsStateMachineA2150DAB", }, }, ], "Version": "2012-10-17", }, "PolicyName": "simulatorMicroservicesRoleDefaultPolicy8F21950B", "Roles": [ { "Ref": "simulatorMicroservicesRole0AC1A17A", }, ], }, "Type": "AWS::IAM::Policy", }, "simulatorStepFunctionsExecutionAbortedAlarmC24E8F0E": { "Properties": { "AlarmDescription": "Alarm for the number of executions that aborted exceeded the threshold of 1. ", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "StateMachineArn", "Value": { "Ref": "simulatorStepFunctionsStateMachineA2150DAB", }, }, ], "EvaluationPeriods": 1, "MetricName": "ExecutionsAborted", "Namespace": "AWS/States", "Period": 300, "Statistic": "Maximum", "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "simulatorStepFunctionsExecutionFailedAlarmACE1FB5D": { "Properties": { "AlarmDescription": "Alarm for the number of executions that failed exceeded the threshold of 1. ", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "StateMachineArn", "Value": { "Ref": "simulatorStepFunctionsStateMachineA2150DAB", }, }, ], "EvaluationPeriods": 1, "MetricName": "ExecutionsFailed", "Namespace": "AWS/States", "Period": 300, "Statistic": "Sum", "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "simulatorStepFunctionsExecutionThrottledAlarm542D795D": { "Properties": { "AlarmDescription": "Alarm for the number of executions that throttled exceeded the threshold of 1. ", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "StateMachineArn", "Value": { "Ref": "simulatorStepFunctionsStateMachineA2150DAB", }, }, ], "EvaluationPeriods": 1, "MetricName": "ExecutionThrottled", "Namespace": "AWS/States", "Period": 300, "Statistic": "Sum", "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "simulatorStepFunctionsLogGroupF673A0C9": { "DeletionPolicy": "Retain", "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W84", "reason": "KMS encryption unnecessary for log group", }, ], }, }, "Properties": { "LogGroupName": { "Fn::Join": [ "", [ "/aws/vendedlogs/states/", { "Ref": "AWS::StackName", }, "-simulatorStepFunctionsLogGroup-", { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UNIQUE_SUFFIX", ], }, ], ], }, "RetentionInDays": 365, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::Logs::LogGroup", "UpdateReplacePolicy": "Retain", }, "simulatorStepFunctionsStateMachineA2150DAB": { "DeletionPolicy": "Delete", "DependsOn": [ "simulatorStepFunctionsStateMachineRoleDefaultPolicy02630DD3", "simulatorStepFunctionsStateMachineRole6FCF7FE0", ], "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W11", "reason": "CloudWatch logs actions do not support resource level permissions", }, { "id": "W12", "reason": "CloudWatch logs actions do not support resource level permissions", }, ], }, }, "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"getDeviceTypeMap","States":{"getDeviceTypeMap":{"Type":"Map","ResultPath":"$.simulation.devices","Next":"simulatorInvoke","Parameters":{"typeId.$":"$$.Map.Item.Value.typeId","amount.$":"$$.Map.Item.Value.amount"},"Iterator":{"StartAt":"getDeviceTypeInfo","States":{"getDeviceTypeInfo":{"End":true,"Type":"Task","ResultPath":"$.info","ResultSelector":{"name.$":"$.Item.name","topic.$":"$.Item.topic","payload.$":"$.Item.payload"},"Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::dynamodb:getItem","Parameters":{"Key":{"typeId":{"S.$":"$.typeId"}},"TableName":"", { "Ref": "storageIDSDeviceTypesTable01F2060C", }, "","ConsistentRead":false}}}},"ItemsPath":"$.simulation.devices","MaxConcurrency":0},"simulatorInvoke":{"Next":"devicesRunning?","Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2}],"Catch":[{"ErrorEquals":["States.ALL"],"ResultPath":"$.error","Next":"UpdateSimTable"}],"Type":"Task","OutputPath":"$.Payload","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::lambda:invoke","Parameters":{"FunctionName":"", { "Fn::GetAtt": [ "simulatorEngineLambda17530EFE", "Arn", ], }, "","Payload.$":"$"}},"devicesRunning?":{"Type":"Choice","Choices":[{"Variable":"$.options.restart","BooleanEquals":true,"Next":"simulatorInvoke"}],"Default":"UpdateSimTable"},"UpdateSimTable":{"Next":"Done","Catch":[{"ErrorEquals":["DynamoDB.ConditionalCheckFailedException"],"Next":"Done"}],"Type":"Task","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::dynamodb:updateItem","Parameters":{"Key":{"simId":{"S.$":"$.simulation.simId"}},"TableName":"", { "Ref": "storageIDSSimulationsTable052FC452", }, "","ConditionExpression":"attribute_exists(simId)","ExpressionAttributeValues":{":stage":{"S":"sleeping"},":time":{"S.$":"$$.State.EnteredTime"}},"UpdateExpression":"SET stage = :stage, updatedAt = :time"}},"Done":{"Type":"Succeed"}}}", ], ], }, "LoggingConfiguration": { "Destinations": [ { "CloudWatchLogsLogGroup": { "LogGroupArn": { "Fn::GetAtt": [ "simulatorStepFunctionsLogGroupF673A0C9", "Arn", ], }, }, }, ], "IncludeExecutionData": false, "Level": "ALL", }, "RoleArn": { "Fn::GetAtt": [ "simulatorStepFunctionsStateMachineRole6FCF7FE0", "Arn", ], }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "simulatorStepFunctionsStateMachineRole6FCF7FE0": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "simulatorStepFunctionsStateMachineRoleDefaultPolicy02630DD3": { "Metadata": { "cfn_nag": { "rules_to_suppress": [ { "id": "W12", "reason": "The 'LogDelivery' actions do not support resource-level authorizations", }, ], }, }, "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", ], "Effect": "Allow", "Resource": "*", }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "simulatorEngineLambda17530EFE", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "simulatorEngineLambda17530EFE", "Arn", ], }, ":*", ], ], }, ], }, { "Action": "dynamodb:UpdateItem", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":dynamodb:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":table/", { "Ref": "storageIDSSimulationsTable052FC452", }, ], ], }, }, { "Action": "dynamodb:GetItem", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":dynamodb:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":table/", { "Ref": "storageIDSDeviceTypesTable01F2060C", }, ], ], }, }, { "Action": [ "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":logs:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "simulatorStepFunctionsStateMachineRoleDefaultPolicy02630DD3", "Roles": [ { "Ref": "simulatorStepFunctionsStateMachineRole6FCF7FE0", }, ], }, "Type": "AWS::IAM::Policy", }, "simulatormicroservices752C24A5": { "DependsOn": [ "simulatorMicroservicesRoleDefaultPolicy8F21950B", "simulatorMicroservicesRole0AC1A17A", ], "Properties": { "Code": { "S3Bucket": { "Fn::Join": [ "-", [ { "Fn::FindInMap": [ "Solution", "Config", "S3Bucket", ], }, { "Ref": "AWS::Region", }, ], ], }, "S3Key": { "Fn::Join": [ "", [ { "Fn::FindInMap": [ "Solution", "Config", "KeyPrefix", ], }, "/microservices.zip", ], ], }, }, "Description": "IoT Device Simulator microservices function", "Environment": { "Variables": { "DEVICE_TYPES_TBL": { "Ref": "storageIDSDeviceTypesTable01F2060C", }, "SEND_ANONYMOUS_METRIC": { "Fn::FindInMap": [ "Solution", "Config", "SendAnonymousUsage", ], }, "SIMULATIONS_TBL": { "Ref": "storageIDSSimulationsTable052FC452", }, "SIM_STEP_FUNCTION": { "Ref": "simulatorStepFunctionsStateMachineA2150DAB", }, "SOLUTION_ID": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, "UUID": { "Fn::GetAtt": [ "CustomResourcesUUID1685434C", "UUID", ], }, "VERSION": { "Fn::FindInMap": [ "Solution", "Config", "Version", ], }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "simulatorMicroservicesRole0AC1A17A", "Arn", ], }, "Runtime": "nodejs18.x", "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], "Timeout": 60, }, "Type": "AWS::Lambda::Function", }, "simulatormicroservicesApiLambdaInvokePermission7E703994": { "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "simulatormicroservices752C24A5", "Arn", ], }, "Principal": "apigateway.amazonaws.com", "SourceArn": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":execute-api:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":", { "Ref": "APIIoTDeviceSimulatorApi789EED4C", }, "/*/*/*", ], ], }, }, "Type": "AWS::Lambda::Permission", }, "storageIDSDeviceTypesTable01F2060C": { "DeletionPolicy": "Retain", "Properties": { "AttributeDefinitions": [ { "AttributeName": "typeId", "AttributeType": "S", }, ], "BillingMode": "PAY_PER_REQUEST", "KeySchema": [ { "AttributeName": "typeId", "KeyType": "HASH", }, ], "PointInTimeRecoverySpecification": { "PointInTimeRecoveryEnabled": true, }, "SSESpecification": { "SSEEnabled": true, }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::DynamoDB::Table", "UpdateReplacePolicy": "Retain", }, "storageIDSSimulationsTable052FC452": { "DeletionPolicy": "Retain", "Properties": { "AttributeDefinitions": [ { "AttributeName": "simId", "AttributeType": "S", }, ], "BillingMode": "PAY_PER_REQUEST", "KeySchema": [ { "AttributeName": "simId", "KeyType": "HASH", }, ], "PointInTimeRecoverySpecification": { "PointInTimeRecoveryEnabled": true, }, "SSESpecification": { "SSEEnabled": true, }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::DynamoDB::Table", "UpdateReplacePolicy": "Retain", }, "storageRoutesBucketBB9EF62B": { "DeletionPolicy": "Retain", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "LoggingConfiguration": { "DestinationBucketName": { "Ref": "CommonResourcesLogBucketFC1ABCC9", }, "LogFilePrefix": "routes-bucket-access/", }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "SolutionId", "Value": { "Fn::FindInMap": [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "storageRoutesBucketPolicy68A7F4A8": { "Properties": { "Bucket": { "Ref": "storageRoutesBucketBB9EF62B", }, "PolicyDocument": { "Statement": [ { "Action": "*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "storageRoutesBucketBB9EF62B", "Arn", ], }, "/*", ], ], }, { "Fn::GetAtt": [ "storageRoutesBucketBB9EF62B", "Arn", ], }, ], "Sid": "HttpsOnly", }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, }, } `;