diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1303d89..81c5c98 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,6 +18,10 @@ jobs: uses: actions/setup-go@v2 with: go-version: 1.18 + + # TODO add AWS credentials to generate + # - name: Generate + # run: go generate -v ./... - name: Build run: go build -v ./... diff --git a/.gitignore b/.gitignore index 498baa2..1810e8a 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ consul_input.yaml # Go workspace file go.work -ignore \ No newline at end of file +ignore.DS_Store +lib/.DS_Store diff --git a/.goreleaser.yml b/.goreleaser.yml index 4602f68..6ea0e6a 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -2,6 +2,10 @@ builds: - binary: surf + # TODO add AWS credentials before can generate + # hooks: + # pre: go generate ./... + brews: - name: surf diff --git a/README.md b/README.md index d72e99a..12467fa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + # SURF Free Text Search across your infrastructure platforms via CLI. @@ -12,6 +13,7 @@ S.U.R.F is an acronym for: `Search-Unified-Recursive-Fast` # Supported Platforms - [X] [AWS Route53 and Targets](https://github.com/Isan-Rivkin/route53-cli) +- [X] [AWS CloudControl](https://aws.amazon.com/cloudcontrolapi/) - [X] [AWS ACM](https://aws.amazon.com/certificate-manager/) - [X] [AWS S3](https://aws.amazon.com/s3/) - [X] [AWS DynamoDB](https://aws.amazon.com/dynamodb/) @@ -23,24 +25,29 @@ S.U.R.F is an acronym for: `Search-Unified-Recursive-Fast` # Table of Contents +- [SURF](#surf) +- [Supported Platforms](#supported-platforms) +- [Table of Contents](#table-of-contents) - [Overview](#overview) -- [Examples](#usage-examples) - * [AWS Route53 Usage](#aws-route53-usage) - * [AWS ACM Usage](#aws-acm-usage) - * [AWS DynamoDB Usage](#aws-dynamodb-usage) - * [AWS S3 Usage](#aws-s3-usage) - * [Hashicorp Vault Usage](#hashicorp-vault-usage) - * [Hashicorp Consul Usage](#hashicorp-consul-usage) - * [ElasticSearch / OpenSearch Usage](#elasticsearch-and-opensearch-usage) - * [Logz.io Usage](#logzio-usage) +- [Usage Examples](#usage-examples) + - [AWS Route53 Usage](#aws-route53-usage) + - [AWS Cloud Control Usage](#aws-cloud-control-usage) + - [AWS ACM Usage](#aws-acm-usage) + - [AWS DynamoDB Usage](#aws-dynamodb-usage) + - [AWS S3 Usage](#aws-s3-usage) + - [Hashicorp Vault Usage](#hashicorp-vault-usage) + - [Hashicorp Consul Usage](#hashicorp-consul-usage) + - [ElasticSearch and OpenSearch Usage](#elasticsearch-and-opensearch-usage) + - [Logz.io Usage](#logzio-usage) - [Install](#install) - + [Brew](#brew) - + [Download Binary](#download-binary) - + [Install from Source](#install-from-source) + - [Brew](#brew) + - [Download Binary](#download-binary) + - [Install from Source](#install-from-source) - [Authentication](#authentication) - * [Supported Authentication Methods](#supported-authentication-methods) + - [Supported Authentication Methods](#supported-authentication-methods) - [Version check](#version-check) - [How it Works](#how-it-works) +- [Contributors](#contributors) # Overview @@ -60,6 +67,48 @@ Based on [AWS Route53](https://github.com/Isan-Rivkin/route53-cli): Search what' surf r53 -q api.my-corp.com ``` +## AWS Cloud Control Usage + +Cloud Control API allows searching across AWS resources in a resource agnostic manner. +All resource types has CRUD and based on REST so we can list, get, create, delete. + +The Supported resource types are auto generated into the code during every build see [cloudformation_resources.gen.go](./lib/awsu/cloudformationgenerated/cloudformation_resources.gen.go). + +**List Supported resource types** + +Note: certain resources require additional fields to be specified, such as `AWS::EKS::Addon` +And list-types will show the required fields (e.g `ClusterName`). + +```bash +surf aws list-types +``` + +**List Resources** + +Example: List all EKS clusters: + +```bash +surf aws list --type eks::cluster +``` + +**Search existing resources** + +```bash +surf aws search -q -t [] -a [=] +``` + +Example search: resources containing the `my-app` *anywhere* and are of types `eks` or `vpc`: + +```bash +surf aws search -q my-app -t eks -t vpc -a `ClusterName=MyClusterName` +``` + +Example Describe EKS cluster `my-cluster`: + +```bash +surf aws get --type eks::cluster --id my-cluster +``` + ## AWS ACM Usage Search inside ACM Certificates in AWS. diff --git a/cmd/aws-cloudcontrol-generator/main.go b/cmd/aws-cloudcontrol-generator/main.go new file mode 100644 index 0000000..a267ea1 --- /dev/null +++ b/cmd/aws-cloudcontrol-generator/main.go @@ -0,0 +1,138 @@ +package main + +import ( + "bytes" + "errors" + "fmt" + "go/format" + "io/ioutil" + "text/template" + "time" + + "github.com/isan-rivkin/surf/lib/awsu" + log "github.com/sirupsen/logrus" +) + +const ( + templateData = `package cloudformationgenerated + +/* +THIS FILE WAS AUTO GENERATED AT {{ .now }} + +Do not edit this file, run "go generate" to re-generate this file with an +updated resources of CloudFormation list. +*/ + +// resource types https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html +type generatedCCResourceProperty struct { + //service-provider::service-name::data-type-name + ServiceProvider string + ServiceName string + DataTypeName string + ResourceProvisioningType string +} +// Define the main struct +type resourceSchema struct { + TypeIdentifier string + RawSchemaJson string + AdditionalRequiredFields []string +} + +var GenCloudformationProperties = []generatedCCResourceProperty{ + {{ range $i, $r := .resources -}} + { + ServiceProvider: "{{ $r.ServiceProvider }}", + ServiceName: "{{ $r.ServiceName }}", + DataTypeName: "{{ $r.DataTypeName}}", + ResourceProvisioningType: "{{ $r.ResourceProvisioningType }}", + }, + {{ end -}} +} + +var GenCloudFormationResourceSchemas = map[string]resourceSchema{ + {{- range $i, $r := .descriptions }} + "{{ $r.TypeIdentifier }}": { + AdditionalRequiredFields: []string{ + {{- range $field := $r.AdditionalRequiredFields }} + "{{ $field }}", + {{- end }} + }, + }, + {{- end }} +} +` +) + +func createFile(args map[string]interface{}) { + tmpl := template.Must(template.New("").Parse(templateData)) + buf := bytes.Buffer{} + + if err := tmpl.Execute(&buf, args); err != nil { + panic(err) + } + + fileBytes, err := format.Source(buf.Bytes()) + if err != nil { + panic(fmt.Errorf("formatting go source: %w", err)) + } + + newFile := "./lib/awsu/cloudformationgenerated/cloudformation_resources.gen.go" + + _ = ioutil.WriteFile(newFile, fileBytes, 0644) + fmt.Printf("Generated file: %s\n", newFile) +} + +func main() { + log.Info("running code generation for cloudformation resources") + auth, err := awsu.NewSessionInput("", "") + if err != nil { + panic(fmt.Errorf("creating session in AWS: %w", err)) + } + cfClient, err := awsu.NewCloudFormation(auth) + if err != nil { + panic(fmt.Errorf("creating cloudformation client: %w", err)) + } + cfApi := awsu.NewCloudFormationAPI(cfClient) + resp, err := cfApi.GetAllSupportedCloudControlAPIResources() + if err != nil { + panic(fmt.Errorf("getting all supported cloud control api resources: %w", err)) + } + resources, err := resp.GetResources() + if err != nil { + panic(fmt.Errorf("parsing resources: %w", err)) + } + // create channel in the size of resources + descriptions := make([]*awsu.ResourceSchema, 0, len(resources)) + for _, r := range resources { + retryAttempts := 5 + for i := 0; i < retryAttempts; i++ { + desc, err := cfApi.DescribeResourceType(r) + if err != nil { + if errors.Is(err, awsu.ErrCloudFormationRateLimit) { + // retry + time.Sleep(1 * time.Second) + fmt.Printf("retrying rate limit %d/%d '%s'\n", i, retryAttempts, r.String()) + continue + } else { + panic(fmt.Errorf("describing resource type: %w", err)) + } + } + resourceSchema, err := awsu.NewResourceSchemaFromDescribe(r, desc) + if err != nil { + panic(fmt.Errorf("creating resource schema from describe: %w", err)) + } + fmt.Printf("Described Resource: %s Props %s\n", resourceSchema.AdditionalRequiredFields, r.String()) + descriptions = append(descriptions, resourceSchema) + break + } + } + + fmt.Println("done descriptions: ", len(descriptions)) + args := map[string]interface{}{ + "resources": resources, + "descriptions": descriptions, + "now": time.Now().Format("2006-01-02 15:04:05"), + } + + createFile(args) +} diff --git a/cmd/cloudcontrol.go b/cmd/cloudcontrol.go new file mode 100644 index 0000000..e2b68cb --- /dev/null +++ b/cmd/cloudcontrol.go @@ -0,0 +1,511 @@ +/* +Copyright © 2023 Isan Rivkin isanrivkin@gmail.com +*/ +package cmd + +import ( + "errors" + "fmt" + "regexp" + "sort" + "strings" + + "github.com/isan-rivkin/surf/lib/awsu" + accessor "github.com/isan-rivkin/surf/lib/common/jsonutil" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +var ( + cloudcontrolCmdMultiAWSProfile *[]string +) + +// cloudcontrolCmd represents the cloudcontrol command +var cloudcontrolCmd = &cobra.Command{ + Use: "aws [command]", + Short: "AWS Resources search", + Long: ``, +} + +type matchedResourceTypeResult struct { + Resource *awsu.CCResourceProperty + Score awsu.AutoCompleteMatchScore +} + +func fuzzyMatchResourceTypes(input string, resourceTypes []*awsu.CCResourceProperty) ([]*matchedResourceTypeResult, error) { + // var match *awsu.CCResourceProperty + // var maxScore awsu.AutoCompleteMatchScore + var matches []*matchedResourceTypeResult + for _, rt := range resourceTypes { + score := rt.CheckMatch(strings.ToLower(input)) + if score > 0 { + matches = append(matches, &matchedResourceTypeResult{Resource: rt, Score: score}) + } + } + // sort matches based on max scope to min + sort.Slice(matches, func(i, j int) bool { + return matches[i].Score > matches[j].Score + }) + if len(matches) == 0 { + return nil, fmt.Errorf("no match resource type") + } + return matches, nil +} + +func setupCommonCloudControlAWSFlags(cmd *cobra.Command) { + cmd.PersistentFlags().StringVarP(&awsProfile, "profile", "p", getDefaultProfileEnvVar(), "~/.aws/credentials chosen account") + cmd.PersistentFlags().StringVarP(&awsRegion, "region", "r", "", "~/.aws/config default region if empty") + cloudcontrolCmdMultiAWSProfile = cmd.PersistentFlags().StringArray("aws-session", []string{}, "search in multiple aws profiles & regions (comma separated: --aws-session default,us-east-1 --aws-session dev-account,us-west-2) - overrides --profile and --region") +} +func setupExactTypeCommonFields(cmd *cobra.Command) { + setupCommonCloudControlAWSFlags(cmd) + cmd.Flags().String("type", "", "list resource instances of given type (usage: --type AWS::DynamoDB::Table --type AWS::EC2::VPC)") + cmd.Flags().Bool("exact", false, "exact match resource type no fuzzy matching") +} + +func withAdditionalFieldsFlag(cmd *cobra.Command) { + cmd.Flags().StringArrayP("additional", "a", []string{}, "set additional required fields for search (usage: -a 'ClusterName=my-cluster' -a 'Field2=Value2')") +} +func init() { + rootCmd.AddCommand(cloudcontrolCmd) + cloudcontrolCmd.PersistentFlags().Bool("json", false, "Output in JSON format") + + // init list types sub command + cloudcontrolCmd.AddCommand(cloudcontrolCmdListTypes) + + // init list sub command + cloudcontrolCmd.AddCommand(cloudcontrolCmdList) + setupExactTypeCommonFields(cloudcontrolCmdList) + withAdditionalFieldsFlag(cloudcontrolCmdList) + // init get sub command + cloudcontrolCmd.AddCommand(cloudcontrolCmdGet) + setupExactTypeCommonFields(cloudcontrolCmdGet) + cloudcontrolCmdGet.Flags().String("id", "", "describe resource via identifier (usage: --id )") + + // init search sub command + cloudcontrolCmd.AddCommand(cloudcontrolCmdSearch) + cloudcontrolCmdSearch.Flags().StringP("query", "q", "", "search query (usage: --query 'my-vpc')") + cloudcontrolCmdSearch.Flags().StringArrayP("type", "t", []string{}, "search resource types (usage: -t vpc -t 'ec2')") + withAdditionalFieldsFlag(cloudcontrolCmdSearch) + cloudcontrolCmdSearch.Flags().Bool("fail-on-err", false, "Fail on first resources error, otherwise keep searching") + setupCommonCloudControlAWSFlags(cloudcontrolCmdSearch) +} + +func searchResourceInstance(api awsu.CloudControlAPI, query string, resourceType *awsu.CCResourceProperty, additionalFields map[string]string) ([]awsu.CCResourceDescriber, error) { + var results []awsu.CCResourceDescriber + resourceList, err := api.ListResources(resourceType, additionalFields) + if err != nil { + return nil, fmt.Errorf("listing resource %s: %w", resourceType.String(), err) + } + for _, r := range resourceList.Resources { + id, err := r.GetIdentifier() + if err != nil { + return nil, fmt.Errorf("parsing identifier %s: %w", resourceType.String(), err) + } + // check if q (regex) match id or name + rid, err := r.GetIdentifier() + if err != nil { + return nil, fmt.Errorf("getting resource identifier %s: %w", resourceType.String(), err) + } + + // try describe and match properties + describedResource, err := api.GetResource(resourceType, rid) + + if err != nil { + return nil, fmt.Errorf("getting resource %s: %w", rid, err) + } + + obj, err := accessor.NewJsonContainerFromBytes([]byte(describedResource.GetRawProperties())) + if err != nil { + return nil, fmt.Errorf("parsing properties: %w", err) + } + flat, err := obj.Flatten() + if err != nil { + return nil, fmt.Errorf("flattening properties: %w", err) + } + + for _, v := range flat { + if strVal, ok := v.(string); ok { + matched, err := regexp.MatchString(query, strVal) + if err != nil { + return nil, fmt.Errorf("matching regex %s: %w", query, err) + } + if matched { + log.WithFields(log.Fields{"id": id, "properties": obj.String()}).Debug("found resource") + results = append(results, describedResource) + break + } + } + } + } + return results, nil +} + +type awsResourceSearchResult struct { + Auth *awsu.AuthInput + ResourceType *awsu.CCResourceProperty + Resource awsu.CCResourceDescriber +} + +// add sub command for search +var cloudcontrolCmdSearch = &cobra.Command{ + Use: "search", + Short: "Search existing cloud resources", + Long: `Search Existing AWS resources supported +surf aws search -q 'my-prod' -t vpc -t eks::cluster -a 'ClusterName=my-cluster' + `, + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + tui := buildTUI() + defer tui.GetLoader().Stop() + isJson, err := cmd.Flags().GetBool("json") + if err != nil { + log.WithError(err).Fatalf("failed getting json flag") + } + q, err := cmd.Flags().GetString("query") + if err != nil { + log.WithError(err).Fatalf("failed getting query") + } + if q == "" { + log.Fatalf("must specify a query --query (see --help)") + } + inputTypes, err := cmd.Flags().GetStringArray("type") + if err != nil { + log.WithError(err).Fatalf("failed getting types") + } + if len(inputTypes) == 0 { + log.Fatalf("must specify a resource types --type (see --help)") + } + additionalFields, err := cmd.Flags().GetStringArray("additional") + if err != nil { + log.WithError(err).Fatalf("failed getting additional fields") + } + failOnErr, err := cmd.Flags().GetBool("fail-on-err") + if err != nil { + log.WithError(err).Fatalf("failed getting fail-on-err") + } + additionalFieldsMap := map[string]string{} + for _, f := range additionalFields { + parts := strings.Split(f, "=") + if len(parts) != 2 { + log.Fatalf("invalid additional field %s, must be in format 'key=value'", f) + } + additionalFieldsMap[parts[0]] = parts[1] + } + sessInputs, err := resolveAWSSessions(cloudcontrolCmdMultiAWSProfile, awsProfile, awsRegion) + if err != nil { + log.WithError(err).Fatalf("failed building input for AWS session") + } + auths, err := awsu.NewSessionInputMatrix(sessInputs) + + if err != nil { + log.WithError(err).Fatalf("failed creating session in AWS") + } + var allResults []*awsResourceSearchResult + var allErrs []error + for _, auth := range auths { + + ccClient, err := awsu.NewCloudControl(auth) + + if err != nil { + tui.GetLoader().Stop() + log.WithError(err).Fatalf("failed creating cloudcontrol client") + } + + api := awsu.NewCloudControlAPI(ccClient) + for _, inputType := range inputTypes { + tui.GetLoader().Stop() + matchedTypes, err := fuzzyMatchResourceTypes(inputType, api.ListSupportedResourceTypes()) + if err != nil { + log.WithError(err).Warnf("failed matching '%s' resource, skipping", inputType) + continue + } + + for _, matchedType := range matchedTypes { + tui.GetLoader().Stop() + if matchedType.Score >= awsu.ServiceMatch { + tui.GetLoader().Start(fmt.Sprintf("searching in '%s' q='%s'", matchedType.Resource.String(), q), "", "green") + results, err := searchResourceInstance(api, q, matchedType.Resource, additionalFieldsMap) + if err != nil { + tui.GetLoader().Stop() + if failOnErr { + log.WithError(err).Fatalf("failed searching in '%s' q='%s'", matchedType.Resource.String(), q) + } + errMsg := fmt.Errorf("resource %s: %w", matchedType.Resource.String(), err) + if len(auths) > 1 { + errMsg = fmt.Errorf("auth: %s-%s %w", auth.EffectiveProfile, auth.EffectiveRegion, errMsg) + } + if errors.Is(err, awsu.ErrMissingRequiredField) { + errMsg = fmt.Errorf("try using --additional flag :%w", errMsg) + } + allErrs = append(allErrs, errMsg) + continue + } + for _, r := range results { + allResults = append(allResults, &awsResourceSearchResult{Auth: auth, ResourceType: matchedType.Resource, Resource: r}) + } + } + } + tui.GetLoader().Stop() + } + tui.GetLoader().Stop() + } + // print as json + if isJson { + jsonOutput := map[string]any{ + "errors": []string{}, + "matches": []map[string]any{}, + } + for _, r := range allResults { + rid, _ := r.Resource.GetIdentifier() + jsonOutput["matches"] = append(jsonOutput["matches"].([]map[string]any), map[string]any{ + "account": r.Auth.EffectiveProfile + "-" + r.Auth.EffectiveRegion, + "type": r.ResourceType.String(), + "id": rid, + "resource": r.Resource.GetRawProperties(), + }) + } + for _, e := range allErrs { + jsonOutput["errors"] = append(jsonOutput["errors"].([]string), e.Error()) + } + container, err := accessor.NewJsonContainerFromInterface("result", jsonOutput) + if err != nil { + log.WithError(err).Fatalf("failed creating json container") + } + fmt.Println(container.String()) + return + } + // print as table + cols := []string{"Account", "Type", "ID", "Resource"} + for _, r := range allResults { + rid, _ := r.Resource.GetIdentifier() + info := map[string]string{ + "Account": r.Auth.EffectiveProfile + "-" + r.Auth.EffectiveRegion, + "Type": r.ResourceType.String(), + "ID": rid, + "Resource": r.Resource.GetRawProperties(), + } + tui.GetTable().PrintInfoBox(info, cols, true) + } + if len(allErrs) > 0 { + errRows := []string{"Errors"} + info := map[string]string{ + "Errors": fmt.Sprintf("summary of %d errors in total", len(allErrs)), + } + for idx, e := range allErrs { + errRows = append(errRows, fmt.Sprintf("%d", idx+1)) + info[fmt.Sprintf("%d", idx+1)] = e.Error() + } + tui.GetTable().PrintInfoBox(info, errRows, true) + } + }, +} + +// add sub command for get +var cloudcontrolCmdGet = &cobra.Command{ + Use: "get --type --id ", + Short: "Get existing cloud resources", + Long: `Get Existing AWS resources supported`, + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + sessInputs, err := resolveAWSSessions(cloudcontrolCmdMultiAWSProfile, awsProfile, awsRegion) + if err != nil { + log.WithError(err).Fatalf("failed building input for AWS session") + } + auths, err := awsu.NewSessionInputMatrix(sessInputs) + + if err != nil { + log.WithError(err).Fatalf("failed creating session in AWS") + } + + for _, auth := range auths { + ccClient, err := awsu.NewCloudControl(auth) + + if err != nil { + log.WithError(err).Fatalf("failed creating cloudcontrol client") + } + + api := awsu.NewCloudControlAPI(ccClient) + + inputType, _ := cmd.Flags().GetString("type") + if inputType == "" { + log.Fatalf("must specify a resource type --type (usage: --type AWS::DynamoDB::Table --type AWS::EC2::VPC, see --help)") + } + + rID, _ := cmd.Flags().GetString("id") + if rID == "" { + log.Fatalf("must specify a resource identifier --id") + } + + resourceTypes, err := fuzzyMatchResourceTypes(inputType, api.ListSupportedResourceTypes()) + if err != nil { + log.WithError(err).Fatalf("failed matching resources") + } + highScoreMatches := []string{} + for _, rt := range resourceTypes { + if rt.Score >= awsu.ServiceMatch { + highScoreMatches = append(highScoreMatches, rt.Resource.String()) + } + } + if len(highScoreMatches) > 1 { + log.Fatalf("multiple valid matches found, please use exact type: '%s'", strings.Join(highScoreMatches, ", ")) + } + resourceType := resourceTypes[0].Resource + result, err := api.GetResource(resourceType, rID) + + if err != nil { + log.WithError(err).Fatalf("failed getting resource '%s' id '%s'", resourceType, rID) + } + // always json output + fmt.Println(result.GetRawProperties()) + } + }, +} + +// add sub command here to list resoure types + +var cloudcontrolCmdListTypes = &cobra.Command{ + Use: "list-types", + Short: "List Supported resources and additional required fields", + Long: `List supported resource types`, + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + isJson, err := cmd.Flags().GetBool("json") + if err != nil { + log.WithError(err).Fatalf("failed getting json flag") + } + api := awsu.NewCloudControlAPI(nil) + schemas := api.GetResourceTypesSchemas() + jsonOutput := map[string]any{} + for _, r := range api.ListSupportedResourceTypes() { + s := schemas[r.String()] + additionalFields := "" + if !isJson { + if len(s.AdditionalRequiredFields) > 0 { + additionalFields = strings.Join(s.AdditionalRequiredFields, ", ") + fmt.Printf("%s | Extra_Fields_Required: %s\n", r.String(), additionalFields) + } else { + fmt.Println(r.String()) + } + } else { + jsonOutput[r.String()] = map[string][]string{ + "additional_required_fields": s.AdditionalRequiredFields, + } + } + } + container, err := accessor.NewJsonContainerFromInterface("resources", jsonOutput) + if err != nil { + log.WithError(err).Fatalf("failed creating json container") + } + fmt.Println(container.String()) + }, +} + +var cloudcontrolCmdList = &cobra.Command{ + Use: "list --type ", + Short: "List existing cloud resources", + Long: `List Existing AWS resources supported`, + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + isJson, err := cmd.Flags().GetBool("json") + if err != nil { + log.WithError(err).Fatalf("failed getting json flag") + } + additionalFields, err := cmd.Flags().GetStringArray("additional") + if err != nil { + log.WithError(err).Fatalf("failed getting additional fields") + } + additionalFieldsMap := map[string]string{} + for _, f := range additionalFields { + parts := strings.Split(f, "=") + if len(parts) != 2 { + log.Fatalf("invalid additional field %s, must be in format 'key=value'", f) + } + additionalFieldsMap[parts[0]] = parts[1] + } + sessInputs, err := resolveAWSSessions(cloudcontrolCmdMultiAWSProfile, awsProfile, awsRegion) + if err != nil { + log.WithError(err).Fatalf("failed building input for AWS session") + } + auths, err := awsu.NewSessionInputMatrix(sessInputs) + + if err != nil { + log.WithError(err).Fatalf("failed creating session in AWS") + } + allResults := []*awsResourceSearchResult{} + for _, auth := range auths { + ccClient, err := awsu.NewCloudControl(auth) + + if err != nil { + log.WithError(err).Fatalf("failed creating cloudcontrol client") + } + + api := awsu.NewCloudControlAPI(ccClient) + + inputType, _ := cmd.Flags().GetString("type") + if inputType == "" { + log.Fatalf("must specify a resource type --type (usage: --type AWS::DynamoDB::Table --type AWS::EC2::VPC, see --help)") + } + + resourceTypes, err := fuzzyMatchResourceTypes(inputType, api.ListSupportedResourceTypes()) + if err != nil { + log.WithError(err).Fatalf("failed matching resources") + } + resourceType := resourceTypes[0].Resource + log.Infof("listing matched resource %s", resourceType.String()) + resourceList, err := api.ListResources(resourceType, additionalFieldsMap) + if err != nil { + log.WithError(err).Fatalf("failed listing resource %s", inputType) + } + for _, r := range resourceList.Resources { + allResults = append(allResults, &awsResourceSearchResult{Auth: auth, ResourceType: resourceType, Resource: r}) + } + } + // print as json + if isJson { + jsonOut := []map[string]any{} + for _, r := range allResults { + r.Resource.GetRawProperties() + rid, err := r.Resource.GetIdentifier() + if err != nil { + log.WithError(err).Fatalf("failed getting resource identifier") + } + properties, err := accessor.NewJsonContainerFromBytes([]byte(r.Resource.GetRawProperties())) + if err != nil { + log.WithError(err).Fatalf("failed parsing resource properties") + } + jsonOut = append(jsonOut, map[string]any{ + "account": r.Auth.EffectiveProfile + "-" + r.Auth.EffectiveRegion, + "type": r.ResourceType.String(), + "id": rid, + "properties": properties, + }) + } + + container, err := accessor.NewJsonContainerFromInterface("result", map[string]any{ + "resources": jsonOut, + }) + if err != nil { + log.WithError(err).Fatalf("failed creating json container") + } + fmt.Println(container.String()) + return + } + // print as table + cols := []string{"Account", "Type", "ID", "Resource"} + tui := buildTUI() + for _, r := range allResults { + rid, err := r.Resource.GetIdentifier() + if err != nil { + log.WithError(err).Fatalf("failed getting resource identifier") + } + tableInfo := map[string]string{ + "Account": r.Auth.EffectiveProfile + "-" + r.Auth.EffectiveRegion, + "Type": r.ResourceType.String(), + "ID": rid, + "Resource": r.Resource.GetRawProperties(), + } + tui.GetTable().PrintInfoBox(tableInfo, cols, true) + } + }, +} diff --git a/cmd/root.go b/cmd/root.go index dea5859..9308c57 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -31,7 +31,7 @@ import ( ) const ( - AppVersion = "2.2.2" + AppVersion = "2.3.0" AppName = "surf" ) diff --git a/go.mod b/go.mod index 4460c86..c8ba45e 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/aquasecurity/esquery v0.2.0 github.com/aws/aws-sdk-go v1.42.27 github.com/aws/aws-sdk-go-v2/config v1.15.13 + github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.11.6 + github.com/aws/aws-sdk-go-v2/service/cloudformation v1.27.2 github.com/aws/aws-sdk-go-v2/service/s3 v1.27.1 github.com/briandowns/spinner v1.18.1 github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be - github.com/elastic/go-elasticsearch/v7 v7.17.1 - github.com/elastic/go-elasticsearch/v8 v8.3.0 github.com/hashicorp/consul/api v1.12.0 github.com/hashicorp/vault/api v1.4.1 github.com/isan-rivkin/cliversioner v0.0.0-20220413085252-f4ec446e8946 @@ -26,18 +26,19 @@ require ( github.com/spf13/cobra v1.6.1 github.com/spf13/viper v1.10.1 github.com/zalando/go-keyring v0.2.0 + google.golang.org/protobuf v1.28.1 ) require ( github.com/alessio/shellescape v1.4.1 // indirect github.com/armon/go-metrics v0.3.10 // indirect github.com/armon/go-radix v1.0.0 // indirect - github.com/aws/aws-sdk-go-v2 v1.16.7 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.8 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.12.8 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3 // indirect @@ -46,11 +47,11 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.8 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.11.11 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.16.9 // indirect - github.com/aws/smithy-go v1.12.0 // indirect + github.com/aws/smithy-go v1.13.5 // indirect github.com/cenkalti/backoff/v3 v3.0.0 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/danieljoos/wincred v1.1.0 // indirect - github.com/elastic/elastic-transport-go/v8 v8.0.0-20211216131617-bbee439d559c // indirect + github.com/elastic/go-elasticsearch/v7 v7.17.1 // indirect github.com/fatih/color v1.13.0 // indirect github.com/fatih/structs v1.1.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect @@ -108,7 +109,6 @@ require ( golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 // indirect google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect google.golang.org/grpc v1.43.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 99cf500..fa1b4e5 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,10 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI github.com/aws/aws-sdk-go v1.35.30/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go v1.42.27 h1:kxsBXQg3ee6LLbqjp5/oUeDgG7TENFrWYDmEVnd7spU= github.com/aws/aws-sdk-go v1.42.27/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc= -github.com/aws/aws-sdk-go-v2 v1.16.7 h1:zfBwXus3u14OszRxGcqCDS4MfMCv10e8SMJ2r8Xm0Ns= github.com/aws/aws-sdk-go-v2 v1.16.7/go.mod h1:6CpKuLXg2w7If3ABZCl/qZ6rEgwtjZTn4eAf4RcEyuw= +github.com/aws/aws-sdk-go-v2 v1.17.6/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2 v1.17.8 h1:GMupCNNI7FARX27L7GjCJM8NgivWbRgpjNI/hOQjFS8= +github.com/aws/aws-sdk-go-v2 v1.17.8/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3 h1:S/ZBwevQkr7gv5YxONYpGQxlMFFYSRfz3RMcjsC9Qhk= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3/go.mod h1:gNsR5CaXKmQSSzrmGxmwmct/r+ZBfbxorAuXYsj/M5Y= github.com/aws/aws-sdk-go-v2/config v1.15.13 h1:CJH9zn/Enst7lDiGpoguVt0lZr5HcpNVlRJWbJ6qreo= @@ -73,14 +75,22 @@ github.com/aws/aws-sdk-go-v2/credentials v1.12.8 h1:niTa7zc7uyOP2ufri0jPESBt1h9y github.com/aws/aws-sdk-go-v2/credentials v1.12.8/go.mod h1:P2Hd4Sy7mXRxPNcQMPBmqszSJoDXexX8XEDaT6lucO0= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 h1:VfBdn2AxwMbFyJN/lF/xuT3SakomJ86PZu3rCxb5K0s= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8/go.mod h1:oL1Q3KuCq1D4NykQnIvtRiBGLUXhcpY5pl6QZB2XEPU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14 h1:2C0pYHcUBmdzPj+EKNC4qj97oK6yjrUhc1KoSodglvk= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14/go.mod h1:kdjrMwHwrC3+FsKhNcCMJ7tUVj/8uSD5CZXeQ4wV6fM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8 h1:2J+jdlBJWEmTyAwC82Ym68xCykIvnSnIN18b8xHGlcc= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.30/go.mod h1:LUBAO3zNXQjoONBKn/kR1y0Q4cj/D02Ts0uHYjcCQLM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32 h1:dpbVNUjczQ8Ae3QKHbpHBpfvaVkRdesxpTOe9pTouhU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32/go.mod h1:RudqOgadTWdcS3t/erPQo24pcVEoYyqj/kKW5Vya21I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8/go.mod h1:ZIV8GYoC6WLBW5KGs+o4rsc65/ozd+eQ0L31XF5VDwk= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.24/go.mod h1:gAuCezX/gob6BSMbItsSlMb6WZGV7K2+fWOvk8xBSto= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26 h1:QH2kOS3Ht7x+u0gHCh06CXL/h6G8LQJFpZfFBYBNboo= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26/go.mod h1:vq86l7956VgFr0/FWQ2BWnK07QC3WYsepKzy33qqY5U= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 h1:QquxR7NH3ULBsKC+NoTpilzbKKS+5AELfNREInbhvas= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15/go.mod h1:Tkrthp/0sNBShQQsamR7j/zY4p19tVTAs+nnqhH6R3c= github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5 h1:tEEHn+PGAxRVqMPEhtU8oCSW/1Ge3zP5nUgPrGQNUPs= github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5/go.mod h1:aIwFF3dUk95ocCcA3zfk3nhz0oLkpzHFWuMp8l/4nNs= +github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.11.6 h1:sje7c3VVzdGEnOIEK4ZbxJxF10is6zyFd/pOczByMlQ= +github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.11.6/go.mod h1:amppzN0qHx+8CoGKHqLKWPW+r9zVw6fqpcpu0olZZJ8= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.27.2 h1:Mlq4Uch64Z7TdoXpc1KCCl4YG/wL8lRYoBRLJ0jm1RU= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.27.2/go.mod h1:5bNbzhJ4AzkiqlN6xlNaiLYuPMQGXzAfbK1iOVzo7iY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3 h1:4n4KCtv5SUoT5Er5XV41huuzrCqepxlW3SDI9qHQebc= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3/go.mod h1:gkb2qADY+OHaGLKNTYxMaQNacfeyQpZ4csDTQMeFmcw= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.9 h1:gVv2vXOMqJeR4ZHHV32K7LElIJIIzyw/RU1b0lSfWTQ= @@ -95,8 +105,9 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.11.11 h1:XOJWXNFXJyapJqQuCIPfftsOf0X github.com/aws/aws-sdk-go-v2/service/sso v1.11.11/go.mod h1:MO4qguFjs3wPGcCSpQ7kOFTwRvb+eu+fn+1vKleGHUk= github.com/aws/aws-sdk-go-v2/service/sts v1.16.9 h1:yOfILxyjmtr2ubRkRJldlHDFBhf5vw4CzhbwWIBmimQ= github.com/aws/aws-sdk-go-v2/service/sts v1.16.9/go.mod h1:O1IvkYxr+39hRf960Us6j0x1P8pDqhTX+oXM5kQNl/Y= -github.com/aws/smithy-go v1.12.0 h1:gXpeZel/jPoWQ7OEmLIgCUnhkFftqNfwWUwAHSlp1v0= github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -131,7 +142,6 @@ github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.0 h1:3RNcEpBg4IhIChZdFRSdlQt1QjCp1sMAPIrOnm7Yf8g= @@ -139,13 +149,9 @@ github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7h github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elastic/elastic-transport-go/v8 v8.0.0-20211216131617-bbee439d559c h1:onA2RpIyeCPvYAj1LFYiiMTrSpqVINWMfYFRS7lofJs= -github.com/elastic/elastic-transport-go/v8 v8.0.0-20211216131617-bbee439d559c/go.mod h1:87Tcz8IVNe6rVSLdBux1o/PEItLtyabHU3naC7IoqKI= github.com/elastic/go-elasticsearch/v7 v7.6.0/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= github.com/elastic/go-elasticsearch/v7 v7.17.1 h1:49mHcHx7lpCL8cW1aioEwSEVKQF3s+Igi4Ye/QTWwmk= github.com/elastic/go-elasticsearch/v7 v7.17.1/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= -github.com/elastic/go-elasticsearch/v8 v8.3.0 h1:RF4iRbvWkiT6UksZ+OwSLeCEtBg/HO8r88xNiSmhb8U= -github.com/elastic/go-elasticsearch/v8 v8.3.0/go.mod h1:Usvydt+x0dv9a1TzEUaovqbJor8rmOHy5dSmPeMAE2k= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -340,7 +346,6 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -503,8 +508,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= @@ -915,7 +918,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -940,8 +942,8 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/lib/awsu/auth.go b/lib/awsu/auth.go index f2dee23..b3b7f28 100644 --- a/lib/awsu/auth.go +++ b/lib/awsu/auth.go @@ -5,6 +5,8 @@ import ( "fmt" "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/cloudcontrol" + "github.com/aws/aws-sdk-go-v2/service/cloudformation" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/client" @@ -84,3 +86,27 @@ func NewDDB(in *AuthInput) (*dynamodb.DynamoDB, error) { } return ddb, nil } + +func NewCloudControl(in *AuthInput) (*cloudcontrol.Client, error) { + conf, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(in.EffectiveRegion)) + if err != nil { + return nil, fmt.Errorf("failed loading aws config %s", err.Error()) + } + cc := cloudcontrol.NewFromConfig(conf) + if cc == nil { + return nil, fmt.Errorf("failed creating cloudcontrol client") + } + return cc, nil +} + +func NewCloudFormation(in *AuthInput) (*cloudformation.Client, error) { + conf, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(in.EffectiveRegion)) + if err != nil { + return nil, fmt.Errorf("failed loading aws config %s", err.Error()) + } + cf := cloudformation.NewFromConfig(conf) + if cf == nil { + return nil, fmt.Errorf("failed creating cloudformation client") + } + return cf, nil +} diff --git a/lib/awsu/cloudcontrol.go b/lib/awsu/cloudcontrol.go new file mode 100644 index 0000000..bc060f8 --- /dev/null +++ b/lib/awsu/cloudcontrol.go @@ -0,0 +1,218 @@ +package awsu + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/aws/aws-sdk-go-v2/service/cloudcontrol" + cctypes "github.com/aws/aws-sdk-go-v2/service/cloudcontrol/types" + "github.com/aws/aws-sdk-go-v2/service/cloudformation" + "github.com/aws/aws-sdk-go/aws" + log "github.com/sirupsen/logrus" +) + +var ( + ErrMissingRequiredField = fmt.Errorf("resource missing required field") +) + +type CCResourceDescriber interface { + IsDescribed() bool + IsShallowDescribe() bool + GetType() *CCResourceProperty + GetTypeName() string + GetIdentifier() (string, error) + GetRawDescribed() *cloudcontrol.GetResourceOutput + GetRawShallowDescribed() *cctypes.ResourceDescription + GetRawProperties() string +} + +// CCResourceWrapper implementeds CCResourceDescriber interface +type CCResourceWrapper struct { + RawResource *cloudcontrol.GetResourceOutput + RawResourceList *cctypes.ResourceDescription + Type *CCResourceProperty +} + +func NewResourceFromGetOutput(output *cloudcontrol.GetResourceOutput, inputType *CCResourceProperty) CCResourceDescriber { + return &CCResourceWrapper{ + RawResource: output, + Type: inputType, + } + +} +func NewResourceFromListOutput(output *cloudcontrol.ListResourcesOutput, inputType *CCResourceProperty) []CCResourceDescriber { + var resources []CCResourceDescriber + for _, r := range output.ResourceDescriptions { + capture := r + resources = append(resources, &CCResourceWrapper{ + RawResourceList: &capture, + Type: inputType, + }) + } + return resources +} + +type CCResourcesList struct { + Resources []CCResourceDescriber +} + +func (cc *CCResourceWrapper) GetRawDescribed() *cloudcontrol.GetResourceOutput { + return cc.RawResource +} + +func (cc *CCResourceWrapper) GetRawShallowDescribed() *cctypes.ResourceDescription { + return cc.RawResourceList +} + +func (cc *CCResourceWrapper) IsDescribed() bool { + return cc.RawResource != nil +} + +func (cc *CCResourceWrapper) IsShallowDescribe() bool { + return cc.RawResourceList != nil +} + +func (cc *CCResourceWrapper) GetType() *CCResourceProperty { + return cc.Type +} +func (cc *CCResourceWrapper) GetTypeName() string { + if cc.IsDescribed() { + return aws.StringValue(cc.RawResource.TypeName) + } + return cc.Type.String() +} + +func (cc *CCResourceWrapper) GetIdentifier() (string, error) { + if cc.IsDescribed() { + return aws.StringValue(cc.RawResource.ResourceDescription.Identifier), nil + } + if cc.IsShallowDescribe() { + return aws.StringValue(cc.RawResourceList.Identifier), nil + } + return "", fmt.Errorf("resource not described") +} + +func (cc *CCResourceWrapper) GetRawProperties() string { + if cc.IsDescribed() { + return aws.StringValue(cc.GetRawDescribed().ResourceDescription.Properties) + } + if cc.IsShallowDescribe() { + return aws.StringValue(cc.RawResourceList.Properties) + } + return "" +} + +type CloudControlAPI interface { + ListResources(resource *CCResourceProperty, additionalFields map[string]string) (*CCResourcesList, error) + GetResource(resource *CCResourceProperty, identifier string) (CCResourceDescriber, error) + ListSupportedResourceTypes() []*CCResourceProperty + GetResourceTypesSchemas() map[string]ResourceSchema +} + +type CloudControlClient struct { + c *cloudcontrol.Client + Resources []*CCResourceProperty + Schemas map[string]ResourceSchema +} + +func NewCloudControlAPI(c *cloudcontrol.Client) CloudControlAPI { + return &CloudControlClient{ + c: c, + Resources: NewCloudControlResourcesFromGeneratedCode(), + Schemas: NewResourceSchemaFromGeneratedCode(), + } +} + +func NewCloudControlAPIWithDynamicResources(c *cloudcontrol.Client, cf *cloudformation.Client) CloudControlAPI { + // TODO unify Ctor of CC API no need for all this here, make resources external dependency + resp, err := NewCloudFormationAPI(cf).GetAllSupportedCloudControlAPIResources() + if err != nil { + panic(err) + } + resources, err := resp.GetResources() + if err != nil { + panic(err) + } + return &CloudControlClient{ + c: c, + Resources: resources, + } +} + +func (cc *CloudControlClient) GetResourceTypesSchemas() map[string]ResourceSchema { + return cc.Schemas +} + +func (cc *CloudControlClient) client() *cloudcontrol.Client { + return cc.c +} + +func (cc *CloudControlClient) ListSupportedResourceTypes() []*CCResourceProperty { + return cc.Resources +} + +// Get Resource from Cloud Control API by Resource Type and Identifier (ARN) with paging +func (cc *CloudControlClient) GetResource(resource *CCResourceProperty, identifier string) (CCResourceDescriber, error) { + resp, err := cc.client().GetResource(context.Background(), &cloudcontrol.GetResourceInput{ + TypeName: aws.String(resource.String()), + Identifier: aws.String(identifier), + }) + if err != nil { + return nil, err + } + return NewResourceFromGetOutput(resp, resource), nil +} + +func (cc *CloudControlClient) createResourceModelInput(resource *CCResourceProperty, additonalFields map[string]string) (*string, error) { + result := map[string]string{} + s, ok := cc.Schemas[resource.String()] + if !ok { + return nil, fmt.Errorf("resource not found `%s`", resource.String()) + } + // no additional required fields + if len(s.AdditionalRequiredFields) == 0 { + return nil, nil + } + for _, f := range s.AdditionalRequiredFields { + fieldVal, ok := additonalFields[f] + if !ok { + return nil, fmt.Errorf("resource '%s' missing required field `%s`: %w", resource.String(), f, ErrMissingRequiredField) + } + result[f] = fieldVal + } + // convert result to json + jsonStr, err := json.Marshal(result) + if err != nil { + return nil, err + } + return aws.String(string(jsonStr)), nil +} + +// TODO: make this function really return the type not nils +func (cc *CloudControlClient) ListResources(resource *CCResourceProperty, additonalFields map[string]string) (*CCResourcesList, error) { + resourceModel, err := cc.createResourceModelInput(resource, additonalFields) + if err != nil { + return nil, err + } + input := &cloudcontrol.ListResourcesInput{ + TypeName: aws.String(resource.String()), + ResourceModel: resourceModel, + } + var result []CCResourceDescriber + for { + resp, err := cc.client().ListResources(context.Background(), input) + if err != nil { + return nil, fmt.Errorf("aws listing resources: %w", err) + } + result = append(result, NewResourceFromListOutput(resp, resource)...) + for _, r := range resp.ResourceDescriptions { + log.Debugf("Resource: %s Props %s", *r.Identifier, *r.Properties) + } + if resp.NextToken == nil { + break + } + input.NextToken = resp.NextToken + } + return &CCResourcesList{Resources: result}, nil +} diff --git a/lib/awsu/cloudcontrol_types.go b/lib/awsu/cloudcontrol_types.go new file mode 100644 index 0000000..ca73cab --- /dev/null +++ b/lib/awsu/cloudcontrol_types.go @@ -0,0 +1,106 @@ +package awsu + +import ( + "fmt" + "strings" + + cftypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types" + cfg "github.com/isan-rivkin/surf/lib/awsu/cloudformationgenerated" +) + +type AutoCompleteMatchScore int + +const ( + ProviderMatch AutoCompleteMatchScore = 10 + ServiceMatch AutoCompleteMatchScore = 40 + DataTypeMatch AutoCompleteMatchScore = 50 + ExactMatch AutoCompleteMatchScore = 100 +) + +type CCSupportedResources interface { + GetResources() ([]*CCResourceProperty, error) +} + +/* + "properties": { + "RoleArn": { + "description": "The IAM role ARN that the pod identity association is created for.", + "pattern": "^arn:aws(-cn|-us-gov|-iso(-[a-z])?)?:iam::\\d{12}:(role)\\/*", + "type": "string" + }, + "ServiceAccount": { + "description": "The Kubernetes service account that the pod identity association is created for.", + "type": "string" + } + }, +*/ +// Define the main struct +type ResourceSchema struct { + TypeIdentifier string + RawSchemaJson string `json:"rawSchemaJson"` + AdditionalRequiredFields []string `json:"additionalRequiredFields"` +} + +// resource types https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html +type CCResourceProperty struct { + //service-provider::service-name::data-type-name + ServiceProvider string `json:"service_provider"` + ServiceName string `json:"service_name"` + DataTypeName string `json:"data_type_name"` + ResourceProvisioningType string +} + +func (cc *CCResourceProperty) String() string { + return fmt.Sprintf("%s%s%s%s%s", cc.ServiceProvider, CCNameDelimeter, cc.ServiceName, CCNameDelimeter, cc.DataTypeName) +} + +func (cc *CCResourceProperty) ProvisioningType() string { + return cc.ResourceProvisioningType +} +func (cc *CCResourceProperty) IsMutable() bool { + return cc.ResourceProvisioningType == string(cftypes.ProvisioningTypeFullyMutable) +} + +// TODO: use intelligent matching based on distance +// https://github.com/adrg/strutil +func (cc *CCResourceProperty) CheckMatch(input string) AutoCompleteMatchScore { + score := 0 + parts := strings.Split(input, CCNameDelimeter) + for _, p := range parts { + score += cc.evalPartMatch(p) + } + // weight parts matches as well if 2 parts given and only 1 match that's lower score than 1 part given and 1 match + score = score / len(parts) + return AutoCompleteMatchScore(score) +} + +func (cc *CCResourceProperty) evalPartMatch(input string) int { + score := 0 + if input == strings.ToLower(cc.ServiceProvider) { + score += int(ProviderMatch) + } + if input == strings.ToLower(cc.ServiceName) { + score += int(ServiceMatch) + } + if input == strings.ToLower(cc.DataTypeName) { + score += int(DataTypeMatch) + } + return score +} + +func NewCloudControlResourcesFromGeneratedCode() []*CCResourceProperty { + resources := []*CCResourceProperty{} + for _, p := range cfg.GenCloudformationProperties { + rp := CCResourceProperty(p) + resources = append(resources, &rp) + } + return resources +} + +func NewResourceSchemaFromGeneratedCode() map[string]ResourceSchema { + resources := map[string]ResourceSchema{} + for k, v := range cfg.GenCloudFormationResourceSchemas { + resources[k] = ResourceSchema(v) + } + return resources +} diff --git a/lib/awsu/cloudformation.go b/lib/awsu/cloudformation.go new file mode 100644 index 0000000..6632932 --- /dev/null +++ b/lib/awsu/cloudformation.go @@ -0,0 +1,156 @@ +package awsu + +import ( + "context" + "errors" + "fmt" + "strings" + + "github.com/aws/aws-sdk-go-v2/service/cloudformation" + cftypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types" + "github.com/aws/aws-sdk-go/aws" + accessor "github.com/isan-rivkin/surf/lib/common/jsonutil" +) + +const CCNameDelimeter = "::" + +type CloudControlResources struct { + Mutable []cftypes.TypeSummary + Immutable []cftypes.TypeSummary +} + +func (cr *CloudControlResources) GetResources() ([]*CCResourceProperty, error) { + // TODO:: for now skip non AWS providers in AWS such as Fastly, Databricks etc ) + var resources []*CCResourceProperty + for _, m := range cr.Mutable { + fqdn := aws.StringValue(m.TypeName) + splitted := strings.Split(fqdn, CCNameDelimeter) + if splitted[0] != "AWS" { + continue + } + resources = append(resources, &CCResourceProperty{ + ServiceProvider: splitted[0], + ServiceName: splitted[1], + DataTypeName: splitted[2], + ResourceProvisioningType: string(cftypes.ProvisioningTypeFullyMutable), + }) + } + for _, m := range cr.Immutable { + fqdn := aws.StringValue(m.TypeName) + splitted := strings.Split(fqdn, CCNameDelimeter) + if splitted[0] != "AWS" { + continue + } + resources = append(resources, &CCResourceProperty{ + ServiceProvider: splitted[0], + ServiceName: splitted[1], + DataTypeName: splitted[2], + ResourceProvisioningType: string(cftypes.ProvisioningTypeImmutable), + }) + } + return resources, nil +} + +// CloudFormationAPI used as a utility for CloudControl +// https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/resource-types.html#resource-types-determine-support +// / CloudControl API supported resources https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/supported-resources.html +type CloudFormationAPI interface { + GetAllSupportedCloudControlAPIResources() (*CloudControlResources, error) + DescribeResourceType(resource *CCResourceProperty) (*cloudformation.DescribeTypeOutput, error) +} + +func NewCloudFormationAPI(c *cloudformation.Client) CloudFormationAPI { + return &CloudFormationClient{ + c: c, + } +} + +type CloudFormationClient struct { + c *cloudformation.Client +} + +func (cf *CloudFormationClient) client() *cloudformation.Client { + return cf.c +} + +func (cf *CloudFormationClient) getTypes(pType cftypes.ProvisioningType) ([]cftypes.TypeSummary, error) { + var result []cftypes.TypeSummary + paginator := cloudformation.NewListTypesPaginator(cf.client(), &cloudformation.ListTypesInput{ + Visibility: cftypes.VisibilityPublic, + ProvisioningType: pType, + }) + + for paginator.HasMorePages() { + + output, err := paginator.NextPage(context.TODO()) + if err != nil { + return nil, err + } + result = append(result, output.TypeSummaries...) + } + return result, nil +} + +var ( + ErrCloudFormationRateLimit error = errors.New("Rate exceeded") +) + +// Some cloud control resources require additional information when descriving them later in surf so with describe we can extract the additional fields +// aws cloudformation describe-type --type RESOURCE --type-name AWS::EKS::Addon | jq .Schema | jq -r | jq . +// https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/resource-operations-list.html#resource-operations-list-containers +// API https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/resource-types.html +func (cf *CloudFormationClient) DescribeResourceType(resource *CCResourceProperty) (*cloudformation.DescribeTypeOutput, error) { + res, err := cf.client().DescribeType(context.Background(), &cloudformation.DescribeTypeInput{ + Type: cftypes.RegistryTypeResource, + TypeName: aws.String(resource.String()), + }) + if err != nil { + if strings.Contains(err.Error(), "Throttling: Rate exceeded") { + return nil, ErrCloudFormationRateLimit + } + return nil, fmt.Errorf("aws describing resource type '%s': %w", resource.String(), err) + } + return res, nil +} + +func NewResourceSchemaFromDescribe(resource *CCResourceProperty, described *cloudformation.DescribeTypeOutput) (*ResourceSchema, error) { + schema, err := accessor.NewJsonContainerFromBytes([]byte(aws.StringValue(described.Schema))) + if err != nil { + return nil, fmt.Errorf("parsing schema for resource '%s': %w", resource.String(), err) + } + additionalRequiredKeyNames, ok := accessor.GetArray(schema, "handlers.list.handlerSchema.required") + if !ok { + // no additional required keys + return &ResourceSchema{ + RawSchemaJson: aws.StringValue(described.Schema), + AdditionalRequiredFields: []string{}, + TypeIdentifier: resource.String(), + }, nil + } + var additionalRequiredFields []string + for _, keyObj := range additionalRequiredKeyNames { + key, ok := accessor.GetValue[string](keyObj, "") + if ok { + additionalRequiredFields = append(additionalRequiredFields, key) + } + } + return &ResourceSchema{ + TypeIdentifier: resource.String(), + RawSchemaJson: aws.StringValue(described.Schema), + AdditionalRequiredFields: additionalRequiredFields, + }, nil +} + +func (cf *CloudFormationClient) GetAllSupportedCloudControlAPIResources() (*CloudControlResources, error) { + // aws cloudformation list-types --type RESOURCE --visibility PUBLIC --provisioning-type FULLY_MUTABLE --max-results 100 + mutableTypes, err := cf.getTypes(cftypes.ProvisioningTypeFullyMutable) + if err != nil { + return nil, err + } + immutableTypes, err := cf.getTypes(cftypes.ProvisioningTypeImmutable) + if err != nil { + return nil, err + } + resources := &CloudControlResources{Mutable: mutableTypes, Immutable: immutableTypes} + return resources, nil +} diff --git a/lib/awsu/cloudformationgenerated/cloudformation_resources.gen.go b/lib/awsu/cloudformationgenerated/cloudformation_resources.gen.go new file mode 100644 index 0000000..38e2560 --- /dev/null +++ b/lib/awsu/cloudformationgenerated/cloudformation_resources.gen.go @@ -0,0 +1,9897 @@ +package cloudformationgenerated + +/* +THIS FILE WAS AUTO GENERATED AT 2024-09-10 19:21:12 + +Do not edit this file, run "go generate" to re-generate this file with an +updated resources of CloudFormation list. +*/ + +// resource types https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html +type generatedCCResourceProperty struct { + //service-provider::service-name::data-type-name + ServiceProvider string + ServiceName string + DataTypeName string + ResourceProvisioningType string +} + +// Define the main struct +type resourceSchema struct { + TypeIdentifier string + RawSchemaJson string + AdditionalRequiredFields []string +} + +var GenCloudformationProperties = []generatedCCResourceProperty{ + { + ServiceProvider: "AWS", + ServiceName: "ACMPCA", + DataTypeName: "CertificateAuthority", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ACMPCA", + DataTypeName: "CertificateAuthorityActivation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "APS", + DataTypeName: "RuleGroupsNamespace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "APS", + DataTypeName: "Scraper", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "APS", + DataTypeName: "Workspace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ARCZonalShift", + DataTypeName: "ZonalAutoshiftConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AccessAnalyzer", + DataTypeName: "Analyzer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Amplify", + DataTypeName: "App", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Amplify", + DataTypeName: "Branch", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Amplify", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AmplifyUIBuilder", + DataTypeName: "Component", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AmplifyUIBuilder", + DataTypeName: "Form", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AmplifyUIBuilder", + DataTypeName: "Theme", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Account", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "ApiKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Authorizer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "BasePathMapping", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "ClientCertificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Deployment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "DocumentationPart", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "DocumentationVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "DomainName", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "GatewayResponse", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Method", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Model", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "RequestValidator", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Resource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "RestApi", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "Stage", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "UsagePlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "VpcLink", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "Api", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "ApiMapping", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "Authorizer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "Deployment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "DomainName", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "IntegrationResponse", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "Model", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "Route", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "RouteResponse", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGatewayV2", + DataTypeName: "VpcLink", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppConfig", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppConfig", + DataTypeName: "ConfigurationProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppConfig", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppConfig", + DataTypeName: "Extension", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppConfig", + DataTypeName: "ExtensionAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppFlow", + DataTypeName: "Connector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppFlow", + DataTypeName: "ConnectorProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppFlow", + DataTypeName: "Flow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppIntegrations", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppIntegrations", + DataTypeName: "DataIntegration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppIntegrations", + DataTypeName: "EventIntegration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppRunner", + DataTypeName: "Service", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppRunner", + DataTypeName: "VpcIngressConnection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "AppBlockBuilder", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "DirectoryConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "Entitlement", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppSync", + DataTypeName: "DomainName", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppSync", + DataTypeName: "DomainNameApiAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppSync", + DataTypeName: "FunctionConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppSync", + DataTypeName: "Resolver", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppSync", + DataTypeName: "SourceApiAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppTest", + DataTypeName: "TestCase", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApplicationAutoScaling", + DataTypeName: "ScalableTarget", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApplicationAutoScaling", + DataTypeName: "ScalingPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApplicationInsights", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApplicationSignals", + DataTypeName: "ServiceLevelObjective", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Athena", + DataTypeName: "CapacityReservation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Athena", + DataTypeName: "DataCatalog", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Athena", + DataTypeName: "PreparedStatement", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Athena", + DataTypeName: "WorkGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AuditManager", + DataTypeName: "Assessment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AutoScaling", + DataTypeName: "AutoScalingGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AutoScaling", + DataTypeName: "LifecycleHook", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AutoScaling", + DataTypeName: "ScalingPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AutoScaling", + DataTypeName: "ScheduledAction", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AutoScaling", + DataTypeName: "WarmPool", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "B2BI", + DataTypeName: "Capability", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "B2BI", + DataTypeName: "Partnership", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "B2BI", + DataTypeName: "Profile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "B2BI", + DataTypeName: "Transformer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "BCMDataExports", + DataTypeName: "Export", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "BackupPlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "BackupVault", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "Framework", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "ReportPlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "RestoreTestingPlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "RestoreTestingSelection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "BackupGateway", + DataTypeName: "Hypervisor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Batch", + DataTypeName: "ComputeEnvironment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Batch", + DataTypeName: "JobQueue", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Batch", + DataTypeName: "SchedulingPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "Agent", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "AgentAlias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "DataSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "Flow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "FlowAlias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "FlowVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "Guardrail", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "KnowledgeBase", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "Prompt", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "PromptVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "BillingConductor", + DataTypeName: "BillingGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "BillingConductor", + DataTypeName: "CustomLineItem", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "BillingConductor", + DataTypeName: "PricingPlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "BillingConductor", + DataTypeName: "PricingRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Budgets", + DataTypeName: "BudgetsAction", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CE", + DataTypeName: "AnomalyMonitor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CE", + DataTypeName: "AnomalySubscription", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CE", + DataTypeName: "CostCategory", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CUR", + DataTypeName: "ReportDefinition", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cassandra", + DataTypeName: "Keyspace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cassandra", + DataTypeName: "Table", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CertificateManager", + DataTypeName: "Account", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Chatbot", + DataTypeName: "MicrosoftTeamsChannelConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Chatbot", + DataTypeName: "SlackChannelConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "AnalysisTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "Collaboration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "ConfiguredTable", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "ConfiguredTableAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "IdMappingTable", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "IdNamespaceAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "Membership", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRooms", + DataTypeName: "PrivacyBudgetTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CleanRoomsML", + DataTypeName: "TrainingDataset", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "HookDefaultVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "HookTypeConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "ResourceDefaultVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "Stack", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "StackSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "TypeActivation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "CachePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "CloudFrontOriginAccessIdentity", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "ContinuousDeploymentPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "Distribution", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "Function", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "KeyGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "KeyValueStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "OriginAccessControl", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "OriginRequestPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "PublicKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "RealtimeLogConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "ResponseHeadersPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudTrail", + DataTypeName: "Channel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudTrail", + DataTypeName: "EventDataStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudTrail", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudTrail", + DataTypeName: "Trail", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudWatch", + DataTypeName: "Alarm", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudWatch", + DataTypeName: "CompositeAlarm", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudWatch", + DataTypeName: "Dashboard", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudWatch", + DataTypeName: "MetricStream", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeArtifact", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeArtifact", + DataTypeName: "PackageGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeArtifact", + DataTypeName: "Repository", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeBuild", + DataTypeName: "Fleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeConnections", + DataTypeName: "Connection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeDeploy", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeGuruProfiler", + DataTypeName: "ProfilingGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodePipeline", + DataTypeName: "CustomActionType", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodePipeline", + DataTypeName: "Pipeline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeStarConnections", + DataTypeName: "Connection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeStarConnections", + DataTypeName: "RepositoryLink", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeStarConnections", + DataTypeName: "SyncConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeStarNotifications", + DataTypeName: "NotificationRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "IdentityPool", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "IdentityPoolPrincipalTag", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "IdentityPoolRoleAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "LogDeliveryConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPool", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolClient", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolResourceServer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolRiskConfigurationAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolUICustomizationAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Comprehend", + DataTypeName: "DocumentClassifier", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Comprehend", + DataTypeName: "Flywheel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Config", + DataTypeName: "AggregationAuthorization", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Config", + DataTypeName: "ConfigRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Config", + DataTypeName: "ConfigurationAggregator", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Config", + DataTypeName: "ConformancePack", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Config", + DataTypeName: "OrganizationConformancePack", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Config", + DataTypeName: "StoredQuery", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "ApprovedOrigin", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "ContactFlow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "ContactFlowModule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "EvaluationForm", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "HoursOfOperation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "Instance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "InstanceStorageConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "IntegrationAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "PhoneNumber", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "PredefinedAttribute", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "Prompt", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "Queue", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "QuickConnect", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "RoutingProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "Rule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "SecurityKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "SecurityProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "TaskTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "TrafficDistributionGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "User", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "UserHierarchyGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "View", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Connect", + DataTypeName: "ViewVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ConnectCampaigns", + DataTypeName: "Campaign", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ControlTower", + DataTypeName: "EnabledBaseline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ControlTower", + DataTypeName: "EnabledControl", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ControlTower", + DataTypeName: "LandingZone", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CustomerProfiles", + DataTypeName: "CalculatedAttributeDefinition", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CustomerProfiles", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CustomerProfiles", + DataTypeName: "EventStream", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CustomerProfiles", + DataTypeName: "Integration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CustomerProfiles", + DataTypeName: "ObjectType", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DMS", + DataTypeName: "DataProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DMS", + DataTypeName: "InstanceProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DMS", + DataTypeName: "MigrationProject", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DMS", + DataTypeName: "ReplicationConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataBrew", + DataTypeName: "Dataset", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataBrew", + DataTypeName: "Job", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataBrew", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataBrew", + DataTypeName: "Recipe", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataBrew", + DataTypeName: "Ruleset", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataBrew", + DataTypeName: "Schedule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataPipeline", + DataTypeName: "Pipeline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "Agent", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationAzureBlob", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationEFS", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationFSxLustre", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationFSxONTAP", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationFSxOpenZFS", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationFSxWindows", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationHDFS", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationNFS", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationObjectStorage", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationS3", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "LocationSMB", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "StorageSystem", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataSync", + DataTypeName: "Task", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "DataSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "EnvironmentBlueprintConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "EnvironmentProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "GroupProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "ProjectMembership", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "SubscriptionTarget", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DataZone", + DataTypeName: "UserProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "Farm", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "Fleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "LicenseEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "Monitor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "Queue", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "QueueEnvironment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "StorageProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Detective", + DataTypeName: "Graph", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Detective", + DataTypeName: "MemberInvitation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Detective", + DataTypeName: "OrganizationAdmin", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DevOpsGuru", + DataTypeName: "LogAnomalyDetectionIntegration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DevOpsGuru", + DataTypeName: "ResourceCollection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DirectoryService", + DataTypeName: "SimpleAD", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DocDBElastic", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DynamoDB", + DataTypeName: "GlobalTable", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DynamoDB", + DataTypeName: "Table", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "CapacityReservation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "CapacityReservationFleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "CarrierGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "CustomerGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "DHCPOptions", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "EC2Fleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "EIP", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "FlowLog", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "GatewayRouteTableAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "Host", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAM", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAMPool", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAMResourceDiscovery", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAMResourceDiscoveryAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAMScope", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "Instance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "InstanceConnectEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "InternetGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "LaunchTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "LocalGatewayRoute", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "LocalGatewayRouteTable", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "LocalGatewayRouteTableVPCAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "LocalGatewayRouteTableVirtualInterfaceGroupAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NatGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkAcl", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkInsightsAccessScope", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkInsightsAccessScopeAnalysis", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkInsightsAnalysis", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkInsightsPath", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkInterface", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkInterfaceAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "PrefixList", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "Route", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "RouteTable", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SecurityGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SecurityGroupEgress", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SecurityGroupIngress", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SnapshotBlockPublicAccess", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SpotFleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "Subnet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayConnect", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayMulticastDomain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayPeeringAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayVpcAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPC", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCDHCPOptionsAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCEndpointConnectionNotification", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCEndpointService", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCEndpointServicePermissions", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCGatewayAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCPeeringConnection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPNConnection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPNGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VerifiedAccessEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VerifiedAccessGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VerifiedAccessInstance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VerifiedAccessTrustProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "Volume", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECR", + DataTypeName: "PublicRepository", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECR", + DataTypeName: "PullThroughCacheRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECR", + DataTypeName: "RegistryPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECR", + DataTypeName: "ReplicationConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECR", + DataTypeName: "Repository", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECR", + DataTypeName: "RepositoryCreationTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "CapacityProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "ClusterCapacityProviderAssociations", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "PrimaryTaskSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "Service", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "TaskDefinition", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ECS", + DataTypeName: "TaskSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EFS", + DataTypeName: "AccessPoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EFS", + DataTypeName: "FileSystem", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EFS", + DataTypeName: "MountTarget", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "AccessEntry", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "Addon", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "FargateProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "IdentityProviderConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "Nodegroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EKS", + DataTypeName: "PodIdentityAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EMR", + DataTypeName: "Studio", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EMR", + DataTypeName: "StudioSessionMapping", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EMR", + DataTypeName: "WALWorkspace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EMRContainers", + DataTypeName: "VirtualCluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EMRServerless", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElastiCache", + DataTypeName: "GlobalReplicationGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElastiCache", + DataTypeName: "ParameterGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElastiCache", + DataTypeName: "ServerlessCache", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElastiCache", + DataTypeName: "SubnetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElastiCache", + DataTypeName: "User", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElastiCache", + DataTypeName: "UserGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticBeanstalk", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticBeanstalk", + DataTypeName: "ApplicationVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticBeanstalk", + DataTypeName: "ConfigurationTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticBeanstalk", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticLoadBalancingV2", + DataTypeName: "Listener", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticLoadBalancingV2", + DataTypeName: "ListenerRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticLoadBalancingV2", + DataTypeName: "LoadBalancer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticLoadBalancingV2", + DataTypeName: "TargetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticLoadBalancingV2", + DataTypeName: "TrustStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EntityResolution", + DataTypeName: "IdMappingWorkflow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EntityResolution", + DataTypeName: "IdNamespace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EntityResolution", + DataTypeName: "MatchingWorkflow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EntityResolution", + DataTypeName: "PolicyStatement", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EntityResolution", + DataTypeName: "SchemaMapping", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EventSchemas", + DataTypeName: "Discoverer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EventSchemas", + DataTypeName: "Registry", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EventSchemas", + DataTypeName: "RegistryPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EventSchemas", + DataTypeName: "Schema", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Events", + DataTypeName: "ApiDestination", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Events", + DataTypeName: "Archive", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Events", + DataTypeName: "Connection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Events", + DataTypeName: "Endpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Events", + DataTypeName: "EventBus", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Events", + DataTypeName: "Rule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Evidently", + DataTypeName: "Experiment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Evidently", + DataTypeName: "Feature", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Evidently", + DataTypeName: "Launch", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Evidently", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FIS", + DataTypeName: "ExperimentTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FIS", + DataTypeName: "TargetAccountConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FMS", + DataTypeName: "NotificationChannel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FMS", + DataTypeName: "Policy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FMS", + DataTypeName: "ResourceSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FSx", + DataTypeName: "DataRepositoryAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FinSpace", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Forecast", + DataTypeName: "DatasetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "Detector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "EntityType", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "EventType", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "Label", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "List", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "Outcome", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "FraudDetector", + DataTypeName: "Variable", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "Alias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "Build", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "ContainerGroupDefinition", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "Fleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "GameServerGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "GameSessionQueue", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "Location", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "MatchmakingConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "MatchmakingRuleSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GameLift", + DataTypeName: "Script", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GlobalAccelerator", + DataTypeName: "Accelerator", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GlobalAccelerator", + DataTypeName: "CrossAccountAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GlobalAccelerator", + DataTypeName: "EndpointGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GlobalAccelerator", + DataTypeName: "Listener", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Glue", + DataTypeName: "Database", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Glue", + DataTypeName: "Registry", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Glue", + DataTypeName: "Schema", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Glue", + DataTypeName: "Trigger", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Grafana", + DataTypeName: "Workspace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GreengrassV2", + DataTypeName: "ComponentVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GreengrassV2", + DataTypeName: "Deployment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GroundStation", + DataTypeName: "Config", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GroundStation", + DataTypeName: "MissionProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "Detector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "Filter", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "IPSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "MalwareProtectionPlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "Member", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "ThreatIntelSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "HealthLake", + DataTypeName: "FHIRDatastore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "Group", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "GroupPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "InstanceProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "ManagedPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "OIDCProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "Role", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "RolePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "SAMLProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "ServerCertificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "ServiceLinkedRole", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "User", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "UserPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IAM", + DataTypeName: "VirtualMFADevice", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "Channel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "EncoderConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "PlaybackKeyPair", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "PlaybackRestrictionPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "PublicKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "RecordingConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "Stage", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "StorageConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVS", + DataTypeName: "StreamKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVSChat", + DataTypeName: "LoggingConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IVSChat", + DataTypeName: "Room", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IdentityStore", + DataTypeName: "Group", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "DistributionConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "ImagePipeline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "InfrastructureConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "LifecyclePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Inspector", + DataTypeName: "AssessmentTarget", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "InspectorV2", + DataTypeName: "CisScanConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "InspectorV2", + DataTypeName: "Filter", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "InternetMonitor", + DataTypeName: "Monitor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "AccountAuditConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "Authorizer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "BillingGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "CACertificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "Certificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "CertificateProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "CustomMetric", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "Dimension", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "DomainConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "FleetMetric", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "Logging", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "MitigationAction", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "Policy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "ProvisioningTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "ResourceSpecificLogging", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "RoleAlias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "ScheduledAudit", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "SecurityProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "SoftwarePackage", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "SoftwarePackageVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "Thing", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "ThingGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "ThingType", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "TopicRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "TopicRuleDestination", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTAnalytics", + DataTypeName: "Channel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTAnalytics", + DataTypeName: "Dataset", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTAnalytics", + DataTypeName: "Datastore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTAnalytics", + DataTypeName: "Pipeline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTCoreDeviceAdvisor", + DataTypeName: "SuiteDefinition", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTEvents", + DataTypeName: "AlarmModel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTEvents", + DataTypeName: "DetectorModel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTEvents", + DataTypeName: "Input", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetHub", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetWise", + DataTypeName: "Campaign", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetWise", + DataTypeName: "DecoderManifest", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetWise", + DataTypeName: "Fleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetWise", + DataTypeName: "ModelManifest", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetWise", + DataTypeName: "SignalCatalog", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTFleetWise", + DataTypeName: "Vehicle", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "AccessPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "Asset", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "AssetModel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "Dashboard", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "Gateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "Portal", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTSiteWise", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTTwinMaker", + DataTypeName: "ComponentType", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTTwinMaker", + DataTypeName: "Entity", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTTwinMaker", + DataTypeName: "Scene", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTTwinMaker", + DataTypeName: "Workspace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "Destination", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "FuotaTask", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "MulticastGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "NetworkAnalyzerConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "PartnerAccount", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "WirelessDevice", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "WirelessDeviceImportTask", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "WirelessGateway", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KMS", + DataTypeName: "Alias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KMS", + DataTypeName: "Key", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KMS", + DataTypeName: "ReplicaKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KafkaConnect", + DataTypeName: "Connector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KafkaConnect", + DataTypeName: "CustomPlugin", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KafkaConnect", + DataTypeName: "WorkerConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Kendra", + DataTypeName: "DataSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Kendra", + DataTypeName: "Faq", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Kendra", + DataTypeName: "Index", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KendraRanking", + DataTypeName: "ExecutionPlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Kinesis", + DataTypeName: "Stream", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KinesisAnalyticsV2", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KinesisFirehose", + DataTypeName: "DeliveryStream", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KinesisVideo", + DataTypeName: "SignalingChannel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "KinesisVideo", + DataTypeName: "Stream", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LakeFormation", + DataTypeName: "Tag", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "Alias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "CodeSigningConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "EventInvokeConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "EventSourceMapping", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "Function", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "Url", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LaunchWizard", + DataTypeName: "Deployment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lex", + DataTypeName: "Bot", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lex", + DataTypeName: "BotAlias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lex", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LicenseManager", + DataTypeName: "Grant", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LicenseManager", + DataTypeName: "License", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Alarm", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Bucket", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Certificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Container", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Database", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Disk", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Distribution", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "Instance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "LoadBalancer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "LoadBalancerTlsCertificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lightsail", + DataTypeName: "StaticIp", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "APIKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "GeofenceCollection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "Map", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "PlaceIndex", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "RouteCalculator", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "Tracker", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "AccountPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "Delivery", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "DeliveryDestination", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "DeliverySource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "Destination", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "LogAnomalyDetector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "LogGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "MetricFilter", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "QueryDefinition", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "SubscriptionFilter", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LookoutEquipment", + DataTypeName: "InferenceScheduler", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LookoutMetrics", + DataTypeName: "AnomalyDetector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LookoutVision", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "M2", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "M2", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "BatchScramSecret", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "ClusterPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "Configuration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "Replicator", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "VpcConnection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MWAA", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Macie", + DataTypeName: "AllowList", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Macie", + DataTypeName: "CustomDataIdentifier", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Macie", + DataTypeName: "FindingsFilter", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Macie", + DataTypeName: "Session", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ManagedBlockchain", + DataTypeName: "Accessor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "Bridge", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "BridgeOutput", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "BridgeSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "Flow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "FlowEntitlement", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "FlowOutput", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "FlowSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "FlowVpcInterface", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "ChannelPlacementGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "CloudWatchAlarmTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "CloudWatchAlarmTemplateGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "EventBridgeRuleTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "EventBridgeRuleTemplateGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "Multiplex", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "Multiplexprogram", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "Network", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "SdiSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaLive", + DataTypeName: "SignalMap", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackage", + DataTypeName: "Channel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackage", + DataTypeName: "OriginEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackage", + DataTypeName: "PackagingGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackageV2", + DataTypeName: "Channel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackageV2", + DataTypeName: "ChannelGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackageV2", + DataTypeName: "ChannelPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackageV2", + DataTypeName: "OriginEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackageV2", + DataTypeName: "OriginEndpointPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaTailor", + DataTypeName: "Channel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaTailor", + DataTypeName: "ChannelPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaTailor", + DataTypeName: "LiveSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaTailor", + DataTypeName: "PlaybackConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaTailor", + DataTypeName: "SourceLocation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaTailor", + DataTypeName: "VodSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MemoryDB", + DataTypeName: "ACL", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MemoryDB", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MemoryDB", + DataTypeName: "ParameterGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MemoryDB", + DataTypeName: "SubnetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MemoryDB", + DataTypeName: "User", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Neptune", + DataTypeName: "DBCluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NeptuneGraph", + DataTypeName: "Graph", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NeptuneGraph", + DataTypeName: "PrivateGraphEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkFirewall", + DataTypeName: "Firewall", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkFirewall", + DataTypeName: "FirewallPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkFirewall", + DataTypeName: "LoggingConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkFirewall", + DataTypeName: "RuleGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkFirewall", + DataTypeName: "TLSInspectionConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "ConnectAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "ConnectPeer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "CoreNetwork", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "Device", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "GlobalNetwork", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "Link", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "Site", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "SiteToSiteVpnAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "TransitGatewayPeering", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "TransitGatewayRouteTableAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "VpcAttachment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NimbleStudio", + DataTypeName: "LaunchProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NimbleStudio", + DataTypeName: "StreamingImage", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NimbleStudio", + DataTypeName: "Studio", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NimbleStudio", + DataTypeName: "StudioComponent", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OSIS", + DataTypeName: "Pipeline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Oam", + DataTypeName: "Link", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Oam", + DataTypeName: "Sink", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Omics", + DataTypeName: "AnnotationStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Omics", + DataTypeName: "RunGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Omics", + DataTypeName: "VariantStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Omics", + DataTypeName: "Workflow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchServerless", + DataTypeName: "AccessPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchServerless", + DataTypeName: "Collection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchServerless", + DataTypeName: "LifecyclePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchServerless", + DataTypeName: "SecurityConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchServerless", + DataTypeName: "SecurityPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchServerless", + DataTypeName: "VpcEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpenSearchService", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "OpsWorksCM", + DataTypeName: "Server", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Organizations", + DataTypeName: "Account", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Organizations", + DataTypeName: "Organization", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Organizations", + DataTypeName: "OrganizationalUnit", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Organizations", + DataTypeName: "Policy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Organizations", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorAD", + DataTypeName: "Connector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorAD", + DataTypeName: "DirectoryRegistration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorAD", + DataTypeName: "Template", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorAD", + DataTypeName: "TemplateGroupAccessControlEntry", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorSCEP", + DataTypeName: "Challenge", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorSCEP", + DataTypeName: "Connector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Panorama", + DataTypeName: "ApplicationInstance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Panorama", + DataTypeName: "Package", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Panorama", + DataTypeName: "PackageVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PaymentCryptography", + DataTypeName: "Alias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PaymentCryptography", + DataTypeName: "Key", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Personalize", + DataTypeName: "Dataset", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Pinpoint", + DataTypeName: "InAppTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Pipes", + DataTypeName: "Pipe", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Proton", + DataTypeName: "EnvironmentAccountConnection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Proton", + DataTypeName: "EnvironmentTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Proton", + DataTypeName: "ServiceTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QBusiness", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QBusiness", + DataTypeName: "DataSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QBusiness", + DataTypeName: "Index", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QBusiness", + DataTypeName: "Plugin", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QBusiness", + DataTypeName: "Retriever", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QBusiness", + DataTypeName: "WebExperience", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QLDB", + DataTypeName: "Stream", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "Analysis", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "Dashboard", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "DataSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "DataSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "RefreshSchedule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "Template", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "Theme", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "Topic", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "QuickSight", + DataTypeName: "VPCConnection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RAM", + DataTypeName: "Permission", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "CustomDBEngineVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBCluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBClusterParameterGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBInstance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBParameterGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBProxy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBProxyEndpoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBProxyTargetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "DBSubnetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "EventSubscription", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "GlobalCluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "Integration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RDS", + DataTypeName: "OptionGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RUM", + DataTypeName: "AppMonitor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "ClusterParameterGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "ClusterSubnetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "EndpointAccess", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "EndpointAuthorization", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "EventSubscription", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Redshift", + DataTypeName: "ScheduledAction", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RedshiftServerless", + DataTypeName: "Namespace", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RedshiftServerless", + DataTypeName: "Workgroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RefactorSpaces", + DataTypeName: "Route", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Rekognition", + DataTypeName: "Collection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Rekognition", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Rekognition", + DataTypeName: "StreamProcessor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ResilienceHub", + DataTypeName: "App", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ResilienceHub", + DataTypeName: "ResiliencyPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ResourceExplorer2", + DataTypeName: "DefaultViewAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ResourceExplorer2", + DataTypeName: "Index", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ResourceExplorer2", + DataTypeName: "View", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ResourceGroups", + DataTypeName: "Group", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RoboMaker", + DataTypeName: "Fleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RoboMaker", + DataTypeName: "Robot", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RoboMaker", + DataTypeName: "RobotApplication", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RoboMaker", + DataTypeName: "SimulationApplication", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RolesAnywhere", + DataTypeName: "CRL", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RolesAnywhere", + DataTypeName: "Profile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RolesAnywhere", + DataTypeName: "TrustAnchor", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53", + DataTypeName: "CidrCollection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53", + DataTypeName: "HealthCheck", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53", + DataTypeName: "HostedZone", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53", + DataTypeName: "KeySigningKey", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Profiles", + DataTypeName: "Profile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Profiles", + DataTypeName: "ProfileAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Profiles", + DataTypeName: "ProfileResourceAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryControl", + DataTypeName: "ControlPanel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryControl", + DataTypeName: "RoutingControl", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryControl", + DataTypeName: "SafetyRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryReadiness", + DataTypeName: "Cell", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryReadiness", + DataTypeName: "ReadinessCheck", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryReadiness", + DataTypeName: "RecoveryGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryReadiness", + DataTypeName: "ResourceSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "FirewallDomainList", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "FirewallRuleGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "FirewallRuleGroupAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "OutpostResolver", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "ResolverRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "AccessGrant", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "AccessGrantsInstance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "AccessGrantsLocation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "AccessPoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "Bucket", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "BucketPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "MultiRegionAccessPointPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "StorageLens", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "StorageLensGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3Express", + DataTypeName: "BucketPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3ObjectLambda", + DataTypeName: "AccessPoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3ObjectLambda", + DataTypeName: "AccessPointPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3Outposts", + DataTypeName: "AccessPoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3Outposts", + DataTypeName: "Bucket", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3Outposts", + DataTypeName: "BucketPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "ConfigurationSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "ConfigurationSetEventDestination", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "ContactList", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "DedicatedIpPool", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "EmailIdentity", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerAddonInstance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerAddonSubscription", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerArchive", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerIngressPoint", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerRelay", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerRuleSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "MailManagerTrafficPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "Template", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SES", + DataTypeName: "VdmAttributes", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SNS", + DataTypeName: "Topic", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SNS", + DataTypeName: "TopicInlinePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SQS", + DataTypeName: "Queue", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SQS", + DataTypeName: "QueueInlinePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSM", + DataTypeName: "Association", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSM", + DataTypeName: "Document", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSM", + DataTypeName: "Parameter", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSM", + DataTypeName: "PatchBaseline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSM", + DataTypeName: "ResourceDataSync", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSM", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMContacts", + DataTypeName: "Contact", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMContacts", + DataTypeName: "ContactChannel", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMContacts", + DataTypeName: "Plan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMContacts", + DataTypeName: "Rotation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMIncidents", + DataTypeName: "ReplicationSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMIncidents", + DataTypeName: "ResponsePlan", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSMQuickSetup", + DataTypeName: "ConfigurationManager", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSO", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSO", + DataTypeName: "Instance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSO", + DataTypeName: "InstanceAccessControlAttributeConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSO", + DataTypeName: "PermissionSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "AppImageConfig", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Cluster", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Device", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "DeviceFleet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "FeatureGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Image", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ImageVersion", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "InferenceComponent", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "InferenceExperiment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "MlflowTrackingServer", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ModelCard", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ModelPackage", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ModelPackageGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "MonitoringSchedule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Pipeline", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Project", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "Space", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "UserProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Scheduler", + DataTypeName: "Schedule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Scheduler", + DataTypeName: "ScheduleGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecretsManager", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecretsManager", + DataTypeName: "Secret", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "AutomationRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "ConfigurationPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "FindingAggregator", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "Hub", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "Insight", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "OrganizationConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "PolicyAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "SecurityControl", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "Standard", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityLake", + DataTypeName: "AwsLogSource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityLake", + DataTypeName: "DataLake", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityLake", + DataTypeName: "Subscriber", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityLake", + DataTypeName: "SubscriberNotification", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalog", + DataTypeName: "CloudFormationProvisionedProduct", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalog", + DataTypeName: "ServiceAction", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalogAppRegistry", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalogAppRegistry", + DataTypeName: "AttributeGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Shield", + DataTypeName: "DRTAccess", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Shield", + DataTypeName: "ProactiveEngagement", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Shield", + DataTypeName: "Protection", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Shield", + DataTypeName: "ProtectionGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Signer", + DataTypeName: "SigningProfile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SimSpaceWeaver", + DataTypeName: "Simulation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "StepFunctions", + DataTypeName: "Activity", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "StepFunctions", + DataTypeName: "StateMachine", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "StepFunctions", + DataTypeName: "StateMachineAlias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SupportApp", + DataTypeName: "AccountAlias", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SupportApp", + DataTypeName: "SlackChannelConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SupportApp", + DataTypeName: "SlackWorkspaceConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Synthetics", + DataTypeName: "Canary", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Synthetics", + DataTypeName: "Group", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SystemsManagerSAP", + DataTypeName: "Application", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Timestream", + DataTypeName: "Database", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Timestream", + DataTypeName: "InfluxDBInstance", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Timestream", + DataTypeName: "ScheduledQuery", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Timestream", + DataTypeName: "Table", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Transfer", + DataTypeName: "Agreement", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Transfer", + DataTypeName: "Certificate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Transfer", + DataTypeName: "Connector", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Transfer", + DataTypeName: "Profile", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Transfer", + DataTypeName: "Workflow", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VerifiedPermissions", + DataTypeName: "IdentitySource", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VerifiedPermissions", + DataTypeName: "Policy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VerifiedPermissions", + DataTypeName: "PolicyStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VerifiedPermissions", + DataTypeName: "PolicyTemplate", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VoiceID", + DataTypeName: "Domain", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "AccessLogSubscription", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "AuthPolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "Listener", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "Rule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "Service", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "ServiceNetwork", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "ServiceNetworkServiceAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "ServiceNetworkVpcAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "VpcLattice", + DataTypeName: "TargetGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WAFv2", + DataTypeName: "IPSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WAFv2", + DataTypeName: "LoggingConfiguration", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WAFv2", + DataTypeName: "RegexPatternSet", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WAFv2", + DataTypeName: "RuleGroup", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WAFv2", + DataTypeName: "WebACL", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WAFv2", + DataTypeName: "WebACLAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Wisdom", + DataTypeName: "Assistant", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Wisdom", + DataTypeName: "AssistantAssociation", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Wisdom", + DataTypeName: "KnowledgeBase", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpaces", + DataTypeName: "WorkspacesPool", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesThinClient", + DataTypeName: "Environment", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "BrowserSettings", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "IdentityProvider", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "IpAccessSettings", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "NetworkSettings", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "Portal", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "TrustStore", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "UserAccessLoggingSettings", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpacesWeb", + DataTypeName: "UserSettings", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "XRay", + DataTypeName: "Group", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "XRay", + DataTypeName: "ResourcePolicy", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "XRay", + DataTypeName: "SamplingRule", + ResourceProvisioningType: "FULLY_MUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ACMPCA", + DataTypeName: "Certificate", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ACMPCA", + DataTypeName: "Permission", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ARCZonalShift", + DataTypeName: "AutoshiftObserverNotificationStatus", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ApiGateway", + DataTypeName: "UsagePlanKey", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppConfig", + DataTypeName: "HostedConfigurationVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppRunner", + DataTypeName: "AutoScalingConfiguration", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppRunner", + DataTypeName: "ObservabilityConfiguration", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppRunner", + DataTypeName: "VpcConnector", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "AppBlock", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "ApplicationEntitlementAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "ApplicationFleetAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AppStream", + DataTypeName: "ImageBuilder", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Athena", + DataTypeName: "NamedQuery", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "AutoScaling", + DataTypeName: "LaunchConfiguration", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Backup", + DataTypeName: "BackupSelection", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Bedrock", + DataTypeName: "GuardrailVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "HookVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "ModuleDefaultVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "ModuleVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "PublicTypeVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "Publisher", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFormation", + DataTypeName: "ResourceVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CloudFront", + DataTypeName: "MonitoringSubscription", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeDeploy", + DataTypeName: "DeploymentConfig", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "CodeGuruReviewer", + DataTypeName: "RepositoryAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolUser", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Cognito", + DataTypeName: "UserPoolUserToGroupAttachment", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "MeteredProduct", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Deadline", + DataTypeName: "QueueFleetAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "DevOpsGuru", + DataTypeName: "NotificationChannel", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "EIPAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "EgressOnlyInternetGateway", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "EnclaveCertificateIamRoleAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAMAllocation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "IPAMPoolCidr", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "KeyPair", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "NetworkPerformanceMetricSubscription", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "PlacementGroup", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SubnetCidrBlock", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SubnetNetworkAclAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "SubnetRouteTableAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayMulticastDomainAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayMulticastGroupMember", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayMulticastGroupSource", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayRoute", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayRouteTable", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayRouteTableAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "TransitGatewayRouteTablePropagation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPCCidrBlock", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VPNConnectionRoute", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EC2", + DataTypeName: "VolumeAttachment", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "EMR", + DataTypeName: "SecurityConfiguration", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ElasticLoadBalancingV2", + DataTypeName: "TrustStoreRevocation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Evidently", + DataTypeName: "Segment", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Forecast", + DataTypeName: "Dataset", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Glue", + DataTypeName: "SchemaVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Glue", + DataTypeName: "SchemaVersionMetadata", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GroundStation", + DataTypeName: "DataflowEndpointGroup", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "GuardDuty", + DataTypeName: "Master", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "HealthImaging", + DataTypeName: "Datastore", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IdentityStore", + DataTypeName: "GroupMembership", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "Component", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "ContainerRecipe", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "Image", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "ImageRecipe", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ImageBuilder", + DataTypeName: "Workflow", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Inspector", + DataTypeName: "AssessmentTemplate", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Inspector", + DataTypeName: "ResourceGroup", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoT", + DataTypeName: "JobTemplate", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTTwinMaker", + DataTypeName: "SyncJob", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "DeviceProfile", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "ServiceProfile", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "IoTWireless", + DataTypeName: "TaskDefinition", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LakeFormation", + DataTypeName: "DataCellsFilter", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LakeFormation", + DataTypeName: "PrincipalPermissions", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LakeFormation", + DataTypeName: "TagAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "LayerVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "LayerVersionPermission", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "Permission", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lambda", + DataTypeName: "Version", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Lex", + DataTypeName: "BotVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Location", + DataTypeName: "TrackerConsumer", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "LogStream", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Logs", + DataTypeName: "LogStream", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "LookoutMetrics", + DataTypeName: "Alert", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MSK", + DataTypeName: "ServerlessCluster", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaConnect", + DataTypeName: "Gateway", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackage", + DataTypeName: "Asset", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "MediaPackage", + DataTypeName: "PackagingConfiguration", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "CustomerGatewayAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "LinkAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "NetworkManager", + DataTypeName: "TransitGatewayRegistration", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Omics", + DataTypeName: "ReferenceStore", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Omics", + DataTypeName: "SequenceStore", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "PCAConnectorAD", + DataTypeName: "ServicePrincipalName", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Personalize", + DataTypeName: "DatasetGroup", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Personalize", + DataTypeName: "Schema", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Personalize", + DataTypeName: "Solution", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RefactorSpaces", + DataTypeName: "Application", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RefactorSpaces", + DataTypeName: "Environment", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RefactorSpaces", + DataTypeName: "Service", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RoboMaker", + DataTypeName: "RobotApplicationVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "RoboMaker", + DataTypeName: "SimulationApplicationVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53", + DataTypeName: "DNSSEC", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53RecoveryControl", + DataTypeName: "Cluster", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "ResolverConfig", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "ResolverDNSSECConfig", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "ResolverQueryLoggingConfig", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "ResolverQueryLoggingConfigAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Route53Resolver", + DataTypeName: "ResolverRuleAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3", + DataTypeName: "MultiRegionAccessPoint", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3Express", + DataTypeName: "DirectoryBucket", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "S3Outposts", + DataTypeName: "Endpoint", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSO", + DataTypeName: "ApplicationAssignment", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SSO", + DataTypeName: "Assignment", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "App", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "DataQualityJobDefinition", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ModelBiasJobDefinition", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ModelExplainabilityJobDefinition", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "ModelQualityJobDefinition", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SageMaker", + DataTypeName: "StudioLifecycleConfig", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "DelegatedAdmin", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "SecurityHub", + DataTypeName: "ProductSubscription", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalog", + DataTypeName: "ServiceActionAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalogAppRegistry", + DataTypeName: "AttributeGroupAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "ServiceCatalogAppRegistry", + DataTypeName: "ResourceAssociation", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "Signer", + DataTypeName: "ProfilePermission", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "StepFunctions", + DataTypeName: "StateMachineVersion", + ResourceProvisioningType: "IMMUTABLE", + }, + { + ServiceProvider: "AWS", + ServiceName: "WorkSpaces", + DataTypeName: "ConnectionAlias", + ResourceProvisioningType: "IMMUTABLE", + }, +} + +var GenCloudFormationResourceSchemas = map[string]resourceSchema{ + "AWS::ACMPCA::CertificateAuthority": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ACMPCA::CertificateAuthorityActivation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::APS::RuleGroupsNamespace": { + AdditionalRequiredFields: []string{ + "Arn", + }, + }, + "AWS::APS::Scraper": { + AdditionalRequiredFields: []string{}, + }, + "AWS::APS::Workspace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ARCZonalShift::ZonalAutoshiftConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AccessAnalyzer::Analyzer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Amplify::App": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Amplify::Branch": { + AdditionalRequiredFields: []string{ + "AppId", + }, + }, + "AWS::Amplify::Domain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AmplifyUIBuilder::Component": { + AdditionalRequiredFields: []string{ + "AppId", + "EnvironmentName", + }, + }, + "AWS::AmplifyUIBuilder::Form": { + AdditionalRequiredFields: []string{ + "AppId", + "EnvironmentName", + }, + }, + "AWS::AmplifyUIBuilder::Theme": { + AdditionalRequiredFields: []string{ + "AppId", + "EnvironmentName", + }, + }, + "AWS::ApiGateway::Account": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::ApiKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::Authorizer": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::BasePathMapping": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::ApiGateway::ClientCertificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::Deployment": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::DocumentationPart": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::DocumentationVersion": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::DomainName": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::GatewayResponse": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::Method": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::Model": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::RequestValidator": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::Resource": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::RestApi": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::Stage": { + AdditionalRequiredFields: []string{ + "RestApiId", + }, + }, + "AWS::ApiGateway::UsagePlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::VpcLink": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGatewayV2::Api": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGatewayV2::ApiMapping": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGatewayV2::Authorizer": { + AdditionalRequiredFields: []string{ + "ApiId", + }, + }, + "AWS::ApiGatewayV2::Deployment": { + AdditionalRequiredFields: []string{ + "ApiId", + }, + }, + "AWS::ApiGatewayV2::DomainName": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGatewayV2::IntegrationResponse": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGatewayV2::Model": { + AdditionalRequiredFields: []string{ + "ApiId", + }, + }, + "AWS::ApiGatewayV2::Route": { + AdditionalRequiredFields: []string{ + "ApiId", + }, + }, + "AWS::ApiGatewayV2::RouteResponse": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGatewayV2::VpcLink": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppConfig::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppConfig::ConfigurationProfile": { + AdditionalRequiredFields: []string{ + "ApplicationId", + }, + }, + "AWS::AppConfig::Environment": { + AdditionalRequiredFields: []string{ + "ApplicationId", + }, + }, + "AWS::AppConfig::Extension": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppConfig::ExtensionAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppFlow::Connector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppFlow::ConnectorProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppFlow::Flow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppIntegrations::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppIntegrations::DataIntegration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppIntegrations::EventIntegration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppRunner::Service": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppRunner::VpcIngressConnection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::AppBlockBuilder": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::DirectoryConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::Entitlement": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppSync::DomainName": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppSync::DomainNameApiAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppSync::FunctionConfiguration": { + AdditionalRequiredFields: []string{ + "ApiId", + }, + }, + "AWS::AppSync::Resolver": { + AdditionalRequiredFields: []string{ + "ApiId", + "TypeName", + }, + }, + "AWS::AppSync::SourceApiAssociation": { + AdditionalRequiredFields: []string{ + "SourceApiIdentifier", + "MergedApiIdentifier", + }, + }, + "AWS::AppTest::TestCase": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApplicationAutoScaling::ScalableTarget": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApplicationAutoScaling::ScalingPolicy": { + AdditionalRequiredFields: []string{ + "ServiceNamespace", + }, + }, + "AWS::ApplicationInsights::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApplicationSignals::ServiceLevelObjective": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Athena::CapacityReservation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Athena::DataCatalog": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Athena::PreparedStatement": { + AdditionalRequiredFields: []string{ + "WorkGroup", + }, + }, + "AWS::Athena::WorkGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AuditManager::Assessment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AutoScaling::AutoScalingGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AutoScaling::LifecycleHook": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AutoScaling::ScalingPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AutoScaling::ScheduledAction": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AutoScaling::WarmPool": { + AdditionalRequiredFields: []string{}, + }, + "AWS::B2BI::Capability": { + AdditionalRequiredFields: []string{}, + }, + "AWS::B2BI::Partnership": { + AdditionalRequiredFields: []string{}, + }, + "AWS::B2BI::Profile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::B2BI::Transformer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::BCMDataExports::Export": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::BackupPlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::BackupVault": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::Framework": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::ReportPlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::RestoreTestingPlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::RestoreTestingSelection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::BackupGateway::Hypervisor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Batch::ComputeEnvironment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Batch::JobQueue": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Batch::SchedulingPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::Agent": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::AgentAlias": { + AdditionalRequiredFields: []string{ + "AgentId", + }, + }, + "AWS::Bedrock::DataSource": { + AdditionalRequiredFields: []string{ + "KnowledgeBaseId", + }, + }, + "AWS::Bedrock::Flow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::FlowAlias": { + AdditionalRequiredFields: []string{ + "FlowArn", + }, + }, + "AWS::Bedrock::FlowVersion": { + AdditionalRequiredFields: []string{ + "FlowArn", + }, + }, + "AWS::Bedrock::Guardrail": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::KnowledgeBase": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::Prompt": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::PromptVersion": { + AdditionalRequiredFields: []string{ + "PromptArn", + }, + }, + "AWS::BillingConductor::BillingGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::BillingConductor::CustomLineItem": { + AdditionalRequiredFields: []string{}, + }, + "AWS::BillingConductor::PricingPlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::BillingConductor::PricingRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Budgets::BudgetsAction": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CE::AnomalyMonitor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CE::AnomalySubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CE::CostCategory": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CUR::ReportDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cassandra::Keyspace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cassandra::Table": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CertificateManager::Account": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Chatbot::MicrosoftTeamsChannelConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Chatbot::SlackChannelConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CleanRooms::AnalysisTemplate": { + AdditionalRequiredFields: []string{ + "MembershipIdentifier", + }, + }, + "AWS::CleanRooms::Collaboration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CleanRooms::ConfiguredTable": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CleanRooms::ConfiguredTableAssociation": { + AdditionalRequiredFields: []string{ + "MembershipIdentifier", + }, + }, + "AWS::CleanRooms::IdMappingTable": { + AdditionalRequiredFields: []string{ + "MembershipIdentifier", + }, + }, + "AWS::CleanRooms::IdNamespaceAssociation": { + AdditionalRequiredFields: []string{ + "MembershipIdentifier", + }, + }, + "AWS::CleanRooms::Membership": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CleanRooms::PrivacyBudgetTemplate": { + AdditionalRequiredFields: []string{ + "MembershipIdentifier", + }, + }, + "AWS::CleanRoomsML::TrainingDataset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::HookDefaultVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::HookTypeConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::ResourceDefaultVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::Stack": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::StackSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::TypeActivation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::CachePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::CloudFrontOriginAccessIdentity": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::ContinuousDeploymentPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::Distribution": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::Function": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::KeyGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::KeyValueStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::OriginAccessControl": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::OriginRequestPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::PublicKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::RealtimeLogConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::ResponseHeadersPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudTrail::Channel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudTrail::EventDataStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudTrail::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudTrail::Trail": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudWatch::Alarm": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudWatch::CompositeAlarm": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudWatch::Dashboard": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudWatch::MetricStream": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeArtifact::Domain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeArtifact::PackageGroup": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::CodeArtifact::Repository": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeBuild::Fleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeConnections::Connection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeDeploy::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeGuruProfiler::ProfilingGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodePipeline::CustomActionType": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodePipeline::Pipeline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeStarConnections::Connection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeStarConnections::RepositoryLink": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeStarConnections::SyncConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeStarNotifications::NotificationRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cognito::IdentityPool": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cognito::IdentityPoolPrincipalTag": { + AdditionalRequiredFields: []string{ + "IdentityPoolId", + "IdentityProviderName", + }, + }, + "AWS::Cognito::IdentityPoolRoleAttachment": { + AdditionalRequiredFields: []string{ + "IdentityPoolId", + }, + }, + "AWS::Cognito::LogDeliveryConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cognito::UserPool": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cognito::UserPoolClient": { + AdditionalRequiredFields: []string{ + "UserPoolId", + }, + }, + "AWS::Cognito::UserPoolGroup": { + AdditionalRequiredFields: []string{ + "UserPoolId", + }, + }, + "AWS::Cognito::UserPoolResourceServer": { + AdditionalRequiredFields: []string{ + "UserPoolId", + }, + }, + "AWS::Cognito::UserPoolRiskConfigurationAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cognito::UserPoolUICustomizationAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Comprehend::DocumentClassifier": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Comprehend::Flywheel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Config::AggregationAuthorization": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Config::ConfigRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Config::ConfigurationAggregator": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Config::ConformancePack": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Config::OrganizationConformancePack": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Config::StoredQuery": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::ApprovedOrigin": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::ContactFlow": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::ContactFlowModule": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::EvaluationForm": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::HoursOfOperation": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::Instance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::InstanceStorageConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::IntegrationAssociation": { + AdditionalRequiredFields: []string{ + "InstanceId", + }, + }, + "AWS::Connect::PhoneNumber": { + AdditionalRequiredFields: []string{ + "TargetArn", + }, + }, + "AWS::Connect::PredefinedAttribute": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::Prompt": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::Queue": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::QuickConnect": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::RoutingProfile": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::Rule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::SecurityKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::SecurityProfile": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::TaskTemplate": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::TrafficDistributionGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Connect::User": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::UserHierarchyGroup": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::View": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::Connect::ViewVersion": { + AdditionalRequiredFields: []string{ + "ViewArn", + }, + }, + "AWS::ConnectCampaigns::Campaign": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ControlTower::EnabledBaseline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ControlTower::EnabledControl": { + AdditionalRequiredFields: []string{ + "TargetIdentifier", + }, + }, + "AWS::ControlTower::LandingZone": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CustomerProfiles::CalculatedAttributeDefinition": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::CustomerProfiles::Domain": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::CustomerProfiles::EventStream": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::CustomerProfiles::Integration": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::CustomerProfiles::ObjectType": { + AdditionalRequiredFields: []string{ + "DomainName", + }, + }, + "AWS::DMS::DataProvider": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DMS::InstanceProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DMS::MigrationProject": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DMS::ReplicationConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataBrew::Dataset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataBrew::Job": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataBrew::Project": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataBrew::Recipe": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataBrew::Ruleset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataBrew::Schedule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataPipeline::Pipeline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::Agent": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationAzureBlob": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationEFS": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationFSxLustre": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationFSxONTAP": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationFSxOpenZFS": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationFSxWindows": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationHDFS": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationNFS": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationObjectStorage": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationS3": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::LocationSMB": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::StorageSystem": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataSync::Task": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataZone::DataSource": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + }, + }, + "AWS::DataZone::Domain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DataZone::Environment": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + "ProjectIdentifier", + }, + }, + "AWS::DataZone::EnvironmentBlueprintConfiguration": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + }, + }, + "AWS::DataZone::EnvironmentProfile": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + }, + }, + "AWS::DataZone::GroupProfile": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + }, + }, + "AWS::DataZone::Project": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + }, + }, + "AWS::DataZone::ProjectMembership": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + "ProjectIdentifier", + }, + }, + "AWS::DataZone::SubscriptionTarget": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + }, + }, + "AWS::DataZone::UserProfile": { + AdditionalRequiredFields: []string{ + "DomainIdentifier", + "UserType", + }, + }, + "AWS::Deadline::Farm": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Deadline::Fleet": { + AdditionalRequiredFields: []string{ + "FarmId", + }, + }, + "AWS::Deadline::LicenseEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Deadline::Monitor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Deadline::Queue": { + AdditionalRequiredFields: []string{ + "FarmId", + }, + }, + "AWS::Deadline::QueueEnvironment": { + AdditionalRequiredFields: []string{ + "FarmId", + "QueueId", + }, + }, + "AWS::Deadline::StorageProfile": { + AdditionalRequiredFields: []string{ + "FarmId", + }, + }, + "AWS::Detective::Graph": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Detective::MemberInvitation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Detective::OrganizationAdmin": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DevOpsGuru::LogAnomalyDetectionIntegration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DevOpsGuru::ResourceCollection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DirectoryService::SimpleAD": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DocDBElastic::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DynamoDB::GlobalTable": { + AdditionalRequiredFields: []string{}, + }, + "AWS::DynamoDB::Table": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::CapacityReservation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::CapacityReservationFleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::CarrierGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::CustomerGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::DHCPOptions": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::EC2Fleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::EIP": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::FlowLog": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::GatewayRouteTableAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::Host": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::IPAM": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::IPAMPool": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::IPAMResourceDiscovery": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::IPAMResourceDiscoveryAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::IPAMScope": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::Instance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::InstanceConnectEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::InternetGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::LaunchTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::LocalGatewayRoute": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::LocalGatewayRouteTable": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::LocalGatewayRouteTableVPCAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NatGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkAcl": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkInsightsAccessScope": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkInsightsAccessScopeAnalysis": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkInsightsAnalysis": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkInsightsPath": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkInterface": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkInterfaceAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::PrefixList": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::Route": { + AdditionalRequiredFields: []string{ + "RouteTableId", + }, + }, + "AWS::EC2::RouteTable": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SecurityGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SecurityGroupEgress": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SecurityGroupIngress": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SnapshotBlockPublicAccess": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SpotFleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::Subnet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayConnect": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayMulticastDomain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayPeeringAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayVpcAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPC": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCDHCPOptionsAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCEndpointConnectionNotification": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCEndpointService": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCEndpointServicePermissions": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCGatewayAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPCPeeringConnection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPNConnection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VPNGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VerifiedAccessEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VerifiedAccessGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VerifiedAccessInstance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VerifiedAccessTrustProvider": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::Volume": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECR::PublicRepository": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECR::PullThroughCacheRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECR::RegistryPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECR::ReplicationConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECR::Repository": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECR::RepositoryCreationTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::CapacityProvider": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::ClusterCapacityProviderAssociations": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::PrimaryTaskSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::Service": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::TaskDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ECS::TaskSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EFS::AccessPoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EFS::FileSystem": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EFS::MountTarget": { + AdditionalRequiredFields: []string{ + "FileSystemId", + }, + }, + "AWS::EKS::AccessEntry": { + AdditionalRequiredFields: []string{ + "ClusterName", + }, + }, + "AWS::EKS::Addon": { + AdditionalRequiredFields: []string{ + "ClusterName", + }, + }, + "AWS::EKS::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EKS::FargateProfile": { + AdditionalRequiredFields: []string{ + "ClusterName", + }, + }, + "AWS::EKS::IdentityProviderConfig": { + AdditionalRequiredFields: []string{ + "ClusterName", + }, + }, + "AWS::EKS::Nodegroup": { + AdditionalRequiredFields: []string{ + "ClusterName", + }, + }, + "AWS::EKS::PodIdentityAssociation": { + AdditionalRequiredFields: []string{ + "ClusterName", + }, + }, + "AWS::EMR::Studio": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EMR::StudioSessionMapping": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EMR::WALWorkspace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EMRContainers::VirtualCluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EMRServerless::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElastiCache::GlobalReplicationGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElastiCache::ParameterGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElastiCache::ServerlessCache": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElastiCache::SubnetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElastiCache::User": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElastiCache::UserGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticBeanstalk::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticBeanstalk::ApplicationVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticBeanstalk::ConfigurationTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticBeanstalk::Environment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticLoadBalancingV2::Listener": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticLoadBalancingV2::ListenerRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticLoadBalancingV2::LoadBalancer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticLoadBalancingV2::TargetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticLoadBalancingV2::TrustStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EntityResolution::IdMappingWorkflow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EntityResolution::IdNamespace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EntityResolution::MatchingWorkflow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EntityResolution::PolicyStatement": { + AdditionalRequiredFields: []string{ + "Arn", + }, + }, + "AWS::EntityResolution::SchemaMapping": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EventSchemas::Discoverer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EventSchemas::Registry": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EventSchemas::RegistryPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EventSchemas::Schema": { + AdditionalRequiredFields: []string{ + "RegistryName", + }, + }, + "AWS::Events::ApiDestination": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Events::Archive": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Events::Connection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Events::Endpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Events::EventBus": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Events::Rule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Evidently::Experiment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Evidently::Feature": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Evidently::Launch": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Evidently::Project": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FIS::ExperimentTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FIS::TargetAccountConfiguration": { + AdditionalRequiredFields: []string{ + "ExperimentTemplateId", + }, + }, + "AWS::FMS::NotificationChannel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FMS::Policy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FMS::ResourceSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FSx::DataRepositoryAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FinSpace::Environment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Forecast::DatasetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::Detector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::EntityType": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::EventType": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::Label": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::List": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::Outcome": { + AdditionalRequiredFields: []string{}, + }, + "AWS::FraudDetector::Variable": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::Alias": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::Build": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::ContainerGroupDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::Fleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::GameServerGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::GameSessionQueue": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::Location": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::MatchmakingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::MatchmakingRuleSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GameLift::Script": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GlobalAccelerator::Accelerator": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GlobalAccelerator::CrossAccountAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GlobalAccelerator::EndpointGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GlobalAccelerator::Listener": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Glue::Database": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Glue::Registry": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Glue::Schema": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Glue::Trigger": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Grafana::Workspace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GreengrassV2::ComponentVersion": { + AdditionalRequiredFields: []string{ + "Arn", + }, + }, + "AWS::GreengrassV2::Deployment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GroundStation::Config": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GroundStation::MissionProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::Detector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::Filter": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::IPSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::MalwareProtectionPlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::Member": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::ThreatIntelSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::HealthLake::FHIRDatastore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::Group": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::GroupPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::InstanceProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::ManagedPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::OIDCProvider": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::Role": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::RolePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::SAMLProvider": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::ServerCertificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::ServiceLinkedRole": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::User": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::UserPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IAM::VirtualMFADevice": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::Channel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::EncoderConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::PlaybackKeyPair": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::PlaybackRestrictionPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::PublicKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::RecordingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::Stage": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::StorageConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVS::StreamKey": { + AdditionalRequiredFields: []string{ + "ChannelArn", + }, + }, + "AWS::IVSChat::LoggingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IVSChat::Room": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IdentityStore::Group": { + AdditionalRequiredFields: []string{ + "IdentityStoreId", + }, + }, + "AWS::ImageBuilder::DistributionConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ImageBuilder::ImagePipeline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ImageBuilder::InfrastructureConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ImageBuilder::LifecyclePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Inspector::AssessmentTarget": { + AdditionalRequiredFields: []string{}, + }, + "AWS::InspectorV2::CisScanConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::InspectorV2::Filter": { + AdditionalRequiredFields: []string{}, + }, + "AWS::InternetMonitor::Monitor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::AccountAuditConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::Authorizer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::BillingGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::CACertificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::Certificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::CertificateProvider": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::CustomMetric": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::Dimension": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::DomainConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::FleetMetric": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::Logging": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::MitigationAction": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::Policy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::ProvisioningTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::ResourceSpecificLogging": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::RoleAlias": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::ScheduledAudit": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::SecurityProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::SoftwarePackage": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::SoftwarePackageVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::Thing": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::ThingGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::ThingType": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::TopicRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::TopicRuleDestination": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTAnalytics::Channel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTAnalytics::Dataset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTAnalytics::Datastore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTAnalytics::Pipeline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTCoreDeviceAdvisor::SuiteDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTEvents::AlarmModel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTEvents::DetectorModel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTEvents::Input": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetHub::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetWise::Campaign": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetWise::DecoderManifest": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetWise::Fleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetWise::ModelManifest": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetWise::SignalCatalog": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTFleetWise::Vehicle": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::AccessPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::Asset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::AssetModel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::Dashboard": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::Gateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::Portal": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTSiteWise::Project": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTTwinMaker::ComponentType": { + AdditionalRequiredFields: []string{ + "WorkspaceId", + }, + }, + "AWS::IoTTwinMaker::Entity": { + AdditionalRequiredFields: []string{ + "WorkspaceId", + }, + }, + "AWS::IoTTwinMaker::Scene": { + AdditionalRequiredFields: []string{ + "WorkspaceId", + }, + }, + "AWS::IoTTwinMaker::Workspace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::Destination": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::FuotaTask": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::MulticastGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::NetworkAnalyzerConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::PartnerAccount": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::WirelessDevice": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::WirelessDeviceImportTask": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::WirelessGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KMS::Alias": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KMS::Key": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KMS::ReplicaKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KafkaConnect::Connector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KafkaConnect::CustomPlugin": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KafkaConnect::WorkerConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Kendra::DataSource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Kendra::Faq": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Kendra::Index": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KendraRanking::ExecutionPlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Kinesis::Stream": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KinesisAnalyticsV2::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KinesisFirehose::DeliveryStream": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KinesisVideo::SignalingChannel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::KinesisVideo::Stream": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LakeFormation::Tag": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::Alias": { + AdditionalRequiredFields: []string{ + "FunctionName", + }, + }, + "AWS::Lambda::CodeSigningConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::EventInvokeConfig": { + AdditionalRequiredFields: []string{ + "FunctionName", + }, + }, + "AWS::Lambda::EventSourceMapping": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::Function": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::Url": { + AdditionalRequiredFields: []string{ + "TargetFunctionArn", + }, + }, + "AWS::LaunchWizard::Deployment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lex::Bot": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lex::BotAlias": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lex::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LicenseManager::Grant": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LicenseManager::License": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Alarm": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Bucket": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Certificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Container": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Database": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Disk": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Distribution": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::Instance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::LoadBalancer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::LoadBalancerTlsCertificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lightsail::StaticIp": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::APIKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::GeofenceCollection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::Map": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::PlaceIndex": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::RouteCalculator": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::Tracker": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::AccountPolicy": { + AdditionalRequiredFields: []string{ + "PolicyType", + }, + }, + "AWS::Logs::Delivery": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::DeliveryDestination": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::DeliverySource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::Destination": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::LogAnomalyDetector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::LogGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::MetricFilter": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::QueryDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::SubscriptionFilter": { + AdditionalRequiredFields: []string{ + "LogGroupName", + }, + }, + "AWS::LookoutEquipment::InferenceScheduler": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LookoutMetrics::AnomalyDetector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LookoutVision::Project": { + AdditionalRequiredFields: []string{}, + }, + "AWS::M2::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::M2::Environment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MSK::BatchScramSecret": { + AdditionalRequiredFields: []string{ + "ClusterArn", + }, + }, + "AWS::MSK::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MSK::ClusterPolicy": { + AdditionalRequiredFields: []string{ + "ClusterArn", + }, + }, + "AWS::MSK::Configuration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MSK::Replicator": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MSK::VpcConnection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MWAA::Environment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Macie::AllowList": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Macie::CustomDataIdentifier": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Macie::FindingsFilter": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Macie::Session": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ManagedBlockchain::Accessor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::Bridge": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::BridgeOutput": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::BridgeSource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::Flow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::FlowEntitlement": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::FlowOutput": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::FlowSource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::FlowVpcInterface": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::ChannelPlacementGroup": { + AdditionalRequiredFields: []string{ + "ClusterId", + }, + }, + "AWS::MediaLive::CloudWatchAlarmTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::CloudWatchAlarmTemplateGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::EventBridgeRuleTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::EventBridgeRuleTemplateGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::Multiplex": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::Multiplexprogram": { + AdditionalRequiredFields: []string{ + "MultiplexId", + }, + }, + "AWS::MediaLive::Network": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::SdiSource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaLive::SignalMap": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackage::Channel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackage::OriginEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackage::PackagingGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackageV2::Channel": { + AdditionalRequiredFields: []string{ + "ChannelGroupName", + }, + }, + "AWS::MediaPackageV2::ChannelGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackageV2::ChannelPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackageV2::OriginEndpoint": { + AdditionalRequiredFields: []string{ + "ChannelGroupName", + "ChannelName", + }, + }, + "AWS::MediaPackageV2::OriginEndpointPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaTailor::Channel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaTailor::ChannelPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaTailor::LiveSource": { + AdditionalRequiredFields: []string{ + "SourceLocationName", + }, + }, + "AWS::MediaTailor::PlaybackConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaTailor::SourceLocation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaTailor::VodSource": { + AdditionalRequiredFields: []string{ + "SourceLocationName", + }, + }, + "AWS::MemoryDB::ACL": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MemoryDB::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MemoryDB::ParameterGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MemoryDB::SubnetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MemoryDB::User": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Neptune::DBCluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NeptuneGraph::Graph": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NeptuneGraph::PrivateGraphEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkFirewall::Firewall": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkFirewall::FirewallPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkFirewall::LoggingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkFirewall::RuleGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkFirewall::TLSInspectionConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::ConnectAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::ConnectPeer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::CoreNetwork": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::Device": { + AdditionalRequiredFields: []string{ + "GlobalNetworkId", + }, + }, + "AWS::NetworkManager::GlobalNetwork": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::Link": { + AdditionalRequiredFields: []string{ + "GlobalNetworkId", + }, + }, + "AWS::NetworkManager::Site": { + AdditionalRequiredFields: []string{ + "GlobalNetworkId", + }, + }, + "AWS::NetworkManager::SiteToSiteVpnAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::TransitGatewayPeering": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::TransitGatewayRouteTableAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::VpcAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NimbleStudio::LaunchProfile": { + AdditionalRequiredFields: []string{ + "StudioId", + }, + }, + "AWS::NimbleStudio::StreamingImage": { + AdditionalRequiredFields: []string{ + "StudioId", + }, + }, + "AWS::NimbleStudio::Studio": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NimbleStudio::StudioComponent": { + AdditionalRequiredFields: []string{ + "StudioId", + }, + }, + "AWS::OSIS::Pipeline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Oam::Link": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Oam::Sink": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Omics::AnnotationStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Omics::RunGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Omics::VariantStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Omics::Workflow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::OpenSearchServerless::AccessPolicy": { + AdditionalRequiredFields: []string{ + "Type", + }, + }, + "AWS::OpenSearchServerless::Collection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::OpenSearchServerless::LifecyclePolicy": { + AdditionalRequiredFields: []string{ + "Type", + }, + }, + "AWS::OpenSearchServerless::SecurityConfig": { + AdditionalRequiredFields: []string{ + "Type", + }, + }, + "AWS::OpenSearchServerless::SecurityPolicy": { + AdditionalRequiredFields: []string{ + "Type", + }, + }, + "AWS::OpenSearchServerless::VpcEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::OpenSearchService::Domain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::OpsWorksCM::Server": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Organizations::Account": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Organizations::Organization": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Organizations::OrganizationalUnit": { + AdditionalRequiredFields: []string{ + "ParentId", + }, + }, + "AWS::Organizations::Policy": { + AdditionalRequiredFields: []string{ + "Type", + }, + }, + "AWS::Organizations::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::PCAConnectorAD::Connector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::PCAConnectorAD::DirectoryRegistration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::PCAConnectorAD::Template": { + AdditionalRequiredFields: []string{ + "ConnectorArn", + }, + }, + "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry": { + AdditionalRequiredFields: []string{ + "TemplateArn", + }, + }, + "AWS::PCAConnectorSCEP::Challenge": { + AdditionalRequiredFields: []string{ + "ConnectorArn", + }, + }, + "AWS::PCAConnectorSCEP::Connector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Panorama::ApplicationInstance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Panorama::Package": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Panorama::PackageVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::PaymentCryptography::Alias": { + AdditionalRequiredFields: []string{}, + }, + "AWS::PaymentCryptography::Key": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Personalize::Dataset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Pinpoint::InAppTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Pipes::Pipe": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Proton::EnvironmentAccountConnection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Proton::EnvironmentTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Proton::ServiceTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::QBusiness::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::QBusiness::DataSource": { + AdditionalRequiredFields: []string{ + "IndexId", + "ApplicationId", + }, + }, + "AWS::QBusiness::Index": { + AdditionalRequiredFields: []string{ + "ApplicationId", + }, + }, + "AWS::QBusiness::Plugin": { + AdditionalRequiredFields: []string{ + "ApplicationId", + }, + }, + "AWS::QBusiness::Retriever": { + AdditionalRequiredFields: []string{ + "ApplicationId", + }, + }, + "AWS::QBusiness::WebExperience": { + AdditionalRequiredFields: []string{ + "ApplicationId", + }, + }, + "AWS::QLDB::Stream": { + AdditionalRequiredFields: []string{}, + }, + "AWS::QuickSight::Analysis": { + AdditionalRequiredFields: []string{ + "AwsAccountId", + }, + }, + "AWS::QuickSight::Dashboard": { + AdditionalRequiredFields: []string{ + "AwsAccountId", + }, + }, + "AWS::QuickSight::DataSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::QuickSight::DataSource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::QuickSight::RefreshSchedule": { + AdditionalRequiredFields: []string{ + "AwsAccountId", + "DataSetId", + }, + }, + "AWS::QuickSight::Template": { + AdditionalRequiredFields: []string{ + "AwsAccountId", + }, + }, + "AWS::QuickSight::Theme": { + AdditionalRequiredFields: []string{ + "AwsAccountId", + }, + }, + "AWS::QuickSight::Topic": { + AdditionalRequiredFields: []string{}, + }, + "AWS::QuickSight::VPCConnection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RAM::Permission": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::CustomDBEngineVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBCluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBClusterParameterGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBInstance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBParameterGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBProxy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBProxyEndpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBProxyTargetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::DBSubnetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::EventSubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::GlobalCluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::Integration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RDS::OptionGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RUM::AppMonitor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::ClusterParameterGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::ClusterSubnetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::EndpointAccess": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::EndpointAuthorization": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::EventSubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Redshift::ScheduledAction": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RedshiftServerless::Namespace": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RedshiftServerless::Workgroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RefactorSpaces::Route": { + AdditionalRequiredFields: []string{ + "EnvironmentIdentifier", + "ApplicationIdentifier", + }, + }, + "AWS::Rekognition::Collection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Rekognition::Project": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Rekognition::StreamProcessor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ResilienceHub::App": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ResilienceHub::ResiliencyPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ResourceExplorer2::DefaultViewAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ResourceExplorer2::Index": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ResourceExplorer2::View": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ResourceGroups::Group": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RoboMaker::Fleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RoboMaker::Robot": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RoboMaker::RobotApplication": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RoboMaker::SimulationApplication": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RolesAnywhere::CRL": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RolesAnywhere::Profile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RolesAnywhere::TrustAnchor": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53::CidrCollection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53::HealthCheck": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53::HostedZone": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53::KeySigningKey": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Profiles::Profile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Profiles::ProfileAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Profiles::ProfileResourceAssociation": { + AdditionalRequiredFields: []string{ + "ProfileId", + }, + }, + "AWS::Route53RecoveryControl::ControlPanel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53RecoveryControl::RoutingControl": { + AdditionalRequiredFields: []string{ + "ControlPanelArn", + }, + }, + "AWS::Route53RecoveryControl::SafetyRule": { + AdditionalRequiredFields: []string{ + "ControlPanelArn", + }, + }, + "AWS::Route53RecoveryReadiness::Cell": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53RecoveryReadiness::ReadinessCheck": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53RecoveryReadiness::RecoveryGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53RecoveryReadiness::ResourceSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::FirewallDomainList": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::FirewallRuleGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::FirewallRuleGroupAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::OutpostResolver": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::ResolverRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::AccessGrant": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::AccessGrantsInstance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::AccessGrantsLocation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::AccessPoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::Bucket": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::BucketPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::MultiRegionAccessPointPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::StorageLens": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::StorageLensGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3Express::BucketPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3ObjectLambda::AccessPoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3ObjectLambda::AccessPointPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3Outposts::AccessPoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3Outposts::Bucket": { + AdditionalRequiredFields: []string{ + "OutpostId", + }, + }, + "AWS::S3Outposts::BucketPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::ConfigurationSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::ConfigurationSetEventDestination": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::ContactList": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::DedicatedIpPool": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::EmailIdentity": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerAddonInstance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerAddonSubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerArchive": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerIngressPoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerRelay": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerRuleSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::MailManagerTrafficPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::Template": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SES::VdmAttributes": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SNS::Topic": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SNS::TopicInlinePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SQS::Queue": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SQS::QueueInlinePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSM::Association": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSM::Document": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSM::Parameter": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSM::PatchBaseline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSM::ResourceDataSync": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSM::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMContacts::Contact": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMContacts::ContactChannel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMContacts::Plan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMContacts::Rotation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMIncidents::ReplicationSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMIncidents::ResponsePlan": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSMQuickSetup::ConfigurationManager": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSO::Application": { + AdditionalRequiredFields: []string{ + "InstanceArn", + }, + }, + "AWS::SSO::Instance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSO::InstanceAccessControlAttributeConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSO::PermissionSet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::AppImageConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Device": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::DeviceFleet": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Domain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::FeatureGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Image": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ImageVersion": { + AdditionalRequiredFields: []string{ + "ImageName", + }, + }, + "AWS::SageMaker::InferenceComponent": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::InferenceExperiment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::MlflowTrackingServer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ModelCard": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ModelPackage": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ModelPackageGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::MonitoringSchedule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Pipeline": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Project": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::Space": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::UserProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Scheduler::Schedule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Scheduler::ScheduleGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecretsManager::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecretsManager::Secret": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::AutomationRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::ConfigurationPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::FindingAggregator": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::Hub": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::Insight": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::OrganizationConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::PolicyAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::SecurityControl": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::Standard": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityLake::AwsLogSource": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityLake::DataLake": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityLake::Subscriber": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityLake::SubscriberNotification": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ServiceCatalog::CloudFormationProvisionedProduct": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ServiceCatalog::ServiceAction": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ServiceCatalogAppRegistry::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ServiceCatalogAppRegistry::AttributeGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Shield::DRTAccess": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Shield::ProactiveEngagement": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Shield::Protection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Shield::ProtectionGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Signer::SigningProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SimSpaceWeaver::Simulation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::StepFunctions::Activity": { + AdditionalRequiredFields: []string{}, + }, + "AWS::StepFunctions::StateMachine": { + AdditionalRequiredFields: []string{}, + }, + "AWS::StepFunctions::StateMachineAlias": { + AdditionalRequiredFields: []string{ + "RoutingConfiguration", + }, + }, + "AWS::SupportApp::AccountAlias": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SupportApp::SlackChannelConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SupportApp::SlackWorkspaceConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Synthetics::Canary": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Synthetics::Group": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SystemsManagerSAP::Application": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Timestream::Database": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Timestream::InfluxDBInstance": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Timestream::ScheduledQuery": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Timestream::Table": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Transfer::Agreement": { + AdditionalRequiredFields: []string{ + "ServerId", + }, + }, + "AWS::Transfer::Certificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Transfer::Connector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Transfer::Profile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Transfer::Workflow": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VerifiedPermissions::IdentitySource": { + AdditionalRequiredFields: []string{ + "PolicyStoreId", + }, + }, + "AWS::VerifiedPermissions::Policy": { + AdditionalRequiredFields: []string{ + "PolicyStoreId", + }, + }, + "AWS::VerifiedPermissions::PolicyStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VerifiedPermissions::PolicyTemplate": { + AdditionalRequiredFields: []string{ + "PolicyStoreId", + }, + }, + "AWS::VoiceID::Domain": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::AccessLogSubscription": { + AdditionalRequiredFields: []string{ + "ResourceIdentifier", + }, + }, + "AWS::VpcLattice::AuthPolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::Listener": { + AdditionalRequiredFields: []string{ + "ServiceIdentifier", + }, + }, + "AWS::VpcLattice::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::Rule": { + AdditionalRequiredFields: []string{ + "ServiceIdentifier", + "ListenerIdentifier", + }, + }, + "AWS::VpcLattice::Service": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::ServiceNetwork": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::ServiceNetworkServiceAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::ServiceNetworkVpcAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::VpcLattice::TargetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WAFv2::IPSet": { + AdditionalRequiredFields: []string{ + "Scope", + }, + }, + "AWS::WAFv2::LoggingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WAFv2::RegexPatternSet": { + AdditionalRequiredFields: []string{ + "Scope", + }, + }, + "AWS::WAFv2::RuleGroup": { + AdditionalRequiredFields: []string{ + "Scope", + }, + }, + "AWS::WAFv2::WebACL": { + AdditionalRequiredFields: []string{ + "Scope", + }, + }, + "AWS::WAFv2::WebACLAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Wisdom::Assistant": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Wisdom::AssistantAssociation": { + AdditionalRequiredFields: []string{ + "AssistantId", + }, + }, + "AWS::Wisdom::KnowledgeBase": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpaces::WorkspacesPool": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesThinClient::Environment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::BrowserSettings": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::IdentityProvider": { + AdditionalRequiredFields: []string{ + "PortalArn", + }, + }, + "AWS::WorkSpacesWeb::IpAccessSettings": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::NetworkSettings": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::Portal": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::TrustStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::UserAccessLoggingSettings": { + AdditionalRequiredFields: []string{}, + }, + "AWS::WorkSpacesWeb::UserSettings": { + AdditionalRequiredFields: []string{}, + }, + "AWS::XRay::Group": { + AdditionalRequiredFields: []string{}, + }, + "AWS::XRay::ResourcePolicy": { + AdditionalRequiredFields: []string{}, + }, + "AWS::XRay::SamplingRule": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ACMPCA::Certificate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ACMPCA::Permission": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ARCZonalShift::AutoshiftObserverNotificationStatus": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ApiGateway::UsagePlanKey": { + AdditionalRequiredFields: []string{ + "UsagePlanId", + }, + }, + "AWS::AppConfig::HostedConfigurationVersion": { + AdditionalRequiredFields: []string{ + "ApplicationId", + "ConfigurationProfileId", + }, + }, + "AWS::AppRunner::AutoScalingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppRunner::ObservabilityConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppRunner::VpcConnector": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::AppBlock": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::ApplicationEntitlementAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::ApplicationFleetAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AppStream::ImageBuilder": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Athena::NamedQuery": { + AdditionalRequiredFields: []string{}, + }, + "AWS::AutoScaling::LaunchConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Backup::BackupSelection": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Bedrock::GuardrailVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::HookVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::ModuleDefaultVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::ModuleVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::PublicTypeVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::Publisher": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFormation::ResourceVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CloudFront::MonitoringSubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeDeploy::DeploymentConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::CodeGuruReviewer::RepositoryAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Cognito::UserPoolUser": { + AdditionalRequiredFields: []string{ + "UserPoolId", + }, + }, + "AWS::Cognito::UserPoolUserToGroupAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Deadline::MeteredProduct": { + AdditionalRequiredFields: []string{ + "LicenseEndpointId", + }, + }, + "AWS::Deadline::QueueFleetAssociation": { + AdditionalRequiredFields: []string{ + "FarmId", + }, + }, + "AWS::DevOpsGuru::NotificationChannel": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::EIPAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::EgressOnlyInternetGateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::EnclaveCertificateIamRoleAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::IPAMAllocation": { + AdditionalRequiredFields: []string{ + "IpamPoolId", + }, + }, + "AWS::EC2::IPAMPoolCidr": { + AdditionalRequiredFields: []string{ + "IpamPoolId", + }, + }, + "AWS::EC2::KeyPair": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::NetworkPerformanceMetricSubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::PlacementGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SubnetCidrBlock": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SubnetNetworkAclAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::SubnetRouteTableAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayMulticastDomainAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayMulticastGroupMember": { + AdditionalRequiredFields: []string{ + "TransitGatewayMulticastDomainId", + }, + }, + "AWS::EC2::TransitGatewayMulticastGroupSource": { + AdditionalRequiredFields: []string{ + "TransitGatewayMulticastDomainId", + }, + }, + "AWS::EC2::TransitGatewayRoute": { + AdditionalRequiredFields: []string{ + "TransitGatewayRouteTableId", + }, + }, + "AWS::EC2::TransitGatewayRouteTable": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::TransitGatewayRouteTableAssociation": { + AdditionalRequiredFields: []string{ + "TransitGatewayRouteTableId", + }, + }, + "AWS::EC2::TransitGatewayRouteTablePropagation": { + AdditionalRequiredFields: []string{ + "TransitGatewayRouteTableId", + }, + }, + "AWS::EC2::VPCCidrBlock": { + AdditionalRequiredFields: []string{ + "VpcId", + }, + }, + "AWS::EC2::VPNConnectionRoute": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EC2::VolumeAttachment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::EMR::SecurityConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ElasticLoadBalancingV2::TrustStoreRevocation": { + AdditionalRequiredFields: []string{ + "TrustStoreArn", + }, + }, + "AWS::Evidently::Segment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Forecast::Dataset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Glue::SchemaVersion": { + AdditionalRequiredFields: []string{ + "Schema", + }, + }, + "AWS::Glue::SchemaVersionMetadata": { + AdditionalRequiredFields: []string{ + "SchemaVersionId", + }, + }, + "AWS::GroundStation::DataflowEndpointGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::GuardDuty::Master": { + AdditionalRequiredFields: []string{}, + }, + "AWS::HealthImaging::Datastore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IdentityStore::GroupMembership": { + AdditionalRequiredFields: []string{ + "IdentityStoreId", + "GroupId", + }, + }, + "AWS::ImageBuilder::Component": { + AdditionalRequiredFields: []string{ + "Arn", + }, + }, + "AWS::ImageBuilder::ContainerRecipe": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ImageBuilder::Image": { + AdditionalRequiredFields: []string{ + "Arn", + }, + }, + "AWS::ImageBuilder::ImageRecipe": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ImageBuilder::Workflow": { + AdditionalRequiredFields: []string{ + "Arn", + }, + }, + "AWS::Inspector::AssessmentTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Inspector::ResourceGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoT::JobTemplate": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTTwinMaker::SyncJob": { + AdditionalRequiredFields: []string{ + "WorkspaceId", + }, + }, + "AWS::IoTWireless::DeviceProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::ServiceProfile": { + AdditionalRequiredFields: []string{}, + }, + "AWS::IoTWireless::TaskDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LakeFormation::DataCellsFilter": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LakeFormation::PrincipalPermissions": { + AdditionalRequiredFields: []string{}, + }, + "AWS::LakeFormation::TagAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::LayerVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::LayerVersionPermission": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Lambda::Permission": { + AdditionalRequiredFields: []string{ + "FunctionName", + }, + }, + "AWS::Lambda::Version": { + AdditionalRequiredFields: []string{ + "FunctionName", + }, + }, + "AWS::Lex::BotVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Location::TrackerConsumer": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Logs::LogStream": { + AdditionalRequiredFields: []string{ + "LogGroupName", + }, + }, + "AWS::LookoutMetrics::Alert": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MSK::ServerlessCluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaConnect::Gateway": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackage::Asset": { + AdditionalRequiredFields: []string{}, + }, + "AWS::MediaPackage::PackagingConfiguration": { + AdditionalRequiredFields: []string{}, + }, + "AWS::NetworkManager::CustomerGatewayAssociation": { + AdditionalRequiredFields: []string{ + "GlobalNetworkId", + }, + }, + "AWS::NetworkManager::LinkAssociation": { + AdditionalRequiredFields: []string{ + "GlobalNetworkId", + }, + }, + "AWS::NetworkManager::TransitGatewayRegistration": { + AdditionalRequiredFields: []string{ + "GlobalNetworkId", + }, + }, + "AWS::Omics::ReferenceStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Omics::SequenceStore": { + AdditionalRequiredFields: []string{}, + }, + "AWS::PCAConnectorAD::ServicePrincipalName": { + AdditionalRequiredFields: []string{ + "DirectoryRegistrationArn", + }, + }, + "AWS::Personalize::DatasetGroup": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Personalize::Schema": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Personalize::Solution": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RefactorSpaces::Application": { + AdditionalRequiredFields: []string{ + "EnvironmentIdentifier", + }, + }, + "AWS::RefactorSpaces::Environment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RefactorSpaces::Service": { + AdditionalRequiredFields: []string{ + "EnvironmentIdentifier", + "ApplicationIdentifier", + }, + }, + "AWS::RoboMaker::RobotApplicationVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::RoboMaker::SimulationApplicationVersion": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53::DNSSEC": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53RecoveryControl::Cluster": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::ResolverConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::ResolverDNSSECConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::ResolverQueryLoggingConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::Route53Resolver::ResolverRuleAssociation": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3::MultiRegionAccessPoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3Express::DirectoryBucket": { + AdditionalRequiredFields: []string{}, + }, + "AWS::S3Outposts::Endpoint": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSO::ApplicationAssignment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SSO::Assignment": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::App": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::DataQualityJobDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ModelBiasJobDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ModelExplainabilityJobDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::ModelQualityJobDefinition": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SageMaker::StudioLifecycleConfig": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::DelegatedAdmin": { + AdditionalRequiredFields: []string{}, + }, + "AWS::SecurityHub::ProductSubscription": { + AdditionalRequiredFields: []string{}, + }, + "AWS::ServiceCatalog::ServiceActionAssociation": { + AdditionalRequiredFields: []string{ + "ProductId", + "ProvisioningArtifactId", + }, + }, + "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation": { + AdditionalRequiredFields: []string{ + "ApplicationArn", + }, + }, + "AWS::ServiceCatalogAppRegistry::ResourceAssociation": { + AdditionalRequiredFields: []string{ + "ApplicationArn", + }, + }, + "AWS::Signer::ProfilePermission": { + AdditionalRequiredFields: []string{}, + }, + "AWS::StepFunctions::StateMachineVersion": { + AdditionalRequiredFields: []string{ + "StateMachineArn", + }, + }, + "AWS::WorkSpaces::ConnectionAlias": { + AdditionalRequiredFields: []string{}, + }, +} diff --git a/main.go b/main.go index 26813e4..aa95802 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -17,6 +17,8 @@ package main import "github.com/isan-rivkin/surf/cmd" +//go:generate go run ./cmd/aws-cloudcontrol-generator/main.go + func main() { cmd.Execute() }