{
  "Description": "(SO0284-ComputeStack) innovation-sandbox-on-aws v1.3.0",
  "Metadata": {
    "AWS::CloudFormation::Interface": {
      "ParameterLabels": {
        "Namespace": {
          "default": "Namespace"
        },
        "OrgMgtAccountId": {
          "default": "Org Management Account Id"
        },
        "IdcAccountId": {
          "default": "IDC Account Id"
        },
        "AllowListedIPRanges": {
          "default": "Allow Listed IP Ranges"
        },
        "UseStableTagging": {
          "default": "Use Stable Tagging"
        },
        "AcceptSolutionTermsOfUse": {
          "default": "Accept Solution Terms of Use"
        },
        "CustomDomainName": {
          "default": "Custom Domain Name (Optional)"
        },
        "CustomDomainCertificateArn": {
          "default": "Custom Domain Certificate ARN (Optional)"
        }
      },
      "ParameterGroups": [
        {
          "Label": {
            "default": "Compute Stack Configuration"
          },
          "Parameters": [
            "Namespace",
            "OrgMgtAccountId",
            "IdcAccountId",
            "AllowListedIPRanges",
            "UseStableTagging",
            "AcceptSolutionTermsOfUse",
            "CustomDomainName",
            "CustomDomainCertificateArn"
          ]
        }
      ]
    }
  },
  "Parameters": {
    "Namespace": {
      "Type": "String",
      "Default": "myisb",
      "AllowedPattern": "^[0-9a-zA-Z]{3,8}$",
      "Description": "The namespace for this deployment of Innovation Sandbox (must be the same for all member stacks). Alphanumeric characters of length between 3 and 8"
    },
    "OrgMgtAccountId": {
      "Type": "String",
      "AllowedPattern": "^[0-9]{12}$",
      "Description": "The AWS Account Id of the org's management account where the account pool stack is deployed"
    },
    "IdcAccountId": {
      "Type": "String",
      "AllowedPattern": "^[0-9]{12}$",
      "Description": "The AWS Account Id where the IAM Identity Center is configured"
    },
    "AllowListedIPRanges": {
      "Type": "CommaDelimitedList",
      "Default": "0.0.0.0/1,128.0.0.0/1",
      "AllowedPattern": "^((\\d{1,3}\\.){3}\\d{1,3}/([0-9]|[1-2][0-9]|3[0-2]))(\\s*,\\s*((\\d{1,3}\\.){3}\\d{1,3}/([0-9]|[1-2][0-9]|3[0-2])))*$",
      "Description": "Comma separated list of CIDR ranges that allow access to the API. To allow all the entire internet, leave the default 0.0.0.0/1,128.0.0.0/1"
    },
    "UseStableTagging": {
      "Type": "String",
      "Default": "Yes",
      "AllowedValues": [
        "Yes",
        "No"
      ],
      "Description": "Automatically use the most up to date and secure account cleaner image up until the next minor release. Selecting 'No' will pull the image as originally released, without any security updates."
    },
    "AcceptSolutionTermsOfUse": {
      "Type": "String",
      "AllowedPattern": "^Accept$",
      "ConstraintDescription": "You must enter \"Accept\" to deploy this template",
      "Description": "The Innovation Sandbox on AWS (\"ISB\") allows you to experiment with AWS resources in non-production accounts. Customers are responsible for making their own independent assessment of the information in this document. This document: (a) is for informational purposes only, (b) represents AWS current product offerings and practices, which are subject to change without notice, and (c) does not create any commitments or assurances from AWS and its affiliates, suppliers or licensors. AWS products or services including ISB are provided \"as is\" and AWS does not make any warranties, representations, or conditions of any kind, whether express or implied about ISB. AWS responsibilities and liabilities to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers.\n\nYou assume all responsibility for your use of ISB and making your own independent assessments of ISB, as well as any compliance with any additional terms, licenses, laws, rules, regulations, policies, or standards that apply to you, and, your use of ISB is subject to the AWS Shared Responsibility Model.\n\nThese Terms of Use supplement, and do not modify, any other existing agreements between you and AWS.\n\n* Non-Production Environments Only: The ISB solution is for use only for experiments in a non-production environment and may make irreversible changes to your environment, such as terminating AWS resources. It is not for use in production accounts.\n* Limitations of Cost Control Mechanisms: AWS makes no guarantees that usage cost will never exceed the budget limit set in ISB, and ISB may not prevent spend from going over the budget in all cases.\n* May Not Terminate All AWS Resources: In certain limited situations, ISB may not delete all AWS Resources and AWS will attempt to notify you that manual intervention is necessary for these accounts. These accounts could continue to incur costs until manually resolved by you. AWS makes no guarantees regarding the automatic termination of these resources by ISB and you are responsible for all fees in cases where ISB does not automatically terminate resources.\n* No Third-Party Use: ISB allows you to provide your own AWS accounts to internal end-users for learning and experimentation. You may not provide your AWS accounts to third-party users (such as other companies or public users) as this may grant third-party users access to your AWS resources.\n* Manually Adding New Users: If you have manually added additional users to an AWS account which has already been granted to a sandbox user by ISB, it is your responsibility to ensure deletion of the user’s access after their sandbox use.\n* Fraud and Abuse Detection: You are responsible for monitoring your sandbox account to detect any cases of potential fraud, abuse, or misuse.\n\nTo proceed with the deployment, please enter \"Accept\" to confirm your agreement to these terms.\n"
    },
    "CustomDomainName": {
      "Type": "String",
      "Default": "",
      "AllowedPattern": "^$|^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}$",
      "ConstraintDescription": "Must be a single domain like isb.example.com (no https://, no path, no '*'), or empty",
      "Description": "A single fully-qualified domain to serve ISB on, e.g. isb.example.com. Provide Custom Domain Certificate ARN as well to attach it (with TLS) to the ISB CloudFront distribution. If you front ISB with your own edge/proxy, set this to your public domain and leave the certificate ARN empty. No wildcards, scheme, or path. Leave empty to use the default CloudFront URL."
    },
    "CustomDomainCertificateArn": {
      "Type": "String",
      "Default": "",
      "AllowedPattern": "^$|^arn:aws[a-zA-Z-]*:acm:us-east-1:[0-9]{12}:certificate/[0-9a-fA-F-]+$",
      "ConstraintDescription": "Must be an ACM certificate ARN in us-east-1, or empty",
      "Description": "ARN of an existing ACM certificate that covers the Custom Domain Name (a wildcard cert is fine). The certificate must be in us-east-1, because CloudFront only reads certificates from that Region regardless of where this stack is deployed. Provide this to serve the domain on the ISB CloudFront distribution. Leave empty if you terminate TLS on your own edge/proxy."
    }
  },
  "Resources": {
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleAD0AD111": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/FunctionRole/Resource"
      }
    },
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleDefaultPolicy5140CE0C": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCustomResources63629E09",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleDefaultPolicy5140CE0C",
        "Roles": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleAD0AD111"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionCE168970": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.9467086e61250d35bbedc388839ca71ed0a7fc36b52f2f64e0db64ae66526d6e.zip"
        },
        "Description": "Parses configuration passed in JSON format",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-ParseJsonConfiguration-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleAD0AD111",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleDefaultPolicy5140CE0C",
        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleAD0AD111"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/Function/Resource",
        "aws:asset:path": "asset.9467086e61250d35bbedc388839ca71ed0a7fc36b52f2f64e0db64ae66526d6e",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleAE0FBDD1": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/IsbProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleDefaultPolicy550E8662": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionCE168970",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionCE168970",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionCE168970",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleDefaultPolicy550E8662",
        "Roles": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleAE0FBDD1"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/IsbProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventD19E887B": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/IsbProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionCE168970",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "LoggingConfig": {
          "ApplicationLogLevel": "FATAL",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleAE0FBDD1",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleDefaultPolicy550E8662",
        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventServiceRoleAE0FBDD1"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/IsbProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57": {
      "Type": "Custom::ParseJsonConfiguration",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbProviderframeworkonEventD19E887B",
            "Arn"
          ]
        },
        "idcConfigParamArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":ssm:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "IdcAccountId"
              },
              ":parameter/InnovationSandbox_",
              {
                "Ref": "Namespace"
              },
              "_Idc_Configuration"
            ]
          ]
        },
        "accountPoolConfigParamArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":ssm:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "OrgMgtAccountId"
              },
              ":parameter/InnovationSandbox_",
              {
                "Ref": "Namespace"
              },
              "_AccountPool_Configuration"
            ]
          ]
        },
        "dataConfigParamArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":ssm:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":parameter/InnovationSandbox_",
              {
                "Ref": "Namespace"
              },
              "_Data_Configuration"
            ]
          ]
        },
        "namespace": {
          "Ref": "Namespace"
        },
        "forceUpdate": 1787757853907
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ParseJsonConfiguration/IsbCustomResource/Default"
      }
    },
    "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1": {
      "Type": "AWS::Lambda::LayerVersion",
      "Properties": {
        "CompatibleArchitectures": [
          "arm64"
        ],
        "CompatibleRuntimes": [
          "nodejs24.x"
        ],
        "Content": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.1f5cc6c90f95b6fb7be25037f56001dc1897d61f443e7e7d02106042e83d7cdb.zip"
        },
        "Description": "Common lib for Innovation Sandbox on AWS"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ISB-Lambda-Layer-InnovationSandbox-Compute/CommonLayerVersion/Resource",
        "aws:asset:path": "asset.1f5cc6c90f95b6fb7be25037f56001dc1897d61f443e7e7d02106042e83d7cdb",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Content"
      }
    },
    "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A": {
      "Type": "AWS::Lambda::LayerVersion",
      "Properties": {
        "CompatibleArchitectures": [
          "arm64"
        ],
        "CompatibleRuntimes": [
          "nodejs24.x"
        ],
        "Content": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.8e15abb3317296d7d4308c048fbc129062e3aa7565553a2d0f650d6e9c3801cc.zip"
        },
        "Description": "Third party runtime dependencies for Innovation Sandbox on AWS"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbSpokeConfigJsonParamResolver/ISB-Lambda-Layer-InnovationSandbox-Compute/DependenciesLayerVersion/Resource",
        "aws:asset:path": "asset.8e15abb3317296d7d4308c048fbc129062e3aa7565553a2d0f650d6e9c3801cc",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Content"
      }
    },
    "IsbKmsKeyInnovationSandboxComputeB43F03BE": {
      "Type": "AWS::KMS::Key",
      "Properties": {
        "Description": "Encryption Key for Innovation Sandbox: InnovationSandbox-Compute",
        "EnableKeyRotation": true,
        "KeyPolicy": {
          "Statement": [
            {
              "Action": "kms:*",
              "Effect": "Allow",
              "Principal": {
                "AWS": {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":iam::",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":root"
                    ]
                  ]
                }
              },
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": "logs.amazonaws.com"
              },
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              },
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey"
              ],
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  },
                  "aws:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":events:",
                        {
                          "Ref": "AWS::Region"
                        },
                        ":",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":event-bus/",
                        {
                          "Ref": "Namespace"
                        },
                        "-ISBEventBus"
                      ]
                    ]
                  },
                  "kms:EncryptionContext:aws:events:event-bus:arn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":events:",
                        {
                          "Ref": "AWS::Region"
                        },
                        ":",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":event-bus/",
                        {
                          "Ref": "Namespace"
                        },
                        "-ISBEventBus"
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              },
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": "sqs.amazonaws.com"
              },
              "Resource": "*"
            },
            {
              "Action": "kms:Decrypt",
              "Condition": {
                "ArnLike": {
                  "AWS:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":cloudfront::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":distribution/*"
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "cloudfront.amazonaws.com"
              },
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:GenerateDataKey*"
              ],
              "Condition": {
                "StringEquals": {
                  "AWS:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "delivery.logs.amazonaws.com"
              },
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbKmsKey-InnovationSandbox-Compute/Resource"
      }
    },
    "IsbKmsKeyInnovationSandboxComputeAliasA03BE0B8": {
      "Type": "AWS::KMS::Alias",
      "Properties": {
        "AliasName": {
          "Fn::Join": [
            "",
            [
              "alias/AwsSolutions/InnovationSandbox/",
              {
                "Ref": "Namespace"
              },
              "/InnovationSandbox-Compute"
            ]
          ]
        },
        "TargetKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbKmsKey-InnovationSandbox-Compute/Alias/Resource"
      }
    },
    "ISBLogGroupCustomResources63629E09": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "RetentionInDays": {
          "Fn::FindInMap": [
            "Mapping",
            "context",
            "cloudWatchLogRetentionInDays",
            {
              "DefaultValue": ""
            }
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBLogGroup-CustomResources/Resource",
        "guard": {
          "SuppressedRules": [
            "CW_LOGGROUP_RETENTION_PERIOD_CHECK"
          ]
        }
      }
    },
    "SharedParamReaderSsmReadPolicy435E9A92": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":ssm:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "IdcAccountId"
                      },
                      ":parameter/InnovationSandbox_",
                      {
                        "Ref": "Namespace"
                      },
                      "_Idc_Configuration"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":ssm:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "OrgMgtAccountId"
                      },
                      ":parameter/InnovationSandbox_",
                      {
                        "Ref": "Namespace"
                      },
                      "_AccountPool_Configuration"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":ssm:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":parameter/InnovationSandbox_",
                      {
                        "Ref": "Namespace"
                      },
                      "_Data_Configuration"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "SharedParamReaderSsmReadPolicy435E9A92",
        "Roles": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverParseJsonConfigurationFunctionRoleAD0AD111"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SharedParamReaderSsmReadPolicy/Resource"
      }
    },
    "ISBLogGroupE607F9A7": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "RetentionInDays": {
          "Fn::FindInMap": [
            "Mapping",
            "context",
            "cloudWatchLogRetentionInDays",
            {
              "DefaultValue": ""
            }
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBLogGroup/Resource",
        "guard": {
          "SuppressedRules": [
            "CW_LOGGROUP_RETENTION_PERIOD_CHECK"
          ]
        }
      }
    },
    "ISBLogGroupPolicyResourcePolicy395D72DA": {
      "Type": "AWS::Logs::ResourcePolicy",
      "Properties": {
        "PolicyDocument": {
          "Fn::Join": [
            "",
            [
              "{\"Statement\":[{\"Action\":[\"logs:CreateLogStream\",\"logs:PutLogEvents\"],\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"events.amazonaws.com\",\"delivery.logs.amazonaws.com\"]},\"Resource\":\"",
              {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              },
              "\"}],\"Version\":\"2012-10-17\"}"
            ]
          ]
        },
        "PolicyName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-ISBLogGroupPolicy"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBLogGroup/Policy/ResourcePolicy"
      }
    },
    "ISBLogGroupCleanup485A102F": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "RetentionInDays": {
          "Fn::FindInMap": [
            "Mapping",
            "context",
            "cloudWatchLogRetentionInDays",
            {
              "DefaultValue": ""
            }
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBLogGroup-Cleanup/Resource",
        "guard": {
          "SuppressedRules": [
            "CW_LOGGROUP_RETENTION_PERIOD_CHECK"
          ]
        }
      }
    },
    "DeploymentUUIDLambdaFunctionFunctionRoleDB238E11": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/FunctionRole/Resource"
      }
    },
    "DeploymentUUIDLambdaFunctionFunctionRoleDefaultPolicy7D6AE82D": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCustomResources63629E09",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DeploymentUUIDLambdaFunctionFunctionRoleDefaultPolicy7D6AE82D",
        "Roles": [
          {
            "Ref": "DeploymentUUIDLambdaFunctionFunctionRoleDB238E11"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "DeploymentUUIDLambdaFunction297287F6": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.90a11c28d2d533c4e4a7a651733050d99b71328c88ae1ea7130498d5493a1761.zip"
        },
        "Description": "Custom resource lambda provider that generates a UUID on stack creation",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-LambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "DeploymentUUIDLambdaFunctionFunctionRoleDB238E11",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "DeploymentUUIDLambdaFunctionFunctionRoleDefaultPolicy7D6AE82D",
        "DeploymentUUIDLambdaFunctionFunctionRoleDB238E11"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/Function/Resource",
        "aws:asset:path": "asset.90a11c28d2d533c4e4a7a651733050d99b71328c88ae1ea7130498d5493a1761",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRole78CDE25E": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/IsbProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRoleDefaultPolicy20766167": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DeploymentUUIDLambdaFunction297287F6",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DeploymentUUIDLambdaFunction297287F6",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "DeploymentUUIDLambdaFunction297287F6",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRoleDefaultPolicy20766167",
        "Roles": [
          {
            "Ref": "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRole78CDE25E"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/IsbProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEvent42333667": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/IsbProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "DeploymentUUIDLambdaFunction297287F6",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "LoggingConfig": {
          "ApplicationLogLevel": "FATAL",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRole78CDE25E",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRoleDefaultPolicy20766167",
        "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEventServiceRole78CDE25E"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/IsbProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "DeploymentUUIDLambdaFunctionIsbCustomResourceE707861E": {
      "Type": "Custom::DeploymentUUID",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "DeploymentUUIDLambdaFunctionIsbProviderframeworkonEvent42333667",
            "Arn"
          ]
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DeploymentUUID/LambdaFunction/IsbCustomResource/Default"
      }
    },
    "IntermediateRole6D2F2036": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Principal": {
                "AWS": {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":iam::",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":root"
                    ]
                  ]
                }
              },
              "Condition": {
                "StringEquals": {
                  "aws:PrincipalTag/aws-solutions:isb-id": {
                    "Fn::Join": [
                      "",
                      [
                        {
                          "Ref": "Namespace"
                        },
                        "_isb"
                      ]
                    ]
                  }
                }
              }
            },
            {
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Principal": {
                "Service": "cloudformation.amazonaws.com"
              },
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                },
                "ArnLike": {
                  "aws:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":cloudformation:*:",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":stackset/*"
                      ]
                    ]
                  }
                }
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "RoleName": {
          "Fn::Join": [
            "",
            [
              "InnovationSandbox-",
              {
                "Ref": "Namespace"
              },
              "-IntermediateRole"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IntermediateRole/Resource",
        "guard": {
          "SuppressedRules": [
            "CFN_NO_EXPLICIT_RESOURCE_NAMES"
          ]
        }
      }
    },
    "IntermediateRoleDefaultPolicy7308C44F": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":iam::",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":role/InnovationSandbox-",
                    {
                      "Ref": "Namespace"
                    },
                    "-IdcRole"
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":iam::",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":role/InnovationSandbox-",
                    {
                      "Ref": "Namespace"
                    },
                    "-OrgMgtRole"
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":iam::*:role/InnovationSandbox-",
                    {
                      "Ref": "Namespace"
                    },
                    "-SandboxAccountRole"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "IntermediateRoleDefaultPolicy7308C44F",
        "Roles": [
          {
            "Ref": "IntermediateRole6D2F2036"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IntermediateRole/DefaultPolicy/Resource"
      }
    },
    "ISBEventBusDLQCBA480AD": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "QueueName": {
          "Fn::Join": [
            "",
            [
              "ISB-",
              {
                "Ref": "Namespace"
              },
              "-ISBEventBus-DLQ"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBEventBusDLQ/Resource"
      }
    },
    "ISBEventBusDLQPolicy5521128C": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusDLQCBA480AD",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "ISBEventBusDLQCBA480AD"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBEventBusDLQ/Policy/Resource"
      }
    },
    "ISBEventBusD5514129": {
      "Type": "AWS::Events::EventBus",
      "Properties": {
        "DeadLetterConfig": {
          "Arn": {
            "Fn::GetAtt": [
              "ISBEventBusDLQCBA480AD",
              "Arn"
            ]
          }
        },
        "Description": "core event bus for all ISB activity",
        "KmsKeyIdentifier": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-ISBEventBus"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBEventBus/Resource"
      }
    },
    "DLQ581697C4": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DLQ/Resource"
      }
    },
    "DLQPolicyC8FA9269": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "DLQ581697C4",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "DLQ581697C4"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/DLQ/Policy/Resource"
      }
    },
    "ISBEventBusLogging37337846": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "logs all events that get sent to the ISB event bus",
        "EventBusName": {
          "Ref": "ISBEventBusD5514129"
        },
        "EventPattern": {
          "source": [
            {
              "prefix": ""
            }
          ]
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "ISBLogGroupE607F9A7",
                "Arn"
              ]
            },
            "DeadLetterConfig": {
              "Arn": {
                "Fn::GetAtt": [
                  "DLQ581697C4",
                  "Arn"
                ]
              }
            },
            "Id": "Target0",
            "InputTransformer": {
              "InputPathsMap": {
                "detail-type": "$.detail-type",
                "time": "$.time"
              },
              "InputTemplate": "{\"message\":\"ISBEventBus received <detail-type> event\",\"timestamp\":<time>}"
            },
            "RetryPolicy": {
              "MaximumRetryAttempts": 20
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBEventBusLogging/Resource"
      }
    },
    "LeaseMonitoringFunctionRole46C50E2F": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseMonitoring/LeaseMonitoring/FunctionRole/Resource"
      }
    },
    "LeaseMonitoringFunctionRoleDefaultPolicy81F212C0": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LeaseMonitoringFunctionRoleDefaultPolicy81F212C0",
        "Roles": [
          {
            "Ref": "LeaseMonitoringFunctionRole46C50E2F"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseMonitoring/LeaseMonitoring/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "LeaseMonitoringFunctionA656342F": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.28c398b9a55cf642cd0b56b76f4c10971a7170d0dd68f9dc7fc69c386f197910.zip"
        },
        "Description": "Scans active leases periodically to trigger events when alerts or actions need to be taken",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-LeaseMonitoring-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "LeaseMonitoringFunctionRole46C50E2F",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "LeaseMonitoringFunctionRoleDefaultPolicy81F212C0",
        "LeaseMonitoringFunctionRole46C50E2F"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseMonitoring/LeaseMonitoring/Function/Resource",
        "aws:asset:path": "asset.28c398b9a55cf642cd0b56b76f4c10971a7170d0dd68f9dc7fc69c386f197910",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "LambdaInvokeRole0342EAD8": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "allows EventBridgeScheduler to invoke Innovation Sandbox's LeaseMonitoring lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LambdaInvokeRole/Resource"
      }
    },
    "LambdaInvokeRoleDefaultPolicyDE53A8A0": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "LeaseMonitoringFunctionA656342F",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "LeaseMonitoringFunctionA656342F",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LambdaInvokeRoleDefaultPolicyDE53A8A0",
        "Roles": [
          {
            "Ref": "LambdaInvokeRole0342EAD8"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LambdaInvokeRole/DefaultPolicy/Resource"
      }
    },
    "LeaseMonitoringIsbDbTableReadWriteD3C69FFE": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "LeaseMonitoringFunctionRole46C50E2F"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseMonitoring-IsbDbTableReadWrite/Resource"
      }
    },
    "LeaseMonitoringScheduledEvent": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "triggers LeaseMonitoring every hour",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 5,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "rate(1 hour)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "LeaseMonitoringFunctionA656342F",
              "Arn"
            ]
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 20
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "LambdaInvokeRole0342EAD8",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseMonitoringScheduledEvent"
      }
    },
    "SandboxAccountLifecycleManagementFunctionRole6469637D": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SandboxAccountLifecycleManagement/SandboxAccountLifecycleManagement/FunctionRole/Resource"
      }
    },
    "SandboxAccountLifecycleManagementFunctionRoleDefaultPolicyF3EBEB9E": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "cloudformation:DescribeStackSet",
                "cloudformation:ListStackInstances"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*:*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudformation:DeleteStackInstances",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset/*:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset-target/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":type/resource/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "sqs:ReceiveMessage",
                "sqs:ChangeMessageVisibility",
                "sqs:GetQueueUrl",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316",
                  "Arn"
                ]
              }
            },
            {
              "Action": "kms:Decrypt",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "SandboxAccountLifecycleManagementFunctionRoleDefaultPolicyF3EBEB9E",
        "Roles": [
          {
            "Ref": "SandboxAccountLifecycleManagementFunctionRole6469637D"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SandboxAccountLifecycleManagement/SandboxAccountLifecycleManagement/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "SandboxAccountLifecycleManagementFunction475E871B": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.9b59ba0e8bf7dc5d2c24bb7acbb6bb6e1b6ed36fd9521c68f5466473bdf67910.zip"
        },
        "Description": "responds to lease events and determines what further actions should be taken",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "SANDBOX_ACCOUNT_ROLE_NAME": {
              "Fn::Join": [
                "",
                [
                  "InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-SandboxAccountRole"
                ]
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-SandboxAccountLifecycleManagement-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "SandboxAccountLifecycleManagementFunctionRole6469637D",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "SandboxAccountLifecycleManagementFunctionRoleDefaultPolicyF3EBEB9E",
        "SandboxAccountLifecycleManagementFunctionRole6469637D"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SandboxAccountLifecycleManagement/SandboxAccountLifecycleManagement/Function/Resource",
        "aws:asset:path": "asset.9b59ba0e8bf7dc5d2c24bb7acbb6bb6e1b6ed36fd9521c68f5466473bdf67910",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "SandboxAccountLifecycleManagementFunctionSqsEventSourceInnovationSandboxComputeAccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue7C6450D30C7832E4": {
      "Type": "AWS::Lambda::EventSourceMapping",
      "Properties": {
        "BatchSize": 1,
        "EventSourceArn": {
          "Fn::GetAtt": [
            "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316",
            "Arn"
          ]
        },
        "FunctionName": {
          "Ref": "SandboxAccountLifecycleManagementFunction475E871B"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SandboxAccountLifecycleManagement/SandboxAccountLifecycleManagement/Function/SqsEventSource:InnovationSandboxComputeAccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue7C6450D3/Resource"
      }
    },
    "SandboxAccountLifecycleManagementIsbDbTableReadWrite7C76B3D4": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "SandboxAccountLifecycleManagementFunctionRole6469637D"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SandboxAccountLifecycleManagement-IsbDbTableReadWrite/Resource"
      }
    },
    "SandboxAccountLifecycleManagementIsbDbTableReadOnlyD10F5DB8": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "SandboxAccountLifecycleManagementFunctionRole6469637D"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/SandboxAccountLifecycleManagement-IsbDbTableReadOnly/Resource"
      }
    },
    "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsDLQC8AC58DA": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "ContentBasedDeduplication": true,
        "FifoQueue": true,
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "QueueName": {
          "Fn::Join": [
            "",
            [
              "Isb-",
              {
                "Ref": "Namespace"
              },
              "-AccountLifeCycleEventsDLQ.fifo"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountLifeCycleEventsToSqsToLambda/AccountLifeCycleEventsDLQ/Resource"
      }
    },
    "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsDLQPolicyFB975088": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsDLQC8AC58DA",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsDLQC8AC58DA"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountLifeCycleEventsToSqsToLambda/AccountLifeCycleEventsDLQ/Policy/Resource"
      }
    },
    "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "ContentBasedDeduplication": true,
        "FifoQueue": true,
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "MessageRetentionPeriod": 14400,
        "QueueName": {
          "Fn::Join": [
            "",
            [
              "Isb-",
              {
                "Ref": "Namespace"
              },
              "-AccountLifeCycleEventsQueue.fifo"
            ]
          ]
        },
        "RedrivePolicy": {
          "deadLetterTargetArn": {
            "Fn::GetAtt": [
              "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsDLQC8AC58DA",
              "Arn"
            ]
          },
          "maxReceiveCount": 3
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "VisibilityTimeout": 120
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountLifeCycleEventsToSqsToLambda/AccountLifeCycleEventsQueue/Resource"
      }
    },
    "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueuePolicy7E294DCC": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "sqs:SendMessage",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountLifeCycleEventsToSqsToLambda/AccountLifeCycleEventsQueue/Policy/Resource"
      }
    },
    "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsRule94BBF383": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "Triggers account life cycle manager lambda via SQS",
        "EventBusName": {
          "Ref": "ISBEventBusD5514129"
        },
        "EventPattern": {
          "detail-type": [
            "LeaseBudgetExceeded",
            "LeaseExpired",
            "AccountCleanupSucceeded",
            "AccountCleanupFailed",
            "AccountDriftDetected",
            "LeaseFreezingThresholdAlert",
            "BlueprintDeploymentSucceeded",
            "BlueprintDeploymentFailed"
          ]
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "AccountLifeCycleEventsToSqsToLambdaAccountLifeCycleEventsQueue2EC48316",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RetryPolicy": {
              "MaximumEventAgeInSeconds": 14400,
              "MaximumRetryAttempts": 3
            },
            "SqsParameters": {
              "MessageGroupId": "AccountLifeCycleEvents"
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountLifeCycleEventsToSqsToLambda/AccountLifeCycleEventsRule/Resource"
      }
    },
    "AccountDriftMonitoringFunctionRoleEEB1FC86": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoring/AccountDriftMonitoring/FunctionRole/Resource"
      }
    },
    "AccountDriftMonitoringFunctionRoleDefaultPolicyC79E7191": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountDriftMonitoringFunctionRoleDefaultPolicyC79E7191",
        "Roles": [
          {
            "Ref": "AccountDriftMonitoringFunctionRoleEEB1FC86"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoring/AccountDriftMonitoring/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AccountDriftMonitoringFunction9E5A5246": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.d0d971cb5c8b17796be177f62daf826e1d529cb96b810e359111aa249bab7797.zip"
        },
        "Description": "Scans the sandbox ous and accounts and checks if there is any drift with what is in the database",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-AccountDriftMonitoring-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "AccountDriftMonitoringFunctionRoleEEB1FC86",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AccountDriftMonitoringFunctionRoleDefaultPolicyC79E7191",
        "AccountDriftMonitoringFunctionRoleEEB1FC86"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoring/AccountDriftMonitoring/Function/Resource",
        "aws:asset:path": "asset.d0d971cb5c8b17796be177f62daf826e1d529cb96b810e359111aa249bab7797",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AccountDriftMonitoringLambdaInvokeRoleB92EB6A7": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "allows EventBridgeScheduler to invoke Innovation Sandbox's AccountDriftMonitoring lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoringLambdaInvokeRole/Resource"
      }
    },
    "AccountDriftMonitoringLambdaInvokeRoleDefaultPolicy3A3B0917": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "AccountDriftMonitoringFunction9E5A5246",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "AccountDriftMonitoringFunction9E5A5246",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountDriftMonitoringLambdaInvokeRoleDefaultPolicy3A3B0917",
        "Roles": [
          {
            "Ref": "AccountDriftMonitoringLambdaInvokeRoleB92EB6A7"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoringLambdaInvokeRole/DefaultPolicy/Resource"
      }
    },
    "AccountDriftMonitoringIsbDbTableReadWrite266A9DFD": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "AccountDriftMonitoringFunctionRoleEEB1FC86"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoring-IsbDbTableReadWrite/Resource"
      }
    },
    "AccountDriftMonitoringScheduledEvent": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "triggers Drift Monitoring every 6 hours",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 30,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "rate(6 hour)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "AccountDriftMonitoringFunction9E5A5246",
              "Arn"
            ]
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 10
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "AccountDriftMonitoringLambdaInvokeRoleB92EB6A7",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountDriftMonitoringScheduledEvent"
      }
    },
    "EmailNotificationFunctionRoleB4E00EDD": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailNotification/EmailNotification/FunctionRole/Resource"
      }
    },
    "EmailNotificationFunctionRoleDefaultPolicyA04611F2": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "kms:Decrypt",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "EmailNotificationFunctionRoleDefaultPolicyA04611F2",
        "Roles": [
          {
            "Ref": "EmailNotificationFunctionRoleB4E00EDD"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailNotification/EmailNotification/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "EmailNotificationFunction35F940BB": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.64e6a003af85ce9f357745e4b6263ab94de4517071273f9448919a18df366462.zip"
        },
        "Description": "consumes email notification messages and sends emails",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "WEB_APP_URL": {
              "Fn::If": [
                "HasCustomDomain",
                {
                  "Fn::Join": [
                    "",
                    [
                      "https://",
                      {
                        "Ref": "CustomDomainName"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "https://",
                      {
                        "Fn::GetAtt": [
                          "CloudFrontUiApiIsbCloudFrontDistributionA7327667",
                          "DomainName"
                        ]
                      }
                    ]
                  ]
                }
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-EmailNotification-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "EmailNotificationFunctionRoleB4E00EDD",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 180,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "EmailNotificationFunctionRoleDefaultPolicyA04611F2",
        "EmailNotificationFunctionRoleB4E00EDD"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailNotification/EmailNotification/Function/Resource",
        "aws:asset:path": "asset.64e6a003af85ce9f357745e4b6263ab94de4517071273f9448919a18df366462",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "EmailNotificationFunctionAllowEventBridgeToTriggerLambda09EFF830": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "EmailNotificationFunction35F940BB",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "ISBEventBusD5514129",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailNotification/EmailNotification/Function/AllowEventBridgeToTriggerLambda"
      }
    },
    "EmailNotificationIsbDbTableReadOnlyF11ADAA8": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "EmailNotificationFunctionRoleB4E00EDD"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailNotification-IsbDbTableReadOnly/Resource"
      }
    },
    "EmailNotificationSendPolicyEB2714FC": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "ses:SendEmail",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ses:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":identity/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "EmailNotificationSendPolicyEB2714FC",
        "Roles": [
          {
            "Ref": "EmailNotificationFunctionRoleB4E00EDD"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailNotificationSendPolicy/Resource"
      }
    },
    "EmailEventsToLambdaA7766172": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "Triggers email notification lambda",
        "EventBusName": {
          "Ref": "ISBEventBusD5514129"
        },
        "EventPattern": {
          "detail-type": [
            "LeaseRequested",
            "LeaseApproved",
            "LeaseDenied",
            "LeaseTerminated",
            "LeaseFrozen",
            "LeaseUnfrozen",
            "LeaseProvisioningFailed",
            "AccountCleanupFailed",
            "AccountDriftDetected",
            "LeaseBudgetThresholdAlert",
            "LeaseDurationThresholdAlert",
            "GroupCostReportGenerated",
            "GroupCostReportGeneratedFailure",
            "AssignmentCreated",
            "AssignmentRemoved"
          ]
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "EmailNotificationFunction35F940BB",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RetryPolicy": {
              "MaximumEventAgeInSeconds": 14400,
              "MaximumRetryAttempts": 3
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailEventsToLambda/EmailEventsToLambda/Resource"
      }
    },
    "EmailEventsToLambdaAllowEventRuleInnovationSandboxComputeEmailNotificationFunctionAF96006A3F04312C": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "EmailNotificationFunction35F940BB",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "EmailEventsToLambdaA7766172",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/EmailEventsToLambda/EmailEventsToLambda/AllowEventRuleInnovationSandboxComputeEmailNotificationFunctionAF96006A"
      }
    },
    "AccountCleanerCodeBuildCleanupProjectRole3FF40319": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "codebuild.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CodeBuildCleanupProject/Role/Resource"
      }
    },
    "AccountCleanerCodeBuildCleanupProjectRoleDefaultPolicy2BBB17A0": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCleanup485A102F",
                  "Arn"
                ]
              }
            },
            {
              "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/codebuild/",
                      {
                        "Ref": "AccountCleanerCodeBuildCleanupProject76064B7F"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/codebuild/",
                      {
                        "Ref": "AccountCleanerCodeBuildCleanupProject76064B7F"
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "codebuild:CreateReportGroup",
                "codebuild:CreateReport",
                "codebuild:UpdateReport",
                "codebuild:BatchPutTestCases",
                "codebuild:BatchPutCodeCoverages"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":codebuild:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":report-group/",
                    {
                      "Ref": "AccountCleanerCodeBuildCleanupProject76064B7F"
                    },
                    "-*"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": [
                "appconfig:StartConfigurationSession",
                "appconfig:GetLatestConfiguration"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":appconfig:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":application/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "configApplicationId"
                      ]
                    },
                    "/environment/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "configEnvironmentId"
                      ]
                    },
                    "/configuration/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "nukeConfigConfigurationProfileId"
                      ]
                    }
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountCleanerCodeBuildCleanupProjectRoleDefaultPolicy2BBB17A0",
        "Roles": [
          {
            "Ref": "AccountCleanerCodeBuildCleanupProjectRole3FF40319"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CodeBuildCleanupProject/Role/DefaultPolicy/Resource"
      }
    },
    "AccountCleanerCodeBuildCleanupProject76064B7F": {
      "Type": "AWS::CodeBuild::Project",
      "Properties": {
        "Artifacts": {
          "Type": "NO_ARTIFACTS"
        },
        "Cache": {
          "Type": "NO_CACHE"
        },
        "EncryptionKey": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "Environment": {
          "ComputeType": "BUILD_GENERAL1_SMALL",
          "EnvironmentVariables": [
            {
              "Name": "HUB_ACCOUNT_ID",
              "Type": "PLAINTEXT",
              "Value": {
                "Ref": "AWS::AccountId"
              }
            },
            {
              "Name": "INTERMEDIATE_ROLE_ARN",
              "Type": "PLAINTEXT",
              "Value": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":iam::",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":role/InnovationSandbox-",
                    {
                      "Ref": "Namespace"
                    },
                    "-IntermediateRole"
                  ]
                ]
              }
            },
            {
              "Name": "CLEANUP_ROLE_NAME",
              "Type": "PLAINTEXT",
              "Value": {
                "Fn::Join": [
                  "",
                  [
                    "InnovationSandbox-",
                    {
                      "Ref": "Namespace"
                    },
                    "-SandboxAccountRole"
                  ]
                ]
              }
            },
            {
              "Name": "ACCOUNT_POOL_CONFIG_PARAM_ARN",
              "Type": "PLAINTEXT",
              "Value": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            }
          ],
          "Image": {
            "Fn::If": [
              "AccountCleanerUsePrivateEcrRepo2A0E64EA",
              {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ".dkr.ecr.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".",
                    {
                      "Ref": "AWS::URLSuffix"
                    },
                    "/",
                    {
                      "Fn::FindInMap": [
                        "Mapping",
                        "context",
                        "privateEcrRepo",
                        {
                          "DefaultValue": ""
                        }
                      ]
                    },
                    ":latest"
                  ]
                ]
              },
              {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::FindInMap": [
                        "Mapping",
                        "context",
                        "publicEcrRegistry",
                        {
                          "DefaultValue": ""
                        }
                      ]
                    },
                    "/",
                    {
                      "Fn::FindInMap": [
                        "Mapping",
                        "context",
                        "solutionName",
                        {
                          "DefaultValue": ""
                        }
                      ]
                    },
                    "-account-cleaner:",
                    {
                      "Fn::If": [
                        "UseStableTaggingCondition",
                        {
                          "Fn::Join": [
                            ".",
                            [
                              {
                                "Fn::Select": [
                                  0,
                                  {
                                    "Fn::Split": [
                                      ".",
                                      {
                                        "Fn::FindInMap": [
                                          "Mapping",
                                          "context",
                                          "publicEcrTag",
                                          {
                                            "DefaultValue": ""
                                          }
                                        ]
                                      }
                                    ]
                                  }
                                ]
                              },
                              {
                                "Fn::Select": [
                                  1,
                                  {
                                    "Fn::Split": [
                                      ".",
                                      {
                                        "Fn::FindInMap": [
                                          "Mapping",
                                          "context",
                                          "publicEcrTag",
                                          {
                                            "DefaultValue": ""
                                          }
                                        ]
                                      }
                                    ]
                                  }
                                ]
                              }
                            ]
                          ]
                        },
                        {
                          "Fn::FindInMap": [
                            "Mapping",
                            "context",
                            "publicEcrTag",
                            {
                              "DefaultValue": ""
                            }
                          ]
                        }
                      ]
                    }
                  ]
                ]
              }
            ]
          },
          "ImagePullCredentialsType": "SERVICE_ROLE",
          "PrivilegedMode": false,
          "Type": "LINUX_CONTAINER"
        },
        "LogsConfig": {
          "CloudWatchLogs": {
            "GroupName": {
              "Ref": "ISBLogGroupCleanup485A102F"
            },
            "Status": "ENABLED"
          }
        },
        "ServiceRole": {
          "Fn::GetAtt": [
            "AccountCleanerCodeBuildCleanupProjectRole3FF40319",
            "Arn"
          ]
        },
        "Source": {
          "BuildSpec": "version: 0.2\nphases:\n  build:\n    commands:\n      - echo =================================== Cleaning up AWS account $CLEANUP_ACCOUNT_ID ===================================\n      - echo StateMachineExecutionId=$STATE_MACHINE_EXECUTION_ID\n      - echo ----------------------------- Retrieving nuke config file from AWS AppConfig ------------------------------\n      - |\n        export APPCONFIG_TOKEN=$(aws appconfigdata start-configuration-session --application-identifier $APPCONFIG_APPLICATION_ID \\\n        --environment-identifier $APPCONFIG_ENVIRONMENT_ID \\\n        --configuration-profile-identifier $APPCONFIG_NUKE_CONFIG_CONFIGURATION_PROFILE_ID \\\n        --query InitialConfigurationToken --output text)\n      - aws appconfigdata get-latest-configuration --configuration-token $APPCONFIG_TOKEN nuke-config.yaml\n      - echo ------------------------------ Preparing nuke config file -----------------------------\n      - ISB_MANAGED_REGIONS=$(aws ssm get-parameter --name $ACCOUNT_POOL_CONFIG_PARAM_ARN --query 'Parameter.Value' --output text | jq -r '.isbManagedRegions')\n      - isb-prepare-nuke-config --config nuke-config.yaml --account-id $CLEANUP_ACCOUNT_ID --hub-account-id $HUB_ACCOUNT_ID --role-name $CLEANUP_ROLE_NAME --regions $ISB_MANAGED_REGIONS\n      - cat nuke-config.yaml\n      - echo ------------------------ Assuming IAM role $INTERMEDIATE_ROLE_ARN ------------------------\n      - export INTERMEDIATE_ROLE_CREDS=$(aws sts assume-role --role-arn $INTERMEDIATE_ROLE_ARN --role-session-name AccountCleanup)\n      - aws configure set aws_access_key_id $(echo $INTERMEDIATE_ROLE_CREDS | jq -r .Credentials.AccessKeyId) --profile intermediate-role\n      - aws configure set aws_secret_access_key $(echo $INTERMEDIATE_ROLE_CREDS | jq -r .Credentials.SecretAccessKey) --profile intermediate-role\n      - aws configure set aws_session_token $(echo $INTERMEDIATE_ROLE_CREDS | jq -r .Credentials.SessionToken) --profile intermediate-role\n      - echo ------------------------ Assuming IAM role $CLEANUP_ROLE_NAME in sandbox account ------------------------\n      - export SANDBOX_ACCOUNT_ROLE_CREDS=$(aws sts assume-role --profile intermediate-role --role-arn arn:aws:iam::$CLEANUP_ACCOUNT_ID:role/$CLEANUP_ROLE_NAME --role-session-name AccountCleanup)\n      - aws configure set aws_access_key_id $(echo $SANDBOX_ACCOUNT_ROLE_CREDS | jq -r .Credentials.AccessKeyId) --profile cleanup\n      - aws configure set aws_secret_access_key $(echo $SANDBOX_ACCOUNT_ROLE_CREDS | jq -r .Credentials.SecretAccessKey) --profile cleanup\n      - aws configure set aws_session_token $(echo $SANDBOX_ACCOUNT_ROLE_CREDS | jq -r .Credentials.SessionToken) --profile cleanup\n      - echo ------------------------ Pass 1 - Running AWS Nuke to delete CloudFormation stacks first ------------------------\n      - aws-nuke nuke -c nuke-config.yaml --include CloudFormationStack --no-dry-run --no-alias-check --force --profile cleanup --log-format=json || true\n      - echo ------------------------ Pass 2 - Running full AWS Nuke cleanup ------------------------\n      - aws-nuke nuke -c nuke-config.yaml --no-dry-run --no-alias-check --force --profile cleanup --log-format=json\n",
          "Type": "NO_SOURCE"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "TimeoutInMinutes": 60
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CodeBuildCleanupProject/Resource"
      }
    },
    "AccountCleanerPrivateEcrRepoPolicy110E5F6B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ecr:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":repository/",
                    {
                      "Fn::FindInMap": [
                        "Mapping",
                        "context",
                        "privateEcrRepo",
                        {
                          "DefaultValue": ""
                        }
                      ]
                    }
                  ]
                ]
              }
            },
            {
              "Action": "ecr:GetAuthorizationToken",
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountCleanerPrivateEcrRepoPolicy110E5F6B",
        "Roles": [
          {
            "Ref": "AccountCleanerCodeBuildCleanupProjectRole3FF40319"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/PrivateEcrRepoPolicy/Resource"
      },
      "Condition": "AccountCleanerUsePrivateEcrRepo2A0E64EA"
    },
    "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleCD2C36F3": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupOrchestrationLambda/FunctionRole/Resource"
      }
    },
    "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleDefaultPolicyF2E5E334": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCleanup485A102F",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "lambda:CheckpointDurableExecution",
                "lambda:GetDurableExecutionState"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "codebuild:StartBuild",
                "codebuild:BatchGetBuilds"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AccountCleanerCodeBuildCleanupProject76064B7F",
                  "Arn"
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "appconfig:StartConfigurationSession",
                "appconfig:GetLatestConfiguration"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":appconfig:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":application/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "configApplicationId"
                      ]
                    },
                    "/environment/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "configEnvironmentId"
                      ]
                    },
                    "/configuration/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "validatorExclusionConfigConfigurationProfileId"
                      ]
                    }
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleDefaultPolicyF2E5E334",
        "Roles": [
          {
            "Ref": "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleCD2C36F3"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupOrchestrationLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AccountCleanerDurableCleanupOrchestrationLambdaFunction477B10E6": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.8ed7259056f88fbf85c229fca51e025c7f3cb3c99f28f2d95d88b6616123f79d.zip"
        },
        "DurableConfig": {
          "ExecutionTimeout": 31536000,
          "RetentionPeriodInDays": 30
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            },
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "APPCONFIG_NUKE_CONFIG_CONFIGURATION_PROFILE_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "nukeConfigConfigurationProfileId"
              ]
            },
            "APPCONFIG_VALIDATOR_EXCLUSION_CONFIG_PROFILE_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "validatorExclusionConfigConfigurationProfileId"
              ]
            },
            "APP_CONFIG_APPLICATION_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configApplicationId"
              ]
            },
            "APP_CONFIG_ENVIRONMENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configEnvironmentId"
              ]
            },
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CLEANUP_REPORT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cleanupReportTable"
              ]
            },
            "CLEANUP_SPOKE_ROLE_NAME": {
              "Fn::Join": [
                "",
                [
                  "InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-SandboxAccountRole"
                ]
              ]
            },
            "CODEBUILD_PROJECT_NAME": {
              "Ref": "AccountCleanerCodeBuildCleanupProject76064B7F"
            },
            "CODEBUILD_TIMEOUT_MINUTES": "60",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "IDC_ACCOUNT_ID": {
              "Ref": "IdcAccountId"
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "AWS::AccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IntermediateRole"
                ]
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-DurableCleanupOrchestrationLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCleanup485A102F"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleCD2C36F3",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleDefaultPolicyF2E5E334",
        "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleCD2C36F3"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupOrchestrationLambda/Function/Resource",
        "aws:asset:path": "asset.8ed7259056f88fbf85c229fca51e025c7f3cb3c99f28f2d95d88b6616123f79d",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AccountCleanerDurableCleanupOrchestrationLambdaFunctionCurrentVersion13E12A3E5798aadc5dca6619bb5d841320d2898c": {
      "Type": "AWS::Lambda::Version",
      "Properties": {
        "FunctionName": {
          "Ref": "AccountCleanerDurableCleanupOrchestrationLambdaFunction477B10E6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupOrchestrationLambda/Function/CurrentVersion/Resource",
        "aws:cdk:do-not-refactor": true
      }
    },
    "AccountCleanerDurableCleanupOrchestrationLambdaIsbDbTableReadOnlyD3AFA5D5": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleCD2C36F3"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupOrchestrationLambda-IsbDbTableReadOnly/Resource"
      }
    },
    "AccountCleanerDurableCleanupOrchestrationLambdaIsbDbTableReadWriteCC6A2746": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "cleanupReportTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "cleanupReportTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "AccountCleanerDurableCleanupOrchestrationLambdaFunctionRoleCD2C36F3"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupOrchestrationLambda-IsbDbTableReadWrite/Resource"
      }
    },
    "AccountCleanerDurableCleanupAlias51C59522": {
      "Type": "AWS::Lambda::Alias",
      "Properties": {
        "FunctionName": {
          "Ref": "AccountCleanerDurableCleanupOrchestrationLambdaFunction477B10E6"
        },
        "FunctionVersion": {
          "Fn::GetAtt": [
            "AccountCleanerDurableCleanupOrchestrationLambdaFunctionCurrentVersion13E12A3E5798aadc5dca6619bb5d841320d2898c",
            "Version"
          ]
        },
        "Name": "live"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupAlias/Resource"
      }
    },
    "AccountCleanerCallbackRelayLambdaFunctionRoleB114615C": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CallbackRelayLambda/FunctionRole/Resource"
      }
    },
    "AccountCleanerCallbackRelayLambdaFunctionRoleDefaultPolicy02D82CF4": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCleanup485A102F",
                  "Arn"
                ]
              }
            },
            {
              "Action": "codebuild:BatchGetBuilds",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AccountCleanerCodeBuildCleanupProject76064B7F",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "lambda:SendDurableExecutionCallbackSuccess",
                "lambda:SendDurableExecutionCallbackFailure"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "AccountCleanerDurableCleanupOrchestrationLambdaFunction477B10E6",
                        "Arn"
                      ]
                    },
                    ":*/durable-execution/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountCleanerCallbackRelayLambdaFunctionRoleDefaultPolicy02D82CF4",
        "Roles": [
          {
            "Ref": "AccountCleanerCallbackRelayLambdaFunctionRoleB114615C"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CallbackRelayLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AccountCleanerCallbackRelayLambdaFunction47C00EC4": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.cd439499d0317611a00f74af0971f41584186fb0cc79b9502bc450e177e702ec.zip"
        },
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-CallbackRelayLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCleanup485A102F"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AccountCleanerCallbackRelayLambdaFunctionRoleB114615C",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AccountCleanerCallbackRelayLambdaFunctionRoleDefaultPolicy02D82CF4",
        "AccountCleanerCallbackRelayLambdaFunctionRoleB114615C"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CallbackRelayLambda/Function/Resource",
        "aws:asset:path": "asset.cd439499d0317611a00f74af0971f41584186fb0cc79b9502bc450e177e702ec",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AccountCleanerCodeBuildStateChangeRule7A18360B": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "EventPattern": {
          "source": [
            "aws.codebuild"
          ],
          "detail-type": [
            "CodeBuild Build State Change"
          ],
          "detail": {
            "project-name": [
              {
                "Ref": "AccountCleanerCodeBuildCleanupProject76064B7F"
              }
            ],
            "build-status": [
              "SUCCEEDED",
              "FAILED",
              "FAULT",
              "STOPPED",
              "TIMED_OUT"
            ]
          }
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "AccountCleanerCallbackRelayLambdaFunction47C00EC4",
                "Arn"
              ]
            },
            "Id": "Target0"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CodeBuildStateChangeRule/Resource"
      }
    },
    "AccountCleanerCodeBuildStateChangeRuleAllowEventRuleInnovationSandboxComputeAccountCleanerCallbackRelayLambdaFunction5C524F6C91098019": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountCleanerCallbackRelayLambdaFunction47C00EC4",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "AccountCleanerCodeBuildStateChangeRule7A18360B",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/CodeBuildStateChangeRule/AllowEventRuleInnovationSandboxComputeAccountCleanerCallbackRelayLambdaFunction5C524F6C"
      }
    },
    "AccountCleanerDurableCleanupRuleBD2E2DA3": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "EventBusName": {
          "Ref": "ISBEventBusD5514129"
        },
        "EventPattern": {
          "detail-type": [
            "CleanAccountRequest"
          ]
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Ref": "AccountCleanerDurableCleanupAlias51C59522"
            },
            "Id": "Target0",
            "RetryPolicy": {
              "MaximumRetryAttempts": 5
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupRule/Resource"
      }
    },
    "AccountCleanerDurableCleanupRuleAllowEventRuleInnovationSandboxComputeAccountCleanerDurableCleanupAliasCB0BD397EC035AF2": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Ref": "AccountCleanerDurableCleanupAlias51C59522"
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "AccountCleanerDurableCleanupRuleBD2E2DA3",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountCleaner/DurableCleanupRule/AllowEventRuleInnovationSandboxComputeAccountCleanerDurableCleanupAliasCB0BD397"
      }
    },
    "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRole1ABC0710": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/DeploymentOrchestratorLambda/FunctionRole/Resource"
      }
    },
    "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRoleDefaultPolicy18C6E050": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "cloudformation:DescribeStackSet",
                "cloudformation:DescribeStackSetOperation",
                "cloudformation:ListStackInstances"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*:*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudformation:CreateStackInstances",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset/*:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset-target/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":type/resource/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRoleDefaultPolicy18C6E050",
        "Roles": [
          {
            "Ref": "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRole1ABC0710"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/DeploymentOrchestratorLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionC368A43B": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.f16e9a0f3434de574472f6f8d9f458a3143c26570e1ee0bea7eb8c3763200f46.zip"
        },
        "Description": "Orchestrates blueprint deployments via CloudFormation StackSets",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "SANDBOX_ACCOUNT_ROLE_NAME": {
              "Fn::Join": [
                "",
                [
                  "InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-SandboxAccountRole"
                ]
              ]
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-DeploymentOrchestratorLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRole1ABC0710",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRoleDefaultPolicy18C6E050",
        "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRole1ABC0710"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/DeploymentOrchestratorLambda/Function/Resource",
        "aws:asset:path": "asset.f16e9a0f3434de574472f6f8d9f458a3143c26570e1ee0bea7eb8c3763200f46",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "BlueprintDeploymentDeploymentOrchestratorLambdaIsbDbTableReadWriteB3217AE2": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionRole1ABC0710"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/DeploymentOrchestratorLambda-IsbDbTableReadWrite/Resource"
      }
    },
    "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRole25EC71CB": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "states.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/StepFunction/BlueprintDeploymentStateMachine/Role/Resource"
      }
    },
    "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRoleDefaultPolicy14EF5FC5": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionC368A43B",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionC368A43B",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingRules",
                "xray:GetSamplingTargets"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRoleDefaultPolicy14EF5FC5",
        "Roles": [
          {
            "Ref": "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRole25EC71CB"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/StepFunction/BlueprintDeploymentStateMachine/Role/DefaultPolicy/Resource"
      }
    },
    "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachine6A6DE17A": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "DefinitionString": {
          "Fn::Join": [
            "",
            [
              "{\"StartAt\":\"CreateStackInstances\",\"States\":{\"CreateStackInstances\":{\"Next\":\"EvaluateCreateResult\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.Error\",\"Next\":\"AddLambdaErrorToContext\"}],\"Type\":\"Task\",\"ResultPath\":\"$.context.deploymentResult\",\"ResultSelector\":{\"success.$\":\"$.Payload.success\",\"operationId.$\":\"$.Payload.operationId\",\"status.$\":\"$.Payload.status\",\"errorMessage.$\":\"$.Payload.errorMessage\"},\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionC368A43B",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"action\":\"CREATE\",\"blueprintId.$\":\"$.detail.blueprintId\",\"leaseId.$\":\"$.detail.leaseId\",\"accountId.$\":\"$.detail.accountId\",\"stackSetId.$\":\"$.detail.stackSetId\",\"regions.$\":\"$.detail.regions\",\"regionConcurrencyType.$\":\"$.detail.regionConcurrencyType\",\"maxConcurrentPercentage.$\":\"$.detail.maxConcurrentPercentage\",\"failureTolerancePercentage.$\":\"$.detail.failureTolerancePercentage\",\"concurrencyMode.$\":\"$.detail.concurrencyMode\",\"executionStartTime.$\":\"$$.Execution.StartTime\"}}},\"EvaluateCreateResult\":{\"Type\":\"Choice\",\"Choices\":[{\"Variable\":\"$.context.deploymentResult.success\",\"BooleanEquals\":false,\"Next\":\"PublishDeploymentResult\"}],\"Default\":\"CheckDeploymentStatus\"},\"CheckDeploymentStatus\":{\"Next\":\"EvaluateDeploymentStatus\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.Error\",\"Next\":\"AddLambdaErrorToContext\"}],\"Type\":\"Task\",\"ResultPath\":\"$.context.deploymentResult\",\"ResultSelector\":{\"operationId.$\":\"$.Payload.operationId\",\"status.$\":\"$.Payload.status\",\"errorMessage.$\":\"$.Payload.errorMessage\"},\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionC368A43B",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"action\":\"CHECK_STATUS\",\"blueprintId.$\":\"$.detail.blueprintId\",\"leaseId.$\":\"$.detail.leaseId\",\"accountId.$\":\"$.detail.accountId\",\"stackSetId.$\":\"$.detail.stackSetId\",\"operationId.$\":\"$.context.deploymentResult.operationId\",\"deploymentTimeoutMinutes.$\":\"$.detail.deploymentTimeoutMinutes\",\"executionStartTime.$\":\"$$.Execution.StartTime\"}}},\"WaitForDeployment\":{\"Type\":\"Wait\",\"Seconds\":30,\"Next\":\"CheckDeploymentStatus\"},\"EvaluateDeploymentStatus\":{\"Type\":\"Choice\",\"Choices\":[{\"Variable\":\"$.context.deploymentResult.status\",\"StringEquals\":\"SUCCEEDED\",\"Next\":\"PublishDeploymentResult\"},{\"Variable\":\"$.context.deploymentResult.status\",\"StringEquals\":\"FAILED\",\"Next\":\"PublishDeploymentResult\"}],\"Default\":\"WaitForDeployment\"},\"PublishDeploymentResult\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Type\":\"Task\",\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "BlueprintDeploymentDeploymentOrchestratorLambdaFunctionC368A43B",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"action\":\"PUBLISH_RESULT\",\"blueprintId.$\":\"$.detail.blueprintId\",\"leaseId.$\":\"$.detail.leaseId\",\"userEmail.$\":\"$.detail.userEmail\",\"accountId.$\":\"$.detail.accountId\",\"blueprintName.$\":\"$.detail.blueprintName\",\"operationId.$\":\"$.context.deploymentResult.operationId\",\"status.$\":\"$.context.deploymentResult.status\",\"errorMessage.$\":\"$.context.deploymentResult.errorMessage\"}}},\"AddLambdaErrorToContext\":{\"Type\":\"Pass\",\"Parameters\":{\"detail.$\":\"$.detail\",\"Execution.$\":\"$.Execution\",\"context\":{\"deploymentResult\":{\"success\":false,\"operationId\":\"N/A\",\"status\":\"FAILED\",\"errorMessage.$\":\"States.Format('Step Functions error - Lambda function invocation failed: {}', $.Error.Cause)\"}}},\"Next\":\"PublishDeploymentResult\"}},\"TimeoutSeconds\":28800}"
            ]
          ]
        },
        "LoggingConfiguration": {
          "Destinations": [
            {
              "CloudWatchLogsLogGroup": {
                "LogGroupArn": {
                  "Fn::GetAtt": [
                    "ISBLogGroupE607F9A7",
                    "Arn"
                  ]
                }
              }
            }
          ],
          "IncludeExecutionData": true,
          "Level": "ALL"
        },
        "RoleArn": {
          "Fn::GetAtt": [
            "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRole25EC71CB",
            "Arn"
          ]
        },
        "StateMachineType": "STANDARD",
        "Tags": [
          {
            "Key": "Component",
            "Value": "BlueprintDeployment"
          },
          {
            "Key": "ManagedBy",
            "Value": "InnovationSandbox"
          }
        ],
        "TracingConfiguration": {
          "Enabled": true
        }
      },
      "DependsOn": [
        "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRoleDefaultPolicy14EF5FC5",
        "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineRole25EC71CB"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/StepFunction/BlueprintDeploymentStateMachine/Resource"
      }
    },
    "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineEventsRole340D296A": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/StepFunction/BlueprintDeploymentStateMachine/EventsRole/Resource"
      }
    },
    "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineEventsRoleDefaultPolicyA171F120": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "states:StartExecution",
              "Effect": "Allow",
              "Resource": {
                "Ref": "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachine6A6DE17A"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineEventsRoleDefaultPolicyA171F120",
        "Roles": [
          {
            "Ref": "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineEventsRole340D296A"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/StepFunction/BlueprintDeploymentStateMachine/EventsRole/DefaultPolicy/Resource"
      }
    },
    "BlueprintDeploymentStepFunctionBlueprintDeploymentRule9F0D2688": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "EventBus rule that triggers blueprint deployment Step Functions workflow",
        "EventBusName": {
          "Ref": "ISBEventBusD5514129"
        },
        "EventPattern": {
          "detail-type": [
            "BlueprintDeploymentRequest"
          ]
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Ref": "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachine6A6DE17A"
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "BlueprintDeploymentStepFunctionBlueprintDeploymentStateMachineEventsRole340D296A",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintDeployment/StepFunction/BlueprintDeploymentRule/Resource"
      }
    },
    "AssignmentProcessingAssignmentProcessingDLQA1C751AB": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "MessageRetentionPeriod": 1209600,
        "QueueName": {
          "Fn::Join": [
            "",
            [
              "Isb-",
              {
                "Ref": "Namespace"
              },
              "-AssignmentProcessingDLQ"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/AssignmentProcessingDLQ/Resource"
      }
    },
    "AssignmentProcessingAssignmentProcessingDLQPolicy40AB9EA1": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "AssignmentProcessingAssignmentProcessingDLQA1C751AB",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "AssignmentProcessingAssignmentProcessingDLQA1C751AB"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/AssignmentProcessingDLQ/Policy/Resource"
      }
    },
    "AssignmentProcessingAssignmentProcessingQueue7E86A417": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "MessageRetentionPeriod": 3600,
        "QueueName": {
          "Fn::Join": [
            "",
            [
              "Isb-",
              {
                "Ref": "Namespace"
              },
              "-AssignmentProcessingQueue"
            ]
          ]
        },
        "ReceiveMessageWaitTimeSeconds": 5,
        "RedrivePolicy": {
          "deadLetterTargetArn": {
            "Fn::GetAtt": [
              "AssignmentProcessingAssignmentProcessingDLQA1C751AB",
              "Arn"
            ]
          },
          "maxReceiveCount": 5
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "VisibilityTimeout": 120
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/AssignmentProcessingQueue/Resource"
      }
    },
    "AssignmentProcessingAssignmentProcessingQueuePolicy8087CAE6": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "AssignmentProcessingAssignmentProcessingQueue7E86A417",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "AssignmentProcessingAssignmentProcessingQueue7E86A417"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/AssignmentProcessingQueue/Policy/Resource"
      }
    },
    "AssignmentProcessingAssignmentDLQAlarm921F5687": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "Assignment processing dead-letter queue has visible messages — indicates IDC operations that failed after all retries and require manual investigation",
        "ComparisonOperator": "GreaterThanThreshold",
        "Dimensions": [
          {
            "Name": "QueueName",
            "Value": {
              "Fn::GetAtt": [
                "AssignmentProcessingAssignmentProcessingDLQA1C751AB",
                "QueueName"
              ]
            }
          }
        ],
        "EvaluationPeriods": 1,
        "MetricName": "ApproximateNumberOfMessagesVisible",
        "Namespace": "AWS/SQS",
        "Period": 60,
        "Statistic": "Maximum",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Threshold": 0,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/AssignmentDLQAlarm/Resource"
      }
    },
    "AssignmentProcessingProcessorLambdaFunctionRole573F9D82": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/ProcessorLambda/FunctionRole/Resource"
      }
    },
    "AssignmentProcessingProcessorLambdaFunctionRoleDefaultPolicy81BACD54": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AssignmentProcessingProcessorLambdaFunctionRoleDefaultPolicy81BACD54",
        "Roles": [
          {
            "Ref": "AssignmentProcessingProcessorLambdaFunctionRole573F9D82"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/ProcessorLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AssignmentProcessingProcessorLambdaFunction7EDCCEBE": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.cc68d24c251ccf3977ebf38762bf30ed7bfc26a24b56c6dbe29f1d95fc680df0.zip"
        },
        "Description": "Reads desired assignment state and handles completion for the Assignment Processor Step Function",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-ProcessorLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AssignmentProcessingProcessorLambdaFunctionRole573F9D82",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AssignmentProcessingProcessorLambdaFunctionRoleDefaultPolicy81BACD54",
        "AssignmentProcessingProcessorLambdaFunctionRole573F9D82"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/ProcessorLambda/Function/Resource",
        "aws:asset:path": "asset.cc68d24c251ccf3977ebf38762bf30ed7bfc26a24b56c6dbe29f1d95fc680df0",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AssignmentProcessingProcessorLambdaIsbDbTableReadWrite3156C15D": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "AssignmentProcessingProcessorLambdaFunctionRole573F9D82"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/ProcessorLambda-IsbDbTableReadWrite/Resource"
      }
    },
    "AssignmentProcessingProcessorLambdaIsbDbTableReadOnly1FA0D669": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "AssignmentProcessingProcessorLambdaFunctionRole573F9D82"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/ProcessorLambda-IsbDbTableReadOnly/Resource"
      }
    },
    "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRole56F7CD44": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "states.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/StepFunction/AssignmentProcessorStateMachine/Role/Resource"
      }
    },
    "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRoleDefaultPolicyF7796BFB": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "AssignmentProcessingProcessorLambdaFunction7EDCCEBE",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "AssignmentProcessingProcessorLambdaFunction7EDCCEBE",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "sqs:SendMessage",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AssignmentProcessingAssignmentProcessingQueue7E86A417",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingRules",
                "xray:GetSamplingTargets"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "sqs:SendMessage",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AssignmentProcessingAssignmentProcessingQueue7E86A417",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRoleDefaultPolicyF7796BFB",
        "Roles": [
          {
            "Ref": "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRole56F7CD44"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/StepFunction/AssignmentProcessorStateMachine/Role/DefaultPolicy/Resource"
      }
    },
    "AssignmentProcessingStepFunctionAssignmentProcessorStateMachine80901A50": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "DefinitionString": {
          "Fn::Join": [
            "",
            [
              "{\"StartAt\":\"ExtractInput\",\"States\":{\"ExtractInput\":{\"Type\":\"Pass\",\"Parameters\":{\"leaseId.$\":\"$.detail.leaseId\",\"intent.$\":\"$.detail.intent\",\"requestedBy.$\":\"$.detail.requestedBy\",\"lockOwnerId.$\":\"$.detail.lockOwnerId\",\"leaseOwnerEmail.$\":\"$.detail.leaseOwnerEmail\",\"executionArn.$\":\"$$.Execution.Id\",\"requestedAt.$\":\"$$.Execution.StartTime\"},\"Next\":\"FanOut\"},\"FanOut\":{\"Next\":\"ProcessAssignments\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Type\":\"Task\",\"ResultPath\":\"$.fanOutResult\",\"ResultSelector\":{\"workItems.$\":\"$.Payload.workItems\",\"accountId.$\":\"$.Payload.accountId\",\"preExistingPrincipalIds.$\":\"$.Payload.preExistingPrincipalIds\"},\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "AssignmentProcessingProcessorLambdaFunction7EDCCEBE",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"action\":\"FAN_OUT\",\"leaseId.$\":\"$.leaseId\",\"intent.$\":\"$.intent\",\"lockOwnerId.$\":\"$.lockOwnerId\",\"leaseOwnerEmail.$\":\"$.leaseOwnerEmail\",\"requestedBy.$\":\"$.requestedBy\",\"executionArn.$\":\"$.executionArn\"}}},\"ProcessAssignments\":{\"Type\":\"Map\",\"ResultPath\":\"$.mapResults\",\"Next\":\"HandleCompletion\",\"ItemsPath\":\"$.fanOutResult.workItems\",\"ItemSelector\":{\"leaseId.$\":\"$.leaseId\",\"intent.$\":\"$.intent\",\"executionArn.$\":\"$.executionArn\",\"requestedBy.$\":\"$.requestedBy\",\"requestedAt.$\":\"$.requestedAt\",\"leaseOwnerEmail.$\":\"$.leaseOwnerEmail\",\"accountId.$\":\"$.fanOutResult.accountId\",\"item.$\":\"$$.Map.Item.Value\"},\"ItemProcessor\":{\"ProcessorConfig\":{\"Mode\":\"INLINE\"},\"StartAt\":\"SendAssignmentToSQS\",\"States\":{\"SendAssignmentToSQS\":{\"End\":true,\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.itemError\",\"Next\":\"HandleItemError\"}],\"Type\":\"Task\",\"HeartbeatSeconds\":600,\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::sqs:sendMessage.waitForTaskToken\",\"Parameters\":{\"QueueUrl\":\"",
              {
                "Ref": "AssignmentProcessingAssignmentProcessingQueue7E86A417"
              },
              "\",\"MessageBody\":{\"leaseId.$\":\"$.leaseId\",\"intent.$\":\"$.intent\",\"executionArn.$\":\"$.executionArn\",\"requestedBy.$\":\"$.requestedBy\",\"requestedAt.$\":\"$.requestedAt\",\"leaseOwnerEmail.$\":\"$.leaseOwnerEmail\",\"accountId.$\":\"$.accountId\",\"principalId.$\":\"$.item.principalId\",\"principalType.$\":\"$.item.principalType\",\"displayName.$\":\"$.item.displayName\",\"email.$\":\"$.item.email\",\"permissionSetArn.$\":\"$.item.permissionSetArn\",\"taskToken.$\":\"$$.Task.Token\"}}},\"HandleItemError\":{\"Type\":\"Pass\",\"Comment\":\"Catches individual assignment processing errors within the Map state\",\"End\":true}}},\"MaxConcurrency\":20},\"HandleCompletion\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Type\":\"Task\",\"ResultPath\":\"$.completionResult\",\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "AssignmentProcessingProcessorLambdaFunction7EDCCEBE",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"action\":\"HANDLE_COMPLETION\",\"leaseId.$\":\"$.leaseId\",\"intent.$\":\"$.intent\",\"lockOwnerId.$\":\"$.lockOwnerId\",\"leaseOwnerEmail.$\":\"$.leaseOwnerEmail\",\"requestedBy.$\":\"$.requestedBy\",\"accountId.$\":\"$.fanOutResult.accountId\",\"executionArn.$\":\"$.executionArn\",\"fannedOutPrincipals.$\":\"$.fanOutResult.workItems\",\"preExistingPrincipalIds.$\":\"$.fanOutResult.preExistingPrincipalIds\"}}}},\"TimeoutSeconds\":1800}"
            ]
          ]
        },
        "LoggingConfiguration": {
          "Destinations": [
            {
              "CloudWatchLogsLogGroup": {
                "LogGroupArn": {
                  "Fn::GetAtt": [
                    "ISBLogGroupE607F9A7",
                    "Arn"
                  ]
                }
              }
            }
          ],
          "IncludeExecutionData": true,
          "Level": "ALL"
        },
        "RoleArn": {
          "Fn::GetAtt": [
            "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRole56F7CD44",
            "Arn"
          ]
        },
        "StateMachineType": "STANDARD",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "TracingConfiguration": {
          "Enabled": true
        }
      },
      "DependsOn": [
        "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRoleDefaultPolicyF7796BFB",
        "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineRole56F7CD44"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/StepFunction/AssignmentProcessorStateMachine/Resource"
      }
    },
    "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineEventsRole44306764": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/StepFunction/AssignmentProcessorStateMachine/EventsRole/Resource"
      }
    },
    "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineEventsRoleDefaultPolicyA5509945": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "states:StartExecution",
              "Effect": "Allow",
              "Resource": {
                "Ref": "AssignmentProcessingStepFunctionAssignmentProcessorStateMachine80901A50"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineEventsRoleDefaultPolicyA5509945",
        "Roles": [
          {
            "Ref": "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineEventsRole44306764"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/StepFunction/AssignmentProcessorStateMachine/EventsRole/DefaultPolicy/Resource"
      }
    },
    "AssignmentProcessingStepFunctionAssignmentRequestedRule0D657E94": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "Routes AssignmentRequested events to the Assignment Processor Step Function",
        "EventBusName": {
          "Ref": "ISBEventBusD5514129"
        },
        "EventPattern": {
          "detail-type": [
            "AssignmentRequested"
          ]
        },
        "State": "ENABLED",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Targets": [
          {
            "Arn": {
              "Ref": "AssignmentProcessingStepFunctionAssignmentProcessorStateMachine80901A50"
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "AssignmentProcessingStepFunctionAssignmentProcessorStateMachineEventsRole44306764",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/StepFunction/AssignmentRequestedRule/Resource"
      }
    },
    "AssignmentProcessingWorkerLambdaFunctionRole4E9FAEC8": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/WorkerLambda/FunctionRole/Resource"
      }
    },
    "AssignmentProcessingWorkerLambdaFunctionRoleDefaultPolicy857B3FDD": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "sqs:ReceiveMessage",
                "sqs:ChangeMessageVisibility",
                "sqs:GetQueueUrl",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AssignmentProcessingAssignmentProcessingQueue7E86A417",
                  "Arn"
                ]
              }
            },
            {
              "Action": "kms:Decrypt",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "states:SendTaskSuccess",
                "states:SendTaskFailure"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AssignmentProcessingWorkerLambdaFunctionRoleDefaultPolicy857B3FDD",
        "Roles": [
          {
            "Ref": "AssignmentProcessingWorkerLambdaFunctionRole4E9FAEC8"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/WorkerLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AssignmentProcessingWorkerLambdaFunction69DDFA5E": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.a2b8289eb4de974e4b618a8d1f029693010c78e86452899ebaacb799736d49a4.zip"
        },
        "Description": "Processes IDC account assignment operations from the Assignment Processing Queue",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ASSIGNMENT_MAX_RECEIVE_COUNT": "5"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-WorkerLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 5,
        "Role": {
          "Fn::GetAtt": [
            "AssignmentProcessingWorkerLambdaFunctionRole4E9FAEC8",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AssignmentProcessingWorkerLambdaFunctionRoleDefaultPolicy857B3FDD",
        "AssignmentProcessingWorkerLambdaFunctionRole4E9FAEC8"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/WorkerLambda/Function/Resource",
        "aws:asset:path": "asset.a2b8289eb4de974e4b618a8d1f029693010c78e86452899ebaacb799736d49a4",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AssignmentProcessingWorkerLambdaFunctionSqsEventSourceInnovationSandboxComputeAssignmentProcessingAssignmentProcessingQueue29BEAAEA59A8ECC6": {
      "Type": "AWS::Lambda::EventSourceMapping",
      "Properties": {
        "BatchSize": 1,
        "EventSourceArn": {
          "Fn::GetAtt": [
            "AssignmentProcessingAssignmentProcessingQueue7E86A417",
            "Arn"
          ]
        },
        "FunctionName": {
          "Ref": "AssignmentProcessingWorkerLambdaFunction69DDFA5E"
        },
        "FunctionResponseTypes": [
          "ReportBatchItemFailures"
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/WorkerLambda/Function/SqsEventSource:InnovationSandboxComputeAssignmentProcessingAssignmentProcessingQueue29BEAAEA/Resource"
      }
    },
    "AssignmentProcessingWorkerLambdaIsbDbTableReadWrite2582F981": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "AssignmentProcessingWorkerLambdaFunctionRole4E9FAEC8"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/WorkerLambda-IsbDbTableReadWrite/Resource"
      }
    },
    "AssignmentProcessingWorkerLambdaIsbDbTableReadOnly1F7073CB": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "AssignmentProcessingWorkerLambdaFunctionRole4E9FAEC8"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AssignmentProcessing/WorkerLambda-IsbDbTableReadOnly/Resource"
      }
    },
    "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleC98B90FB": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/SyncLambdaFunction/FunctionRole/Resource"
      }
    },
    "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleDefaultPolicy896AA5C3": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleDefaultPolicy896AA5C3",
        "Roles": [
          {
            "Ref": "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleC98B90FB"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/SyncLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "PrincipalCacheSyncSyncLambdaFunctionA81205AF": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.79fe1345f098f80cef74e4a50c1330f3e0f84a266d510e22a75246e49d7e105e.zip"
        },
        "Description": "Syncs IDC principals (users and groups) to DynamoDB cache for fast typeahead search",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-SyncLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleC98B90FB",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleDefaultPolicy896AA5C3",
        "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleC98B90FB"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/SyncLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.79fe1345f098f80cef74e4a50c1330f3e0f84a266d510e22a75246e49d7e105e",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "PrincipalCacheSyncSyncLambdaFunctionIsbDbTableReadWrite40AB5409": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "PrincipalCacheSyncSyncLambdaFunctionFunctionRoleC98B90FB"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/SyncLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "PrincipalCacheSyncSchedulerInvokeRole2FF40F32": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "Allows EventBridge Scheduler to invoke the Principal Cache Sync Lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/SchedulerInvokeRole/Resource"
      }
    },
    "PrincipalCacheSyncSchedulerInvokeRoleDefaultPolicy63E7BD5C": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "PrincipalCacheSyncSyncLambdaFunctionA81205AF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "PrincipalCacheSyncSyncLambdaFunctionA81205AF",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "PrincipalCacheSyncSchedulerInvokeRoleDefaultPolicy63E7BD5C",
        "Roles": [
          {
            "Ref": "PrincipalCacheSyncSchedulerInvokeRole2FF40F32"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/SchedulerInvokeRole/DefaultPolicy/Resource"
      }
    },
    "PrincipalCacheSyncHourlySyncSchedule03927557": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "Syncs IDC principals to DynamoDB cache every hour for fast typeahead search",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 5,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "rate(1 hour)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "PrincipalCacheSyncSyncLambdaFunctionA81205AF",
              "Arn"
            ]
          },
          "Input": "{\"source\":\"scheduled\"}",
          "RetryPolicy": {
            "MaximumRetryAttempts": 2
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "PrincipalCacheSyncSchedulerInvokeRole2FF40F32",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalCacheSync/HourlySyncSchedule"
      }
    },
    "TagActivationWorkflowTagActivationCheckerFunctionRole0E64CAD2": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationChecker/FunctionRole/Resource"
      }
    },
    "TagActivationWorkflowTagActivationCheckerFunctionRoleDefaultPolicyF000FAC5": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCustomResources63629E09",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "TagActivationWorkflowTagActivationCheckerFunctionRoleDefaultPolicyF000FAC5",
        "Roles": [
          {
            "Ref": "TagActivationWorkflowTagActivationCheckerFunctionRole0E64CAD2"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationChecker/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "TagActivationWorkflowTagActivationCheckerFunction14FAD513": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.0d0156887cb7a6a22226354ba8229c0e7713ca069f76148198410ec604048b61.zip"
        },
        "Description": "Seeds ISB cost allocation tag keys on the hub account and polls Cost Explorer until the keys are Active.",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-TagActivationChecker-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "TagActivationWorkflowTagActivationCheckerFunctionRole0E64CAD2",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "TagActivationWorkflowTagActivationCheckerFunctionRoleDefaultPolicyF000FAC5",
        "TagActivationWorkflowTagActivationCheckerFunctionRole0E64CAD2"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationChecker/Function/Resource",
        "aws:asset:path": "asset.0d0156887cb7a6a22226354ba8229c0e7713ca069f76148198410ec604048b61",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "TagActivationWorkflowStateMachineRole82F8FAD4": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "states.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/StateMachine/Role/Resource"
      }
    },
    "TagActivationWorkflowStateMachineRoleDefaultPolicy4881E911": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "TagActivationWorkflowTagActivationCheckerFunction14FAD513",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "TagActivationWorkflowTagActivationCheckerFunction14FAD513",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingRules",
                "xray:GetSamplingTargets"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "TagActivationWorkflowStateMachineRoleDefaultPolicy4881E911",
        "Roles": [
          {
            "Ref": "TagActivationWorkflowStateMachineRole82F8FAD4"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/StateMachine/Role/DefaultPolicy/Resource"
      }
    },
    "TagActivationWorkflowStateMachine33F3E0CC": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "DefinitionString": {
          "Fn::Join": [
            "",
            [
              "{\"StartAt\":\"NormalizeInput\",\"States\":{\"NormalizeInput\":{\"Type\":\"Pass\",\"Parameters\":{\"hubAccountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"maxAttempts\":24,\"attempt\":0},\"Next\":\"SeedTagsTask\"},\"SeedTagsTask\":{\"Next\":\"CheckTagsTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Type\":\"Task\",\"ResultPath\":null,\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "TagActivationWorkflowTagActivationCheckerFunction14FAD513",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"phase\":\"SEED\",\"hubAccountId.$\":\"$.hubAccountId\"}}},\"CheckTagsTask\":{\"Next\":\"IncrementAttempt\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Type\":\"Task\",\"ResultPath\":\"$.checkResult\",\"ResultSelector\":{\"completed.$\":\"$.Payload.completed\"},\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "TagActivationWorkflowTagActivationCheckerFunction14FAD513",
                  "Arn"
                ]
              },
              "\",\"Payload\":{\"phase\":\"CHECK\",\"hubAccountId.$\":\"$.hubAccountId\",\"maxAttempts.$\":\"$.maxAttempts\",\"attempt.$\":\"$.attempt\"}}},\"WaitBeforeNextCheck\":{\"Type\":\"Wait\",\"Seconds\":3600,\"Next\":\"CheckTagsTask\"},\"IncrementAttempt\":{\"Type\":\"Pass\",\"Parameters\":{\"hubAccountId.$\":\"$.hubAccountId\",\"maxAttempts.$\":\"$.maxAttempts\",\"checkResult.$\":\"$.checkResult\",\"attempt.$\":\"States.MathAdd($.attempt, 1)\"},\"Next\":\"EvaluateCheckResult\"},\"EvaluateCheckResult\":{\"Type\":\"Choice\",\"Choices\":[{\"Variable\":\"$.checkResult.completed\",\"BooleanEquals\":true,\"Next\":\"TagActivationSucceeded\"},{\"Variable\":\"$.attempt\",\"NumericGreaterThanEqualsPath\":\"$.maxAttempts\",\"Next\":\"TagActivationMaxAttemptsReached\"}],\"Default\":\"WaitBeforeNextCheck\"},\"TagActivationSucceeded\":{\"Type\":\"Succeed\"},\"TagActivationMaxAttemptsReached\":{\"Type\":\"Fail\",\"Error\":\"TagActivationMaxAttemptsReached\",\"Cause\":\"Tag activation did not complete within the allowed attempts. ISB cost allocation tags may still be inactive in the billing console; manual activation via the Cost Allocation Tags page is the documented fallback.\"}},\"TimeoutSeconds\":90000}"
            ]
          ]
        },
        "LoggingConfiguration": {
          "Destinations": [
            {
              "CloudWatchLogsLogGroup": {
                "LogGroupArn": {
                  "Fn::GetAtt": [
                    "ISBLogGroupCustomResources63629E09",
                    "Arn"
                  ]
                }
              }
            }
          ],
          "IncludeExecutionData": true,
          "Level": "ALL"
        },
        "RoleArn": {
          "Fn::GetAtt": [
            "TagActivationWorkflowStateMachineRole82F8FAD4",
            "Arn"
          ]
        },
        "StateMachineType": "STANDARD",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "TracingConfiguration": {
          "Enabled": true
        }
      },
      "DependsOn": [
        "TagActivationWorkflowStateMachineRoleDefaultPolicy4881E911",
        "TagActivationWorkflowStateMachineRole82F8FAD4"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/StateMachine/Resource"
      }
    },
    "TagActivationWorkflowExecutionFailedAlarmB85853BD": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "Tag activation Step Functions workflow did not complete successfully (Failed or TimedOut). Cost allocation tags may not be active in the billing console; queries relying on ISB-<namespace>:* tag grouping will fall back to the legacy LINKED_ACCOUNT path. Investigate via CloudWatch Logs for the TagActivationChecker Lambda.",
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "EvaluationPeriods": 1,
        "Metrics": [
          {
            "Expression": "failed + timedOut",
            "Id": "expr_1",
            "Label": "TerminalNonSuccessExecutions",
            "ReturnData": true
          },
          {
            "Id": "failed",
            "MetricStat": {
              "Metric": {
                "Dimensions": [
                  {
                    "Name": "StateMachineArn",
                    "Value": {
                      "Ref": "TagActivationWorkflowStateMachine33F3E0CC"
                    }
                  }
                ],
                "MetricName": "ExecutionsFailed",
                "Namespace": "AWS/States"
              },
              "Period": 3600,
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Id": "timedOut",
            "MetricStat": {
              "Metric": {
                "Dimensions": [
                  {
                    "Name": "StateMachineArn",
                    "Value": {
                      "Ref": "TagActivationWorkflowStateMachine33F3E0CC"
                    }
                  }
                ],
                "MetricName": "ExecutionsTimedOut",
                "Namespace": "AWS/States"
              },
              "Period": 3600,
              "Stat": "Sum"
            },
            "ReturnData": false
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Threshold": 1,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/ExecutionFailedAlarm/Resource"
      }
    },
    "TagActivationWorkflowTagActivationTriggerFunctionRole4FE8CECB": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/FunctionRole/Resource"
      }
    },
    "TagActivationWorkflowTagActivationTriggerFunctionRoleDefaultPolicyD2F416D5": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupCustomResources63629E09",
                  "Arn"
                ]
              }
            },
            {
              "Action": "states:StartExecution",
              "Effect": "Allow",
              "Resource": {
                "Ref": "TagActivationWorkflowStateMachine33F3E0CC"
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "TagActivationWorkflowTagActivationTriggerFunctionRoleDefaultPolicyD2F416D5",
        "Roles": [
          {
            "Ref": "TagActivationWorkflowTagActivationTriggerFunctionRole4FE8CECB"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "TagActivationWorkflowTagActivationTriggerFunction80428D64": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.ee563091d2d7800f6836aa84e30affd713be7f3c9fc8d909184c5a9fe64898d3.zip"
        },
        "Description": "Custom resource that starts the tag activation workflow on stack create/update and deactivates ISB cost allocation tags on stack delete.",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "STATE_MACHINE_ARN": {
              "Ref": "TagActivationWorkflowStateMachine33F3E0CC"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-TagActivationTrigger-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "TagActivationWorkflowTagActivationTriggerFunctionRole4FE8CECB",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "TagActivationWorkflowTagActivationTriggerFunctionRoleDefaultPolicyD2F416D5",
        "TagActivationWorkflowTagActivationTriggerFunctionRole4FE8CECB"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/Function/Resource",
        "aws:asset:path": "asset.ee563091d2d7800f6836aa84e30affd713be7f3c9fc8d909184c5a9fe64898d3",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRole326692AC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/IsbProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRoleDefaultPolicyA99E2B04": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "TagActivationWorkflowTagActivationTriggerFunction80428D64",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "TagActivationWorkflowTagActivationTriggerFunction80428D64",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "TagActivationWorkflowTagActivationTriggerFunction80428D64",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRoleDefaultPolicyA99E2B04",
        "Roles": [
          {
            "Ref": "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRole326692AC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/IsbProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEvent83FB7324": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/IsbProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "TagActivationWorkflowTagActivationTriggerFunction80428D64",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "LoggingConfig": {
          "ApplicationLogLevel": "FATAL",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRole326692AC",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRoleDefaultPolicyA99E2B04",
        "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEventServiceRole326692AC"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/IsbProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "TagActivationWorkflowTagActivationTriggerIsbCustomResource87BDA742": {
      "Type": "Custom::TagActivationTrigger",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "TagActivationWorkflowTagActivationTriggerIsbProviderframeworkonEvent83FB7324",
            "Arn"
          ]
        },
        "forceUpdate": 1787757867706
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TagActivationWorkflow/TagActivationTrigger/IsbCustomResource/Default"
      }
    },
    "TaggingFailureAlarmGlobalTagFailedFilterC0030B44": {
      "Type": "AWS::Logs::MetricFilter",
      "Properties": {
        "FilterPattern": "{ $.logDetailType = \"TagResourceFailed\" }",
        "LogGroupName": {
          "Ref": "ISBLogGroupE607F9A7"
        },
        "MetricTransformations": [
          {
            "DefaultValue": 0,
            "MetricName": "TagResourceFailedGlobal",
            "MetricNamespace": "InnovationSandbox/Tagging",
            "MetricValue": "1"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TaggingFailureAlarm/GlobalTagFailedFilter/Resource"
      }
    },
    "TaggingFailureAlarmCleanupTagFailedFilterAAC3C763": {
      "Type": "AWS::Logs::MetricFilter",
      "Properties": {
        "FilterPattern": "{ $.logDetailType = \"TagResourceFailed\" }",
        "LogGroupName": {
          "Ref": "ISBLogGroupCleanup485A102F"
        },
        "MetricTransformations": [
          {
            "DefaultValue": 0,
            "MetricName": "TagResourceFailedCleanup",
            "MetricNamespace": "InnovationSandbox/Tagging",
            "MetricValue": "1"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TaggingFailureAlarm/CleanupTagFailedFilter/Resource"
      }
    },
    "TaggingFailureAlarmTagResourceFailedAlarmA4D48CAA": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "One or more `Organizations:TagResource` calls failed inside the ISB lifecycle in the last hour. Failures leave sandbox accounts without ISB-<namespace>:* tags, causing lease-monitoring to fall back to the legacy LINKED_ACCOUNT cost-attribution path for the affected leases. Investigate via structured logs (`logDetailType=TagResourceFailed`) in the ISB log groups to determine the `reason` (TagSpaceExhausted vs ApiError) and remediate.",
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "EvaluationPeriods": 1,
        "Metrics": [
          {
            "Expression": "global + cleanup",
            "Id": "expr_1",
            "Label": "TagResourceFailedTotal",
            "ReturnData": true
          },
          {
            "Id": "global",
            "MetricStat": {
              "Metric": {
                "MetricName": "TagResourceFailedGlobal",
                "Namespace": "InnovationSandbox/Tagging"
              },
              "Period": 3600,
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Id": "cleanup",
            "MetricStat": {
              "Metric": {
                "MetricName": "TagResourceFailedCleanup",
                "Namespace": "InnovationSandbox/Tagging"
              },
              "Period": 3600,
              "Stat": "Sum"
            },
            "ReturnData": false
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Threshold": 1,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/TaggingFailureAlarm/TagResourceFailedAlarm/Resource"
      }
    },
    "IsbRestApi377E2CC6": {
      "Type": "AWS::ApiGateway::RestApi",
      "Properties": {
        "Description": "Innovation Sandbox on AWS Rest API",
        "Name": "IsbRestApi",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Resource"
      }
    },
    "IsbRestApiCloudWatchRole3E2A3B92": {
      "Type": "AWS::IAM::Role",
      "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": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/CloudWatchRole/Resource"
      }
    },
    "IsbRestApiAccountF2A31F36": {
      "Type": "AWS::ApiGateway::Account",
      "Properties": {
        "CloudWatchRoleArn": {
          "Fn::GetAtt": [
            "IsbRestApiCloudWatchRole3E2A3B92",
            "Arn"
          ]
        }
      },
      "DependsOn": [
        "IsbRestApi377E2CC6"
      ],
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Account"
      }
    },
    "IsbRestApiDeployment120FC0532746893b3c849efe82308d6f721dfe62": {
      "Type": "AWS::ApiGateway::Deployment",
      "Properties": {
        "Description": "Innovation Sandbox on AWS Rest API",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "DependsOn": [
        "IsbRestApiaccountsawsAccountIdcleanupreportsGETCAE8E2C6",
        "IsbRestApiaccountsawsAccountIdcleanupreports0DBE9891",
        "IsbRestApiaccountsawsAccountIdejectPOST8D3E80E9",
        "IsbRestApiaccountsawsAccountIdeject6D451D8A",
        "IsbRestApiaccountsawsAccountIdGETA3567A33",
        "IsbRestApiaccountsawsAccountIdquarantinePOST6A095E00",
        "IsbRestApiaccountsawsAccountIdquarantineB048FA2A",
        "IsbRestApiaccountsawsAccountId279CF7F2",
        "IsbRestApiaccountsawsAccountIdretryCleanupPOST8F8AF552",
        "IsbRestApiaccountsawsAccountIdretryCleanup5F96B82E",
        "IsbRestApiaccountsawsAccountIdskipCooldownPOST69BD197C",
        "IsbRestApiaccountsawsAccountIdskipCooldownB957C766",
        "IsbRestApiaccountsGET9C185DB2",
        "IsbRestApiaccountsPOST13FEF3B9",
        "IsbRestApiaccounts69CD8364",
        "IsbRestApiaccountsunregisteredGET1A7AE469",
        "IsbRestApiaccountsunregistered0069F65F",
        "IsbRestApiblueprintsblueprintIdDELETE999AABA6",
        "IsbRestApiblueprintsblueprintIdGETBD57AC27",
        "IsbRestApiblueprintsblueprintIdPUT4E2B6458",
        "IsbRestApiblueprintsblueprintId49293701",
        "IsbRestApiblueprintsGET8E9D6FB5",
        "IsbRestApiblueprintsPOSTA9016983",
        "IsbRestApiblueprints5F702E36",
        "IsbRestApiblueprintsstacksetsGETDEEB1121",
        "IsbRestApiblueprintsstacksets500BFF02",
        "IsbRestApiconfigurationssectionGETD4AA77FE",
        "IsbRestApiconfigurationssectionPUTDBEC8D8C",
        "IsbRestApiconfigurationssection8E566F66",
        "IsbRestApiconfigurationsGETCB095983",
        "IsbRestApiconfigurations6FE57EA4",
        "IsbRestApileasesleaseIdassignmentsGETEFDEBB7F",
        "IsbRestApileasesleaseIdassignmentsPUT5E8CB905",
        "IsbRestApileasesleaseIdassignments02674BE5",
        "IsbRestApileasesleaseIdfreezePOSTDE894D78",
        "IsbRestApileasesleaseIdfreeze3A28784A",
        "IsbRestApileasesleaseIdGETFC53DF30",
        "IsbRestApileasesleaseIdPATCHAB95D5E9",
        "IsbRestApileasesleaseId9851F99B",
        "IsbRestApileasesleaseIdreviewPOST03D6AD94",
        "IsbRestApileasesleaseIdreview53E1F41F",
        "IsbRestApileasesleaseIdterminatePOSTD029AED7",
        "IsbRestApileasesleaseIdterminate0B5F429B",
        "IsbRestApileasesleaseIdunfreezePOST63C4E6CA",
        "IsbRestApileasesleaseIdunfreezeC90D1F13",
        "IsbRestApileasesGET2040EBB6",
        "IsbRestApileasesPOST0BA078F5",
        "IsbRestApileases603F143D",
        "IsbRestApileasessharedGETAE06B035",
        "IsbRestApileasesshared697D97C0",
        "IsbRestApileaseTemplatesleaseTemplateNameDELETEC19BA76D",
        "IsbRestApileaseTemplatesleaseTemplateNameGETABE25277",
        "IsbRestApileaseTemplatesleaseTemplateNamePUTA18EDFBF",
        "IsbRestApileaseTemplatesleaseTemplateName6CF1F9DC",
        "IsbRestApileaseTemplatesGETD139D035",
        "IsbRestApileaseTemplatesPOST61718B66",
        "IsbRestApileaseTemplates87AB84C6",
        "IsbRestApiprincipalsC246090E",
        "IsbRestApiprincipalssearchGET9A1695AB",
        "IsbRestApiprincipalssearchB66ED03C"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Deployment/Resource",
        "aws:cdk:do-not-refactor": true
      }
    },
    "IsbRestApiDeploymentStageprod7DDD9304": {
      "Type": "AWS::ApiGateway::Stage",
      "Properties": {
        "AccessLogSetting": {
          "DestinationArn": {
            "Fn::GetAtt": [
              "ISBLogGroupE607F9A7",
              "Arn"
            ]
          },
          "Format": "$context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime] \"$context.httpMethod $context.resourcePath $context.protocol\" $context.status $context.responseLength $context.requestId"
        },
        "CacheClusterEnabled": true,
        "CacheClusterSize": "0.5",
        "DeploymentId": {
          "Ref": "IsbRestApiDeployment120FC0532746893b3c849efe82308d6f721dfe62"
        },
        "MethodSettings": [
          {
            "CacheDataEncrypted": true,
            "CachingEnabled": false,
            "DataTraceEnabled": false,
            "HttpMethod": "*",
            "ResourcePath": "/*",
            "ThrottlingBurstLimit": {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "apiThrottlingBurstLimit",
                {
                  "DefaultValue": ""
                }
              ]
            },
            "ThrottlingRateLimit": {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "apiThrottlingRateLimit",
                {
                  "DefaultValue": ""
                }
              ]
            }
          }
        ],
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        },
        "StageName": "prod",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "TracingEnabled": true
      },
      "DependsOn": [
        "IsbRestApiAccountF2A31F36"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/DeploymentStage.prod/Resource",
        "guard": {
          "SuppressedRules": [
            "API_GW_CACHE_ENABLED_AND_ENCRYPTED"
          ]
        }
      }
    },
    "IsbRestApileases603F143D": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Fn::GetAtt": [
            "IsbRestApi377E2CC6",
            "RootResourceId"
          ]
        },
        "PathPart": "leases",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/Resource"
      }
    },
    "IsbRestApileasesGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETleasesF96F30F2": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/leases"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases"
      }
    },
    "IsbRestApileasesGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETleases64573D40": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/leases"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases"
      }
    },
    "IsbRestApileasesGET2040EBB6": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileases603F143D"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/GET/Resource"
      }
    },
    "IsbRestApileasesPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTleases01474BA9": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/leases"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases"
      }
    },
    "IsbRestApileasesPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesDA568788": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/leases"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases"
      }
    },
    "IsbRestApileasesPOST0BA078F5": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileases603F143D"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/POST/Resource"
      }
    },
    "IsbRestApileasesleaseId9851F99B": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileases603F143D"
        },
        "PathPart": "{leaseId}",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/Resource"
      }
    },
    "IsbRestApileasesleaseIdGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETleasesleaseId4FB5D873": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/leases/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases.{leaseId}"
      }
    },
    "IsbRestApileasesleaseIdGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETleasesleaseId12E86A16": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/leases/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases.{leaseId}"
      }
    },
    "IsbRestApileasesleaseIdGETFC53DF30": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/GET/Resource"
      }
    },
    "IsbRestApileasesleaseIdPATCHApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007PATCHleasesleaseId2BDAEB15": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/PATCH/leases/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/PATCH/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.PATCH..leases.{leaseId}"
      }
    },
    "IsbRestApileasesleaseIdPATCHApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007PATCHleasesleaseId5630CB56": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/PATCH/leases/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/PATCH/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.PATCH..leases.{leaseId}"
      }
    },
    "IsbRestApileasesleaseIdPATCHAB95D5E9": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "PATCH",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/PATCH/Resource"
      }
    },
    "IsbRestApileasesleaseIdreview53E1F41F": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "PathPart": "review",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/review/Resource"
      }
    },
    "IsbRestApileasesleaseIdreviewPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdreviewAE391C69": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/leases/*/review"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/review/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.review"
      }
    },
    "IsbRestApileasesleaseIdreviewPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdreview8C333AC3": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/leases/*/review"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/review/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.review"
      }
    },
    "IsbRestApileasesleaseIdreviewPOST03D6AD94": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseIdreview53E1F41F"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/review/POST/Resource"
      }
    },
    "IsbRestApileasesleaseIdfreeze3A28784A": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "PathPart": "freeze",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/freeze/Resource"
      }
    },
    "IsbRestApileasesleaseIdfreezePOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdfreezeD9A48CF9": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/leases/*/freeze"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/freeze/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.freeze"
      }
    },
    "IsbRestApileasesleaseIdfreezePOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdfreezeDE813A18": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/leases/*/freeze"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/freeze/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.freeze"
      }
    },
    "IsbRestApileasesleaseIdfreezePOSTDE894D78": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseIdfreeze3A28784A"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/freeze/POST/Resource"
      }
    },
    "IsbRestApileasesleaseIdunfreezeC90D1F13": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "PathPart": "unfreeze",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/unfreeze/Resource"
      }
    },
    "IsbRestApileasesleaseIdunfreezePOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdunfreezeD0F25169": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/leases/*/unfreeze"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/unfreeze/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.unfreeze"
      }
    },
    "IsbRestApileasesleaseIdunfreezePOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdunfreeze3DD8301E": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/leases/*/unfreeze"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/unfreeze/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.unfreeze"
      }
    },
    "IsbRestApileasesleaseIdunfreezePOST63C4E6CA": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseIdunfreezeC90D1F13"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/unfreeze/POST/Resource"
      }
    },
    "IsbRestApileasesleaseIdterminate0B5F429B": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "PathPart": "terminate",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/terminate/Resource"
      }
    },
    "IsbRestApileasesleaseIdterminatePOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdterminate0EF4225F": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/leases/*/terminate"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/terminate/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.terminate"
      }
    },
    "IsbRestApileasesleaseIdterminatePOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTleasesleaseIdterminate227088A9": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/leases/*/terminate"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/terminate/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leases.{leaseId}.terminate"
      }
    },
    "IsbRestApileasesleaseIdterminatePOSTD029AED7": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseIdterminate0B5F429B"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/terminate/POST/Resource"
      }
    },
    "IsbRestApileasesleaseIdassignments02674BE5": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileasesleaseId9851F99B"
        },
        "PathPart": "assignments",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/Resource"
      }
    },
    "IsbRestApileasesleaseIdassignmentsGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETleasesleaseIdassignments2B42AF13": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/leases/*/assignments"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases.{leaseId}.assignments"
      }
    },
    "IsbRestApileasesleaseIdassignmentsGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETleasesleaseIdassignments5CC04FBD": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/leases/*/assignments"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases.{leaseId}.assignments"
      }
    },
    "IsbRestApileasesleaseIdassignmentsGETEFDEBB7F": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseIdassignments02674BE5"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/GET/Resource"
      }
    },
    "IsbRestApileasesleaseIdassignmentsPUTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007PUTleasesleaseIdassignments86833059": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/PUT/leases/*/assignments"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/PUT/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..leases.{leaseId}.assignments"
      }
    },
    "IsbRestApileasesleaseIdassignmentsPUTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007PUTleasesleaseIdassignments127B517D": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/PUT/leases/*/assignments"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/PUT/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..leases.{leaseId}.assignments"
      }
    },
    "IsbRestApileasesleaseIdassignmentsPUT5E8CB905": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "PUT",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesleaseIdassignments02674BE5"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/{leaseId}/assignments/PUT/Resource"
      }
    },
    "IsbRestApileasesshared697D97C0": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileases603F143D"
        },
        "PathPart": "shared",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/shared/Resource"
      }
    },
    "IsbRestApileasessharedGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETleasesshared72AAE35B": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/leases/shared"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/shared/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases.shared"
      }
    },
    "IsbRestApileasessharedGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETleasesshared975088A2": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeasesLambdaFunction6133D88B",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/leases/shared"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/shared/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leases.shared"
      }
    },
    "IsbRestApileasessharedGETAE06B035": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeasesLambdaFunction6133D88B",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileasesshared697D97C0"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leases/shared/GET/Resource"
      }
    },
    "IsbRestApileaseTemplates87AB84C6": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Fn::GetAtt": [
            "IsbRestApi377E2CC6",
            "RootResourceId"
          ]
        },
        "PathPart": "leaseTemplates",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/Resource"
      }
    },
    "IsbRestApileaseTemplatesGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETleaseTemplates392C8D46": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/leaseTemplates"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leaseTemplates"
      }
    },
    "IsbRestApileaseTemplatesGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETleaseTemplates18586AE9": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/leaseTemplates"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leaseTemplates"
      }
    },
    "IsbRestApileaseTemplatesGETD139D035": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeaseTemplatesLambdaFunction2965B8D5",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileaseTemplates87AB84C6"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/GET/Resource"
      }
    },
    "IsbRestApileaseTemplatesPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTleaseTemplates60B460A6": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/leaseTemplates"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leaseTemplates"
      }
    },
    "IsbRestApileaseTemplatesPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTleaseTemplates185DC666": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/leaseTemplates"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..leaseTemplates"
      }
    },
    "IsbRestApileaseTemplatesPOST61718B66": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeaseTemplatesLambdaFunction2965B8D5",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileaseTemplates87AB84C6"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/POST/Resource"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateName6CF1F9DC": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApileaseTemplates87AB84C6"
        },
        "PathPart": "{leaseTemplateName}",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/Resource"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNameGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETleaseTemplatesleaseTemplateName49E26F2B": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/leaseTemplates/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leaseTemplates.{leaseTemplateName}"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNameGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETleaseTemplatesleaseTemplateNameCE3757F1": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/leaseTemplates/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..leaseTemplates.{leaseTemplateName}"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNameGETABE25277": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeaseTemplatesLambdaFunction2965B8D5",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileaseTemplatesleaseTemplateName6CF1F9DC"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/GET/Resource"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNamePUTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007PUTleaseTemplatesleaseTemplateName3E0A367E": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/PUT/leaseTemplates/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/PUT/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..leaseTemplates.{leaseTemplateName}"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNamePUTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007PUTleaseTemplatesleaseTemplateNameB9E2CCAF": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/PUT/leaseTemplates/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/PUT/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..leaseTemplates.{leaseTemplateName}"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNamePUTA18EDFBF": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "PUT",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeaseTemplatesLambdaFunction2965B8D5",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileaseTemplatesleaseTemplateName6CF1F9DC"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/PUT/Resource"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNameDELETEApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007DELETEleaseTemplatesleaseTemplateName57A6E2EB": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/DELETE/leaseTemplates/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/DELETE/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.DELETE..leaseTemplates.{leaseTemplateName}"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNameDELETEApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007DELETEleaseTemplatesleaseTemplateName7F7AA768": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunction2965B8D5",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/DELETE/leaseTemplates/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/DELETE/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.DELETE..leaseTemplates.{leaseTemplateName}"
      }
    },
    "IsbRestApileaseTemplatesleaseTemplateNameDELETEC19BA76D": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "DELETE",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "LeaseTemplatesLambdaFunction2965B8D5",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApileaseTemplatesleaseTemplateName6CF1F9DC"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/leaseTemplates/{leaseTemplateName}/DELETE/Resource"
      }
    },
    "IsbRestApiaccounts69CD8364": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Fn::GetAtt": [
            "IsbRestApi377E2CC6",
            "RootResourceId"
          ]
        },
        "PathPart": "accounts",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/Resource"
      }
    },
    "IsbRestApiaccountsGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsAF515070": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/accounts"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts"
      }
    },
    "IsbRestApiaccountsGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsB9E6E2AD": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/accounts"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts"
      }
    },
    "IsbRestApiaccountsGET9C185DB2": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccounts69CD8364"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/GET/Resource"
      }
    },
    "IsbRestApiaccountsPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTaccounts9A78638B": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/accounts"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts"
      }
    },
    "IsbRestApiaccountsPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsC5E7AB33": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/accounts"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts"
      }
    },
    "IsbRestApiaccountsPOST13FEF3B9": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccounts69CD8364"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/POST/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountId279CF7F2": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccounts69CD8364"
        },
        "PathPart": "{awsAccountId}",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsawsAccountId204640B8": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/accounts/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts.{awsAccountId}"
      }
    },
    "IsbRestApiaccountsawsAccountIdGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsawsAccountId09130513": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/accounts/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts.{awsAccountId}"
      }
    },
    "IsbRestApiaccountsawsAccountIdGETA3567A33": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsawsAccountId279CF7F2"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/GET/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdretryCleanup5F96B82E": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccountsawsAccountId279CF7F2"
        },
        "PathPart": "retryCleanup",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/retryCleanup/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdretryCleanupPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdretryCleanup00AD40F6": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/accounts/*/retryCleanup"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/retryCleanup/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.retryCleanup"
      }
    },
    "IsbRestApiaccountsawsAccountIdretryCleanupPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdretryCleanupA8AB6F2C": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/accounts/*/retryCleanup"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/retryCleanup/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.retryCleanup"
      }
    },
    "IsbRestApiaccountsawsAccountIdretryCleanupPOST8F8AF552": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsawsAccountIdretryCleanup5F96B82E"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/retryCleanup/POST/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdeject6D451D8A": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccountsawsAccountId279CF7F2"
        },
        "PathPart": "eject",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/eject/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdejectPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdejectADB12F2B": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/accounts/*/eject"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/eject/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.eject"
      }
    },
    "IsbRestApiaccountsawsAccountIdejectPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdejectAB799075": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/accounts/*/eject"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/eject/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.eject"
      }
    },
    "IsbRestApiaccountsawsAccountIdejectPOST8D3E80E9": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsawsAccountIdeject6D451D8A"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/eject/POST/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdquarantineB048FA2A": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccountsawsAccountId279CF7F2"
        },
        "PathPart": "quarantine",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/quarantine/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdquarantinePOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdquarantineEACF95C2": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/accounts/*/quarantine"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/quarantine/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.quarantine"
      }
    },
    "IsbRestApiaccountsawsAccountIdquarantinePOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdquarantine60BD3C85": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/accounts/*/quarantine"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/quarantine/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.quarantine"
      }
    },
    "IsbRestApiaccountsawsAccountIdquarantinePOST6A095E00": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsawsAccountIdquarantineB048FA2A"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/quarantine/POST/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdcleanupreports0DBE9891": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccountsawsAccountId279CF7F2"
        },
        "PathPart": "cleanup-reports",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/cleanup-reports/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdcleanupreportsGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsawsAccountIdcleanupreports4B202BF2": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/accounts/*/cleanup-reports"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/cleanup-reports/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts.{awsAccountId}.cleanup-reports"
      }
    },
    "IsbRestApiaccountsawsAccountIdcleanupreportsGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsawsAccountIdcleanupreports4FE49FFC": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/accounts/*/cleanup-reports"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/cleanup-reports/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts.{awsAccountId}.cleanup-reports"
      }
    },
    "IsbRestApiaccountsawsAccountIdcleanupreportsGETCAE8E2C6": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsawsAccountIdcleanupreports0DBE9891"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/cleanup-reports/GET/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdskipCooldownB957C766": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccountsawsAccountId279CF7F2"
        },
        "PathPart": "skipCooldown",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/skipCooldown/Resource"
      }
    },
    "IsbRestApiaccountsawsAccountIdskipCooldownPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdskipCooldown72A91589": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/accounts/*/skipCooldown"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/skipCooldown/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.skipCooldown"
      }
    },
    "IsbRestApiaccountsawsAccountIdskipCooldownPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTaccountsawsAccountIdskipCooldown14084D6F": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/accounts/*/skipCooldown"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/skipCooldown/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..accounts.{awsAccountId}.skipCooldown"
      }
    },
    "IsbRestApiaccountsawsAccountIdskipCooldownPOST69BD197C": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsawsAccountIdskipCooldownB957C766"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/{awsAccountId}/skipCooldown/POST/Resource"
      }
    },
    "IsbRestApiaccountsunregistered0069F65F": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiaccounts69CD8364"
        },
        "PathPart": "unregistered",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/unregistered/Resource"
      }
    },
    "IsbRestApiaccountsunregisteredGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsunregistered26B4C43A": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/accounts/unregistered"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/unregistered/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts.unregistered"
      }
    },
    "IsbRestApiaccountsunregisteredGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETaccountsunregistered09A9E44D": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AccountsLambdaFunction47AFACD2",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/accounts/unregistered"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/unregistered/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..accounts.unregistered"
      }
    },
    "IsbRestApiaccountsunregisteredGET1A7AE469": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "AccountsLambdaFunction47AFACD2",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiaccountsunregistered0069F65F"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/accounts/unregistered/GET/Resource"
      }
    },
    "IsbRestApiblueprints5F702E36": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Fn::GetAtt": [
            "IsbRestApi377E2CC6",
            "RootResourceId"
          ]
        },
        "PathPart": "blueprints",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/Resource"
      }
    },
    "IsbRestApiblueprintsGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETblueprintsA202C78A": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/blueprints"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..blueprints"
      }
    },
    "IsbRestApiblueprintsGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETblueprints4C829A94": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/blueprints"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..blueprints"
      }
    },
    "IsbRestApiblueprintsGET8E9D6FB5": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "BlueprintsLambdaFunction92CE4466",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiblueprints5F702E36"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/GET/Resource"
      }
    },
    "IsbRestApiblueprintsPOSTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007POSTblueprints4B6A01BF": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/POST/blueprints"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/POST/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.POST..blueprints"
      }
    },
    "IsbRestApiblueprintsPOSTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007POSTblueprintsEAD04AAB": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/POST/blueprints"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/POST/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.POST..blueprints"
      }
    },
    "IsbRestApiblueprintsPOSTA9016983": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "POST",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "BlueprintsLambdaFunction92CE4466",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiblueprints5F702E36"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/POST/Resource"
      }
    },
    "IsbRestApiblueprintsstacksets500BFF02": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiblueprints5F702E36"
        },
        "PathPart": "stacksets",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/stacksets/Resource"
      }
    },
    "IsbRestApiblueprintsstacksetsGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETblueprintsstacksets7EE665F0": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/blueprints/stacksets"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/stacksets/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..blueprints.stacksets"
      }
    },
    "IsbRestApiblueprintsstacksetsGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETblueprintsstacksets1CF64955": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/blueprints/stacksets"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/stacksets/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..blueprints.stacksets"
      }
    },
    "IsbRestApiblueprintsstacksetsGETDEEB1121": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "BlueprintsLambdaFunction92CE4466",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiblueprintsstacksets500BFF02"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/stacksets/GET/Resource"
      }
    },
    "IsbRestApiblueprintsblueprintId49293701": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiblueprints5F702E36"
        },
        "PathPart": "{blueprintId}",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/Resource"
      }
    },
    "IsbRestApiblueprintsblueprintIdGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETblueprintsblueprintId337545DC": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/blueprints/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..blueprints.{blueprintId}"
      }
    },
    "IsbRestApiblueprintsblueprintIdGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETblueprintsblueprintId1296BDB6": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/blueprints/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..blueprints.{blueprintId}"
      }
    },
    "IsbRestApiblueprintsblueprintIdGETBD57AC27": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "BlueprintsLambdaFunction92CE4466",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiblueprintsblueprintId49293701"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/GET/Resource"
      }
    },
    "IsbRestApiblueprintsblueprintIdPUTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007PUTblueprintsblueprintId23776594": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/PUT/blueprints/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/PUT/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..blueprints.{blueprintId}"
      }
    },
    "IsbRestApiblueprintsblueprintIdPUTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007PUTblueprintsblueprintId9B700D93": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/PUT/blueprints/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/PUT/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..blueprints.{blueprintId}"
      }
    },
    "IsbRestApiblueprintsblueprintIdPUT4E2B6458": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "PUT",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "BlueprintsLambdaFunction92CE4466",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiblueprintsblueprintId49293701"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/PUT/Resource"
      }
    },
    "IsbRestApiblueprintsblueprintIdDELETEApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007DELETEblueprintsblueprintId6EAAF73B": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/DELETE/blueprints/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/DELETE/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.DELETE..blueprints.{blueprintId}"
      }
    },
    "IsbRestApiblueprintsblueprintIdDELETEApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007DELETEblueprintsblueprintId22D9A1CF": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunction92CE4466",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/DELETE/blueprints/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/DELETE/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.DELETE..blueprints.{blueprintId}"
      }
    },
    "IsbRestApiblueprintsblueprintIdDELETE999AABA6": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "DELETE",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "BlueprintsLambdaFunction92CE4466",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiblueprintsblueprintId49293701"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/blueprints/{blueprintId}/DELETE/Resource"
      }
    },
    "IsbRestApiconfigurations6FE57EA4": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Fn::GetAtt": [
            "IsbRestApi377E2CC6",
            "RootResourceId"
          ]
        },
        "PathPart": "configurations",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/Resource"
      }
    },
    "IsbRestApiconfigurationsGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETconfigurations8BE4A8AD": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionBD1B5393",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/configurations"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..configurations"
      }
    },
    "IsbRestApiconfigurationsGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETconfigurationsBDC07FAD": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionBD1B5393",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/configurations"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..configurations"
      }
    },
    "IsbRestApiconfigurationsGETCB095983": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "ConfigurationsLambdaFunctionBD1B5393",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiconfigurations6FE57EA4"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/GET/Resource"
      }
    },
    "IsbRestApiconfigurationssection8E566F66": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiconfigurations6FE57EA4"
        },
        "PathPart": "{section}",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/Resource"
      }
    },
    "IsbRestApiconfigurationssectionGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETconfigurationssectionFAA71451": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionBD1B5393",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/configurations/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..configurations.{section}"
      }
    },
    "IsbRestApiconfigurationssectionGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETconfigurationssection2BE34340": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionBD1B5393",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/configurations/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..configurations.{section}"
      }
    },
    "IsbRestApiconfigurationssectionGETD4AA77FE": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "ConfigurationsLambdaFunctionBD1B5393",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiconfigurationssection8E566F66"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/GET/Resource"
      }
    },
    "IsbRestApiconfigurationssectionPUTApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007PUTconfigurationssectionEEE8055F": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionBD1B5393",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/PUT/configurations/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/PUT/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..configurations.{section}"
      }
    },
    "IsbRestApiconfigurationssectionPUTApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007PUTconfigurationssection57C48A72": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionBD1B5393",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/PUT/configurations/*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/PUT/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.PUT..configurations.{section}"
      }
    },
    "IsbRestApiconfigurationssectionPUTDBEC8D8C": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "PUT",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "ConfigurationsLambdaFunctionBD1B5393",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiconfigurationssection8E566F66"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/configurations/{section}/PUT/Resource"
      }
    },
    "IsbRestApiprincipalsC246090E": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Fn::GetAtt": [
            "IsbRestApi377E2CC6",
            "RootResourceId"
          ]
        },
        "PathPart": "principals",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/principals/Resource"
      }
    },
    "IsbRestApiprincipalssearchB66ED03C": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "ParentId": {
          "Ref": "IsbRestApiprincipalsC246090E"
        },
        "PathPart": "search",
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/principals/search/Resource"
      }
    },
    "IsbRestApiprincipalssearchGETApiPermissionInnovationSandboxComputeIsbRestApi0C9DF007GETprincipalssearch3B7CF4D1": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "PrincipalsLambdaFunction002F6A90",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              },
              "/GET/principals/search"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/principals/search/GET/ApiPermission.InnovationSandboxComputeIsbRestApi0C9DF007.GET..principals.search"
      }
    },
    "IsbRestApiprincipalssearchGETApiPermissionTestInnovationSandboxComputeIsbRestApi0C9DF007GETprincipalssearchCF47EE75": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "PrincipalsLambdaFunction002F6A90",
            "Arn"
          ]
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":execute-api:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/test-invoke-stage/GET/principals/search"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/principals/search/GET/ApiPermission.Test.InnovationSandboxComputeIsbRestApi0C9DF007.GET..principals.search"
      }
    },
    "IsbRestApiprincipalssearchGET9A1695AB": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "AWS_IAM",
        "HttpMethod": "GET",
        "Integration": {
          "IntegrationHttpMethod": "POST",
          "Type": "AWS_PROXY",
          "Uri": {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":apigateway:",
                {
                  "Ref": "AWS::Region"
                },
                ":lambda:path/2015-03-31/functions/",
                {
                  "Fn::GetAtt": [
                    "PrincipalsLambdaFunction002F6A90",
                    "Arn"
                  ]
                },
                "/invocations"
              ]
            ]
          }
        },
        "ResourceId": {
          "Ref": "IsbRestApiprincipalssearchB66ED03C"
        },
        "RestApiId": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Default/principals/search/GET/Resource"
      }
    },
    "IsbRestApiWafIPSet5A3AFEFA": {
      "Type": "AWS::WAFv2::IPSet",
      "Properties": {
        "Addresses": {
          "Ref": "AllowListedIPRanges"
        },
        "IPAddressVersion": "IPV4",
        "Scope": "REGIONAL",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/IPSet"
      }
    },
    "IsbRestApiWafWebAcl54DDDB1F": {
      "Type": "AWS::WAFv2::WebACL",
      "Properties": {
        "CustomResponseBodies": {
          "TooManyRequests": {
            "Content": "{\"message\":\"Too many requests\"}",
            "ContentType": "APPLICATION_JSON"
          }
        },
        "DefaultAction": {
          "Allow": {}
        },
        "Rules": [
          {
            "Action": {
              "Block": {}
            },
            "Name": "IsbAllowListRule",
            "Priority": 0,
            "Statement": {
              "NotStatement": {
                "Statement": {
                  "IPSetReferenceStatement": {
                    "Arn": {
                      "Fn::GetAtt": [
                        "IsbRestApiWafIPSet5A3AFEFA",
                        "Arn"
                      ]
                    },
                    "IPSetForwardedIPConfig": {
                      "FallbackBehavior": "NO_MATCH",
                      "HeaderName": "X-Forwarded-For",
                      "Position": "LAST"
                    }
                  }
                }
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "IsbAllowListRuleMetric",
              "SampledRequestsEnabled": true
            }
          },
          {
            "Action": {
              "Block": {
                "CustomResponse": {
                  "CustomResponseBodyKey": "TooManyRequests",
                  "ResponseCode": 429
                }
              }
            },
            "Name": "IsbRateLimitRule",
            "Priority": 1,
            "Statement": {
              "RateBasedStatement": {
                "AggregateKeyType": "FORWARDED_IP",
                "EvaluationWindowSec": 60,
                "ForwardedIPConfig": {
                  "FallbackBehavior": "MATCH",
                  "HeaderName": "X-Forwarded-For"
                },
                "Limit": 200
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "IsbRateLimitRuleMetric",
              "SampledRequestsEnabled": true
            }
          },
          {
            "Name": "AWSManagedRulesCommonRuleSet",
            "OverrideAction": {
              "None": {}
            },
            "Priority": 2,
            "Statement": {
              "ManagedRuleGroupStatement": {
                "ExcludedRules": [
                  {
                    "Name": "SizeRestrictions_BODY"
                  },
                  {
                    "Name": "SizeRestrictions_QUERYSTRING"
                  },
                  {
                    "Name": "CrossSiteScripting_BODY"
                  }
                ],
                "Name": "AWSManagedRulesCommonRuleSet",
                "VendorName": "AWS"
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "AWSManagedRulesCommonRuleSetMetric",
              "SampledRequestsEnabled": true
            }
          },
          {
            "Name": "AWSManagedRulesAmazonIpReputationList",
            "OverrideAction": {
              "None": {}
            },
            "Priority": 3,
            "Statement": {
              "ManagedRuleGroupStatement": {
                "Name": "AWSManagedRulesAmazonIpReputationList",
                "VendorName": "AWS"
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "AWSManagedRulesAmazonIpReputationListMetric",
              "SampledRequestsEnabled": true
            }
          },
          {
            "Name": "AWSManagedRulesAnonymousIpList",
            "OverrideAction": {
              "None": {}
            },
            "Priority": 4,
            "Statement": {
              "ManagedRuleGroupStatement": {
                "Name": "AWSManagedRulesAnonymousIpList",
                "VendorName": "AWS"
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "AWSManagedRulesAnonymousIpListMetric",
              "SampledRequestsEnabled": true
            }
          },
          {
            "Action": {
              "Count": {}
            },
            "Name": "IsbHumanApiCallsRule",
            "Priority": 5,
            "Statement": {
              "SizeConstraintStatement": {
                "ComparisonOperator": "GE",
                "FieldToMatch": {
                  "SingleHeader": {
                    "Name": "x-isb-identity"
                  }
                },
                "Size": 1,
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "IsbHumanApiCallsMetric",
              "SampledRequestsEnabled": true
            }
          },
          {
            "Action": {
              "Count": {}
            },
            "Name": "IsbM2mApiCallsRule",
            "Priority": 6,
            "Statement": {
              "NotStatement": {
                "Statement": {
                  "SizeConstraintStatement": {
                    "ComparisonOperator": "GE",
                    "FieldToMatch": {
                      "SingleHeader": {
                        "Name": "x-isb-identity"
                      }
                    },
                    "Size": 1,
                    "TextTransformations": [
                      {
                        "Priority": 0,
                        "Type": "NONE"
                      }
                    ]
                  }
                }
              }
            },
            "VisibilityConfig": {
              "CloudWatchMetricsEnabled": true,
              "MetricName": "IsbM2mApiCallsMetric",
              "SampledRequestsEnabled": true
            }
          }
        ],
        "Scope": "REGIONAL",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "VisibilityConfig": {
          "CloudWatchMetricsEnabled": true,
          "MetricName": "IsbWebAclMetric",
          "SampledRequestsEnabled": true
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/WebAcl"
      }
    },
    "IsbRestApiWafWebAclAssociation2A0E86C5": {
      "Type": "AWS::WAFv2::WebACLAssociation",
      "Properties": {
        "ResourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":apigateway:",
              {
                "Ref": "AWS::Region"
              },
              "::/restapis/",
              {
                "Ref": "IsbRestApi377E2CC6"
              },
              "/stages/",
              {
                "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
              }
            ]
          ]
        },
        "WebACLArn": {
          "Fn::GetAtt": [
            "IsbRestApiWafWebAcl54DDDB1F",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/WebAclAssociation"
      }
    },
    "IsbRestApiWafWafLogGroup2DCE5310": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "aws-waf-logs-isb-",
              {
                "Ref": "Namespace"
              },
              "-blocked-requests"
            ]
          ]
        },
        "RetentionInDays": {
          "Fn::FindInMap": [
            "Mapping",
            "context",
            "cloudWatchLogRetentionInDays",
            {
              "DefaultValue": ""
            }
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/WafLogGroup/Resource",
        "guard": {
          "SuppressedRules": [
            "CW_LOGGROUP_RETENTION_PERIOD_CHECK"
          ]
        }
      }
    },
    "IsbRestApiWafWafLogGroupPolicyResourcePolicy8B1646A9": {
      "Type": "AWS::Logs::ResourcePolicy",
      "Properties": {
        "PolicyDocument": {
          "Fn::Join": [
            "",
            [
              "{\"Statement\":[{\"Action\":[\"logs:CreateLogStream\",\"logs:PutLogEvents\"],\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"wafv2.amazonaws.com\"},\"Resource\":\"",
              {
                "Fn::GetAtt": [
                  "IsbRestApiWafWafLogGroup2DCE5310",
                  "Arn"
                ]
              },
              "\"}],\"Version\":\"2012-10-17\"}"
            ]
          ]
        },
        "PolicyName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-IsbWafLogGroupPolicy"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/WafLogGroup/Policy/ResourcePolicy"
      }
    },
    "IsbRestApiWafWafLoggingConfiguration780FE8DA": {
      "Type": "AWS::WAFv2::LoggingConfiguration",
      "Properties": {
        "LogDestinationConfigs": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":logs:",
                {
                  "Ref": "AWS::Region"
                },
                ":",
                {
                  "Ref": "AWS::AccountId"
                },
                ":log-group:",
                {
                  "Ref": "IsbRestApiWafWafLogGroup2DCE5310"
                }
              ]
            ]
          }
        ],
        "LoggingFilter": {
          "DefaultBehavior": "DROP",
          "Filters": [
            {
              "Behavior": "KEEP",
              "Conditions": [
                {
                  "ActionCondition": {
                    "Action": "BLOCK"
                  }
                }
              ],
              "Requirement": "MEETS_ANY"
            }
          ]
        },
        "RedactedFields": [
          {
            "SingleHeader": {
              "Name": "Authorization"
            }
          },
          {
            "SingleHeader": {
              "Name": "x-amz-security-token"
            }
          },
          {
            "SingleHeader": {
              "Name": "x-isb-identity"
            }
          }
        ],
        "ResourceArn": {
          "Fn::GetAtt": [
            "IsbRestApiWafWebAcl54DDDB1F",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/WafLoggingConfiguration"
      }
    },
    "IsbRestApiWafWafBlockedRequestsAlarm78C2384C": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "Alert when WAF blocks requests to the Innovation Sandbox API - may indicate misconfigured WAF rules blocking legitimate users",
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "Dimensions": [
          {
            "Name": "Region",
            "Value": {
              "Ref": "AWS::Region"
            }
          },
          {
            "Name": "Rule",
            "Value": "ALL"
          },
          {
            "Name": "WebACL",
            "Value": {
              "Fn::Select": [
                0,
                {
                  "Fn::Split": [
                    "|",
                    {
                      "Ref": "IsbRestApiWafWebAcl54DDDB1F"
                    }
                  ]
                }
              ]
            }
          }
        ],
        "EvaluationPeriods": 1,
        "MetricName": "BlockedRequests",
        "Namespace": "AWS/WAFV2",
        "Period": 60,
        "Statistic": "Sum",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Threshold": 1,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApi/Waf/WafBlockedRequestsAlarm/Resource"
      }
    },
    "LeasesLambdaFunctionFunctionRole8C813149": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeasesLambdaFunction/FunctionRole/Resource"
      }
    },
    "LeasesLambdaFunctionFunctionRoleDefaultPolicy3E670257": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": "cloudformation:DescribeStackSet",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*:*"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "cloudformation:DescribeStackSet",
                "cloudformation:ListStackInstances"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*:*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudformation:DeleteStackInstances",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset/*:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset-target/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":type/resource/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LeasesLambdaFunctionFunctionRoleDefaultPolicy3E670257",
        "Roles": [
          {
            "Ref": "LeasesLambdaFunctionFunctionRole8C813149"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeasesLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "LeasesLambdaFunction6133D88B": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.e58cdd1af8a4c1b0a1e4551912d9ae353ba905d0160fda5c902536c651bcb6e5.zip"
        },
        "Description": "Lambda used as API GW method integration for leases resources",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "LEASE_TEMPLATE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTemplateTable"
              ]
            },
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "SANDBOX_ACCOUNT_ROLE_NAME": {
              "Fn::Join": [
                "",
                [
                  "InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-SandboxAccountRole"
                ]
              ]
            },
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "COGNITO_USER_POOL_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoUserPoolId"
              ]
            },
            "COGNITO_APP_CLIENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoAppClientId"
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-LeasesLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "LeasesLambdaFunctionFunctionRole8C813149",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "LeasesLambdaFunctionFunctionRoleDefaultPolicy3E670257",
        "LeasesLambdaFunctionFunctionRole8C813149"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeasesLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.e58cdd1af8a4c1b0a1e4551912d9ae353ba905d0160fda5c902536c651bcb6e5",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "LeasesLambdaFunctionIsbDbTableReadWrite68C6437B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "LeasesLambdaFunctionFunctionRole8C813149"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeasesLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "LeasesLambdaFunctionIsbDbTableReadOnly4EBA7AD8": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "LeasesLambdaFunctionFunctionRole8C813149"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeasesLambdaFunction-IsbDbTableReadOnly/Resource"
      }
    },
    "LeaseTemplatesLambdaFunctionFunctionRoleC7543D26": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseTemplatesLambdaFunction/FunctionRole/Resource"
      }
    },
    "LeaseTemplatesLambdaFunctionFunctionRoleDefaultPolicy67EAD3ED": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LeaseTemplatesLambdaFunctionFunctionRoleDefaultPolicy67EAD3ED",
        "Roles": [
          {
            "Ref": "LeaseTemplatesLambdaFunctionFunctionRoleC7543D26"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseTemplatesLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "LeaseTemplatesLambdaFunction2965B8D5": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.59b98d7e3ba2ff61bbc59cf5bbe5a55e8e3da1f017ab345beed5ea92bcefae81.zip"
        },
        "Description": "Lambda used as API GW method integration for lease-templates resources",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "LEASE_TEMPLATE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTemplateTable"
              ]
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "COGNITO_USER_POOL_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoUserPoolId"
              ]
            },
            "COGNITO_APP_CLIENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoAppClientId"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-LeaseTemplatesLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "LeaseTemplatesLambdaFunctionFunctionRoleC7543D26",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "LeaseTemplatesLambdaFunctionFunctionRoleDefaultPolicy67EAD3ED",
        "LeaseTemplatesLambdaFunctionFunctionRoleC7543D26"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseTemplatesLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.59b98d7e3ba2ff61bbc59cf5bbe5a55e8e3da1f017ab345beed5ea92bcefae81",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "LeaseTemplatesLambdaFunctionIsbDbTableReadWriteE2959C86": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "LeaseTemplatesLambdaFunctionFunctionRoleC7543D26"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseTemplatesLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "LeaseTemplatesLambdaFunctionIsbDbTableReadOnly0A30EBFF": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "LeaseTemplatesLambdaFunctionFunctionRoleC7543D26"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LeaseTemplatesLambdaFunction-IsbDbTableReadOnly/Resource"
      }
    },
    "AccountsLambdaFunctionFunctionRole3A22EFEC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountsLambdaFunction/FunctionRole/Resource"
      }
    },
    "AccountsLambdaFunctionFunctionRoleDefaultPolicy067BE69C": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "cloudformation:DescribeStackSet",
                "cloudformation:ListStackInstances"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*:*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudformation:DeleteStackInstances",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset/*:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stackset-target/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":type/resource/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            },
            {
              "Action": "lambda:SendDurableExecutionCallbackSuccess",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "AccountCleanerDurableCleanupOrchestrationLambdaFunction477B10E6",
                        "Arn"
                      ]
                    },
                    ":*/durable-execution/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AccountsLambdaFunctionFunctionRoleDefaultPolicy067BE69C",
        "Roles": [
          {
            "Ref": "AccountsLambdaFunctionFunctionRole3A22EFEC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountsLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AccountsLambdaFunction47AFACD2": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.0fcc8545b970544e9a7f820dacec65397ce0201eefad18b146bd1be9fd246973.zip"
        },
        "Description": "Lambda used as API GW method integration for account resources",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "CLEANUP_REPORT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cleanupReportTable"
              ]
            },
            "SANDBOX_ACCOUNT_ROLE_NAME": {
              "Fn::Join": [
                "",
                [
                  "InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-SandboxAccountRole"
                ]
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "IDC_ACCOUNT_ID": {
              "Ref": "IdcAccountId"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "COGNITO_USER_POOL_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoUserPoolId"
              ]
            },
            "COGNITO_APP_CLIENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoAppClientId"
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-AccountsLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AccountsLambdaFunctionFunctionRole3A22EFEC",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AccountsLambdaFunctionFunctionRoleDefaultPolicy067BE69C",
        "AccountsLambdaFunctionFunctionRole3A22EFEC"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountsLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.0fcc8545b970544e9a7f820dacec65397ce0201eefad18b146bd1be9fd246973",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AccountsLambdaFunctionIsbDbTableReadWrite5A96FF7F": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "cleanupReportTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "cleanupReportTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "AccountsLambdaFunctionFunctionRole3A22EFEC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountsLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "AccountsLambdaFunctionIsbDbTableReadOnly0673FDB6": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "AccountsLambdaFunctionFunctionRole3A22EFEC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AccountsLambdaFunction-IsbDbTableReadOnly/Resource"
      }
    },
    "BlueprintsLambdaFunctionFunctionRoleE6A626CE": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintsLambdaFunction/FunctionRole/Resource"
      }
    },
    "BlueprintsLambdaFunctionFunctionRoleDefaultPolicy1A29AFF1": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "cloudformation:DescribeStackSet",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*:*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudformation:ListStackSets",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "BlueprintsLambdaFunctionFunctionRoleDefaultPolicy1A29AFF1",
        "Roles": [
          {
            "Ref": "BlueprintsLambdaFunctionFunctionRoleE6A626CE"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintsLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "BlueprintsLambdaFunction92CE4466": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.06a52bb835a3af45cc07d50c53e015245788dfec252107c277e41ec15879a88b.zip"
        },
        "Description": "Lambda used as API GW method integration for blueprints resources",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "LEASE_TEMPLATE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTemplateTable"
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "SANDBOX_ACCOUNT_ROLE_NAME": {
              "Fn::Join": [
                "",
                [
                  "InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-SandboxAccountRole"
                ]
              ]
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "COGNITO_USER_POOL_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoUserPoolId"
              ]
            },
            "COGNITO_APP_CLIENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoAppClientId"
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-BlueprintsLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "BlueprintsLambdaFunctionFunctionRoleE6A626CE",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "BlueprintsLambdaFunctionFunctionRoleDefaultPolicy1A29AFF1",
        "BlueprintsLambdaFunctionFunctionRoleE6A626CE"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintsLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.06a52bb835a3af45cc07d50c53e015245788dfec252107c277e41ec15879a88b",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "BlueprintsLambdaFunctionIsbDbTableReadWrite685D08DC": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "BlueprintsLambdaFunctionFunctionRoleE6A626CE"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintsLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "BlueprintsLambdaFunctionIsbDbTableReadOnly8601E120": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "BlueprintsLambdaFunctionFunctionRoleE6A626CE"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/BlueprintsLambdaFunction-IsbDbTableReadOnly/Resource"
      }
    },
    "ConfigurationsLambdaFunctionFunctionRole3EA8ADFC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ConfigurationsLambdaFunction/FunctionRole/Resource"
      }
    },
    "ConfigurationsLambdaFunctionFunctionRoleDefaultPolicy2216B975": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ses:GetIdentityVerificationAttributes",
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "ConfigurationsLambdaFunctionFunctionRoleDefaultPolicy2216B975",
        "Roles": [
          {
            "Ref": "ConfigurationsLambdaFunctionFunctionRole3EA8ADFC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ConfigurationsLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "ConfigurationsLambdaFunctionBD1B5393": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.d9f3ff454b073398a594e47da43f13e3eddf8dde0a46576399699c69f455620f.zip"
        },
        "Description": "Lambda used as API GW method integration for configurations resources",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "AWS_ACCESS_PORTAL_URL": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "awsAccessPortalUrl"
              ]
            },
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            },
            "COGNITO_USER_POOL_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoUserPoolId"
              ]
            },
            "COGNITO_APP_CLIENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoAppClientId"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-ConfigurationsLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "ConfigurationsLambdaFunctionFunctionRole3EA8ADFC",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "ConfigurationsLambdaFunctionFunctionRoleDefaultPolicy2216B975",
        "ConfigurationsLambdaFunctionFunctionRole3EA8ADFC"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ConfigurationsLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.d9f3ff454b073398a594e47da43f13e3eddf8dde0a46576399699c69f455620f",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "ConfigurationsLambdaFunctionIsbDbTableReadWrite51C16E76": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "ConfigurationsLambdaFunctionFunctionRole3EA8ADFC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ConfigurationsLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "PrincipalsLambdaFunctionFunctionRoleD28F1343": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalsLambdaFunction/FunctionRole/Resource"
      }
    },
    "PrincipalsLambdaFunctionFunctionRoleDefaultPolicy5E9BDB97": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "PrincipalsLambdaFunctionFunctionRoleDefaultPolicy5E9BDB97",
        "Roles": [
          {
            "Ref": "PrincipalsLambdaFunctionFunctionRoleD28F1343"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalsLambdaFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "PrincipalsLambdaFunction002F6A90": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.3cb87b94f38ac9c2af63fd8b9c5e55dde6476803a412a60696e384d9118ff9a4.zip"
        },
        "Description": "Lambda used as API GW method integration for principals search. Reads from DynamoDB cache for fast typeahead.",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "COGNITO_USER_POOL_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoUserPoolId"
              ]
            },
            "COGNITO_APP_CLIENT_ID": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "cognitoAppClientId"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-PrincipalsLambdaFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "PrincipalsLambdaFunctionFunctionRoleD28F1343",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "PrincipalsLambdaFunctionFunctionRoleDefaultPolicy5E9BDB97",
        "PrincipalsLambdaFunctionFunctionRoleD28F1343"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalsLambdaFunction/Function/Resource",
        "aws:asset:path": "asset.3cb87b94f38ac9c2af63fd8b9c5e55dde6476803a412a60696e384d9118ff9a4",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "PrincipalsLambdaFunctionIsbDbTableReadOnly57780668": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "PrincipalsLambdaFunctionFunctionRoleD28F1343"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalsLambdaFunction-IsbDbTableReadOnly/Resource"
      }
    },
    "PrincipalsLambdaFunctionIsbDbTableReadWrite7474B819": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadWriteAccess",
        "Roles": [
          {
            "Ref": "PrincipalsLambdaFunctionFunctionRoleD28F1343"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/PrincipalsLambdaFunction-IsbDbTableReadWrite/Resource"
      }
    },
    "IsbRestApiIdParameter3663D69F": {
      "Type": "AWS::SSM::Parameter",
      "Properties": {
        "Description": "API Gateway REST API ID for the Innovation Sandbox API. Imported by per-client M2M client stacks to construct execute-api ARNs and invoke URLs.",
        "Name": {
          "Fn::Join": [
            "",
            [
              "InnovationSandbox_",
              {
                "Ref": "Namespace"
              },
              "_Compute_RestApiId"
            ]
          ]
        },
        "Tags": {
          "aws-solutions:isb-id": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "_isb"
              ]
            ]
          }
        },
        "Type": "String",
        "Value": {
          "Ref": "IsbRestApi377E2CC6"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbRestApiIdParameter/Resource"
      }
    },
    "IsbIdentityPoolAdminApiInvokePolicy6AFB5C87": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "execute-api:Invoke",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":execute-api:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":",
                    {
                      "Ref": "IsbRestApi377E2CC6"
                    },
                    "/*/*/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "IsbIdentityPoolAdminApiInvokePolicy6AFB5C87",
        "Roles": [
          {
            "Fn::GetAtt": [
              "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
              "identityPoolAdminRoleName"
            ]
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbIdentityPoolAdminApiInvokePolicy/Resource"
      }
    },
    "IsbIdentityPoolManagerApiInvokePolicyF09338BC": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "execute-api:Invoke",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":execute-api:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":",
                    {
                      "Ref": "IsbRestApi377E2CC6"
                    },
                    "/*/*/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "IsbIdentityPoolManagerApiInvokePolicyF09338BC",
        "Roles": [
          {
            "Fn::GetAtt": [
              "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
              "identityPoolManagerRoleName"
            ]
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbIdentityPoolManagerApiInvokePolicy/Resource"
      }
    },
    "IsbIdentityPoolUserApiInvokePolicy5004E1B8": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "execute-api:Invoke",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":execute-api:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":",
                    {
                      "Ref": "IsbRestApi377E2CC6"
                    },
                    "/*/*/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "IsbIdentityPoolUserApiInvokePolicy5004E1B8",
        "Roles": [
          {
            "Fn::GetAtt": [
              "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
              "identityPoolUserRoleName"
            ]
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/IsbIdentityPoolUserApiInvokePolicy/Resource"
      }
    },
    "CloudFrontUiApiIsbFrontEndBucket1A358E74": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "KMSMasterKeyID": {
                  "Fn::GetAtt": [
                    "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                    "Arn"
                  ]
                },
                "SSEAlgorithm": "aws:kms"
              }
            }
          ]
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "ObjectWriter"
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-cdk:cr-owned:c2f85297",
            "Value": "true"
          },
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbFrontEndBucket/Resource",
        "guard": {
          "SuppressedRules": [
            "S3_BUCKET_LOGGING_ENABLED"
          ]
        }
      }
    },
    "CloudFrontUiApiIsbFrontEndBucketPolicyC6425170": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "CloudFrontUiApiIsbFrontEndBucket1A358E74"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:GetObject",
              "Condition": {
                "StringEquals": {
                  "AWS:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":cloudfront::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":distribution/",
                        {
                          "Ref": "CloudFrontUiApiIsbCloudFrontDistributionA7327667"
                        }
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "cloudfront.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            },
            {
              "Action": "s3:GetObject",
              "Condition": {
                "StringEquals": {
                  "AWS:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:aws:cloudfront::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":distribution/",
                        {
                          "Ref": "CloudFrontUiApiIsbCloudFrontDistributionA7327667"
                        }
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "cloudfront.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbFrontEndBucket/Policy/Resource"
      }
    },
    "CloudFrontUiApiIsbFrontEndAccessLogsBucketB8ACDB31": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "KMSMasterKeyID": {
                  "Fn::GetAtt": [
                    "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                    "Arn"
                  ]
                },
                "SSEAlgorithm": "aws:kms"
              }
            }
          ]
        },
        "LifecycleConfiguration": {
          "Rules": [
            {
              "ExpirationInDays": {
                "Fn::FindInMap": [
                  "Mapping",
                  "context",
                  "s3LogsGlacierRetentionInDays",
                  {
                    "DefaultValue": ""
                  }
                ]
              },
              "Status": "Enabled",
              "Transitions": [
                {
                  "StorageClass": "GLACIER",
                  "TransitionInDays": {
                    "Fn::FindInMap": [
                      "Mapping",
                      "context",
                      "s3LogsArchiveRetentionInDays",
                      {
                        "DefaultValue": ""
                      }
                    ]
                  }
                }
              ]
            }
          ]
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "ObjectWriter"
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbFrontEndAccessLogsBucket/Resource",
        "guard": {
          "SuppressedRules": [
            "S3_BUCKET_LOGGING_ENABLED"
          ]
        }
      },
      "Condition": "CloudFrontUiApiSupportsCloudFrontLoggingF1020F6E"
    },
    "CloudFrontUiApiIsbFrontEndAccessLogsBucketPolicyC5EC85B6": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "CloudFrontUiApiIsbFrontEndAccessLogsBucketB8ACDB31"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CloudFrontUiApiIsbFrontEndAccessLogsBucketB8ACDB31",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CloudFrontUiApiIsbFrontEndAccessLogsBucketB8ACDB31",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbFrontEndAccessLogsBucket/Policy/Resource"
      },
      "Condition": "CloudFrontUiApiSupportsCloudFrontLoggingF1020F6E"
    },
    "CloudFrontUiApiIsbCloudFrontDistributionOac0A271AA8": {
      "Type": "AWS::CloudFront::OriginAccessControl",
      "Properties": {
        "OriginAccessControlConfig": {
          "Name": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "-IsbCloudFrontDistributionOac"
              ]
            ]
          },
          "OriginAccessControlOriginType": "s3",
          "SigningBehavior": "always",
          "SigningProtocol": "sigv4"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbCloudFrontDistributionOac/Resource"
      }
    },
    "CloudFrontUiApiIsbCloudFrontResponseHeadersPolicy524822A1": {
      "Type": "AWS::CloudFront::ResponseHeadersPolicy",
      "Properties": {
        "ResponseHeadersPolicyConfig": {
          "CustomHeadersConfig": {
            "Items": [
              {
                "Header": "Cache-Control",
                "Override": true,
                "Value": "no-store, no-cache"
              }
            ]
          },
          "Name": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "-IsbCloudFrontResponseHeadersPolicy"
              ]
            ]
          },
          "SecurityHeadersConfig": {
            "ContentSecurityPolicy": {
              "ContentSecurityPolicy": {
                "Fn::Join": [
                  "",
                  [
                    "upgrade-insecure-requests; default-src 'none'; object-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self' data:; connect-src 'self' https://api.github.com https://",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "cognitoDomain"
                      ]
                    },
                    ".auth.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".amazoncognito.com https://cognito-idp.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".amazonaws.com https://cognito-identity.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".amazonaws.com; manifest-src 'self'; frame-ancestors 'none'; base-uri 'none';"
                  ]
                ]
              },
              "Override": true
            },
            "ContentTypeOptions": {
              "Override": true
            },
            "FrameOptions": {
              "FrameOption": "DENY",
              "Override": true
            },
            "ReferrerPolicy": {
              "Override": true,
              "ReferrerPolicy": "no-referrer"
            },
            "StrictTransportSecurity": {
              "AccessControlMaxAgeSec": 46656000,
              "IncludeSubdomains": true,
              "Override": true
            }
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbCloudFrontResponseHeadersPolicy/Resource"
      }
    },
    "CloudFrontUiApiIsbApiCloudFrontResponseHeadersPolicy0C690633": {
      "Type": "AWS::CloudFront::ResponseHeadersPolicy",
      "Properties": {
        "ResponseHeadersPolicyConfig": {
          "CustomHeadersConfig": {
            "Items": [
              {
                "Header": "Cache-Control",
                "Override": true,
                "Value": "no-store, no-cache"
              }
            ]
          },
          "Name": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "-IsbApiCloudFrontResponseHeadersPolicy"
              ]
            ]
          },
          "SecurityHeadersConfig": {
            "ContentTypeOptions": {
              "Override": true
            }
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbApiCloudFrontResponseHeadersPolicy/Resource"
      }
    },
    "CloudFrontUiApiIsbPathRewriteCloudFrontFunction646416CD": {
      "Type": "AWS::CloudFront::Function",
      "Properties": {
        "AutoPublish": true,
        "FunctionCode": "\n          function handler (event) {\n            const request = event.request;\n            const uri = request.uri;\n            const cfPrefix = \"/api\"\n            if (uri.startsWith(cfPrefix)) {\n              request.uri = uri.replace(cfPrefix, \"\");\n            }\n            return request;\n          }\n      ",
        "FunctionConfig": {
          "Comment": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "-IsbPathRewriteCloudFrontFunction"
              ]
            ]
          },
          "Runtime": "cloudfront-js-2.0"
        },
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-IsbPathRewriteCloudFrontFunction"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbPathRewriteCloudFrontFunction/Resource"
      }
    },
    "CloudFrontUiApiIsbS3OriginPathRedirectCloudFrontFunctionDB601A75": {
      "Type": "AWS::CloudFront::Function",
      "Properties": {
        "AutoPublish": true,
        "FunctionCode": "\n          function handler(event) {\n            var request = event.request;\n            var uri = request.uri;\n            // A dot after the last slash = the last segment has a file extension\n            // (e.g. /assets/app.js) -> serve as-is; otherwise it's a client-side route.\n            // No regex on purpose: a prior version used request.uri.split(/\\#|\\?/)\n            // and a long URI (e.g. a ~127-char base64 leaseId path) failed with\n            // \"RangeError: Regex execute instruction limit exceeded\" -> 503,\n            // probably the regex evaluation exceeding its time/step budget.\n            var slash = uri.lastIndexOf(\"/\");\n            var dot = uri.lastIndexOf(\".\");\n            if (dot > slash) return request;\n            request.uri = \"/index.html\";\n            return request;\n          }\n      ",
        "FunctionConfig": {
          "Comment": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "-IsbS3OriginPathRedirectCloudFrontFunction"
              ]
            ]
          },
          "Runtime": "cloudfront-js-2.0"
        },
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-IsbS3OriginPathRedirectCloudFrontFunction"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbS3OriginPathRedirectCloudFrontFunction/Resource"
      }
    },
    "CloudFrontUiApiIsbCloudFrontDistributionA7327667": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "Aliases": {
            "Fn::If": [
              "CloudFrontUiApiAttachCustomDomainE8BB6ED5",
              [
                {
                  "Ref": "CustomDomainName"
                }
              ],
              {
                "Ref": "AWS::NoValue"
              }
            ]
          },
          "CacheBehaviors": [
            {
              "AllowedMethods": [
                "GET",
                "HEAD",
                "OPTIONS",
                "PUT",
                "PATCH",
                "POST",
                "DELETE"
              ],
              "CachePolicyId": "4135ea2d-6df8-44a3-9df3-4b5a84be39ad",
              "Compress": true,
              "FunctionAssociations": [
                {
                  "EventType": "viewer-request",
                  "FunctionARN": {
                    "Fn::GetAtt": [
                      "CloudFrontUiApiIsbPathRewriteCloudFrontFunction646416CD",
                      "FunctionARN"
                    ]
                  }
                }
              ],
              "OriginRequestPolicyId": "b689b0a8-53d0-40ab-baf2-68738e2966ac",
              "PathPattern": "/api/*",
              "ResponseHeadersPolicyId": {
                "Ref": "CloudFrontUiApiIsbApiCloudFrontResponseHeadersPolicy0C690633"
              },
              "TargetOriginId": "InnovationSandboxComputeCloudFrontUiApiIsbCloudFrontDistributionOrigin2A994B75A",
              "ViewerProtocolPolicy": "redirect-to-https"
            }
          ],
          "Comment": "ISB CloudFront Distribution",
          "DefaultCacheBehavior": {
            "AllowedMethods": [
              "GET",
              "HEAD",
              "OPTIONS",
              "PUT",
              "PATCH",
              "POST",
              "DELETE"
            ],
            "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
            "Compress": true,
            "FunctionAssociations": [
              {
                "EventType": "viewer-request",
                "FunctionARN": {
                  "Fn::GetAtt": [
                    "CloudFrontUiApiIsbS3OriginPathRedirectCloudFrontFunctionDB601A75",
                    "FunctionARN"
                  ]
                }
              }
            ],
            "ResponseHeadersPolicyId": {
              "Ref": "CloudFrontUiApiIsbCloudFrontResponseHeadersPolicy524822A1"
            },
            "TargetOriginId": "S3Origin",
            "ViewerProtocolPolicy": "redirect-to-https"
          },
          "DefaultRootObject": "index.html",
          "Enabled": true,
          "HttpVersion": "http2",
          "IPV6Enabled": false,
          "Logging": {
            "Fn::If": [
              "CloudFrontUiApiSupportsCloudFrontLoggingF1020F6E",
              {
                "Bucket": {
                  "Fn::GetAtt": [
                    "CloudFrontUiApiIsbFrontEndAccessLogsBucketB8ACDB31",
                    "DomainName"
                  ]
                },
                "IncludeCookies": true,
                "Prefix": "isb-fe-logs/"
              },
              {
                "Ref": "AWS::NoValue"
              }
            ]
          },
          "Origins": [
            {
              "DomainName": {
                "Fn::GetAtt": [
                  "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                  "RegionalDomainName"
                ]
              },
              "Id": "S3Origin",
              "OriginAccessControlId": {
                "Fn::GetAtt": [
                  "CloudFrontUiApiIsbCloudFrontDistributionOac0A271AA8",
                  "Id"
                ]
              },
              "S3OriginConfig": {
                "OriginAccessIdentity": ""
              }
            },
            {
              "CustomOriginConfig": {
                "OriginProtocolPolicy": "https-only",
                "OriginSSLProtocols": [
                  "TLSv1.2"
                ]
              },
              "DomainName": {
                "Fn::Select": [
                  2,
                  {
                    "Fn::Split": [
                      "/",
                      {
                        "Fn::Join": [
                          "",
                          [
                            "https://",
                            {
                              "Ref": "IsbRestApi377E2CC6"
                            },
                            ".execute-api.",
                            {
                              "Ref": "AWS::Region"
                            },
                            ".",
                            {
                              "Ref": "AWS::URLSuffix"
                            },
                            "/",
                            {
                              "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
                            },
                            "/"
                          ]
                        ]
                      }
                    ]
                  }
                ]
              },
              "Id": "InnovationSandboxComputeCloudFrontUiApiIsbCloudFrontDistributionOrigin2A994B75A",
              "OriginPath": {
                "Fn::Join": [
                  "",
                  [
                    "/",
                    {
                      "Fn::Select": [
                        3,
                        {
                          "Fn::Split": [
                            "/",
                            {
                              "Fn::Join": [
                                "",
                                [
                                  "https://",
                                  {
                                    "Ref": "IsbRestApi377E2CC6"
                                  },
                                  ".execute-api.",
                                  {
                                    "Ref": "AWS::Region"
                                  },
                                  ".",
                                  {
                                    "Ref": "AWS::URLSuffix"
                                  },
                                  "/",
                                  {
                                    "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
                                  },
                                  "/"
                                ]
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "PriceClass": "PriceClass_All",
          "ViewerCertificate": {
            "Fn::If": [
              "CloudFrontUiApiAttachCustomDomainE8BB6ED5",
              {
                "AcmCertificateArn": {
                  "Ref": "CustomDomainCertificateArn"
                },
                "SslSupportMethod": "sni-only",
                "MinimumProtocolVersion": "TLSv1.2_2021"
              },
              {
                "Ref": "AWS::NoValue"
              }
            ]
          }
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/IsbCloudFrontDistribution/Resource",
        "guard": {
          "SuppressedRules": [
            "CLOUDFRONT_MINIMUM_PROTOCOL_VERSION_RULE"
          ]
        }
      }
    },
    "CloudFrontUiApiDeployIsbFrontEndAwsCliLayerA79739D4": {
      "Type": "AWS::Lambda::LayerVersion",
      "Properties": {
        "Content": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.3381cf7e6459adb69ddd7bba9592f1099f96826374c2f44673f1b38d168e7857.zip"
        },
        "Description": "/opt/awscli/aws"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/DeployIsbFrontEnd/AwsCliLayer/Resource",
        "aws:asset:path": "asset.3381cf7e6459adb69ddd7bba9592f1099f96826374c2f44673f1b38d168e7857.zip",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Content"
      }
    },
    "CloudFrontUiApiDeployIsbFrontEndCustomResource6D2B744F": {
      "Type": "Custom::CDKBucketDeployment",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536",
            "Arn"
          ]
        },
        "SourceBucketNames": [
          {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          {
            "Fn::Sub": "solutions-${AWS::Region}"
          }
        ],
        "SourceObjectKeys": [
          "innovation-sandbox-on-aws/v1.3.0/asset.dfa45fcdabc2a671b4e2f86ad742af61df3297c7ac8e33c4d790011b30d97ed1.zip",
          "innovation-sandbox-on-aws/v1.3.0/asset.9608fa1622d3da01ecc9492231568535296d4e859407e52f933a3642c30f709f.zip"
        ],
        "SourceMarkers": [
          {},
          {
            "<<marker:0xbaba:0>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Fn::GetAtt": [
                      "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                      "cognitoUserPoolId"
                    ]
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:1>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Fn::GetAtt": [
                      "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                      "cognitoAppClientId"
                    ]
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:2>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Fn::GetAtt": [
                      "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                      "cognitoIdentityPoolId"
                    ]
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:3>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Fn::GetAtt": [
                      "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                      "cognitoDomain"
                    ]
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:4>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Ref": "AWS::Region"
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:5>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Fn::GetAtt": [
                      "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                      "awsAccessPortalUrl"
                    ]
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:6>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Ref": "IsbRestApi377E2CC6"
                  },
                  ".execute-api.",
                  {
                    "Ref": "AWS::Region"
                  },
                  ".",
                  {
                    "Ref": "AWS::URLSuffix"
                  },
                  "\""
                ]
              ]
            },
            "<<marker:0xbaba:7>>": {
              "Fn::Join": [
                "",
                [
                  "\"",
                  {
                    "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
                  },
                  "\""
                ]
              ]
            }
          }
        ],
        "SourceMarkersConfig": [
          {},
          {}
        ],
        "DestinationBucketName": {
          "Ref": "CloudFrontUiApiIsbFrontEndBucket1A358E74"
        },
        "WaitForDistributionInvalidation": true,
        "Prune": true,
        "DistributionId": {
          "Ref": "CloudFrontUiApiIsbCloudFrontDistributionA7327667"
        },
        "DistributionPaths": [
          "/*"
        ],
        "OutputObjectKeys": true
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CloudFrontUiApi/DeployIsbFrontEnd/CustomResource/Default"
      }
    },
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/Resource"
      }
    },
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":s3:::",
                      {
                        "Fn::Sub": "solutions-${AWS::Region}"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":s3:::",
                      {
                        "Fn::Sub": "solutions-${AWS::Region}"
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CloudFrontUiApiIsbFrontEndBucket1A358E74",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "cloudfront:GetInvalidation",
                "cloudfront:CreateInvalidation"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF",
        "Roles": [
          {
            "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.97e9ebf0b174a5c8f7faa505739022b7f509edddffcab9211dcd08b759944c4f.zip"
        },
        "Environment": {
          "Variables": {
            "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"
          }
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "CloudFrontUiApiDeployIsbFrontEndAwsCliLayerA79739D4"
          }
        ],
        "LoggingConfig": {
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265",
            "Arn"
          ]
        },
        "Runtime": "python3.13",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF",
        "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Resource",
        "aws:asset:path": "asset.97e9ebf0b174a5c8f7faa505739022b7f509edddffcab9211dcd08b759944c4f",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "LogInsightsQueriesLogQuery845977A8": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Ref": "ISBLogGroupE607F9A7"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "ISB-",
              {
                "Ref": "Namespace"
              },
              "/LogQuery"
            ]
          ]
        },
        "QueryString": "# Innovation Sandbox Log Query\n# Remember to set the time range for this log query in the widget above\nfields @timestamp, @message\n# Replace /PasteReferenceIDHere/ with a reference ID such as an AWS Account ID,\n# Lease UUID, user email address, or other unique identifier\n| filter @message like /PasteReferenceIDHere/\n| filter isPresent(message) or isPresent(errorMessage) or isPresent(message.errorMessage)\n| filter level != 'DEBUG'\n| filter message != 'Lambda invocation event'\n| sort @timestamp desc\n| display @timestamp, concat(message, message.errorMessage, errorMessage) as msg"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogInsightsQueries/LogQuery"
      }
    },
    "LogInsightsQueriesErrorsLogsC86921EA": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Ref": "ISBLogGroupE607F9A7"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "ISB-",
              {
                "Ref": "Namespace"
              },
              "/ErrorLogs"
            ]
          ]
        },
        "QueryString": "# Innovation Sandbox Errors Query\n# View all errors and warnings that have been raised by the core operational\n# components of Innovation Sandbox\n# Remember to set the time range for this log query in the widget above\nfields @timestamp, @message, message.errorMessage\n| filter level = 'ERROR' or level = \"WARN\"\n| filter message != 'Lambda invocation event'\n| sort @timestamp desc\n| display @timestamp, level, concat(message, message.errorMessage, errorMessage) as msg"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogInsightsQueries/ErrorsLogs"
      }
    },
    "LogInsightsQueriesAccountCleanupLogsBCC2CA19": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Ref": "ISBLogGroupCleanup485A102F"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "ISB-",
              {
                "Ref": "Namespace"
              },
              "/AccountCleanupLogs"
            ]
          ]
        },
        "QueryString": "# Innovation Sandbox Account Cleanup Logs\n# View all logs from the account cleanup process for a given state machine execution id.\n# Results show resource deletion failures that occurred and aws nuke summary logs.\n# Remember to set the time range for this log query in the widget above\nfields @timestamp, type as resourceType, owner as region, name, msg\n# Replace /PasteStateMachineExecutionIdHere/ with the account cleanup state machine execution id for the account under investigation.\n| filter @logStream like /PasteStateMachineExecutionIdHere/\n| filter # Comment out this filter to see all logs from the state machine execution.\n  component = \"libnuke\"\n   or state = \"failed\"\n| sort @timestamp desc\n| sort time desc"
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogInsightsQueries/AccountCleanupLogs"
      }
    },
    "AnonymizedMetricsReportingFunctionFunctionRole3FADEEB2": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/ReportingFunction/FunctionRole/Resource"
      }
    },
    "AnonymizedMetricsReportingFunctionFunctionRoleDefaultPolicy1B30EFB0": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "OrgMgtAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_AccountPool_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "cloudformation:GetTemplateSummary",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudformation:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stackset/*"
                  ]
                ]
              }
            },
            {
              "Action": "access-analyzer:ValidatePolicy",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "cloudwatch:GetMetricData",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "iam:ListRoles",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "iam:ListRoleTags",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":iam::",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":role/isb-m2m/",
                    {
                      "Ref": "Namespace"
                    },
                    "/",
                    {
                      "Ref": "Namespace"
                    },
                    "-isb-m2m-*"
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AnonymizedMetricsReportingFunctionFunctionRoleDefaultPolicy1B30EFB0",
        "Roles": [
          {
            "Ref": "AnonymizedMetricsReportingFunctionFunctionRole3FADEEB2"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/ReportingFunction/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AnonymizedMetricsReportingFunctionB13E720A": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.f5854087a6b92630919240ee6fad5d8ed164cd5cff0071db21946c089ff4e683.zip"
        },
        "Description": "Periodic heartbeat lambda for summarizing the solution deployment",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "CONFIG_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "configTableName"
              ]
            },
            "METRICS_URL": "https://metrics.awssolutionsbuilder.com/generic",
            "SOLUTION_ID": {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "solutionId",
                {
                  "DefaultValue": ""
                }
              ]
            },
            "SOLUTION_VERSION": {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "version",
                {
                  "DefaultValue": ""
                }
              ]
            },
            "METRICS_UUID": {
              "Fn::GetAtt": [
                "DeploymentUUIDLambdaFunctionIsbCustomResourceE707861E",
                "DeploymentUUID"
              ]
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "LEASE_TEMPLATE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTemplateTable"
              ]
            },
            "BLUEPRINT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "blueprintTable"
              ]
            },
            "PRINCIPAL_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "principalTable"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "IS_STABLE_TAGGING_ENABLED": {
              "Ref": "UseStableTagging"
            },
            "ACCOUNT_POOL_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_AccountPool_Configuration"
                ]
              ]
            },
            "WAF_WEB_ACL_NAME": {
              "Fn::Select": [
                0,
                {
                  "Fn::Split": [
                    "|",
                    {
                      "Ref": "IsbRestApiWafWebAcl54DDDB1F"
                    }
                  ]
                }
              ]
            },
            "WAF_REGION": {
              "Ref": "AWS::Region"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-ReportingFunction-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "AnonymizedMetricsReportingFunctionFunctionRole3FADEEB2",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AnonymizedMetricsReportingFunctionFunctionRoleDefaultPolicy1B30EFB0",
        "AnonymizedMetricsReportingFunctionFunctionRole3FADEEB2"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/ReportingFunction/Function/Resource",
        "aws:asset:path": "asset.f5854087a6b92630919240ee6fad5d8ed164cd5cff0071db21946c089ff4e683",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AnonymizedMetricsReportingFunctionIsbDbTableReadOnly5A24E3F5": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTemplateTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "blueprintTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "configTableName"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "principalTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "AnonymizedMetricsReportingFunctionFunctionRole3FADEEB2"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/ReportingFunction-IsbDbTableReadOnly/Resource"
      }
    },
    "AnonymizedMetricsLambdaInvokeRoleF931E38F": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "allows EventBridgeScheduler to invoke Innovation Sandbox's heartbeat metrics lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LambdaInvokeRole/Resource"
      }
    },
    "AnonymizedMetricsLambdaInvokeRoleDefaultPolicyC9FABACF": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "AnonymizedMetricsReportingFunctionB13E720A",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "AnonymizedMetricsReportingFunctionB13E720A",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AnonymizedMetricsLambdaInvokeRoleDefaultPolicyC9FABACF",
        "Roles": [
          {
            "Ref": "AnonymizedMetricsLambdaInvokeRoleF931E38F"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LambdaInvokeRole/DefaultPolicy/Resource"
      }
    },
    "AnonymizedMetricsScheduledEventA5C9F868": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "triggers heartbeat metrics lambda to execute once per day",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 60,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "rate(1 day)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "AnonymizedMetricsReportingFunctionB13E720A",
              "Arn"
            ]
          },
          "Input": "{\"action\":\"gather-metrics\"}",
          "RetryPolicy": {
            "MaximumRetryAttempts": 2
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "AnonymizedMetricsLambdaInvokeRoleF931E38F",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/ScheduledEvent"
      }
    },
    "AnonymizedMetricsLogMetricsLogProcessorFunctionRole755579AC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/LogProcessor/FunctionRole/Resource"
      }
    },
    "AnonymizedMetricsLogMetricsLogProcessorFunctionRoleDefaultPolicy51A815C2": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AnonymizedMetricsLogMetricsLogProcessorFunctionRoleDefaultPolicy51A815C2",
        "Roles": [
          {
            "Ref": "AnonymizedMetricsLogMetricsLogProcessorFunctionRole755579AC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/LogProcessor/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AnonymizedMetricsLogMetricsLogProcessorFunctionCC7E9605": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.f9172cafcab9996c2747dd2807b6f7acf82a825bcb09434e4b4ecb9874edd841.zip"
        },
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "METRICS_URL": "https://metrics.awssolutionsbuilder.com/generic",
            "SOLUTION_ID": {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "solutionId",
                {
                  "DefaultValue": ""
                }
              ]
            },
            "SOLUTION_VERSION": {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "version",
                {
                  "DefaultValue": ""
                }
              ]
            },
            "METRICS_UUID": {
              "Fn::GetAtt": [
                "DeploymentUUIDLambdaFunctionIsbCustomResourceE707861E",
                "DeploymentUUID"
              ]
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-LogProcessor-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AnonymizedMetricsLogMetricsLogProcessorFunctionRole755579AC",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AnonymizedMetricsLogMetricsLogProcessorFunctionRoleDefaultPolicy51A815C2",
        "AnonymizedMetricsLogMetricsLogProcessorFunctionRole755579AC"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/LogProcessor/Function/Resource",
        "aws:asset:path": "asset.f9172cafcab9996c2747dd2807b6f7acf82a825bcb09434e4b4ecb9874edd841",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AnonymizedMetricsLogMetricsLogSubscriptionCanInvokeLambda4E714CE8": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AnonymizedMetricsLogMetricsLogProcessorFunctionCC7E9605",
            "Arn"
          ]
        },
        "Principal": "logs.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "ISBLogGroupE607F9A7",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/LogSubscription/CanInvokeLambda"
      }
    },
    "AnonymizedMetricsLogMetricsLogSubscription74C86A18": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "AnonymizedMetricsLogMetricsLogProcessorFunctionCC7E9605",
            "Arn"
          ]
        },
        "FilterPattern": "{ $.logDetailType = \"*\" }",
        "LogGroupName": {
          "Ref": "ISBLogGroupE607F9A7"
        }
      },
      "DependsOn": [
        "AnonymizedMetricsLogMetricsLogSubscriptionCanInvokeLambda4E714CE8"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/LogSubscription/Resource"
      }
    },
    "AnonymizedMetricsLogMetricsCleanupLogSubscriptionCanInvokeLambda736B51FB": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AnonymizedMetricsLogMetricsLogProcessorFunctionCC7E9605",
            "Arn"
          ]
        },
        "Principal": "logs.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "ISBLogGroupCleanup485A102F",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/CleanupLogSubscription/CanInvokeLambda"
      }
    },
    "AnonymizedMetricsLogMetricsCleanupLogSubscriptionB2AE7F83": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "AnonymizedMetricsLogMetricsLogProcessorFunctionCC7E9605",
            "Arn"
          ]
        },
        "FilterPattern": "{ $.logDetailType = \"*\" }",
        "LogGroupName": {
          "Ref": "ISBLogGroupCleanup485A102F"
        }
      },
      "DependsOn": [
        "AnonymizedMetricsLogMetricsCleanupLogSubscriptionCanInvokeLambda736B51FB"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AnonymizedMetrics/LogMetrics/CleanupLogSubscription/Resource"
      }
    },
    "CostReportingLambdaFunctionRole7410FFF1": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingLambda/CostReportingLambda/FunctionRole/Resource"
      }
    },
    "CostReportingLambdaFunctionRoleDefaultPolicy62FE1881": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CostReportingLambdaFunctionRoleDefaultPolicy62FE1881",
        "Roles": [
          {
            "Ref": "CostReportingLambdaFunctionRole7410FFF1"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingLambda/CostReportingLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "CostReportingLambdaFunction2AD931B1": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.0d6b83e5265095f3072e25f30fb2ae0a61b5e0b2a9e8fa47ecf7093c0ec9852c.zip"
        },
        "Description": "Scans the accounts and reports / logs aggregated monthly cost",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "ACCOUNT_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "accountTable"
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            },
            "ISB_TAG_NAME": "aws-solutions:isb-id",
            "ISB_TAG_VALUE": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            },
            "IDC_ACCOUNT_ID": {
              "Ref": "IdcAccountId"
            },
            "ORG_MGT_ACCOUNT_ID": {
              "Ref": "OrgMgtAccountId"
            },
            "HUB_ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-CostReportingLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "CostReportingLambdaFunctionRole7410FFF1",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "CostReportingLambdaFunctionRoleDefaultPolicy62FE1881",
        "CostReportingLambdaFunctionRole7410FFF1"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingLambda/CostReportingLambda/Function/Resource",
        "aws:asset:path": "asset.0d6b83e5265095f3072e25f30fb2ae0a61b5e0b2a9e8fa47ecf7093c0ec9852c",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "CostReportingLambdaInvokeRole508E505A": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "allows EventBridgeScheduler to invoke Innovation Sandbox's CostMonitoring lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingLambdaInvokeRole/Resource"
      }
    },
    "CostReportingLambdaInvokeRoleDefaultPolicy98A4092D": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CostReportingLambdaFunction2AD931B1",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CostReportingLambdaFunction2AD931B1",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CostReportingLambdaInvokeRoleDefaultPolicy98A4092D",
        "Roles": [
          {
            "Ref": "CostReportingLambdaInvokeRole508E505A"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingLambdaInvokeRole/DefaultPolicy/Resource"
      }
    },
    "CostReportingLambdaIsbDbTableReadOnlyADD8E406": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "accountTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "CostReportingLambdaFunctionRole7410FFF1"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingLambda-IsbDbTableReadOnly/Resource"
      }
    },
    "CostReportingScheduledEvent": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "triggers Cost Monitoring on the forth day of every month",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 360,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "cron(25 1 4 * ? *)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "CostReportingLambdaFunction2AD931B1",
              "Arn"
            ]
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 5
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "CostReportingLambdaInvokeRole508E505A",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CostReportingScheduledEvent"
      }
    },
    "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "KMSMasterKeyID": {
                  "Fn::GetAtt": [
                    "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                    "Arn"
                  ]
                },
                "SSEAlgorithm": "aws:kms"
              }
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingBucket/Resource",
        "guard": {
          "SuppressedRules": [
            "S3_BUCKET_LOGGING_ENABLED"
          ]
        }
      }
    },
    "GroupCostReportingLambdaGroupCostReportingBucketPolicyBBD5631E": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingBucket/Policy/Resource"
      }
    },
    "GroupCostReportingLambdaGroupCostReportingDLQ99CBE290": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "KmsMasterKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "MessageRetentionPeriod": 1209600,
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "VisibilityTimeout": 300
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingDLQ/Resource"
      }
    },
    "GroupCostReportingLambdaGroupCostReportingDLQPolicy0B3BF47F": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "GroupCostReportingLambdaGroupCostReportingDLQ99CBE290",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Queues": [
          {
            "Ref": "GroupCostReportingLambdaGroupCostReportingDLQ99CBE290"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingDLQ/Policy/Resource"
      }
    },
    "GroupCostReportingLambdaFunctionRole775BD77E": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingLambda/FunctionRole/Resource"
      }
    },
    "GroupCostReportingLambdaFunctionRoleDefaultPolicy0F62951F": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sqs:SendMessage",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "GroupCostReportingLambdaGroupCostReportingDLQ99CBE290",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": "events:PutEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBEventBusD5514129",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Decrypt"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": "kms:Decrypt",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "GroupCostReportingLambdaFunctionRoleDefaultPolicy0F62951F",
        "Roles": [
          {
            "Ref": "GroupCostReportingLambdaFunctionRole775BD77E"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingLambda/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "GroupCostReportingLambdaFunctionA011B6BB": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.8d6718614b09a1231c406d493d3e83e0d6ff0731f1b85201d43181310fd89b7a.zip"
        },
        "DeadLetterConfig": {
          "TargetArn": {
            "Fn::GetAtt": [
              "GroupCostReportingLambdaGroupCostReportingDLQ99CBE290",
              "Arn"
            ]
          }
        },
        "Description": "Generates monthly CSV cost reports aggregated by cost report groups",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "LEASE_TABLE_NAME": {
              "Fn::GetAtt": [
                "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                "leaseTable"
              ]
            },
            "ISB_EVENT_BUS": {
              "Ref": "ISBEventBusD5514129"
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "REPORT_BUCKET_NAME": {
              "Ref": "GroupCostReportingLambdaGroupCostReportingBucketF096C1FB"
            },
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "ORG_MGT_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "OrgMgtAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-OrgMgtRole"
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-GroupCostReportingLambda-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "GroupCostReportingLambdaFunctionRole775BD77E",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "GroupCostReportingLambdaFunctionRoleDefaultPolicy0F62951F",
        "GroupCostReportingLambdaFunctionRole775BD77E"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingLambda/Function/Resource",
        "aws:asset:path": "asset.8d6718614b09a1231c406d493d3e83e0d6ff0731f1b85201d43181310fd89b7a",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "GroupCostReportingLambdaGroupCostReportingScheduleRole462747D3": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "Allows EventBridgeScheduler to invoke Group Cost Reporting Lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingScheduleRole/Resource"
      }
    },
    "GroupCostReportingLambdaGroupCostReportingScheduleRoleDefaultPolicyF3C813ED": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "GroupCostReportingLambdaFunctionA011B6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "GroupCostReportingLambdaFunctionA011B6BB",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "GroupCostReportingLambdaGroupCostReportingScheduleRoleDefaultPolicyF3C813ED",
        "Roles": [
          {
            "Ref": "GroupCostReportingLambdaGroupCostReportingScheduleRole462747D3"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda/GroupCostReportingScheduleRole/DefaultPolicy/Resource"
      }
    },
    "GroupCostReportingLambdaIsbDbTableReadOnly313255B3": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchGetItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":dynamodb:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Fn::GetAtt": [
                          "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                          "leaseTable"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":key/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "tableKmsKeyId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBReadOnlyAccess",
        "Roles": [
          {
            "Ref": "GroupCostReportingLambdaFunctionRole775BD77E"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingLambda-IsbDbTableReadOnly/Resource"
      }
    },
    "GroupCostReportingScheduledEvent": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "triggers Cost Monitoring on the fifth day of every month",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 360,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "cron(25 1 2 * ? *)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "GroupCostReportingLambdaFunctionA011B6BB",
              "Arn"
            ]
          },
          "DeadLetterConfig": {
            "Arn": {
              "Fn::GetAtt": [
                "GroupCostReportingLambdaGroupCostReportingDLQ99CBE290",
                "Arn"
              ]
            }
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 5
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "GroupCostReportingLambdaGroupCostReportingScheduleRole462747D3",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/GroupCostReportingScheduledEvent"
      }
    },
    "LogArchivingIsbLogsArchiveC37D082C": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "KMSMasterKeyID": {
                  "Fn::GetAtt": [
                    "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                    "Arn"
                  ]
                },
                "SSEAlgorithm": "aws:kms"
              }
            }
          ]
        },
        "LifecycleConfiguration": {
          "Rules": [
            {
              "ExpirationInDays": {
                "Fn::FindInMap": [
                  "Mapping",
                  "context",
                  "s3LogsGlacierRetentionInDays",
                  {
                    "DefaultValue": ""
                  }
                ]
              },
              "Status": "Enabled",
              "Transitions": [
                {
                  "StorageClass": "GLACIER",
                  "TransitionInDays": {
                    "Fn::FindInMap": [
                      "Mapping",
                      "context",
                      "s3LogsArchiveRetentionInDays",
                      {
                        "DefaultValue": ""
                      }
                    ]
                  }
                }
              ]
            }
          ]
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "ObjectWriter"
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchiving/IsbLogsArchive/Resource",
        "guard": {
          "SuppressedRules": [
            "S3_BUCKET_LOGGING_ENABLED"
          ]
        }
      }
    },
    "LogArchivingIsbLogsArchivePolicyDB21B3FF": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "LogArchivingIsbLogsArchiveC37D082C"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "LogArchivingIsbLogsArchiveC37D082C",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "LogArchivingIsbLogsArchiveC37D082C",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:GetBucketAcl",
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                },
                "ArnLike": {
                  "aws:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":logs:",
                        {
                          "Ref": "AWS::Region"
                        },
                        ":",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":*"
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": {
                  "Fn::Join": [
                    "",
                    [
                      "logs.",
                      {
                        "Ref": "AWS::Region"
                      },
                      ".amazonaws.com"
                    ]
                  ]
                }
              },
              "Resource": {
                "Fn::GetAtt": [
                  "LogArchivingIsbLogsArchiveC37D082C",
                  "Arn"
                ]
              },
              "Sid": "S3BucketReadPermissions"
            },
            {
              "Action": "s3:PutObject",
              "Condition": {
                "StringEquals": {
                  "s3:x-amz-acl": "bucket-owner-full-control",
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                },
                "ArnLike": {
                  "aws:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":logs:",
                        {
                          "Ref": "AWS::Region"
                        },
                        ":",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":*"
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": {
                  "Fn::Join": [
                    "",
                    [
                      "logs.",
                      {
                        "Ref": "AWS::Region"
                      },
                      ".amazonaws.com"
                    ]
                  ]
                }
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "LogArchivingIsbLogsArchiveC37D082C",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              },
              "Sid": "S3ObjectWritePermissions"
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchiving/IsbLogsArchive/Policy/Resource"
      }
    },
    "LogArchivingFunctionRole93CCD436": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchiving/LogArchiving/FunctionRole/Resource"
      }
    },
    "LogArchivingFunctionRoleDefaultPolicyD95F3E8A": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupE607F9A7",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "LogArchivingIsbLogsArchiveC37D082C",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "LogArchivingIsbLogsArchiveC37D082C",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "logs:CreateExportTask",
                "logs:DescribeLogStreams"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupE607F9A7",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupE607F9A7",
                          "Arn"
                        ]
                      },
                      ":log-stream/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupCleanup485A102F",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupCleanup485A102F",
                          "Arn"
                        ]
                      },
                      ":log-stream/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupAuthAC7E99B8",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupAuthAC7E99B8",
                          "Arn"
                        ]
                      },
                      ":log-stream/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupCustomResources63629E09",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "ISBLogGroupCustomResources63629E09",
                          "Arn"
                        ]
                      },
                      ":log-stream/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "logs:DescribeExportTasks",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IsbKmsKeyInnovationSandboxComputeB43F03BE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LogArchivingFunctionRoleDefaultPolicyD95F3E8A",
        "Roles": [
          {
            "Ref": "LogArchivingFunctionRole93CCD436"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchiving/LogArchiving/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "LogArchivingFunction69A8FEEA": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.473ba9718619a277adbde9a31ded3e8d7a477b3ec31b13af2d5c5bf30b675113.zip"
        },
        "Description": "Archives ISB logs every 7 days",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "DESTINATION_PREFIX": "isb-archive",
            "DESTINATION_BUCKET_NAME": {
              "Ref": "LogArchivingIsbLogsArchiveC37D082C"
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            },
            "EXPORT_PERIOD_DAYS": "7",
            "LOG_GROUP_NAMES": {
              "Fn::Join": [
                ",",
                [
                  {
                    "Ref": "ISBLogGroupE607F9A7"
                  },
                  {
                    "Ref": "ISBLogGroupCleanup485A102F"
                  },
                  {
                    "Ref": "ISBLogGroupAuthAC7E99B8"
                  },
                  {
                    "Ref": "ISBLogGroupCustomResources63629E09"
                  }
                ]
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-LogArchiving-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupE607F9A7"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "ReservedConcurrentExecutions": 1,
        "Role": {
          "Fn::GetAtt": [
            "LogArchivingFunctionRole93CCD436",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "LogArchivingFunctionRoleDefaultPolicyD95F3E8A",
        "LogArchivingFunctionRole93CCD436"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchiving/LogArchiving/Function/Resource",
        "aws:asset:path": "asset.473ba9718619a277adbde9a31ded3e8d7a477b3ec31b13af2d5c5bf30b675113",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "ISBLogGroupAuthAC7E99B8": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "IsbKmsKeyInnovationSandboxComputeB43F03BE",
            "Arn"
          ]
        },
        "RetentionInDays": {
          "Fn::FindInMap": [
            "Mapping",
            "context",
            "cloudWatchLogRetentionInDays",
            {
              "DefaultValue": ""
            }
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/ISBLogGroup-Auth/Resource",
        "guard": {
          "SuppressedRules": [
            "CW_LOGGROUP_RETENTION_PERIOD_CHECK"
          ]
        }
      }
    },
    "LogArchivingLambdaInvokeRoleB96CEF22": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "Allows EventBridgeScheduler to invoke Innovation Sandbox's Log Archiving lambda",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchivingLambdaInvokeRole/Resource"
      }
    },
    "LogArchivingLambdaInvokeRoleDefaultPolicyD9530B5E": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "LogArchivingFunction69A8FEEA",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "LogArchivingFunction69A8FEEA",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LogArchivingLambdaInvokeRoleDefaultPolicyD9530B5E",
        "Roles": [
          {
            "Ref": "LogArchivingLambdaInvokeRoleB96CEF22"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchivingLambdaInvokeRole/DefaultPolicy/Resource"
      }
    },
    "LogArchivingScheduledEvent": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "Invokes Log Archiving every 7 days",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 240,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "rate(7 days)",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "LogArchivingFunction69A8FEEA",
              "Arn"
            ]
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 3
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "LogArchivingLambdaInvokeRoleB96CEF22",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/LogArchivingScheduledEvent"
      }
    },
    "AuthResourcesPreTokenGenerationLambdaCognitoInvokePermissionA3AA65AC": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Ref": "AuthResourcesPreTokenGenerationFunctionD052C45C"
        },
        "Principal": "cognito-idp.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
            "cognitoUserPoolArn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/PreTokenGenerationLambda/CognitoInvokePermission"
      }
    },
    "AuthResourcesPreTokenGenerationFunctionRole5C82E64D": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/PreTokenGeneration/FunctionRole/Resource"
      }
    },
    "AuthResourcesPreTokenGenerationFunctionRoleDefaultPolicy9BC55AB1": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupAuthAC7E99B8",
                  "Arn"
                ]
              }
            },
            {
              "Action": "ssm:GetParameter",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ssm:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "IdcAccountId"
                    },
                    ":parameter/InnovationSandbox_",
                    {
                      "Ref": "Namespace"
                    },
                    "_Idc_Configuration"
                  ]
                ]
              }
            },
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "IntermediateRole6D2F2036",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AuthResourcesPreTokenGenerationFunctionRoleDefaultPolicy9BC55AB1",
        "Roles": [
          {
            "Ref": "AuthResourcesPreTokenGenerationFunctionRole5C82E64D"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/PreTokenGeneration/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AuthResourcesPreTokenGenerationFunctionD052C45C": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.737398c9a3eb007da87d947430462ec80e72a0701074971f650c447521a08e28.zip"
        },
        "Description": "Cognito Pre Token Generation trigger - resolves IDC group memberships and injects ISB roles into tokens",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "PreTokenGeneration",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR",
            "INTERMEDIATE_ROLE_ARN": {
              "Fn::GetAtt": [
                "IntermediateRole6D2F2036",
                "Arn"
              ]
            },
            "IDC_ROLE_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":iam::",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":role/InnovationSandbox-",
                  {
                    "Ref": "Namespace"
                  },
                  "-IdcRole"
                ]
              ]
            },
            "IDC_CONFIG_PARAM_ARN": {
              "Fn::Join": [
                "",
                [
                  "arn:",
                  {
                    "Ref": "AWS::Partition"
                  },
                  ":ssm:",
                  {
                    "Ref": "AWS::Region"
                  },
                  ":",
                  {
                    "Ref": "IdcAccountId"
                  },
                  ":parameter/InnovationSandbox_",
                  {
                    "Ref": "Namespace"
                  },
                  "_Idc_Configuration"
                ]
              ]
            },
            "ISB_NAMESPACE": {
              "Ref": "Namespace"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-PreTokenGeneration-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupAuthAC7E99B8"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AuthResourcesPreTokenGenerationFunctionRole5C82E64D",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AuthResourcesPreTokenGenerationFunctionRoleDefaultPolicy9BC55AB1",
        "AuthResourcesPreTokenGenerationFunctionRole5C82E64D"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/PreTokenGeneration/Function/Resource",
        "aws:asset:path": "asset.737398c9a3eb007da87d947430462ec80e72a0701074971f650c447521a08e28",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRole0F3E614A": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/FunctionRole/Resource"
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRoleDefaultPolicy3C0146C3": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ISBLogGroupAuthAC7E99B8",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "cognito-idp:DescribeUserPool",
                "cognito-idp:UpdateUserPool",
                "cognito-idp:UpdateUserPoolClient",
                "cognito-idp:DescribeUserPoolClient"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cognito-idp:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":userpool/",
                    {
                      "Fn::GetAtt": [
                        "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
                        "cognitoUserPoolId"
                      ]
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRoleDefaultPolicy3C0146C3",
        "Roles": [
          {
            "Ref": "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRole0F3E614A"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/FunctionRole/DefaultPolicy/Resource"
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunction5A08F864": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.eebf9bcce1401042828c959a5d725ce1e7216466468983da62b8f002555327e2.zip"
        },
        "Description": "Custom resource that attaches the Pre Token Generation trigger and updates App Client URLs",
        "Environment": {
          "Variables": {
            "NODE_OPTIONS": "--enable-source-maps",
            "USER_AGENT_EXTRA": "AwsSolution/SO0284/v1.3.0",
            "POWERTOOLS_SERVICE_NAME": "innovation-sandbox",
            "AWS_XRAY_CONTEXT_MISSING": "IGNORE_ERROR"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "ISB-CognitoConfigurer-",
              {
                "Ref": "Namespace"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeDependenciesLayerVersion4DD7969A"
          },
          {
            "Ref": "IsbSpokeConfigJsonParamResolverISBLambdaLayerInnovationSandboxComputeCommonLayerVersionB1BF66A1"
          }
        ],
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupAuthAC7E99B8"
          },
          "SystemLogLevel": "INFO"
        },
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRole0F3E614A",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRoleDefaultPolicy3C0146C3",
        "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunctionRole0F3E614A"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/Function/Resource",
        "aws:asset:path": "asset.eebf9bcce1401042828c959a5d725ce1e7216466468983da62b8f002555327e2",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDD9F064F": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/IsbProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDefaultPolicyEE9BB9DF": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunction5A08F864",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunction5A08F864",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunction5A08F864",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDefaultPolicyEE9BB9DF",
        "Roles": [
          {
            "Ref": "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDD9F064F"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/IsbProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEvent7C42371E": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "innovation-sandbox-on-aws/v1.3.0/asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/IsbProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerFunction5A08F864",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "LoggingConfig": {
          "ApplicationLogLevel": "FATAL",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "ISBLogGroupCustomResources63629E09"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDD9F064F",
            "Arn"
          ]
        },
        "Runtime": "nodejs24.x",
        "Tags": [
          {
            "Key": "aws-solutions:isb-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  {
                    "Ref": "Namespace"
                  },
                  "_isb"
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDefaultPolicyEE9BB9DF",
        "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEventServiceRoleDD9F064F"
      ],
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/IsbProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.e16ffb3b34af185b8b30c88fdb19faa13b6c42bb38580485c4e84b384ee48b63",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbCustomResource40B6B538": {
      "Type": "Custom::CognitoPostDeployConfigurer",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "AuthResourcesCognitoPostDeployConfigurerCognitoConfigurerIsbProviderframeworkonEvent7C42371E",
            "Arn"
          ]
        },
        "UserPoolId": {
          "Fn::GetAtt": [
            "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
            "cognitoUserPoolId"
          ]
        },
        "AppClientId": {
          "Fn::GetAtt": [
            "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
            "cognitoAppClientId"
          ]
        },
        "PreTokenGenLambdaArn": {
          "Fn::GetAtt": [
            "AuthResourcesPreTokenGenerationFunctionD052C45C",
            "Arn"
          ]
        },
        "CallbackUrls": [
          {
            "Fn::Join": [
              "",
              [
                {
                  "Fn::If": [
                    "HasCustomDomain",
                    {
                      "Fn::Join": [
                        "",
                        [
                          "https://",
                          {
                            "Ref": "CustomDomainName"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "https://",
                          {
                            "Fn::GetAtt": [
                              "CloudFrontUiApiIsbCloudFrontDistributionA7327667",
                              "DomainName"
                            ]
                          }
                        ]
                      ]
                    }
                  ]
                },
                "/callback"
              ]
            ]
          }
        ],
        "LogoutUrls": [
          {
            "Fn::GetAtt": [
              "IsbSpokeConfigJsonParamResolverParseJsonConfigurationIsbCustomResource57F98B57",
              "awsAccessPortalUrl"
            ]
          }
        ],
        "forceUpdate": 1787757890788
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/AuthResources/CognitoPostDeployConfigurer/CognitoConfigurer/IsbCustomResource/Default"
      }
    },
    "CDKMetadata": {
      "Type": "AWS::CDK::Metadata",
      "Properties": {
        "Analytics": "v2:deflate64:H4sIAAAAAAAA/21UwW7bMAz9lt1VrUiB3lN33Yo1axoD6zFgZNphIkuuKCUIDP/7INlOnK4X8z2KkugnkjM5u7+Xt9/gyDeq2N9o2sg296D2IivNEhzU6NEJOPK6Jahlu7Ia41qyS6tJnVJoQp3QUG8KWBtb4I7ln2SeglGerBF8t26BGT3LeTSiwEbbU43Gy4eg9ugfz45O8J1se+8DMIoexrsG1JtLClM+JiLbrDTn+8/gBU7o/qLjSLLSXPEfBzQ+t8EpXEDTkKliyNfeJbqaOG2bHDfCuSbg6OhBTqbS6O05oU7sa5btb0z5R3O9oxPaVizbF1v9dDY0KdURr5BTNhcBPnkW6B2pJ9LxAbPSfOZvAd3pEUsylETJw4aVoyaSS9T/3k7wB8v2LWDA4ZyAIn0vuUxoJzBqx7JNGj4EPusZ8SoMBRU0doLVFoug0cl490AEKidX2Fgmb90plYOyBW4C6UK2S2d3qFJpDLAT7LEpB5lZtktgFu9AXmRbSwpF7sHjAtSWTLr9ii+gEXlQCrEQT0D603FrD7yPz5JK7Nkc7B5F/sE5mmKBzFBhJ5S2oTiCV1vZzjW4un9VcHUnoKEKPB7hJNsVsp83NLzfCOdK2WC8uPRD9E5Y7qEaE6/wXAxJmpFMayJWw9YWQx1sbdGJI5SHWWqQ52Xed9Y7bubZywXNma0i8GOb2KoiU2XWlFQFB30NM9dxZjgy1WVgTKfHIEbprPGyze9eHVUUfxGZM2u8szrGf+VeITfWMP5CKNDxVa1/sXBu8GnXPxJ7R5swLkx514k0iaKKsaVVYG/rtRtUY7l09kBF/KG08qW0UdPLSMisKfqGmga8Bt8EP45HHefNGo6sNMn5kTNNaQR1Ig5OuePvh9lMzmby9tuOiW5cMJ5qlKve/gOJq4DitgUAAA=="
      },
      "Metadata": {
        "aws:cdk:path": "InnovationSandbox-Compute/CDKMetadata/Default"
      },
      "Condition": "CDKMetadataAvailable"
    }
  },
  "Mappings": {
    "Mapping": {
      "context": {
        "solutionName": "innovation-sandbox-on-aws",
        "solutionId": "SO0284",
        "version": "v1.3.0",
        "distOutputBucket": "solutions",
        "publicEcrRegistry": "public.ecr.aws/aws-solutions",
        "publicEcrTag": "v1.3.0",
        "deploymentMode": "prod",
        "stackPrefix": "InnovationSandbox",
        "cloudWatchLogRetentionInDays": 90,
        "s3LogsArchiveRetentionInDays": 365,
        "s3LogsGlacierRetentionInDays": 2555,
        "apiThrottlingRateLimit": 100,
        "apiThrottlingBurstLimit": 200,
        "cognitoAccessTokenValidityMinutes": 60,
        "cognitoIdTokenValidityMinutes": 60,
        "cognitoRefreshTokenValidityDays": 7,
        "bucketPrefix": "innovation-sandbox-on-aws/v1.3.0/asset."
      }
    }
  },
  "Conditions": {
    "UseStableTaggingCondition": {
      "Fn::Equals": [
        {
          "Ref": "UseStableTagging"
        },
        "Yes"
      ]
    },
    "AccountCleanerUsePrivateEcrRepo2A0E64EA": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Fn::FindInMap": [
                "Mapping",
                "context",
                "privateEcrRepo",
                {
                  "DefaultValue": ""
                }
              ]
            },
            ""
          ]
        }
      ]
    },
    "CloudFrontUiApiSupportsCloudFrontLoggingF1020F6E": {
      "Fn::Not": [
        {
          "Fn::Or": [
            {
              "Fn::Or": [
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "af-south-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-east-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-south-2"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-southeast-3"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-southeast-4"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ca-west-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "eu-south-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "eu-south-2"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "eu-central-2"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "il-central-1"
                  ]
                }
              ]
            },
            {
              "Fn::Or": [
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "me-south-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "me-central-1"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "CloudFrontUiApiAttachCustomDomainE8BB6ED5": {
      "Fn::And": [
        {
          "Fn::Not": [
            {
              "Fn::Equals": [
                {
                  "Ref": "CustomDomainName"
                },
                ""
              ]
            }
          ]
        },
        {
          "Fn::Not": [
            {
              "Fn::Equals": [
                {
                  "Ref": "CustomDomainCertificateArn"
                },
                ""
              ]
            }
          ]
        }
      ]
    },
    "HasCustomDomain": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "CustomDomainName"
            },
            ""
          ]
        }
      ]
    },
    "CDKMetadataAvailable": {
      "Fn::Or": [
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "af-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-3"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-3"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-4"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-northwest-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-2"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-3"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "il-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "me-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "me-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "sa-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-east-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-west-1"
              ]
            }
          ]
        },
        {
          "Fn::Equals": [
            {
              "Ref": "AWS::Region"
            },
            "us-west-2"
          ]
        }
      ]
    }
  },
  "Outputs": {
    "IsbRestApiEndpoint11756625": {
      "Value": {
        "Fn::Join": [
          "",
          [
            "https://",
            {
              "Ref": "IsbRestApi377E2CC6"
            },
            ".execute-api.",
            {
              "Ref": "AWS::Region"
            },
            ".",
            {
              "Ref": "AWS::URLSuffix"
            },
            "/",
            {
              "Ref": "IsbRestApiDeploymentStageprod7DDD9304"
            },
            "/"
          ]
        ]
      }
    },
    "CloudFrontDistributionUrl": {
      "Value": {
        "Fn::Join": [
          "",
          [
            "https://",
            {
              "Fn::GetAtt": [
                "CloudFrontUiApiIsbCloudFrontDistributionA7327667",
                "DomainName"
              ]
            }
          ]
        ]
      }
    },
    "ResolvedUrl": {
      "Description": "The resolved base URL for the deployment. Uses the Custom Domain Name if provided, otherwise the CloudFront distribution URL.",
      "Value": {
        "Fn::If": [
          "HasCustomDomain",
          {
            "Fn::Join": [
              "",
              [
                "https://",
                {
                  "Ref": "CustomDomainName"
                }
              ]
            ]
          },
          {
            "Fn::Join": [
              "",
              [
                "https://",
                {
                  "Fn::GetAtt": [
                    "CloudFrontUiApiIsbCloudFrontDistributionA7327667",
                    "DomainName"
                  ]
                }
              ]
            ]
          }
        ]
      }
    },
    "RestApiId": {
      "Description": "The API Gateway REST API ID. M2M client stacks accept this as the RestApiId parameter; also published at SSM /InnovationSandbox_<namespace>_Compute_RestApiId.",
      "Value": {
        "Ref": "IsbRestApi377E2CC6"
      }
    },
    "DeploymentUUIDOutput": {
      "Value": {
        "Fn::GetAtt": [
          "DeploymentUUIDLambdaFunctionIsbCustomResourceE707861E",
          "DeploymentUUID"
        ]
      }
    }
  }
}