diff --git a/CHANGELOG.md b/CHANGELOG.md index bf1dfe3b6..0d945f15f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,22 @@ -## 1.46.0 (Unreleased) +## 1.46.0 (June 19, 2025) + +FEATURES: + +* **New Data Source:** `awscc_ec2_traffic_mirror_filter` +* **New Data Source:** `awscc_ec2_traffic_mirror_filters` +* **New Data Source:** `awscc_mpa_identity_source` +* **New Data Source:** `awscc_mpa_identity_sources` +* **New Data Source:** `awscc_securityhub_aggregator_v2` +* **New Data Source:** `awscc_securityhub_aggregator_v2s` +* **New Data Source:** `awscc_securityhub_automation_rule_v2` +* **New Data Source:** `awscc_securityhub_automation_rule_v2s` +* **New Data Source:** `awscc_securityhub_hub_v2` +* **New Data Source:** `awscc_securityhub_hub_v2s` +* **New Resource:** `awscc_ec2_traffic_mirror_filter` +* **New Resource:** `awscc_mpa_identity_source` +* **New Resource:** `awscc_securityhub_aggregator_v2` +* **New Resource:** `awscc_securityhub_automation_rule_v2` +* **New Resource:** `awscc_securityhub_hub_v2` ## 1.45.0 (June 12, 2025) diff --git a/docs/data-sources/amplify_app.md b/docs/data-sources/amplify_app.md index 04ca3db5b..a111d9bf2 100644 --- a/docs/data-sources/amplify_app.md +++ b/docs/data-sources/amplify_app.md @@ -37,6 +37,7 @@ Data Source schema for AWS::Amplify::App - `enable_branch_auto_deletion` (Boolean) - `environment_variables` (Attributes List) (see [below for nested schema](#nestedatt--environment_variables)) - `iam_service_role` (String) +- `job_config` (Attributes) (see [below for nested schema](#nestedatt--job_config)) - `name` (String) - `oauth_token` (String) - `platform` (String) @@ -118,6 +119,14 @@ Read-Only: - `value` (String) + +### Nested Schema for `job_config` + +Read-Only: + +- `build_compute_type` (String) + + ### Nested Schema for `tags` diff --git a/docs/data-sources/dynamodb_table.md b/docs/data-sources/dynamodb_table.md index 0cba153f4..e2258790a 100644 --- a/docs/data-sources/dynamodb_table.md +++ b/docs/data-sources/dynamodb_table.md @@ -95,9 +95,9 @@ Read-Only: The partition key of an item is also known as its *hash attribute*. The term "hash attribute" derives from DynamoDB's usage of an internal hash function to evenly distribute data items across partitions, based on their partition key values. The sort key of an item is also known as its *range attribute*. The term "range attribute" derives from the way DynamoDB stores items with the same partition key physically close together, in sorted order by the sort key value. (see [below for nested schema](#nestedatt--global_secondary_indexes--key_schema)) -- `on_demand_throughput` (Attributes) The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. (see [below for nested schema](#nestedatt--global_secondary_indexes--on_demand_throughput)) +- `on_demand_throughput` (Attributes) The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode. (see [below for nested schema](#nestedatt--global_secondary_indexes--on_demand_throughput)) - `projection` (Attributes) Represents attributes that are copied (projected) from the table into the global secondary index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. (see [below for nested schema](#nestedatt--global_secondary_indexes--projection)) -- `provisioned_throughput` (Attributes) Represents the provisioned throughput settings for the specified global secondary index. +- `provisioned_throughput` (Attributes) Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode. For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*. (see [below for nested schema](#nestedatt--global_secondary_indexes--provisioned_throughput)) - `warm_throughput` (Attributes) Represents the warm throughput value (in read units per second and write units per second) for the specified secondary index. If you use this parameter, you must specify ``ReadUnitsPerSecond``, ``WriteUnitsPerSecond``, or both. (see [below for nested schema](#nestedatt--global_secondary_indexes--warm_throughput)) diff --git a/docs/data-sources/ec2_subnet.md b/docs/data-sources/ec2_subnet.md index 9af8cda5d..d3072d436 100644 --- a/docs/data-sources/ec2_subnet.md +++ b/docs/data-sources/ec2_subnet.md @@ -26,6 +26,7 @@ Data Source schema for AWS::EC2::Subnet - `availability_zone` (String) The Availability Zone of the subnet. If you update this property, you must also update the ``CidrBlock`` property. - `availability_zone_id` (String) The AZ ID of the subnet. +- `block_public_access_states` (Attributes) (see [below for nested schema](#nestedatt--block_public_access_states)) - `cidr_block` (String) The IPv4 CIDR block assigned to the subnet. If you update this property, we create a new subnet, and then delete the existing one. - `enable_dns_64` (Boolean) Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations. @@ -40,7 +41,7 @@ Data Source schema for AWS::EC2::Subnet - `ipv_6_native` (Boolean) Indicates whether this is an IPv6 only subnet. For more information, see [Subnet basics](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#subnet-basics) in the *User Guide*. - `ipv_6_netmask_length` (Number) An IPv6 netmask length for the subnet. - `map_public_ip_on_launch` (Boolean) Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``. - AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/). + AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/). - `network_acl_association_id` (String) - `outpost_arn` (String) The Amazon Resource Name (ARN) of the Outpost. - `private_dns_name_options_on_launch` (Attributes) The hostname type for EC2 instances launched into this subnet and how DNS A and AAAA record queries to the instances should be handled. For more information, see [Amazon EC2 instance hostname types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) in the *User Guide*. @@ -53,6 +54,14 @@ Data Source schema for AWS::EC2::Subnet - `vpc_id` (String) The ID of the VPC the subnet is in. If you update this property, you must also update the ``CidrBlock`` property. + +### Nested Schema for `block_public_access_states` + +Read-Only: + +- `internet_gateway_block_mode` (String) The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress + + ### Nested Schema for `private_dns_name_options_on_launch` diff --git a/docs/data-sources/ec2_traffic_mirror_filter.md b/docs/data-sources/ec2_traffic_mirror_filter.md new file mode 100644 index 000000000..59a276e53 --- /dev/null +++ b/docs/data-sources/ec2_traffic_mirror_filter.md @@ -0,0 +1,35 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_ec2_traffic_mirror_filter Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Data Source schema for AWS::EC2::TrafficMirrorFilter +--- + +# awscc_ec2_traffic_mirror_filter (Data Source) + +Data Source schema for AWS::EC2::TrafficMirrorFilter + + + + +## Schema + +### Required + +- `id` (String) Uniquely identifies the resource. + +### Read-Only + +- `description` (String) The description of a traffic mirror filter. +- `network_services` (Set of String) The network service that is associated with the traffic mirror filter. +- `tags` (Attributes List) The tags for a traffic mirror filter. (see [below for nested schema](#nestedatt--tags)) +- `traffic_mirror_filter_id` (String) The ID of a traffic mirror filter. + + +### Nested Schema for `tags` + +Read-Only: + +- `key` (String) +- `value` (String) diff --git a/docs/data-sources/ec2_traffic_mirror_filters.md b/docs/data-sources/ec2_traffic_mirror_filters.md new file mode 100644 index 000000000..d613e397d --- /dev/null +++ b/docs/data-sources/ec2_traffic_mirror_filters.md @@ -0,0 +1,21 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_ec2_traffic_mirror_filters Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Plural Data Source schema for AWS::EC2::TrafficMirrorFilter +--- + +# awscc_ec2_traffic_mirror_filters (Data Source) + +Plural Data Source schema for AWS::EC2::TrafficMirrorFilter + + + + +## Schema + +### Read-Only + +- `id` (String) Uniquely identifies the data source. +- `ids` (Set of String) Set of Resource Identifiers. diff --git a/docs/data-sources/inspectorv2_filter.md b/docs/data-sources/inspectorv2_filter.md index c87d45f34..c7209cd30 100644 --- a/docs/data-sources/inspectorv2_filter.md +++ b/docs/data-sources/inspectorv2_filter.md @@ -26,6 +26,7 @@ Data Source schema for AWS::InspectorV2::Filter - `filter_action` (String) Findings filter action. - `filter_criteria` (Attributes) Findings filter criteria. (see [below for nested schema](#nestedatt--filter_criteria)) - `name` (String) Findings filter name. +- `tags` (Map of String) ### Nested Schema for `filter_criteria` @@ -33,6 +34,9 @@ Data Source schema for AWS::InspectorV2::Filter Read-Only: - `aws_account_id` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--aws_account_id)) +- `code_vulnerability_detector_name` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--code_vulnerability_detector_name)) +- `code_vulnerability_detector_tags` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--code_vulnerability_detector_tags)) +- `code_vulnerability_file_path` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--code_vulnerability_file_path)) - `component_id` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--component_id)) - `component_type` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--component_type)) - `ec_2_instance_image_id` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ec_2_instance_image_id)) @@ -44,11 +48,19 @@ Read-Only: - `ecr_image_registry` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ecr_image_registry)) - `ecr_image_repository_name` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ecr_image_repository_name)) - `ecr_image_tags` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ecr_image_tags)) +- `epss_score` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--epss_score)) +- `exploit_available` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--exploit_available)) - `finding_arn` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--finding_arn)) - `finding_status` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--finding_status)) - `finding_type` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--finding_type)) - `first_observed_at` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--first_observed_at)) +- `fix_available` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--fix_available)) - `inspector_score` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--inspector_score)) +- `lambda_function_execution_role_arn` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_execution_role_arn)) +- `lambda_function_last_modified_at` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_last_modified_at)) +- `lambda_function_layers` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_layers)) +- `lambda_function_name` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_name)) +- `lambda_function_runtime` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_runtime)) - `last_observed_at` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--last_observed_at)) - `network_protocol` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--network_protocol)) - `port_range` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--port_range)) @@ -73,6 +85,33 @@ Read-Only: - `value` (String) + +### Nested Schema for `filter_criteria.code_vulnerability_detector_name` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.code_vulnerability_detector_tags` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.code_vulnerability_file_path` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.component_id` @@ -172,6 +211,24 @@ Read-Only: - `value` (String) + +### Nested Schema for `filter_criteria.epss_score` + +Read-Only: + +- `lower_inclusive` (Number) +- `upper_inclusive` (Number) + + + +### Nested Schema for `filter_criteria.exploit_available` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.finding_arn` @@ -208,6 +265,15 @@ Read-Only: - `start_inclusive` (Number) + +### Nested Schema for `filter_criteria.fix_available` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.inspector_score` @@ -217,6 +283,51 @@ Read-Only: - `upper_inclusive` (Number) + +### Nested Schema for `filter_criteria.lambda_function_execution_role_arn` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.lambda_function_last_modified_at` + +Read-Only: + +- `end_inclusive` (Number) +- `start_inclusive` (Number) + + + +### Nested Schema for `filter_criteria.lambda_function_layers` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.lambda_function_name` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.lambda_function_runtime` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.last_observed_at` @@ -342,8 +453,10 @@ Read-Only: - `architecture` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--architecture)) - `epoch` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--epoch)) +- `file_path` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--file_path)) - `name` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--name)) - `release` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--release)) +- `source_lambda_layer_arn` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--source_lambda_layer_arn)) - `source_layer_hash` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--source_layer_hash)) - `version` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--version)) @@ -365,6 +478,15 @@ Read-Only: - `upper_inclusive` (Number) + +### Nested Schema for `filter_criteria.vulnerable_packages.file_path` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.vulnerable_packages.name` @@ -383,6 +505,15 @@ Read-Only: - `value` (String) + +### Nested Schema for `filter_criteria.vulnerable_packages.source_lambda_layer_arn` + +Read-Only: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.vulnerable_packages.source_layer_hash` diff --git a/docs/data-sources/lambda_event_source_mapping.md b/docs/data-sources/lambda_event_source_mapping.md index cfd14e7c1..0797aa0f3 100644 --- a/docs/data-sources/lambda_event_source_mapping.md +++ b/docs/data-sources/lambda_event_source_mapping.md @@ -95,18 +95,18 @@ Read-Only: Read-Only: -- `access_configs` (Attributes List) An array of access configuration objects that tell Lambda how to authenticate with your schema registry. (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--access_configs)) -- `event_record_format` (String) The record format that Lambda delivers to your function after schema validation. -- `schema_registry_uri` (String) The URI for your schema registry. The correct URI format depends on the type of schema registry you're using. -- `schema_validation_configs` (Attributes List) An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry. (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) +- `access_configs` (Attributes List) (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--access_configs)) +- `event_record_format` (String) +- `schema_registry_uri` (String) +- `schema_validation_configs` (Attributes List) (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) ### Nested Schema for `amazon_managed_kafka_event_source_config.schema_registry_config.access_configs` Read-Only: -- `type` (String) The type of authentication Lambda uses to access your schema registry. -- `uri` (String) The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. +- `type` (String) +- `uri` (String) @@ -114,7 +114,7 @@ Read-Only: Read-Only: -- `attribute` (String) The attribute you want your schema registry to validate and filter for. +- `attribute` (String) @@ -217,18 +217,18 @@ Read-Only: Read-Only: -- `access_configs` (Attributes List) An array of access configuration objects that tell Lambda how to authenticate with your schema registry. (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--access_configs)) -- `event_record_format` (String) The record format that Lambda delivers to your function after schema validation. -- `schema_registry_uri` (String) The URI for your schema registry. The correct URI format depends on the type of schema registry you're using. -- `schema_validation_configs` (Attributes List) An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry. (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) +- `access_configs` (Attributes List) (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--access_configs)) +- `event_record_format` (String) +- `schema_registry_uri` (String) +- `schema_validation_configs` (Attributes List) (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) ### Nested Schema for `self_managed_kafka_event_source_config.schema_registry_config.access_configs` Read-Only: -- `type` (String) The type of authentication Lambda uses to access your schema registry. -- `uri` (String) The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. +- `type` (String) +- `uri` (String) @@ -236,7 +236,7 @@ Read-Only: Read-Only: -- `attribute` (String) The attribute you want your schema registry to validate and filter for. +- `attribute` (String) diff --git a/docs/data-sources/mpa_identity_source.md b/docs/data-sources/mpa_identity_source.md new file mode 100644 index 000000000..a063aaca9 --- /dev/null +++ b/docs/data-sources/mpa_identity_source.md @@ -0,0 +1,57 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_mpa_identity_source Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Data Source schema for AWS::MPA::IdentitySource +--- + +# awscc_mpa_identity_source (Data Source) + +Data Source schema for AWS::MPA::IdentitySource + + + + +## Schema + +### Required + +- `id` (String) Uniquely identifies the resource. + +### Read-Only + +- `creation_time` (String) +- `identity_source_arn` (String) +- `identity_source_parameters` (Attributes) (see [below for nested schema](#nestedatt--identity_source_parameters)) +- `identity_source_type` (String) +- `status` (String) +- `status_code` (String) +- `status_message` (String) +- `tags` (Attributes Set) (see [below for nested schema](#nestedatt--tags)) + + +### Nested Schema for `identity_source_parameters` + +Read-Only: + +- `iam_identity_center` (Attributes) (see [below for nested schema](#nestedatt--identity_source_parameters--iam_identity_center)) + + +### Nested Schema for `identity_source_parameters.iam_identity_center` + +Read-Only: + +- `approval_portal_url` (String) +- `instance_arn` (String) +- `region` (String) + + + + +### Nested Schema for `tags` + +Read-Only: + +- `key` (String) The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. +- `value` (String) The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. diff --git a/docs/data-sources/mpa_identity_sources.md b/docs/data-sources/mpa_identity_sources.md new file mode 100644 index 000000000..ce1180f4c --- /dev/null +++ b/docs/data-sources/mpa_identity_sources.md @@ -0,0 +1,21 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_mpa_identity_sources Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Plural Data Source schema for AWS::MPA::IdentitySource +--- + +# awscc_mpa_identity_sources (Data Source) + +Plural Data Source schema for AWS::MPA::IdentitySource + + + + +## Schema + +### Read-Only + +- `id` (String) Uniquely identifies the data source. +- `ids` (Set of String) Set of Resource Identifiers. diff --git a/docs/data-sources/organizations_policy.md b/docs/data-sources/organizations_policy.md index 00c66ffec..321ae521c 100644 --- a/docs/data-sources/organizations_policy.md +++ b/docs/data-sources/organizations_policy.md @@ -29,7 +29,7 @@ Data Source schema for AWS::Organizations::Policy - `policy_id` (String) Id of the Policy - `tags` (Attributes Set) A list of tags that you want to attach to the newly created policy. For each tag in the list, you must specify both a tag key and a value. You can set the value to an empty string, but you can't set it to null. (see [below for nested schema](#nestedatt--tags)) - `target_ids` (Set of String) List of unique identifiers (IDs) of the root, OU, or account that you want to attach the policy to -- `type` (String) The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2 +- `type` (String) The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY ### Nested Schema for `tags` diff --git a/docs/data-sources/rds_db_cluster.md b/docs/data-sources/rds_db_cluster.md index 80e859449..e8606e4f5 100644 --- a/docs/data-sources/rds_db_cluster.md +++ b/docs/data-sources/rds_db_cluster.md @@ -119,8 +119,8 @@ Data Source schema for AWS::RDS::DBCluster - `engine_lifecycle_support` (String) The life cycle type for this DB cluster. By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date. You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections: - + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide* - + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide* + + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide* + + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide* Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled`` diff --git a/docs/data-sources/rds_db_instance.md b/docs/data-sources/rds_db_instance.md index 3af6c7fc3..414205cbe 100644 --- a/docs/data-sources/rds_db_instance.md +++ b/docs/data-sources/rds_db_instance.md @@ -314,7 +314,7 @@ Data Source schema for AWS::RDS::DBInstance - `engine_lifecycle_support` (String) The life cycle type for this DB instance. By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date. This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster. - You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*. + You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*. Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled`` Default: ``open-source-rds-extended-support`` - `engine_version` (String) The version number of the database engine to use. diff --git a/docs/data-sources/securityhub_aggregator_v2.md b/docs/data-sources/securityhub_aggregator_v2.md new file mode 100644 index 000000000..94c548000 --- /dev/null +++ b/docs/data-sources/securityhub_aggregator_v2.md @@ -0,0 +1,28 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_aggregator_v2 Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Data Source schema for AWS::SecurityHub::AggregatorV2 +--- + +# awscc_securityhub_aggregator_v2 (Data Source) + +Data Source schema for AWS::SecurityHub::AggregatorV2 + + + + +## Schema + +### Required + +- `id` (String) Uniquely identifies the resource. + +### Read-Only + +- `aggregation_region` (String) The aggregation Region of the AggregatorV2 +- `aggregator_v2_arn` (String) The ARN of the AggregatorV2 being created and assigned as the unique identifier +- `linked_regions` (Set of String) The list of included Regions +- `region_linking_mode` (String) Indicates to link a list of included Regions +- `tags` (Map of String) A key-value pair to associate with the Security Hub V2 resource. diff --git a/docs/data-sources/securityhub_aggregator_v2s.md b/docs/data-sources/securityhub_aggregator_v2s.md new file mode 100644 index 000000000..e6e825bfa --- /dev/null +++ b/docs/data-sources/securityhub_aggregator_v2s.md @@ -0,0 +1,21 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_aggregator_v2s Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Plural Data Source schema for AWS::SecurityHub::AggregatorV2 +--- + +# awscc_securityhub_aggregator_v2s (Data Source) + +Plural Data Source schema for AWS::SecurityHub::AggregatorV2 + + + + +## Schema + +### Read-Only + +- `id` (String) Uniquely identifies the data source. +- `ids` (Set of String) Set of Resource Identifiers. diff --git a/docs/data-sources/securityhub_automation_rule_v2.md b/docs/data-sources/securityhub_automation_rule_v2.md new file mode 100644 index 000000000..a60b60e4c --- /dev/null +++ b/docs/data-sources/securityhub_automation_rule_v2.md @@ -0,0 +1,188 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_automation_rule_v2 Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Data Source schema for AWS::SecurityHub::AutomationRuleV2 +--- + +# awscc_securityhub_automation_rule_v2 (Data Source) + +Data Source schema for AWS::SecurityHub::AutomationRuleV2 + + + + +## Schema + +### Required + +- `id` (String) Uniquely identifies the resource. + +### Read-Only + +- `actions` (Attributes List) A list of actions to be performed when the rule criteria is met (see [below for nested schema](#nestedatt--actions)) +- `created_at` (String) The timestamp formatted in ISO8601 +- `criteria` (Attributes) Defines the parameters and conditions used to evaluate and filter security findings (see [below for nested schema](#nestedatt--criteria)) +- `description` (String) A description of the automation rule +- `rule_arn` (String) The ARN of the automation rule +- `rule_id` (String) The ID of the automation rule +- `rule_name` (String) The name of the automation rule +- `rule_order` (Number) The value for the rule priority +- `rule_status` (String) The status of the automation rule +- `tags` (Map of String) A key-value pair to associate with a resource. +- `updated_at` (String) The timestamp formatted in ISO8601 + + +### Nested Schema for `actions` + +Read-Only: + +- `external_integration_configuration` (Attributes) The settings for integrating automation rule actions with external systems or service (see [below for nested schema](#nestedatt--actions--external_integration_configuration)) +- `finding_fields_update` (Attributes) The changes to be applied to fields in a security finding when an automation rule is triggered (see [below for nested schema](#nestedatt--actions--finding_fields_update)) +- `type` (String) The category of action to be executed by the automation rule + + +### Nested Schema for `actions.external_integration_configuration` + +Read-Only: + +- `connector_arn` (String) The ARN of the connector that establishes the integration + + + +### Nested Schema for `actions.finding_fields_update` + +Read-Only: + +- `comment` (String) Notes or contextual information for findings that are modified by the automation rule +- `severity_id` (Number) The severity level to be assigned to findings that match the automation rule criteria +- `status_id` (Number) The status to be applied to findings that match automation rule criteria + + + + +### Nested Schema for `criteria` + +Read-Only: + +- `ocsf_finding_criteria` (Attributes) The filtering conditions that align with OCSF standards (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria)) + + +### Nested Schema for `criteria.ocsf_finding_criteria` + +Read-Only: + +- `composite_filters` (Attributes List) Enables the creation of complex filtering conditions by combining filter (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters)) +- `composite_operator` (String) The logical operator used to combine multiple conditions + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters` + +Read-Only: + +- `boolean_filters` (Attributes List) Enables filtering based on boolean field values (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--boolean_filters)) +- `date_filters` (Attributes List) Enables filtering based on date and timestamp fields (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--date_filters)) +- `map_filters` (Attributes List) Enables filtering based on map field value (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--map_filters)) +- `number_filters` (Attributes List) Enables filtering based on numerical field values (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--number_filters)) +- `operator` (String) The logical operator used to combine multiple conditions +- `string_filters` (Attributes List) Enables filtering based on string field values (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--string_filters)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.boolean_filters` + +Read-Only: + +- `field_name` (String) The name of the field +- `filter` (Attributes) Boolean filter for querying findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--boolean_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.boolean_filters.filter` + +Read-Only: + +- `value` (Boolean) The value of the boolean + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.date_filters` + +Read-Only: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A date filter for querying findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--date_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.date_filters.filter` + +Read-Only: + +- `date_range` (Attributes) A date range for the date filter (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--date_filters--filter--date_range)) +- `end` (String) The timestamp formatted in ISO8601 +- `start` (String) The timestamp formatted in ISO8601 + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.date_filters.filter.date_range` + +Read-Only: + +- `unit` (String) A date range unit for the date filter +- `value` (Number) A date range value for the date filter + + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.map_filters` + +Read-Only: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A map filter for filtering findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--map_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.map_filters.filter` + +Read-Only: + +- `comparison` (String) The condition to apply to the key value when filtering findings with a map filter +- `key` (String) The key of the map filter +- `value` (String) The value for the key in the map filter + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.number_filters` + +Read-Only: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A number filter for querying findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--number_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.number_filters.filter` + +Read-Only: + +- `eq` (Number) The equal-to condition to be applied to a single field when querying for findings +- `gte` (Number) The greater-than-equal condition to be applied to a single field when querying for findings +- `lte` (Number) The less-than-equal condition to be applied to a single field when querying for findings + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.string_filters` + +Read-Only: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A string filter for filtering findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--string_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.string_filters.filter` + +Read-Only: + +- `comparison` (String) The condition to apply to a string value when filtering findings +- `value` (String) The string filter value diff --git a/docs/data-sources/securityhub_automation_rule_v2s.md b/docs/data-sources/securityhub_automation_rule_v2s.md new file mode 100644 index 000000000..a0a6f22ed --- /dev/null +++ b/docs/data-sources/securityhub_automation_rule_v2s.md @@ -0,0 +1,21 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_automation_rule_v2s Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Plural Data Source schema for AWS::SecurityHub::AutomationRuleV2 +--- + +# awscc_securityhub_automation_rule_v2s (Data Source) + +Plural Data Source schema for AWS::SecurityHub::AutomationRuleV2 + + + + +## Schema + +### Read-Only + +- `id` (String) Uniquely identifies the data source. +- `ids` (Set of String) Set of Resource Identifiers. diff --git a/docs/data-sources/securityhub_hub_v2.md b/docs/data-sources/securityhub_hub_v2.md new file mode 100644 index 000000000..688a3c500 --- /dev/null +++ b/docs/data-sources/securityhub_hub_v2.md @@ -0,0 +1,26 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_hub_v2 Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Data Source schema for AWS::SecurityHub::HubV2 +--- + +# awscc_securityhub_hub_v2 (Data Source) + +Data Source schema for AWS::SecurityHub::HubV2 + + + + +## Schema + +### Required + +- `id` (String) Uniquely identifies the resource. + +### Read-Only + +- `hub_v2_arn` (String) The Amazon Resource Name of the Security Hub V2 resource. +- `subscribed_at` (String) +- `tags` (Map of String) A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. diff --git a/docs/data-sources/securityhub_hub_v2s.md b/docs/data-sources/securityhub_hub_v2s.md new file mode 100644 index 000000000..d91e7263d --- /dev/null +++ b/docs/data-sources/securityhub_hub_v2s.md @@ -0,0 +1,21 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_hub_v2s Data Source - terraform-provider-awscc" +subcategory: "" +description: |- + Plural Data Source schema for AWS::SecurityHub::HubV2 +--- + +# awscc_securityhub_hub_v2s (Data Source) + +Plural Data Source schema for AWS::SecurityHub::HubV2 + + + + +## Schema + +### Read-Only + +- `id` (String) Uniquely identifies the data source. +- `ids` (Set of String) Set of Resource Identifiers. diff --git a/docs/data-sources/synthetics_canary.md b/docs/data-sources/synthetics_canary.md index 2978ea503..929d293fc 100644 --- a/docs/data-sources/synthetics_canary.md +++ b/docs/data-sources/synthetics_canary.md @@ -79,6 +79,7 @@ Read-Only: - `active_tracing` (Boolean) Enable active tracing if set to true - `environment_variables` (Map of String) Environment variable key-value pairs. +- `ephemeral_storage` (Number) Provide ephemeralStorage available for canary in MB - `memory_in_mb` (Number) Provide maximum memory available for canary in MB - `timeout_in_seconds` (Number) Provide maximum canary timeout per run in seconds diff --git a/docs/resources/amplify_app.md b/docs/resources/amplify_app.md index 9441d9596..921d68997 100644 --- a/docs/resources/amplify_app.md +++ b/docs/resources/amplify_app.md @@ -184,6 +184,7 @@ resource "awscc_amplify_app" "example" { - `enable_branch_auto_deletion` (Boolean) - `environment_variables` (Attributes List) (see [below for nested schema](#nestedatt--environment_variables)) - `iam_service_role` (String) +- `job_config` (Attributes) (see [below for nested schema](#nestedatt--job_config)) - `oauth_token` (String) - `platform` (String) - `repository` (String) @@ -272,6 +273,14 @@ Optional: - `value` (String) + +### Nested Schema for `job_config` + +Optional: + +- `build_compute_type` (String) + + ### Nested Schema for `tags` diff --git a/docs/resources/cleanrooms_collaboration.md b/docs/resources/cleanrooms_collaboration.md index c65863a16..6e58f80a1 100644 --- a/docs/resources/cleanrooms_collaboration.md +++ b/docs/resources/cleanrooms_collaboration.md @@ -50,19 +50,19 @@ resource "awscc_cleanrooms_collaboration" "example" { ### Required - `creator_display_name` (String) -- `creator_member_abilities` (Set of String) - `description` (String) -- `members` (Attributes List) (see [below for nested schema](#nestedatt--members)) - `name` (String) - `query_log_status` (String) ### Optional - `analytics_engine` (String) +- `creator_member_abilities` (Set of String) - `creator_ml_member_abilities` (Attributes) (see [below for nested schema](#nestedatt--creator_ml_member_abilities)) - `creator_payment_configuration` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration)) - `data_encryption_metadata` (Attributes) (see [below for nested schema](#nestedatt--data_encryption_metadata)) - `job_log_status` (String) +- `members` (Attributes List) (see [below for nested schema](#nestedatt--members)) - `tags` (Attributes Set) An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration. (see [below for nested schema](#nestedatt--tags)) ### Read-Only @@ -71,63 +71,49 @@ resource "awscc_cleanrooms_collaboration" "example" { - `collaboration_identifier` (String) - `id` (String) Uniquely identifies the resource. - -### Nested Schema for `members` - -Required: - -- `account_id` (String) -- `display_name` (String) -- `member_abilities` (Set of String) - -Optional: - -- `ml_member_abilities` (Attributes) (see [below for nested schema](#nestedatt--members--ml_member_abilities)) -- `payment_configuration` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration)) - - -### Nested Schema for `members.ml_member_abilities` + +### Nested Schema for `creator_ml_member_abilities` Optional: - `custom_ml_member_abilities` (Set of String) - -### Nested Schema for `members.payment_configuration` + +### Nested Schema for `creator_payment_configuration` Optional: -- `job_compute` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--job_compute)) -- `machine_learning` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--machine_learning)) -- `query_compute` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--query_compute)) +- `job_compute` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--job_compute)) +- `machine_learning` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--machine_learning)) +- `query_compute` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--query_compute)) - -### Nested Schema for `members.payment_configuration.job_compute` + +### Nested Schema for `creator_payment_configuration.job_compute` Optional: - `is_responsible` (Boolean) - -### Nested Schema for `members.payment_configuration.machine_learning` + +### Nested Schema for `creator_payment_configuration.machine_learning` Optional: -- `model_inference` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--machine_learning--model_inference)) -- `model_training` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--machine_learning--model_training)) +- `model_inference` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--machine_learning--model_inference)) +- `model_training` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--machine_learning--model_training)) - -### Nested Schema for `members.payment_configuration.machine_learning.model_inference` + +### Nested Schema for `creator_payment_configuration.machine_learning.model_inference` Optional: - `is_responsible` (Boolean) - -### Nested Schema for `members.payment_configuration.machine_learning.model_training` + +### Nested Schema for `creator_payment_configuration.machine_learning.model_training` Optional: @@ -135,8 +121,8 @@ Optional: - -### Nested Schema for `members.payment_configuration.query_compute` + +### Nested Schema for `creator_payment_configuration.query_compute` Optional: @@ -144,59 +130,71 @@ Optional: - - -### Nested Schema for `creator_ml_member_abilities` + +### Nested Schema for `data_encryption_metadata` Optional: -- `custom_ml_member_abilities` (Set of String) +- `allow_cleartext` (Boolean) +- `allow_duplicates` (Boolean) +- `allow_joins_on_columns_with_different_names` (Boolean) +- `preserve_nulls` (Boolean) - -### Nested Schema for `creator_payment_configuration` + +### Nested Schema for `members` Optional: -- `job_compute` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--job_compute)) -- `machine_learning` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--machine_learning)) -- `query_compute` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--query_compute)) +- `account_id` (String) +- `display_name` (String) +- `member_abilities` (Set of String) +- `ml_member_abilities` (Attributes) (see [below for nested schema](#nestedatt--members--ml_member_abilities)) +- `payment_configuration` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration)) - -### Nested Schema for `creator_payment_configuration.job_compute` + +### Nested Schema for `members.ml_member_abilities` Optional: -- `is_responsible` (Boolean) +- `custom_ml_member_abilities` (Set of String) - -### Nested Schema for `creator_payment_configuration.machine_learning` + +### Nested Schema for `members.payment_configuration` Optional: -- `model_inference` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--machine_learning--model_inference)) -- `model_training` (Attributes) (see [below for nested schema](#nestedatt--creator_payment_configuration--machine_learning--model_training)) +- `job_compute` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--job_compute)) +- `machine_learning` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--machine_learning)) +- `query_compute` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--query_compute)) - -### Nested Schema for `creator_payment_configuration.machine_learning.model_inference` + +### Nested Schema for `members.payment_configuration.job_compute` Optional: - `is_responsible` (Boolean) - -### Nested Schema for `creator_payment_configuration.machine_learning.model_training` + +### Nested Schema for `members.payment_configuration.machine_learning` Optional: -- `is_responsible` (Boolean) +- `model_inference` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--machine_learning--model_inference)) +- `model_training` (Attributes) (see [below for nested schema](#nestedatt--members--payment_configuration--machine_learning--model_training)) + +### Nested Schema for `members.payment_configuration.machine_learning.model_inference` +Optional: - -### Nested Schema for `creator_payment_configuration.query_compute` +- `is_responsible` (Boolean) + + + +### Nested Schema for `members.payment_configuration.machine_learning.model_training` Optional: @@ -204,15 +202,14 @@ Optional: - -### Nested Schema for `data_encryption_metadata` + +### Nested Schema for `members.payment_configuration.query_compute` Optional: -- `allow_cleartext` (Boolean) -- `allow_duplicates` (Boolean) -- `allow_joins_on_columns_with_different_names` (Boolean) -- `preserve_nulls` (Boolean) +- `is_responsible` (Boolean) + + diff --git a/docs/resources/dynamodb_table.md b/docs/resources/dynamodb_table.md index d7be7232a..0dd294121 100644 --- a/docs/resources/dynamodb_table.md +++ b/docs/resources/dynamodb_table.md @@ -221,9 +221,9 @@ Optional: The partition key of an item is also known as its *hash attribute*. The term "hash attribute" derives from DynamoDB's usage of an internal hash function to evenly distribute data items across partitions, based on their partition key values. The sort key of an item is also known as its *range attribute*. The term "range attribute" derives from the way DynamoDB stores items with the same partition key physically close together, in sorted order by the sort key value. (see [below for nested schema](#nestedatt--global_secondary_indexes--key_schema)) -- `on_demand_throughput` (Attributes) The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. (see [below for nested schema](#nestedatt--global_secondary_indexes--on_demand_throughput)) +- `on_demand_throughput` (Attributes) The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode. (see [below for nested schema](#nestedatt--global_secondary_indexes--on_demand_throughput)) - `projection` (Attributes) Represents attributes that are copied (projected) from the table into the global secondary index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. (see [below for nested schema](#nestedatt--global_secondary_indexes--projection)) -- `provisioned_throughput` (Attributes) Represents the provisioned throughput settings for the specified global secondary index. +- `provisioned_throughput` (Attributes) Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode. For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*. (see [below for nested schema](#nestedatt--global_secondary_indexes--provisioned_throughput)) - `warm_throughput` (Attributes) Represents the warm throughput value (in read units per second and write units per second) for the specified secondary index. If you use this parameter, you must specify ``ReadUnitsPerSecond``, ``WriteUnitsPerSecond``, or both. (see [below for nested schema](#nestedatt--global_secondary_indexes--warm_throughput)) diff --git a/docs/resources/ec2_subnet.md b/docs/resources/ec2_subnet.md index 4bff837be..611c17a4b 100644 --- a/docs/resources/ec2_subnet.md +++ b/docs/resources/ec2_subnet.md @@ -61,7 +61,7 @@ resource "awscc_ec2_subnet" "main" { - `ipv_6_native` (Boolean) Indicates whether this is an IPv6 only subnet. For more information, see [Subnet basics](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#subnet-basics) in the *User Guide*. - `ipv_6_netmask_length` (Number) An IPv6 netmask length for the subnet. - `map_public_ip_on_launch` (Boolean) Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``. - AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/). + AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/). - `outpost_arn` (String) The Amazon Resource Name (ARN) of the Outpost. - `private_dns_name_options_on_launch` (Attributes) The hostname type for EC2 instances launched into this subnet and how DNS A and AAAA record queries to the instances should be handled. For more information, see [Amazon EC2 instance hostname types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) in the *User Guide*. Available options: @@ -72,6 +72,7 @@ resource "awscc_ec2_subnet" "main" { ### Read-Only +- `block_public_access_states` (Attributes) (see [below for nested schema](#nestedatt--block_public_access_states)) - `id` (String) Uniquely identifies the resource. - `ipv_6_cidr_blocks` (List of String) - `network_acl_association_id` (String) @@ -95,6 +96,14 @@ Optional: - `key` (String) The tag key. - `value` (String) The tag value. + + +### Nested Schema for `block_public_access_states` + +Read-Only: + +- `internet_gateway_block_mode` (String) The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress + ## Import Import is supported using the following syntax: diff --git a/docs/resources/ec2_traffic_mirror_filter.md b/docs/resources/ec2_traffic_mirror_filter.md new file mode 100644 index 000000000..7269d1d39 --- /dev/null +++ b/docs/resources/ec2_traffic_mirror_filter.md @@ -0,0 +1,43 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_ec2_traffic_mirror_filter Resource - terraform-provider-awscc" +subcategory: "" +description: |- + Resource schema for AWS::EC2::TrafficMirrorFilter +--- + +# awscc_ec2_traffic_mirror_filter (Resource) + +Resource schema for AWS::EC2::TrafficMirrorFilter + + + + +## Schema + +### Optional + +- `description` (String) The description of a traffic mirror filter. +- `network_services` (Set of String) The network service that is associated with the traffic mirror filter. +- `tags` (Attributes List) The tags for a traffic mirror filter. (see [below for nested schema](#nestedatt--tags)) + +### Read-Only + +- `id` (String) Uniquely identifies the resource. +- `traffic_mirror_filter_id` (String) The ID of a traffic mirror filter. + + +### Nested Schema for `tags` + +Optional: + +- `key` (String) +- `value` (String) + +## Import + +Import is supported using the following syntax: + +```shell +$ terraform import awscc_ec2_traffic_mirror_filter.example "id" +``` diff --git a/docs/resources/inspectorv2_filter.md b/docs/resources/inspectorv2_filter.md index a7bfb2360..ecc64b633 100644 --- a/docs/resources/inspectorv2_filter.md +++ b/docs/resources/inspectorv2_filter.md @@ -163,6 +163,7 @@ resource "awscc_inspectorv2_filter" "example" { ### Optional - `description` (String) Findings filter description. +- `tags` (Map of String) ### Read-Only @@ -175,6 +176,9 @@ resource "awscc_inspectorv2_filter" "example" { Optional: - `aws_account_id` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--aws_account_id)) +- `code_vulnerability_detector_name` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--code_vulnerability_detector_name)) +- `code_vulnerability_detector_tags` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--code_vulnerability_detector_tags)) +- `code_vulnerability_file_path` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--code_vulnerability_file_path)) - `component_id` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--component_id)) - `component_type` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--component_type)) - `ec_2_instance_image_id` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ec_2_instance_image_id)) @@ -186,11 +190,19 @@ Optional: - `ecr_image_registry` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ecr_image_registry)) - `ecr_image_repository_name` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ecr_image_repository_name)) - `ecr_image_tags` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--ecr_image_tags)) +- `epss_score` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--epss_score)) +- `exploit_available` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--exploit_available)) - `finding_arn` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--finding_arn)) - `finding_status` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--finding_status)) - `finding_type` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--finding_type)) - `first_observed_at` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--first_observed_at)) +- `fix_available` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--fix_available)) - `inspector_score` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--inspector_score)) +- `lambda_function_execution_role_arn` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_execution_role_arn)) +- `lambda_function_last_modified_at` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_last_modified_at)) +- `lambda_function_layers` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_layers)) +- `lambda_function_name` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_name)) +- `lambda_function_runtime` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--lambda_function_runtime)) - `last_observed_at` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--last_observed_at)) - `network_protocol` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--network_protocol)) - `port_range` (Attributes List) (see [below for nested schema](#nestedatt--filter_criteria--port_range)) @@ -215,6 +227,33 @@ Optional: - `value` (String) + +### Nested Schema for `filter_criteria.code_vulnerability_detector_name` + +Optional: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.code_vulnerability_detector_tags` + +Optional: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.code_vulnerability_file_path` + +Optional: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.component_id` @@ -314,6 +353,24 @@ Optional: - `value` (String) + +### Nested Schema for `filter_criteria.epss_score` + +Optional: + +- `lower_inclusive` (Number) +- `upper_inclusive` (Number) + + + +### Nested Schema for `filter_criteria.exploit_available` + +Optional: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.finding_arn` @@ -350,6 +407,15 @@ Optional: - `start_inclusive` (Number) + +### Nested Schema for `filter_criteria.fix_available` + +Optional: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.inspector_score` @@ -359,6 +425,51 @@ Optional: - `upper_inclusive` (Number) + +### Nested Schema for `filter_criteria.lambda_function_execution_role_arn` + +Optional: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.lambda_function_last_modified_at` + +Optional: + +- `end_inclusive` (Number) +- `start_inclusive` (Number) + + + +### Nested Schema for `filter_criteria.lambda_function_layers` + +Optional: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.lambda_function_name` + +Optional: + +- `comparison` (String) +- `value` (String) + + + +### Nested Schema for `filter_criteria.lambda_function_runtime` + +Optional: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.last_observed_at` @@ -484,8 +595,10 @@ Optional: - `architecture` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--architecture)) - `epoch` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--epoch)) +- `file_path` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--file_path)) - `name` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--name)) - `release` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--release)) +- `source_lambda_layer_arn` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--source_lambda_layer_arn)) - `source_layer_hash` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--source_layer_hash)) - `version` (Attributes) (see [below for nested schema](#nestedatt--filter_criteria--vulnerable_packages--version)) @@ -507,6 +620,15 @@ Optional: - `upper_inclusive` (Number) + +### Nested Schema for `filter_criteria.vulnerable_packages.file_path` + +Optional: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.vulnerable_packages.name` @@ -525,6 +647,15 @@ Optional: - `value` (String) + +### Nested Schema for `filter_criteria.vulnerable_packages.source_lambda_layer_arn` + +Optional: + +- `comparison` (String) +- `value` (String) + + ### Nested Schema for `filter_criteria.vulnerable_packages.source_layer_hash` diff --git a/docs/resources/lambda_event_source_mapping b/docs/resources/lambda_event_source_mapping index 12382197c..50ef9f1ca 100644 --- a/docs/resources/lambda_event_source_mapping +++ b/docs/resources/lambda_event_source_mapping @@ -131,18 +131,18 @@ Optional: Optional: -- `access_configs` (Attributes List) An array of access configuration objects that tell Lambda how to authenticate with your schema registry. (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--access_configs)) -- `event_record_format` (String) The record format that Lambda delivers to your function after schema validation. -- `schema_registry_uri` (String) The URI for your schema registry. The correct URI format depends on the type of schema registry you're using. -- `schema_validation_configs` (Attributes List) An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry. (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) +- `access_configs` (Attributes List) (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--access_configs)) +- `event_record_format` (String) +- `schema_registry_uri` (String) +- `schema_validation_configs` (Attributes List) (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) ### Nested Schema for `amazon_managed_kafka_event_source_config.schema_registry_config.access_configs` Optional: -- `type` (String) The type of authentication Lambda uses to access your schema registry. -- `uri` (String) The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. +- `type` (String) +- `uri` (String) @@ -150,7 +150,7 @@ Optional: Optional: -- `attribute` (String) The attribute you want your schema registry to validate and filter for. +- `attribute` (String) @@ -253,18 +253,18 @@ Optional: Optional: -- `access_configs` (Attributes List) An array of access configuration objects that tell Lambda how to authenticate with your schema registry. (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--access_configs)) -- `event_record_format` (String) The record format that Lambda delivers to your function after schema validation. -- `schema_registry_uri` (String) The URI for your schema registry. The correct URI format depends on the type of schema registry you're using. -- `schema_validation_configs` (Attributes List) An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry. (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) +- `access_configs` (Attributes List) (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--access_configs)) +- `event_record_format` (String) +- `schema_registry_uri` (String) +- `schema_validation_configs` (Attributes List) (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) ### Nested Schema for `self_managed_kafka_event_source_config.schema_registry_config.access_configs` Optional: -- `type` (String) The type of authentication Lambda uses to access your schema registry. -- `uri` (String) The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. +- `type` (String) +- `uri` (String) @@ -272,7 +272,7 @@ Optional: Optional: -- `attribute` (String) The attribute you want your schema registry to validate and filter for. +- `attribute` (String) diff --git a/docs/resources/lambda_event_source_mapping.md b/docs/resources/lambda_event_source_mapping.md index 0039564cf..de588c6e3 100644 --- a/docs/resources/lambda_event_source_mapping.md +++ b/docs/resources/lambda_event_source_mapping.md @@ -108,18 +108,18 @@ Optional: Optional: -- `access_configs` (Attributes List) An array of access configuration objects that tell Lambda how to authenticate with your schema registry. (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--access_configs)) -- `event_record_format` (String) The record format that Lambda delivers to your function after schema validation. -- `schema_registry_uri` (String) The URI for your schema registry. The correct URI format depends on the type of schema registry you're using. -- `schema_validation_configs` (Attributes List) An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry. (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) +- `access_configs` (Attributes List) (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--access_configs)) +- `event_record_format` (String) +- `schema_registry_uri` (String) +- `schema_validation_configs` (Attributes List) (see [below for nested schema](#nestedatt--amazon_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) ### Nested Schema for `amazon_managed_kafka_event_source_config.schema_registry_config.access_configs` Optional: -- `type` (String) The type of authentication Lambda uses to access your schema registry. -- `uri` (String) The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. +- `type` (String) +- `uri` (String) @@ -127,7 +127,7 @@ Optional: Optional: -- `attribute` (String) The attribute you want your schema registry to validate and filter for. +- `attribute` (String) @@ -230,18 +230,18 @@ Optional: Optional: -- `access_configs` (Attributes List) An array of access configuration objects that tell Lambda how to authenticate with your schema registry. (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--access_configs)) -- `event_record_format` (String) The record format that Lambda delivers to your function after schema validation. -- `schema_registry_uri` (String) The URI for your schema registry. The correct URI format depends on the type of schema registry you're using. -- `schema_validation_configs` (Attributes List) An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry. (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) +- `access_configs` (Attributes List) (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--access_configs)) +- `event_record_format` (String) +- `schema_registry_uri` (String) +- `schema_validation_configs` (Attributes List) (see [below for nested schema](#nestedatt--self_managed_kafka_event_source_config--schema_registry_config--schema_validation_configs)) ### Nested Schema for `self_managed_kafka_event_source_config.schema_registry_config.access_configs` Optional: -- `type` (String) The type of authentication Lambda uses to access your schema registry. -- `uri` (String) The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. +- `type` (String) +- `uri` (String) @@ -249,7 +249,7 @@ Optional: Optional: -- `attribute` (String) The attribute you want your schema registry to validate and filter for. +- `attribute` (String) diff --git a/docs/resources/mpa_identity_source.md b/docs/resources/mpa_identity_source.md new file mode 100644 index 000000000..0b4c0860a --- /dev/null +++ b/docs/resources/mpa_identity_source.md @@ -0,0 +1,71 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_mpa_identity_source Resource - terraform-provider-awscc" +subcategory: "" +description: |- + Resource Type definition for AWS::MPA::IdentitySource. +--- + +# awscc_mpa_identity_source (Resource) + +Resource Type definition for AWS::MPA::IdentitySource. + + + + +## Schema + +### Required + +- `identity_source_parameters` (Attributes) (see [below for nested schema](#nestedatt--identity_source_parameters)) + +### Optional + +- `tags` (Attributes Set) (see [below for nested schema](#nestedatt--tags)) + +### Read-Only + +- `creation_time` (String) +- `id` (String) Uniquely identifies the resource. +- `identity_source_arn` (String) +- `identity_source_type` (String) +- `status` (String) +- `status_code` (String) +- `status_message` (String) + + +### Nested Schema for `identity_source_parameters` + +Required: + +- `iam_identity_center` (Attributes) (see [below for nested schema](#nestedatt--identity_source_parameters--iam_identity_center)) + + +### Nested Schema for `identity_source_parameters.iam_identity_center` + +Required: + +- `instance_arn` (String) +- `region` (String) + +Read-Only: + +- `approval_portal_url` (String) + + + + +### Nested Schema for `tags` + +Optional: + +- `key` (String) The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. +- `value` (String) The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. + +## Import + +Import is supported using the following syntax: + +```shell +$ terraform import awscc_mpa_identity_source.example "identity_source_arn" +``` diff --git a/docs/resources/opsworkscm_server.md b/docs/resources/opsworkscm_server.md index 8517905c3..3b821b7fc 100644 --- a/docs/resources/opsworkscm_server.md +++ b/docs/resources/opsworkscm_server.md @@ -38,6 +38,7 @@ Resource Type definition for AWS::OpsWorksCM::Server - `preferred_backup_window` (String) - `preferred_maintenance_window` (String) - `security_group_ids` (List of String) +- `server_name` (String) - `subnet_ids` (List of String) - `tags` (Attributes List) (see [below for nested schema](#nestedatt--tags)) @@ -47,7 +48,6 @@ Resource Type definition for AWS::OpsWorksCM::Server - `endpoint` (String) - `id` (String) Uniquely identifies the resource. - `server_id` (String) -- `server_name` (String) ### Nested Schema for `engine_attributes` diff --git a/docs/resources/organizations_policy.md b/docs/resources/organizations_policy.md index 49fc389bb..5aa834b77 100644 --- a/docs/resources/organizations_policy.md +++ b/docs/resources/organizations_policy.md @@ -50,7 +50,7 @@ resource "awscc_organizations_policy" "example" { - `content` (String) The Policy text content. For AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it. - `name` (String) Name of the Policy -- `type` (String) The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2 +- `type` (String) The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY ### Optional diff --git a/docs/resources/rds_db_cluster.md b/docs/resources/rds_db_cluster.md index a1315804a..a2c39d4e4 100644 --- a/docs/resources/rds_db_cluster.md +++ b/docs/resources/rds_db_cluster.md @@ -151,8 +151,8 @@ resource "awscc_rds_db_cluster" "example_db_cluster" { - `engine_lifecycle_support` (String) The life cycle type for this DB cluster. By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date. You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections: - + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide* - + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide* + + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide* + + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide* Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled`` diff --git a/docs/resources/rds_db_instance.md b/docs/resources/rds_db_instance.md index 3e2832f38..5c0ac198f 100644 --- a/docs/resources/rds_db_instance.md +++ b/docs/resources/rds_db_instance.md @@ -428,7 +428,7 @@ resource "awscc_rds_db_instance" "this" { - `engine_lifecycle_support` (String) The life cycle type for this DB instance. By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date. This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster. - You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*. + You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*. Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled`` Default: ``open-source-rds-extended-support`` - `engine_version` (String) The version number of the database engine to use. diff --git a/docs/resources/securityhub_aggregator_v2.md b/docs/resources/securityhub_aggregator_v2.md new file mode 100644 index 000000000..9cba58136 --- /dev/null +++ b/docs/resources/securityhub_aggregator_v2.md @@ -0,0 +1,39 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_aggregator_v2 Resource - terraform-provider-awscc" +subcategory: "" +description: |- + The AWS::SecurityHub::AggregatorV2 resource represents the AWS Security Hub AggregatorV2 in your account. One aggregatorv2 resource is created for each account in non opt-in region in which you configure region linking mode. +--- + +# awscc_securityhub_aggregator_v2 (Resource) + +The AWS::SecurityHub::AggregatorV2 resource represents the AWS Security Hub AggregatorV2 in your account. One aggregatorv2 resource is created for each account in non opt-in region in which you configure region linking mode. + + + + +## Schema + +### Required + +- `linked_regions` (Set of String) The list of included Regions +- `region_linking_mode` (String) Indicates to link a list of included Regions + +### Optional + +- `tags` (Map of String) A key-value pair to associate with the Security Hub V2 resource. + +### Read-Only + +- `aggregation_region` (String) The aggregation Region of the AggregatorV2 +- `aggregator_v2_arn` (String) The ARN of the AggregatorV2 being created and assigned as the unique identifier +- `id` (String) Uniquely identifies the resource. + +## Import + +Import is supported using the following syntax: + +```shell +$ terraform import awscc_securityhub_aggregator_v2.example "aggregator_v2_arn" +``` diff --git a/docs/resources/securityhub_automation_rule_v2.md b/docs/resources/securityhub_automation_rule_v2.md new file mode 100644 index 000000000..ce11afe69 --- /dev/null +++ b/docs/resources/securityhub_automation_rule_v2.md @@ -0,0 +1,202 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_automation_rule_v2 Resource - terraform-provider-awscc" +subcategory: "" +description: |- + Resource schema for AWS::SecurityHub::AutomationRuleV2 +--- + +# awscc_securityhub_automation_rule_v2 (Resource) + +Resource schema for AWS::SecurityHub::AutomationRuleV2 + + + + +## Schema + +### Required + +- `actions` (Attributes List) A list of actions to be performed when the rule criteria is met (see [below for nested schema](#nestedatt--actions)) +- `criteria` (Attributes) Defines the parameters and conditions used to evaluate and filter security findings (see [below for nested schema](#nestedatt--criteria)) +- `description` (String) A description of the automation rule +- `rule_name` (String) The name of the automation rule +- `rule_order` (Number) The value for the rule priority + +### Optional + +- `rule_status` (String) The status of the automation rule +- `tags` (Map of String) A key-value pair to associate with a resource. + +### Read-Only + +- `created_at` (String) The timestamp formatted in ISO8601 +- `id` (String) Uniquely identifies the resource. +- `rule_arn` (String) The ARN of the automation rule +- `rule_id` (String) The ID of the automation rule +- `updated_at` (String) The timestamp formatted in ISO8601 + + +### Nested Schema for `actions` + +Required: + +- `type` (String) The category of action to be executed by the automation rule + +Optional: + +- `external_integration_configuration` (Attributes) The settings for integrating automation rule actions with external systems or service (see [below for nested schema](#nestedatt--actions--external_integration_configuration)) +- `finding_fields_update` (Attributes) The changes to be applied to fields in a security finding when an automation rule is triggered (see [below for nested schema](#nestedatt--actions--finding_fields_update)) + + +### Nested Schema for `actions.external_integration_configuration` + +Optional: + +- `connector_arn` (String) The ARN of the connector that establishes the integration + + + +### Nested Schema for `actions.finding_fields_update` + +Optional: + +- `comment` (String) Notes or contextual information for findings that are modified by the automation rule +- `severity_id` (Number) The severity level to be assigned to findings that match the automation rule criteria +- `status_id` (Number) The status to be applied to findings that match automation rule criteria + + + + +### Nested Schema for `criteria` + +Optional: + +- `ocsf_finding_criteria` (Attributes) The filtering conditions that align with OCSF standards (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria)) + + +### Nested Schema for `criteria.ocsf_finding_criteria` + +Optional: + +- `composite_filters` (Attributes List) Enables the creation of complex filtering conditions by combining filter (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters)) +- `composite_operator` (String) The logical operator used to combine multiple conditions + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters` + +Optional: + +- `boolean_filters` (Attributes List) Enables filtering based on boolean field values (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--boolean_filters)) +- `date_filters` (Attributes List) Enables filtering based on date and timestamp fields (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--date_filters)) +- `map_filters` (Attributes List) Enables filtering based on map field value (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--map_filters)) +- `number_filters` (Attributes List) Enables filtering based on numerical field values (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--number_filters)) +- `operator` (String) The logical operator used to combine multiple conditions +- `string_filters` (Attributes List) Enables filtering based on string field values (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--string_filters)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.boolean_filters` + +Optional: + +- `field_name` (String) The name of the field +- `filter` (Attributes) Boolean filter for querying findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--boolean_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.boolean_filters.filter` + +Optional: + +- `value` (Boolean) The value of the boolean + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.date_filters` + +Optional: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A date filter for querying findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--date_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.date_filters.filter` + +Optional: + +- `date_range` (Attributes) A date range for the date filter (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--date_filters--filter--date_range)) +- `end` (String) The timestamp formatted in ISO8601 +- `start` (String) The timestamp formatted in ISO8601 + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.date_filters.filter.date_range` + +Optional: + +- `unit` (String) A date range unit for the date filter +- `value` (Number) A date range value for the date filter + + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.map_filters` + +Optional: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A map filter for filtering findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--map_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.map_filters.filter` + +Optional: + +- `comparison` (String) The condition to apply to the key value when filtering findings with a map filter +- `key` (String) The key of the map filter +- `value` (String) The value for the key in the map filter + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.number_filters` + +Optional: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A number filter for querying findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--number_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.number_filters.filter` + +Optional: + +- `eq` (Number) The equal-to condition to be applied to a single field when querying for findings +- `gte` (Number) The greater-than-equal condition to be applied to a single field when querying for findings +- `lte` (Number) The less-than-equal condition to be applied to a single field when querying for findings + + + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.string_filters` + +Optional: + +- `field_name` (String) The name of the field +- `filter` (Attributes) A string filter for filtering findings (see [below for nested schema](#nestedatt--criteria--ocsf_finding_criteria--composite_filters--string_filters--filter)) + + +### Nested Schema for `criteria.ocsf_finding_criteria.composite_filters.string_filters.filter` + +Optional: + +- `comparison` (String) The condition to apply to a string value when filtering findings +- `value` (String) The string filter value + +## Import + +Import is supported using the following syntax: + +```shell +$ terraform import awscc_securityhub_automation_rule_v2.example "rule_arn" +``` diff --git a/docs/resources/securityhub_hub_v2.md b/docs/resources/securityhub_hub_v2.md new file mode 100644 index 000000000..8fedd45a5 --- /dev/null +++ b/docs/resources/securityhub_hub_v2.md @@ -0,0 +1,34 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "awscc_securityhub_hub_v2 Resource - terraform-provider-awscc" +subcategory: "" +description: |- + The AWS::SecurityHub::HubV2 resource represents the implementation of the AWS Security Hub V2 service in your account. Only one hubv2 resource can created in each region in which you enable Security Hub V2. +--- + +# awscc_securityhub_hub_v2 (Resource) + +The AWS::SecurityHub::HubV2 resource represents the implementation of the AWS Security Hub V2 service in your account. Only one hubv2 resource can created in each region in which you enable Security Hub V2. + + + + +## Schema + +### Optional + +- `tags` (Map of String) A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. + +### Read-Only + +- `hub_v2_arn` (String) The Amazon Resource Name of the Security Hub V2 resource. +- `id` (String) Uniquely identifies the resource. +- `subscribed_at` (String) + +## Import + +Import is supported using the following syntax: + +```shell +$ terraform import awscc_securityhub_hub_v2.example "hub_v2_arn" +``` diff --git a/docs/resources/synthetics_canary.md b/docs/resources/synthetics_canary.md index 0f2212120..e7f26fc02 100644 --- a/docs/resources/synthetics_canary.md +++ b/docs/resources/synthetics_canary.md @@ -109,6 +109,7 @@ Optional: - `active_tracing` (Boolean) Enable active tracing if set to true - `environment_variables` (Map of String) Environment variable key-value pairs. +- `ephemeral_storage` (Number) Provide ephemeralStorage available for canary in MB - `memory_in_mb` (Number) Provide maximum memory available for canary in MB - `timeout_in_seconds` (Number) Provide maximum canary timeout per run in seconds diff --git a/examples/resources/awscc_ec2_traffic_mirror_filter/import.sh b/examples/resources/awscc_ec2_traffic_mirror_filter/import.sh new file mode 100644 index 000000000..e3e70e2ea --- /dev/null +++ b/examples/resources/awscc_ec2_traffic_mirror_filter/import.sh @@ -0,0 +1 @@ +$ terraform import awscc_ec2_traffic_mirror_filter.example "id" \ No newline at end of file diff --git a/examples/resources/awscc_mpa_identity_source/import.sh b/examples/resources/awscc_mpa_identity_source/import.sh new file mode 100644 index 000000000..48e65b6b1 --- /dev/null +++ b/examples/resources/awscc_mpa_identity_source/import.sh @@ -0,0 +1 @@ +$ terraform import awscc_mpa_identity_source.example "identity_source_arn" \ No newline at end of file diff --git a/examples/resources/awscc_securityhub_aggregator_v2/import.sh b/examples/resources/awscc_securityhub_aggregator_v2/import.sh new file mode 100644 index 000000000..195287b78 --- /dev/null +++ b/examples/resources/awscc_securityhub_aggregator_v2/import.sh @@ -0,0 +1 @@ +$ terraform import awscc_securityhub_aggregator_v2.example "aggregator_v2_arn" \ No newline at end of file diff --git a/examples/resources/awscc_securityhub_automation_rule_v2/import.sh b/examples/resources/awscc_securityhub_automation_rule_v2/import.sh new file mode 100644 index 000000000..2244c66d0 --- /dev/null +++ b/examples/resources/awscc_securityhub_automation_rule_v2/import.sh @@ -0,0 +1 @@ +$ terraform import awscc_securityhub_automation_rule_v2.example "rule_arn" \ No newline at end of file diff --git a/examples/resources/awscc_securityhub_hub_v2/import.sh b/examples/resources/awscc_securityhub_hub_v2/import.sh new file mode 100644 index 000000000..749a80ce8 --- /dev/null +++ b/examples/resources/awscc_securityhub_hub_v2/import.sh @@ -0,0 +1 @@ +$ terraform import awscc_securityhub_hub_v2.example "hub_v2_arn" \ No newline at end of file diff --git a/internal/aws/amplify/app_resource_gen.go b/internal/aws/amplify/app_resource_gen.go index 5e13d40fc..2f9ff9e87 100644 --- a/internal/aws/amplify/app_resource_gen.go +++ b/internal/aws/amplify/app_resource_gen.go @@ -773,6 +773,51 @@ func appResource(ctx context.Context) (resource.Resource, error) { stringplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ + // Property: JobConfig + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "properties": { + // "BuildComputeType": { + // "enum": [ + // "STANDARD_8GB", + // "LARGE_16GB", + // "XLARGE_72GB" + // ], + // "type": "string" + // } + // }, + // "required": [ + // "BuildComputeType" + // ], + // "type": "object" + // } + "job_config": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: BuildComputeType + "build_compute_type": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "STANDARD_8GB", + "LARGE_16GB", + "XLARGE_72GB", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ // Property: Name // CloudFormation resource type schema: // @@ -944,6 +989,7 @@ func appResource(ctx context.Context) (resource.Resource, error) { "auto_branch_creation_config": "AutoBranchCreationConfig", "auto_branch_creation_patterns": "AutoBranchCreationPatterns", "basic_auth_config": "BasicAuthConfig", + "build_compute_type": "BuildComputeType", "build_spec": "BuildSpec", "cache_config": "CacheConfig", "compute_role_arn": "ComputeRoleArn", @@ -961,6 +1007,7 @@ func appResource(ctx context.Context) (resource.Resource, error) { "environment_variables": "EnvironmentVariables", "framework": "Framework", "iam_service_role": "IAMServiceRole", + "job_config": "JobConfig", "key": "Key", "name": "Name", "oauth_token": "OauthToken", diff --git a/internal/aws/amplify/app_singular_data_source_gen.go b/internal/aws/amplify/app_singular_data_source_gen.go index 6859f9510..4e2eab512 100644 --- a/internal/aws/amplify/app_singular_data_source_gen.go +++ b/internal/aws/amplify/app_singular_data_source_gen.go @@ -492,6 +492,35 @@ func appDataSource(ctx context.Context) (datasource.DataSource, error) { "iam_service_role": schema.StringAttribute{ /*START ATTRIBUTE*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: JobConfig + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "properties": { + // "BuildComputeType": { + // "enum": [ + // "STANDARD_8GB", + // "LARGE_16GB", + // "XLARGE_72GB" + // ], + // "type": "string" + // } + // }, + // "required": [ + // "BuildComputeType" + // ], + // "type": "object" + // } + "job_config": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: BuildComputeType + "build_compute_type": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: Name // CloudFormation resource type schema: // @@ -607,6 +636,7 @@ func appDataSource(ctx context.Context) (datasource.DataSource, error) { "auto_branch_creation_config": "AutoBranchCreationConfig", "auto_branch_creation_patterns": "AutoBranchCreationPatterns", "basic_auth_config": "BasicAuthConfig", + "build_compute_type": "BuildComputeType", "build_spec": "BuildSpec", "cache_config": "CacheConfig", "compute_role_arn": "ComputeRoleArn", @@ -624,6 +654,7 @@ func appDataSource(ctx context.Context) (datasource.DataSource, error) { "environment_variables": "EnvironmentVariables", "framework": "Framework", "iam_service_role": "IAMServiceRole", + "job_config": "JobConfig", "key": "Key", "name": "Name", "oauth_token": "OauthToken", diff --git a/internal/aws/cleanrooms/collaboration_resource_gen.go b/internal/aws/cleanrooms/collaboration_resource_gen.go index b00377441..fbe92f5be 100644 --- a/internal/aws/cleanrooms/collaboration_resource_gen.go +++ b/internal/aws/cleanrooms/collaboration_resource_gen.go @@ -174,7 +174,8 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { // } "creator_member_abilities": schema.SetAttribute{ /*START ATTRIBUTE*/ ElementType: types.StringType, - Required: true, + Optional: true, + Computed: true, Validators: []validator.Set{ /*START VALIDATORS*/ setvalidator.ValueStringsAre( stringvalidator.OneOf( @@ -185,7 +186,8 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { ), }, /*END VALIDATORS*/ PlanModifiers: []planmodifier.Set{ /*START PLAN MODIFIERS*/ - setplanmodifier.RequiresReplace(), + setplanmodifier.UseStateForUnknown(), + setplanmodifier.RequiresReplaceIfConfigured(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ // Property: CreatorPaymentConfiguration @@ -601,8 +603,7 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { // }, // "required": [ // "AccountId", - // "DisplayName", - // "MemberAbilities" + // "DisplayName" // ], // "type": "object" // }, @@ -615,18 +616,28 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: AccountId "account_id": schema.StringAttribute{ /*START ATTRIBUTE*/ - Required: true, + Optional: true, + Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ stringvalidator.LengthBetween(12, 12), stringvalidator.RegexMatches(regexp.MustCompile("^\\d+$"), ""), + fwvalidators.NotNullString(), }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ // Property: DisplayName "display_name": schema.StringAttribute{ /*START ATTRIBUTE*/ - Required: true, + Optional: true, + Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ stringvalidator.LengthBetween(1, 100), + fwvalidators.NotNullString(), }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ // Property: MLMemberAbilities "ml_member_abilities": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ @@ -659,7 +670,8 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { // Property: MemberAbilities "member_abilities": schema.SetAttribute{ /*START ATTRIBUTE*/ ElementType: types.StringType, - Required: true, + Optional: true, + Computed: true, Validators: []validator.Set{ /*START VALIDATORS*/ setvalidator.ValueStringsAre( stringvalidator.OneOf( @@ -669,6 +681,9 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { ), ), }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Set{ /*START PLAN MODIFIERS*/ + setplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ // Property: PaymentConfiguration "payment_configuration": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ @@ -779,13 +794,15 @@ func collaborationResource(ctx context.Context) (resource.Resource, error) { }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Required: true, + Optional: true, + Computed: true, Validators: []validator.List{ /*START VALIDATORS*/ listvalidator.SizeBetween(0, 9), }, /*END VALIDATORS*/ PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ generic.Multiset(), - listplanmodifier.RequiresReplace(), + listplanmodifier.UseStateForUnknown(), + listplanmodifier.RequiresReplaceIfConfigured(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ // Property: Name diff --git a/internal/aws/cleanrooms/collaboration_singular_data_source_gen.go b/internal/aws/cleanrooms/collaboration_singular_data_source_gen.go index abd71931f..11dbae124 100644 --- a/internal/aws/cleanrooms/collaboration_singular_data_source_gen.go +++ b/internal/aws/cleanrooms/collaboration_singular_data_source_gen.go @@ -434,8 +434,7 @@ func collaborationDataSource(ctx context.Context) (datasource.DataSource, error) // }, // "required": [ // "AccountId", - // "DisplayName", - // "MemberAbilities" + // "DisplayName" // ], // "type": "object" // }, diff --git a/internal/aws/dynamodb/table_resource_gen.go b/internal/aws/dynamodb/table_resource_gen.go index b957fb09d..963debb16 100644 --- a/internal/aws/dynamodb/table_resource_gen.go +++ b/internal/aws/dynamodb/table_resource_gen.go @@ -237,7 +237,7 @@ func tableResource(ctx context.Context) (resource.Resource, error) { // }, // "OnDemandThroughput": { // "additionalProperties": false, - // "description": "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both.", + // "description": "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.", // "properties": { // "MaxReadRequestUnits": { // "description": "Maximum number of read request units for the specified table.\n To specify a maximum ``OnDemandThroughput`` on your table, set the value of ``MaxReadRequestUnits`` as greater than or equal to 1. To remove the maximum ``OnDemandThroughput`` that is currently set on your table, set the value of ``MaxReadRequestUnits`` to -1.", @@ -273,7 +273,7 @@ func tableResource(ctx context.Context) (resource.Resource, error) { // }, // "ProvisionedThroughput": { // "additionalProperties": false, - // "description": "Represents the provisioned throughput settings for the specified global secondary index.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", + // "description": "Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", // "properties": { // "ReadCapacityUnits": { // "description": "The maximum number of strongly consistent reads consumed per second before DynamoDB returns a ``ThrottlingException``. For more information, see [Specifying Read and Write Requirements](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html) in the *Amazon DynamoDB Developer Guide*.\n If read/write capacity mode is ``PAY_PER_REQUEST`` the value is set to 0.", @@ -437,7 +437,7 @@ func tableResource(ctx context.Context) (resource.Resource, error) { }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ - Description: "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both.", + Description: "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.", Optional: true, Computed: true, PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ @@ -505,7 +505,7 @@ func tableResource(ctx context.Context) (resource.Resource, error) { }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ - Description: "Represents the provisioned throughput settings for the specified global secondary index.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", + Description: "Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", Optional: true, Computed: true, PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ diff --git a/internal/aws/dynamodb/table_singular_data_source_gen.go b/internal/aws/dynamodb/table_singular_data_source_gen.go index 4dcb356dc..4ef1263f5 100644 --- a/internal/aws/dynamodb/table_singular_data_source_gen.go +++ b/internal/aws/dynamodb/table_singular_data_source_gen.go @@ -183,7 +183,7 @@ func tableDataSource(ctx context.Context) (datasource.DataSource, error) { // }, // "OnDemandThroughput": { // "additionalProperties": false, - // "description": "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both.", + // "description": "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.", // "properties": { // "MaxReadRequestUnits": { // "description": "Maximum number of read request units for the specified table.\n To specify a maximum ``OnDemandThroughput`` on your table, set the value of ``MaxReadRequestUnits`` as greater than or equal to 1. To remove the maximum ``OnDemandThroughput`` that is currently set on your table, set the value of ``MaxReadRequestUnits`` to -1.", @@ -219,7 +219,7 @@ func tableDataSource(ctx context.Context) (datasource.DataSource, error) { // }, // "ProvisionedThroughput": { // "additionalProperties": false, - // "description": "Represents the provisioned throughput settings for the specified global secondary index.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", + // "description": "Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", // "properties": { // "ReadCapacityUnits": { // "description": "The maximum number of strongly consistent reads consumed per second before DynamoDB returns a ``ThrottlingException``. For more information, see [Specifying Read and Write Requirements](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html) in the *Amazon DynamoDB Developer Guide*.\n If read/write capacity mode is ``PAY_PER_REQUEST`` the value is set to 0.", @@ -329,7 +329,7 @@ func tableDataSource(ctx context.Context) (datasource.DataSource, error) { Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ - Description: "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both.", + Description: "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.", Computed: true, }, /*END ATTRIBUTE*/ // Property: Projection @@ -364,7 +364,7 @@ func tableDataSource(ctx context.Context) (datasource.DataSource, error) { Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ - Description: "Represents the provisioned throughput settings for the specified global secondary index.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", + Description: "Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", Computed: true, }, /*END ATTRIBUTE*/ // Property: WarmThroughput diff --git a/internal/aws/ec2/subnet_resource_gen.go b/internal/aws/ec2/subnet_resource_gen.go index fddb06516..6bbfe7d87 100644 --- a/internal/aws/ec2/subnet_resource_gen.go +++ b/internal/aws/ec2/subnet_resource_gen.go @@ -78,6 +78,34 @@ func subnetResource(ctx context.Context) (resource.Resource, error) { stringplanmodifier.RequiresReplaceIfConfigured(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ + // Property: BlockPublicAccessStates + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "", + // "properties": { + // "InternetGatewayBlockMode": { + // "description": "The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress ", + // "type": "string" + // } + // }, + // "type": "object" + // } + "block_public_access_states": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: InternetGatewayBlockMode + "internet_gateway_block_mode": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress ", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "", + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ // Property: CidrBlock // CloudFormation resource type schema: // @@ -247,11 +275,11 @@ func subnetResource(ctx context.Context) (resource.Resource, error) { // CloudFormation resource type schema: // // { - // "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", + // "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", // "type": "boolean" // } "map_public_ip_on_launch": schema.BoolAttribute{ /*START ATTRIBUTE*/ - Description: "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", + Description: "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", Optional: true, Computed: true, PlanModifiers: []planmodifier.Bool{ /*START PLAN MODIFIERS*/ @@ -457,12 +485,14 @@ func subnetResource(ctx context.Context) (resource.Resource, error) { "assign_ipv_6_address_on_creation": "AssignIpv6AddressOnCreation", "availability_zone": "AvailabilityZone", "availability_zone_id": "AvailabilityZoneId", + "block_public_access_states": "BlockPublicAccessStates", "cidr_block": "CidrBlock", "enable_dns_64": "EnableDns64", "enable_lni_at_device_index": "EnableLniAtDeviceIndex", "enable_resource_name_dns_a_record": "EnableResourceNameDnsARecord", "enable_resource_name_dns_aaaa_record": "EnableResourceNameDnsAAAARecord", "hostname_type": "HostnameType", + "internet_gateway_block_mode": "InternetGatewayBlockMode", "ipv_4_ipam_pool_id": "Ipv4IpamPoolId", "ipv_4_netmask_length": "Ipv4NetmaskLength", "ipv_6_cidr_block": "Ipv6CidrBlock", diff --git a/internal/aws/ec2/subnet_singular_data_source_gen.go b/internal/aws/ec2/subnet_singular_data_source_gen.go index d17babf39..84638b6ae 100644 --- a/internal/aws/ec2/subnet_singular_data_source_gen.go +++ b/internal/aws/ec2/subnet_singular_data_source_gen.go @@ -56,6 +56,31 @@ func subnetDataSource(ctx context.Context) (datasource.DataSource, error) { Description: "The AZ ID of the subnet.", Computed: true, }, /*END ATTRIBUTE*/ + // Property: BlockPublicAccessStates + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "", + // "properties": { + // "InternetGatewayBlockMode": { + // "description": "The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress ", + // "type": "string" + // } + // }, + // "type": "object" + // } + "block_public_access_states": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: InternetGatewayBlockMode + "internet_gateway_block_mode": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress ", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "", + Computed: true, + }, /*END ATTRIBUTE*/ // Property: CidrBlock // CloudFormation resource type schema: // @@ -175,11 +200,11 @@ func subnetDataSource(ctx context.Context) (datasource.DataSource, error) { // CloudFormation resource type schema: // // { - // "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", + // "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", // "type": "boolean" // } "map_public_ip_on_launch": schema.BoolAttribute{ /*START ATTRIBUTE*/ - Description: "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", + Description: "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", Computed: true, }, /*END ATTRIBUTE*/ // Property: NetworkAclAssociationId @@ -328,12 +353,14 @@ func subnetDataSource(ctx context.Context) (datasource.DataSource, error) { "assign_ipv_6_address_on_creation": "AssignIpv6AddressOnCreation", "availability_zone": "AvailabilityZone", "availability_zone_id": "AvailabilityZoneId", + "block_public_access_states": "BlockPublicAccessStates", "cidr_block": "CidrBlock", "enable_dns_64": "EnableDns64", "enable_lni_at_device_index": "EnableLniAtDeviceIndex", "enable_resource_name_dns_a_record": "EnableResourceNameDnsARecord", "enable_resource_name_dns_aaaa_record": "EnableResourceNameDnsAAAARecord", "hostname_type": "HostnameType", + "internet_gateway_block_mode": "InternetGatewayBlockMode", "ipv_4_ipam_pool_id": "Ipv4IpamPoolId", "ipv_4_netmask_length": "Ipv4NetmaskLength", "ipv_6_cidr_block": "Ipv6CidrBlock", diff --git a/internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen.go b/internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen.go new file mode 100644 index 000000000..b1bc18484 --- /dev/null +++ b/internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen.go @@ -0,0 +1,54 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package ec2 + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_ec2_traffic_mirror_filters", trafficMirrorFiltersDataSource) +} + +// trafficMirrorFiltersDataSource returns the Terraform awscc_ec2_traffic_mirror_filters data source. +// This Terraform data source corresponds to the CloudFormation AWS::EC2::TrafficMirrorFilter resource. +func trafficMirrorFiltersDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ + "id": schema.StringAttribute{ + Description: "Uniquely identifies the data source.", + Computed: true, + }, + "ids": schema.SetAttribute{ + Description: "Set of Resource Identifiers.", + ElementType: types.StringType, + Computed: true, + }, + } + + schema := schema.Schema{ + Description: "Plural Data Source schema for AWS::EC2::TrafficMirrorFilter", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::EC2::TrafficMirrorFilter").WithTerraformTypeName("awscc_ec2_traffic_mirror_filters") + opts = opts.WithTerraformSchema(schema) + + v, err := generic.NewPluralDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen_test.go b/internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen_test.go new file mode 100644 index 000000000..770769f87 --- /dev/null +++ b/internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen_test.go @@ -0,0 +1,27 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package ec2_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSEC2TrafficMirrorFiltersDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::EC2::TrafficMirrorFilter", "awscc_ec2_traffic_mirror_filters", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(fmt.Sprintf("data.%s", td.ResourceName), "ids.#"), + ), + }, + }) +} diff --git a/internal/aws/ec2/traffic_mirror_filter_resource_gen.go b/internal/aws/ec2/traffic_mirror_filter_resource_gen.go new file mode 100644 index 000000000..e9682e232 --- /dev/null +++ b/internal/aws/ec2/traffic_mirror_filter_resource_gen.go @@ -0,0 +1,197 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package ec2 + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/setplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" + fwvalidators "github.com/hashicorp/terraform-provider-awscc/internal/validators" +) + +func init() { + registry.AddResourceFactory("awscc_ec2_traffic_mirror_filter", trafficMirrorFilterResource) +} + +// trafficMirrorFilterResource returns the Terraform awscc_ec2_traffic_mirror_filter resource. +// This Terraform resource corresponds to the CloudFormation AWS::EC2::TrafficMirrorFilter resource. +func trafficMirrorFilterResource(ctx context.Context) (resource.Resource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Description + // CloudFormation resource type schema: + // + // { + // "description": "The description of a traffic mirror filter.", + // "type": "string" + // } + "description": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The description of a traffic mirror filter.", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + stringplanmodifier.RequiresReplaceIfConfigured(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Id + // CloudFormation resource type schema: + // + // { + // "description": "The ID of a traffic mirror filter.", + // "type": "string" + // } + "traffic_mirror_filter_id": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ID of a traffic mirror filter.", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: NetworkServices + // CloudFormation resource type schema: + // + // { + // "description": "The network service that is associated with the traffic mirror filter.", + // "insertionOrder": false, + // "items": { + // "description": "The network service traffic that is associated with the traffic mirror filter.", + // "enum": [ + // "amazon-dns" + // ], + // "type": "string" + // }, + // "type": "array", + // "uniqueItems": true + // } + "network_services": schema.SetAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "The network service that is associated with the traffic mirror filter.", + Optional: true, + Computed: true, + Validators: []validator.Set{ /*START VALIDATORS*/ + setvalidator.ValueStringsAre( + stringvalidator.OneOf( + "amazon-dns", + ), + ), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Set{ /*START PLAN MODIFIERS*/ + setplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "description": "The tags for a traffic mirror filter.", + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Key": { + // "type": "string" + // }, + // "Value": { + // "type": "string" + // } + // }, + // "required": [ + // "Key", + // "Value" + // ], + // "type": "object" + // }, + // "type": "array", + // "uniqueItems": false + // } + "tags": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Key + "key": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "The tags for a traffic mirror filter.", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + // Corresponds to CloudFormation primaryIdentifier. + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + } + + schema := schema.Schema{ + Description: "Resource schema for AWS::EC2::TrafficMirrorFilter", + Version: 1, + Attributes: attributes, + } + + var opts generic.ResourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::EC2::TrafficMirrorFilter").WithTerraformTypeName("awscc_ec2_traffic_mirror_filter") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "description": "Description", + "key": "Key", + "network_services": "NetworkServices", + "tags": "Tags", + "traffic_mirror_filter_id": "Id", + "value": "Value", + }) + + opts = opts.WithCreateTimeoutInMinutes(0).WithDeleteTimeoutInMinutes(0) + + opts = opts.WithUpdateTimeoutInMinutes(0) + + v, err := generic.NewResource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/ec2/traffic_mirror_filter_resource_gen_test.go b/internal/aws/ec2/traffic_mirror_filter_resource_gen_test.go new file mode 100644 index 000000000..e8fe6ed22 --- /dev/null +++ b/internal/aws/ec2/traffic_mirror_filter_resource_gen_test.go @@ -0,0 +1,46 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package ec2_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSEC2TrafficMirrorFilter_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::EC2::TrafficMirrorFilter", "awscc_ec2_traffic_mirror_filter", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + Check: resource.ComposeTestCheckFunc( + td.CheckExistsInAWS(), + ), + }, + { + ResourceName: td.ResourceName, + ImportState: true, + ImportStateVerify: true, + }, + }) +} + +func TestAccAWSEC2TrafficMirrorFilter_disappears(t *testing.T) { + td := acctest.NewTestData(t, "AWS::EC2::TrafficMirrorFilter", "awscc_ec2_traffic_mirror_filter", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + Check: resource.ComposeTestCheckFunc( + td.CheckExistsInAWS(), + td.DeleteResource(), + ), + ExpectNonEmptyPlan: true, + }, + }) +} diff --git a/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen.go b/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen.go new file mode 100644 index 000000000..6078849cc --- /dev/null +++ b/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen.go @@ -0,0 +1,142 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package ec2 + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_ec2_traffic_mirror_filter", trafficMirrorFilterDataSource) +} + +// trafficMirrorFilterDataSource returns the Terraform awscc_ec2_traffic_mirror_filter data source. +// This Terraform data source corresponds to the CloudFormation AWS::EC2::TrafficMirrorFilter resource. +func trafficMirrorFilterDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Description + // CloudFormation resource type schema: + // + // { + // "description": "The description of a traffic mirror filter.", + // "type": "string" + // } + "description": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The description of a traffic mirror filter.", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Id + // CloudFormation resource type schema: + // + // { + // "description": "The ID of a traffic mirror filter.", + // "type": "string" + // } + "traffic_mirror_filter_id": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ID of a traffic mirror filter.", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: NetworkServices + // CloudFormation resource type schema: + // + // { + // "description": "The network service that is associated with the traffic mirror filter.", + // "insertionOrder": false, + // "items": { + // "description": "The network service traffic that is associated with the traffic mirror filter.", + // "enum": [ + // "amazon-dns" + // ], + // "type": "string" + // }, + // "type": "array", + // "uniqueItems": true + // } + "network_services": schema.SetAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "The network service that is associated with the traffic mirror filter.", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "description": "The tags for a traffic mirror filter.", + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Key": { + // "type": "string" + // }, + // "Value": { + // "type": "string" + // } + // }, + // "required": [ + // "Key", + // "Value" + // ], + // "type": "object" + // }, + // "type": "array", + // "uniqueItems": false + // } + "tags": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Key + "key": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "The tags for a traffic mirror filter.", + Computed: true, + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Required: true, + } + + schema := schema.Schema{ + Description: "Data Source schema for AWS::EC2::TrafficMirrorFilter", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::EC2::TrafficMirrorFilter").WithTerraformTypeName("awscc_ec2_traffic_mirror_filter") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "description": "Description", + "key": "Key", + "network_services": "NetworkServices", + "tags": "Tags", + "traffic_mirror_filter_id": "Id", + "value": "Value", + }) + + v, err := generic.NewSingularDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen_test.go b/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen_test.go new file mode 100644 index 000000000..cd0a8128e --- /dev/null +++ b/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen_test.go @@ -0,0 +1,40 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package ec2_test + +import ( + "fmt" + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSEC2TrafficMirrorFilterDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::EC2::TrafficMirrorFilter", "awscc_ec2_traffic_mirror_filter", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithEmptyResourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(fmt.Sprintf("data.%s", td.ResourceName), "id", td.ResourceName, "id"), + resource.TestCheckResourceAttrPair(fmt.Sprintf("data.%s", td.ResourceName), "arn", td.ResourceName, "arn"), + ), + }, + }) +} + +func TestAccAWSEC2TrafficMirrorFilterDataSource_NonExistent(t *testing.T) { + td := acctest.NewTestData(t, "AWS::EC2::TrafficMirrorFilter", "awscc_ec2_traffic_mirror_filter", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithNonExistentIDConfig(), + ExpectError: regexp.MustCompile("Not Found"), + }, + }) +} diff --git a/internal/aws/inspectorv2/filter_resource_gen.go b/internal/aws/inspectorv2/filter_resource_gen.go index 231a416c3..1a3a1b545 100644 --- a/internal/aws/inspectorv2/filter_resource_gen.go +++ b/internal/aws/inspectorv2/filter_resource_gen.go @@ -16,10 +16,12 @@ import ( "github.com/hashicorp/terraform-plugin-framework/resource/schema/float64planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/mapplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/objectplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-provider-awscc/internal/generic" "github.com/hashicorp/terraform-provider-awscc/internal/registry" fwvalidators "github.com/hashicorp/terraform-provider-awscc/internal/validators" @@ -126,7 +128,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "ComponentId": { + // "CodeVulnerabilityDetectorName": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -155,7 +157,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "ComponentType": { + // "CodeVulnerabilityDetectorTags": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -184,7 +186,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "Ec2InstanceImageId": { + // "CodeVulnerabilityFilePath": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -213,7 +215,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "Ec2InstanceSubnetId": { + // "ComponentId": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -242,7 +244,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "Ec2InstanceVpcId": { + // "ComponentType": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -271,7 +273,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "EcrImageArchitecture": { + // "Ec2InstanceImageId": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -300,7 +302,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "EcrImageHash": { + // "Ec2InstanceSubnetId": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -329,27 +331,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "EcrImagePushedAt": { - // "insertionOrder": false, - // "items": { - // "additionalProperties": false, - // "properties": { - // "EndInclusive": { - // "format": "int64", - // "type": "integer" - // }, - // "StartInclusive": { - // "format": "int64", - // "type": "integer" - // } - // }, - // "type": "object" - // }, - // "maxItems": 10, - // "minItems": 1, - // "type": "array" - // }, - // "EcrImageRegistry": { + // "Ec2InstanceVpcId": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -378,7 +360,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "EcrImageRepositoryName": { + // "EcrImageArchitecture": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -407,7 +389,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "EcrImageTags": { + // "EcrImageHash": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -436,7 +418,27 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "FindingArn": { + // "EcrImagePushedAt": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "EndInclusive": { + // "format": "int64", + // "type": "integer" + // }, + // "StartInclusive": { + // "format": "int64", + // "type": "integer" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "EcrImageRegistry": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -465,7 +467,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "FindingStatus": { + // "EcrImageRepositoryName": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -494,7 +496,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "FindingType": { + // "EcrImageTags": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -523,18 +525,16 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "FirstObservedAt": { + // "EpssScore": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "EndInclusive": { - // "format": "int64", - // "type": "integer" + // "LowerInclusive": { + // "type": "number" // }, - // "StartInclusive": { - // "format": "int64", - // "type": "integer" + // "UpperInclusive": { + // "type": "number" // } // }, // "type": "object" @@ -543,45 +543,65 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "InspectorScore": { + // "ExploitAvailable": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "LowerInclusive": { - // "type": "number" + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" // }, - // "UpperInclusive": { - // "type": "number" + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" // } // }, + // "required": [ + // "Comparison", + // "Value" + // ], // "type": "object" // }, // "maxItems": 10, // "minItems": 1, // "type": "array" // }, - // "LastObservedAt": { + // "FindingArn": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "EndInclusive": { - // "format": "int64", - // "type": "integer" + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" // }, - // "StartInclusive": { - // "format": "int64", - // "type": "integer" + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" // } // }, + // "required": [ + // "Comparison", + // "Value" + // ], // "type": "object" // }, // "maxItems": 10, // "minItems": 1, // "type": "array" // }, - // "NetworkProtocol": { + // "FindingStatus": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -610,19 +630,46 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "PortRange": { + // "FindingType": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "BeginInclusive": { - // "maximum": 65535, - // "minimum": 0, - // "type": "integer" + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "FirstObservedAt": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { // "EndInclusive": { - // "maximum": 65535, - // "minimum": 0, + // "format": "int64", + // "type": "integer" + // }, + // "StartInclusive": { + // "format": "int64", // "type": "integer" // } // }, @@ -632,7 +679,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "RelatedVulnerabilities": { + // "FixAvailable": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -661,7 +708,25 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "ResourceId": { + // "InspectorScore": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "LowerInclusive": { + // "type": "number" + // }, + // "UpperInclusive": { + // "type": "number" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "LambdaFunctionExecutionRoleArn": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -690,38 +755,27 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "ResourceTags": { + // "LambdaFunctionLastModifiedAt": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "Comparison": { - // "enum": [ - // "EQUALS" - // ], - // "type": "string" - // }, - // "Key": { - // "maxLength": 128, - // "minLength": 1, - // "type": "string" + // "EndInclusive": { + // "format": "int64", + // "type": "integer" // }, - // "Value": { - // "maxLength": 256, - // "minLength": 0, - // "type": "string" + // "StartInclusive": { + // "format": "int64", + // "type": "integer" // } // }, - // "required": [ - // "Comparison" - // ], // "type": "object" // }, // "maxItems": 10, // "minItems": 1, // "type": "array" // }, - // "ResourceType": { + // "LambdaFunctionLayers": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -750,7 +804,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "Severity": { + // "LambdaFunctionName": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -779,7 +833,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "Title": { + // "LambdaFunctionRuntime": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -808,7 +862,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "UpdatedAt": { + // "LastObservedAt": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -828,7 +882,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "VendorSeverity": { + // "NetworkProtocol": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -857,7 +911,29 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "VulnerabilityId": { + // "PortRange": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "BeginInclusive": { + // "maximum": 65535, + // "minimum": 0, + // "type": "integer" + // }, + // "EndInclusive": { + // "maximum": 65535, + // "minimum": 0, + // "type": "integer" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "RelatedVulnerabilities": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -886,7 +962,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "VulnerabilitySource": { + // "ResourceId": { // "insertionOrder": false, // "items": { // "additionalProperties": false, @@ -915,28 +991,253 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // "minItems": 1, // "type": "array" // }, - // "VulnerablePackages": { + // "ResourceTags": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "Architecture": { - // "additionalProperties": false, - // "properties": { - // "Comparison": { - // "enum": [ - // "EQUALS", - // "PREFIX", - // "NOT_EQUALS" - // ], - // "type": "string" - // }, - // "Value": { - // "maxLength": 1024, - // "minLength": 1, - // "type": "string" - // } - // }, + // "Comparison": { + // "enum": [ + // "EQUALS" + // ], + // "type": "string" + // }, + // "Key": { + // "maxLength": 128, + // "minLength": 1, + // "type": "string" + // }, + // "Value": { + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "ResourceType": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "Severity": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "Title": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "UpdatedAt": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "EndInclusive": { + // "format": "int64", + // "type": "integer" + // }, + // "StartInclusive": { + // "format": "int64", + // "type": "integer" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "VendorSeverity": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "VulnerabilityId": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "VulnerabilitySource": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "VulnerablePackages": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Architecture": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, // "required": [ // "Comparison", // "Value" @@ -955,7 +1256,53 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // }, // "type": "object" // }, - // "Name": { + // "FilePath": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "Name": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "Release": { // "additionalProperties": false, // "properties": { // "Comparison": { @@ -978,7 +1325,7 @@ func filterResource(ctx context.Context) (resource.Resource, error) { // ], // "type": "object" // }, - // "Release": { + // "SourceLambdaLayerArn": { // "additionalProperties": false, // "properties": { // "Comparison": { @@ -1103,8 +1450,272 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: ComponentId - "component_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: CodeVulnerabilityDetectorName + "code_vulnerability_detector_name": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: CodeVulnerabilityDetectorTags + "code_vulnerability_detector_tags": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: CodeVulnerabilityFilePath + "code_vulnerability_file_path": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: ComponentId + "component_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: ComponentType + "component_type": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Ec2InstanceImageId + "ec_2_instance_image_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Ec2InstanceSubnetId + "ec_2_instance_subnet_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1147,8 +1758,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: ComponentType - "component_type": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: Ec2InstanceVpcId + "ec_2_instance_vpc_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1191,8 +1802,216 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: Ec2InstanceImageId - "ec_2_instance_image_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: EcrImageArchitecture + "ecr_image_architecture": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: EcrImageHash + "ecr_image_hash": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: EcrImagePushedAt + "ecr_image_pushed_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: EndInclusive + "end_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: StartInclusive + "start_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: EcrImageRegistry + "ecr_image_registry": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: EcrImageRepositoryName + "ecr_image_repository_name": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: EcrImageTags + "ecr_image_tags": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1211,16 +2030,48 @@ func filterResource(ctx context.Context) (resource.Resource, error) { stringplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: Value - "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 10), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + generic.Multiset(), + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: EpssScore + "epss_score": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: LowerInclusive + "lower_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: UpperInclusive + "upper_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - Validators: []validator.String{ /*START VALIDATORS*/ - stringvalidator.LengthBetween(1, 1024), - fwvalidators.NotNullString(), - }, /*END VALIDATORS*/ - PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ - stringplanmodifier.UseStateForUnknown(), + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ @@ -1235,8 +2086,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: Ec2InstanceSubnetId - "ec_2_instance_subnet_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: ExploitAvailable + "exploit_available": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1279,8 +2130,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: Ec2InstanceVpcId - "ec_2_instance_vpc_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: FindingArn + "finding_arn": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1323,8 +2174,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: EcrImageArchitecture - "ecr_image_architecture": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: FindingStatus + "finding_status": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1367,8 +2218,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: EcrImageHash - "ecr_image_hash": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: FindingType + "finding_type": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1411,8 +2262,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: EcrImagePushedAt - "ecr_image_pushed_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: FirstObservedAt + "first_observed_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: EndInclusive @@ -1443,8 +2294,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: EcrImageRegistry - "ecr_image_registry": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: FixAvailable + "fix_available": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1487,36 +2338,24 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: EcrImageRepositoryName - "ecr_image_repository_name": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: InspectorScore + "inspector_score": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ - // Property: Comparison - "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + // Property: LowerInclusive + "lower_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - Validators: []validator.String{ /*START VALIDATORS*/ - stringvalidator.OneOf( - "EQUALS", - "PREFIX", - "NOT_EQUALS", - ), - fwvalidators.NotNullString(), - }, /*END VALIDATORS*/ - PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ - stringplanmodifier.UseStateForUnknown(), + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: Value - "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + // Property: UpperInclusive + "upper_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - Validators: []validator.String{ /*START VALIDATORS*/ - stringvalidator.LengthBetween(1, 1024), - fwvalidators.NotNullString(), - }, /*END VALIDATORS*/ - PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ - stringplanmodifier.UseStateForUnknown(), + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ @@ -1531,8 +2370,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: EcrImageTags - "ecr_image_tags": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: LambdaFunctionExecutionRoleArn + "lambda_function_execution_role_arn": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1575,36 +2414,24 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: FindingArn - "finding_arn": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: LambdaFunctionLastModifiedAt + "lambda_function_last_modified_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ - // Property: Comparison - "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + // Property: EndInclusive + "end_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - Validators: []validator.String{ /*START VALIDATORS*/ - stringvalidator.OneOf( - "EQUALS", - "PREFIX", - "NOT_EQUALS", - ), - fwvalidators.NotNullString(), - }, /*END VALIDATORS*/ - PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ - stringplanmodifier.UseStateForUnknown(), + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: Value - "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + // Property: StartInclusive + "start_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - Validators: []validator.String{ /*START VALIDATORS*/ - stringvalidator.LengthBetween(1, 1024), - fwvalidators.NotNullString(), - }, /*END VALIDATORS*/ - PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ - stringplanmodifier.UseStateForUnknown(), + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ @@ -1619,8 +2446,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: FindingStatus - "finding_status": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: LambdaFunctionLayers + "lambda_function_layers": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1663,8 +2490,8 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: FindingType - "finding_type": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: LambdaFunctionName + "lambda_function_name": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Comparison @@ -1707,56 +2534,36 @@ func filterResource(ctx context.Context) (resource.Resource, error) { listplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: FirstObservedAt - "first_observed_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ - NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ - Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ - // Property: EndInclusive - "end_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ - int64planmodifier.UseStateForUnknown(), - }, /*END PLAN MODIFIERS*/ - }, /*END ATTRIBUTE*/ - // Property: StartInclusive - "start_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ - int64planmodifier.UseStateForUnknown(), - }, /*END PLAN MODIFIERS*/ - }, /*END ATTRIBUTE*/ - }, /*END SCHEMA*/ - }, /*END NESTED OBJECT*/ - Optional: true, - Computed: true, - Validators: []validator.List{ /*START VALIDATORS*/ - listvalidator.SizeBetween(1, 10), - }, /*END VALIDATORS*/ - PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ - generic.Multiset(), - listplanmodifier.UseStateForUnknown(), - }, /*END PLAN MODIFIERS*/ - }, /*END ATTRIBUTE*/ - // Property: InspectorScore - "inspector_score": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + // Property: LambdaFunctionRuntime + "lambda_function_runtime": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ - // Property: LowerInclusive - "lower_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ - float64planmodifier.UseStateForUnknown(), + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ - // Property: UpperInclusive - "upper_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ Optional: true, Computed: true, - PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ - float64planmodifier.UseStateForUnknown(), + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ @@ -2389,6 +3196,44 @@ func filterResource(ctx context.Context) (resource.Resource, error) { objectplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ + // Property: FilePath + "file_path": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ // Property: Name "name": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ @@ -2465,6 +3310,44 @@ func filterResource(ctx context.Context) (resource.Resource, error) { objectplanmodifier.UseStateForUnknown(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ + // Property: SourceLambdaLayerArn + "source_lambda_layer_arn": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 1024), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ // Property: SourceLayerHash "source_layer_hash": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ @@ -2573,6 +3456,28 @@ func filterResource(ctx context.Context) (resource.Resource, error) { stringvalidator.LengthBetween(1, 128), }, /*END VALIDATORS*/ }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "patternProperties": { + // "": { + // "pattern": "^.{1,255}$", + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Map{ /*START PLAN MODIFIERS*/ + mapplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ } /*END SCHEMA*/ // Corresponds to CloudFormation primaryIdentifier. @@ -2595,55 +3500,69 @@ func filterResource(ctx context.Context) (resource.Resource, error) { opts = opts.WithCloudFormationTypeName("AWS::InspectorV2::Filter").WithTerraformTypeName("awscc_inspectorv2_filter") opts = opts.WithTerraformSchema(schema) opts = opts.WithAttributeNameMap(map[string]string{ - "architecture": "Architecture", - "arn": "Arn", - "aws_account_id": "AwsAccountId", - "begin_inclusive": "BeginInclusive", - "comparison": "Comparison", - "component_id": "ComponentId", - "component_type": "ComponentType", - "description": "Description", - "ec_2_instance_image_id": "Ec2InstanceImageId", - "ec_2_instance_subnet_id": "Ec2InstanceSubnetId", - "ec_2_instance_vpc_id": "Ec2InstanceVpcId", - "ecr_image_architecture": "EcrImageArchitecture", - "ecr_image_hash": "EcrImageHash", - "ecr_image_pushed_at": "EcrImagePushedAt", - "ecr_image_registry": "EcrImageRegistry", - "ecr_image_repository_name": "EcrImageRepositoryName", - "ecr_image_tags": "EcrImageTags", - "end_inclusive": "EndInclusive", - "epoch": "Epoch", - "filter_action": "FilterAction", - "filter_criteria": "FilterCriteria", - "finding_arn": "FindingArn", - "finding_status": "FindingStatus", - "finding_type": "FindingType", - "first_observed_at": "FirstObservedAt", - "inspector_score": "InspectorScore", - "key": "Key", - "last_observed_at": "LastObservedAt", - "lower_inclusive": "LowerInclusive", - "name": "Name", - "network_protocol": "NetworkProtocol", - "port_range": "PortRange", - "related_vulnerabilities": "RelatedVulnerabilities", - "release": "Release", - "resource_id": "ResourceId", - "resource_tags": "ResourceTags", - "resource_type": "ResourceType", - "severity": "Severity", - "source_layer_hash": "SourceLayerHash", - "start_inclusive": "StartInclusive", - "title": "Title", - "updated_at": "UpdatedAt", - "upper_inclusive": "UpperInclusive", - "value": "Value", - "vendor_severity": "VendorSeverity", - "version": "Version", - "vulnerability_id": "VulnerabilityId", - "vulnerability_source": "VulnerabilitySource", - "vulnerable_packages": "VulnerablePackages", + "architecture": "Architecture", + "arn": "Arn", + "aws_account_id": "AwsAccountId", + "begin_inclusive": "BeginInclusive", + "code_vulnerability_detector_name": "CodeVulnerabilityDetectorName", + "code_vulnerability_detector_tags": "CodeVulnerabilityDetectorTags", + "code_vulnerability_file_path": "CodeVulnerabilityFilePath", + "comparison": "Comparison", + "component_id": "ComponentId", + "component_type": "ComponentType", + "description": "Description", + "ec_2_instance_image_id": "Ec2InstanceImageId", + "ec_2_instance_subnet_id": "Ec2InstanceSubnetId", + "ec_2_instance_vpc_id": "Ec2InstanceVpcId", + "ecr_image_architecture": "EcrImageArchitecture", + "ecr_image_hash": "EcrImageHash", + "ecr_image_pushed_at": "EcrImagePushedAt", + "ecr_image_registry": "EcrImageRegistry", + "ecr_image_repository_name": "EcrImageRepositoryName", + "ecr_image_tags": "EcrImageTags", + "end_inclusive": "EndInclusive", + "epoch": "Epoch", + "epss_score": "EpssScore", + "exploit_available": "ExploitAvailable", + "file_path": "FilePath", + "filter_action": "FilterAction", + "filter_criteria": "FilterCriteria", + "finding_arn": "FindingArn", + "finding_status": "FindingStatus", + "finding_type": "FindingType", + "first_observed_at": "FirstObservedAt", + "fix_available": "FixAvailable", + "inspector_score": "InspectorScore", + "key": "Key", + "lambda_function_execution_role_arn": "LambdaFunctionExecutionRoleArn", + "lambda_function_last_modified_at": "LambdaFunctionLastModifiedAt", + "lambda_function_layers": "LambdaFunctionLayers", + "lambda_function_name": "LambdaFunctionName", + "lambda_function_runtime": "LambdaFunctionRuntime", + "last_observed_at": "LastObservedAt", + "lower_inclusive": "LowerInclusive", + "name": "Name", + "network_protocol": "NetworkProtocol", + "port_range": "PortRange", + "related_vulnerabilities": "RelatedVulnerabilities", + "release": "Release", + "resource_id": "ResourceId", + "resource_tags": "ResourceTags", + "resource_type": "ResourceType", + "severity": "Severity", + "source_lambda_layer_arn": "SourceLambdaLayerArn", + "source_layer_hash": "SourceLayerHash", + "start_inclusive": "StartInclusive", + "tags": "Tags", + "title": "Title", + "updated_at": "UpdatedAt", + "upper_inclusive": "UpperInclusive", + "value": "Value", + "vendor_severity": "VendorSeverity", + "version": "Version", + "vulnerability_id": "VulnerabilityId", + "vulnerability_source": "VulnerabilitySource", + "vulnerable_packages": "VulnerablePackages", }) opts = opts.WithCreateTimeoutInMinutes(0).WithDeleteTimeoutInMinutes(0) diff --git a/internal/aws/inspectorv2/filter_singular_data_source_gen.go b/internal/aws/inspectorv2/filter_singular_data_source_gen.go index b978ff352..02b1ffff4 100644 --- a/internal/aws/inspectorv2/filter_singular_data_source_gen.go +++ b/internal/aws/inspectorv2/filter_singular_data_source_gen.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/datasource" "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-provider-awscc/internal/generic" "github.com/hashicorp/terraform-provider-awscc/internal/registry" ) @@ -99,6 +100,93 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { // "minItems": 1, // "type": "array" // }, + // "CodeVulnerabilityDetectorName": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "CodeVulnerabilityDetectorTags": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "CodeVulnerabilityFilePath": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, // "ComponentId": { // "insertionOrder": false, // "items": { @@ -409,6 +497,53 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { // "minItems": 1, // "type": "array" // }, + // "EpssScore": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "LowerInclusive": { + // "type": "number" + // }, + // "UpperInclusive": { + // "type": "number" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "ExploitAvailable": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, // "FindingArn": { // "insertionOrder": false, // "items": { @@ -516,18 +651,183 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { // "minItems": 1, // "type": "array" // }, - // "InspectorScore": { + // "FixAvailable": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "InspectorScore": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "LowerInclusive": { + // "type": "number" + // }, + // "UpperInclusive": { + // "type": "number" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "LambdaFunctionExecutionRoleArn": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "LambdaFunctionLastModifiedAt": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "EndInclusive": { + // "format": "int64", + // "type": "integer" + // }, + // "StartInclusive": { + // "format": "int64", + // "type": "integer" + // } + // }, + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "LambdaFunctionLayers": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "LambdaFunctionName": { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, + // "maxItems": 10, + // "minItems": 1, + // "type": "array" + // }, + // "LambdaFunctionRuntime": { // "insertionOrder": false, // "items": { // "additionalProperties": false, // "properties": { - // "LowerInclusive": { - // "type": "number" + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" // }, - // "UpperInclusive": { - // "type": "number" + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" // } // }, + // "required": [ + // "Comparison", + // "Value" + // ], // "type": "object" // }, // "maxItems": 10, @@ -928,6 +1228,29 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { // }, // "type": "object" // }, + // "FilePath": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, // "Name": { // "additionalProperties": false, // "properties": { @@ -974,6 +1297,29 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { // ], // "type": "object" // }, + // "SourceLambdaLayerArn": { + // "additionalProperties": false, + // "properties": { + // "Comparison": { + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Value": { + // "maxLength": 1024, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Value" + // ], + // "type": "object" + // }, // "SourceLayerHash": { // "additionalProperties": false, // "properties": { @@ -1048,6 +1394,54 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { }, /*END NESTED OBJECT*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: CodeVulnerabilityDetectorName + "code_vulnerability_detector_name": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: CodeVulnerabilityDetectorTags + "code_vulnerability_detector_tags": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: CodeVulnerabilityFilePath + "code_vulnerability_file_path": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: ComponentId "component_id": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ @@ -1224,6 +1618,38 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { }, /*END NESTED OBJECT*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: EpssScore + "epss_score": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: LowerInclusive + "lower_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: UpperInclusive + "upper_inclusive": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: ExploitAvailable + "exploit_available": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: FindingArn "finding_arn": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ @@ -1288,6 +1714,22 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { }, /*END NESTED OBJECT*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: FixAvailable + "fix_available": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: InspectorScore "inspector_score": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ @@ -1304,6 +1746,86 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { }, /*END NESTED OBJECT*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: LambdaFunctionExecutionRoleArn + "lambda_function_execution_role_arn": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: LambdaFunctionLastModifiedAt + "lambda_function_last_modified_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: EndInclusive + "end_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: StartInclusive + "start_inclusive": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: LambdaFunctionLayers + "lambda_function_layers": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: LambdaFunctionName + "lambda_function_name": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: LambdaFunctionRuntime + "lambda_function_runtime": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: LastObservedAt "last_observed_at": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ @@ -1548,6 +2070,20 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { }, /*END SCHEMA*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: FilePath + "file_path": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: Name "name": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ @@ -1576,6 +2112,20 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { }, /*END SCHEMA*/ Computed: true, }, /*END ATTRIBUTE*/ + // Property: SourceLambdaLayerArn + "source_lambda_layer_arn": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Computed: true, + }, /*END ATTRIBUTE*/ // Property: SourceLayerHash "source_layer_hash": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ @@ -1625,6 +2175,24 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { Description: "Findings filter name.", Computed: true, }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "patternProperties": { + // "": { + // "pattern": "^.{1,255}$", + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Computed: true, + }, /*END ATTRIBUTE*/ } /*END SCHEMA*/ attributes["id"] = schema.StringAttribute{ @@ -1642,55 +2210,69 @@ func filterDataSource(ctx context.Context) (datasource.DataSource, error) { opts = opts.WithCloudFormationTypeName("AWS::InspectorV2::Filter").WithTerraformTypeName("awscc_inspectorv2_filter") opts = opts.WithTerraformSchema(schema) opts = opts.WithAttributeNameMap(map[string]string{ - "architecture": "Architecture", - "arn": "Arn", - "aws_account_id": "AwsAccountId", - "begin_inclusive": "BeginInclusive", - "comparison": "Comparison", - "component_id": "ComponentId", - "component_type": "ComponentType", - "description": "Description", - "ec_2_instance_image_id": "Ec2InstanceImageId", - "ec_2_instance_subnet_id": "Ec2InstanceSubnetId", - "ec_2_instance_vpc_id": "Ec2InstanceVpcId", - "ecr_image_architecture": "EcrImageArchitecture", - "ecr_image_hash": "EcrImageHash", - "ecr_image_pushed_at": "EcrImagePushedAt", - "ecr_image_registry": "EcrImageRegistry", - "ecr_image_repository_name": "EcrImageRepositoryName", - "ecr_image_tags": "EcrImageTags", - "end_inclusive": "EndInclusive", - "epoch": "Epoch", - "filter_action": "FilterAction", - "filter_criteria": "FilterCriteria", - "finding_arn": "FindingArn", - "finding_status": "FindingStatus", - "finding_type": "FindingType", - "first_observed_at": "FirstObservedAt", - "inspector_score": "InspectorScore", - "key": "Key", - "last_observed_at": "LastObservedAt", - "lower_inclusive": "LowerInclusive", - "name": "Name", - "network_protocol": "NetworkProtocol", - "port_range": "PortRange", - "related_vulnerabilities": "RelatedVulnerabilities", - "release": "Release", - "resource_id": "ResourceId", - "resource_tags": "ResourceTags", - "resource_type": "ResourceType", - "severity": "Severity", - "source_layer_hash": "SourceLayerHash", - "start_inclusive": "StartInclusive", - "title": "Title", - "updated_at": "UpdatedAt", - "upper_inclusive": "UpperInclusive", - "value": "Value", - "vendor_severity": "VendorSeverity", - "version": "Version", - "vulnerability_id": "VulnerabilityId", - "vulnerability_source": "VulnerabilitySource", - "vulnerable_packages": "VulnerablePackages", + "architecture": "Architecture", + "arn": "Arn", + "aws_account_id": "AwsAccountId", + "begin_inclusive": "BeginInclusive", + "code_vulnerability_detector_name": "CodeVulnerabilityDetectorName", + "code_vulnerability_detector_tags": "CodeVulnerabilityDetectorTags", + "code_vulnerability_file_path": "CodeVulnerabilityFilePath", + "comparison": "Comparison", + "component_id": "ComponentId", + "component_type": "ComponentType", + "description": "Description", + "ec_2_instance_image_id": "Ec2InstanceImageId", + "ec_2_instance_subnet_id": "Ec2InstanceSubnetId", + "ec_2_instance_vpc_id": "Ec2InstanceVpcId", + "ecr_image_architecture": "EcrImageArchitecture", + "ecr_image_hash": "EcrImageHash", + "ecr_image_pushed_at": "EcrImagePushedAt", + "ecr_image_registry": "EcrImageRegistry", + "ecr_image_repository_name": "EcrImageRepositoryName", + "ecr_image_tags": "EcrImageTags", + "end_inclusive": "EndInclusive", + "epoch": "Epoch", + "epss_score": "EpssScore", + "exploit_available": "ExploitAvailable", + "file_path": "FilePath", + "filter_action": "FilterAction", + "filter_criteria": "FilterCriteria", + "finding_arn": "FindingArn", + "finding_status": "FindingStatus", + "finding_type": "FindingType", + "first_observed_at": "FirstObservedAt", + "fix_available": "FixAvailable", + "inspector_score": "InspectorScore", + "key": "Key", + "lambda_function_execution_role_arn": "LambdaFunctionExecutionRoleArn", + "lambda_function_last_modified_at": "LambdaFunctionLastModifiedAt", + "lambda_function_layers": "LambdaFunctionLayers", + "lambda_function_name": "LambdaFunctionName", + "lambda_function_runtime": "LambdaFunctionRuntime", + "last_observed_at": "LastObservedAt", + "lower_inclusive": "LowerInclusive", + "name": "Name", + "network_protocol": "NetworkProtocol", + "port_range": "PortRange", + "related_vulnerabilities": "RelatedVulnerabilities", + "release": "Release", + "resource_id": "ResourceId", + "resource_tags": "ResourceTags", + "resource_type": "ResourceType", + "severity": "Severity", + "source_lambda_layer_arn": "SourceLambdaLayerArn", + "source_layer_hash": "SourceLayerHash", + "start_inclusive": "StartInclusive", + "tags": "Tags", + "title": "Title", + "updated_at": "UpdatedAt", + "upper_inclusive": "UpperInclusive", + "value": "Value", + "vendor_severity": "VendorSeverity", + "version": "Version", + "vulnerability_id": "VulnerabilityId", + "vulnerability_source": "VulnerabilitySource", + "vulnerable_packages": "VulnerablePackages", }) v, err := generic.NewSingularDataSource(ctx, opts...) diff --git a/internal/aws/kms/key_resource_gen.go b/internal/aws/kms/key_resource_gen.go index f6ccee2b9..0eb843ddf 100644 --- a/internal/aws/kms/key_resource_gen.go +++ b/internal/aws/kms/key_resource_gen.go @@ -166,7 +166,10 @@ func keyResource(ctx context.Context) (resource.Resource, error) { // "HMAC_256", // "HMAC_384", // "HMAC_512", - // "SM2" + // "SM2", + // "ML_DSA_44", + // "ML_DSA_65", + // "ML_DSA_87" // ], // "type": "string" // } @@ -190,6 +193,9 @@ func keyResource(ctx context.Context) (resource.Resource, error) { "HMAC_384", "HMAC_512", "SM2", + "ML_DSA_44", + "ML_DSA_65", + "ML_DSA_87", ), }, /*END VALIDATORS*/ PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ diff --git a/internal/aws/kms/key_singular_data_source_gen.go b/internal/aws/kms/key_singular_data_source_gen.go index c653c90e3..6ce3c6669 100644 --- a/internal/aws/kms/key_singular_data_source_gen.go +++ b/internal/aws/kms/key_singular_data_source_gen.go @@ -122,7 +122,10 @@ func keyDataSource(ctx context.Context) (datasource.DataSource, error) { // "HMAC_256", // "HMAC_384", // "HMAC_512", - // "SM2" + // "SM2", + // "ML_DSA_44", + // "ML_DSA_65", + // "ML_DSA_87" // ], // "type": "string" // } diff --git a/internal/aws/lambda/event_source_mapping_resource_gen.go b/internal/aws/lambda/event_source_mapping_resource_gen.go index 85aeda70e..a0108638b 100644 --- a/internal/aws/lambda/event_source_mapping_resource_gen.go +++ b/internal/aws/lambda/event_source_mapping_resource_gen.go @@ -56,13 +56,13 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "description": "", // "properties": { // "AccessConfigs": { - // "description": "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Type": { - // "description": "The type of authentication Lambda uses to access your schema registry.", + // "description": "", // "enum": [ // "BASIC_AUTH", // "CLIENT_CERTIFICATE_TLS_AUTH", @@ -71,7 +71,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "type": "string" // }, // "URI": { - // "description": "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?(-iso([a-z])?)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", @@ -85,7 +85,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "uniqueItems": true // }, // "EventRecordFormat": { - // "description": "The record format that Lambda delivers to your function after schema validation.", + // "description": "", // "enum": [ // "JSON", // "SOURCE" @@ -93,20 +93,20 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "type": "string" // }, // "SchemaRegistryURI": { - // "description": "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "[a-zA-Z0-9-/*:_+=.@-]*", // "type": "string" // }, // "SchemaValidationConfigs": { - // "description": "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Attribute": { - // "description": "The attribute you want your schema registry to validate and filter for.", + // "description": "", // "enum": [ // "KEY", // "VALUE" @@ -151,7 +151,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Type "type": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The type of authentication Lambda uses to access your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -167,7 +167,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ // Property: URI "uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -180,7 +180,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.List{ /*START VALIDATORS*/ @@ -193,7 +193,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ // Property: EventRecordFormat "event_record_format": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The record format that Lambda delivers to your function after schema validation.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -208,7 +208,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ // Property: SchemaRegistryURI "schema_registry_uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -225,7 +225,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Attribute "attribute": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The attribute you want your schema registry to validate and filter for.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -240,7 +240,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.List{ /*START VALIDATORS*/ @@ -1004,13 +1004,13 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "description": "", // "properties": { // "AccessConfigs": { - // "description": "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Type": { - // "description": "The type of authentication Lambda uses to access your schema registry.", + // "description": "", // "enum": [ // "BASIC_AUTH", // "CLIENT_CERTIFICATE_TLS_AUTH", @@ -1019,7 +1019,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "type": "string" // }, // "URI": { - // "description": "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?(-iso([a-z])?)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", @@ -1033,7 +1033,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "uniqueItems": true // }, // "EventRecordFormat": { - // "description": "The record format that Lambda delivers to your function after schema validation.", + // "description": "", // "enum": [ // "JSON", // "SOURCE" @@ -1041,20 +1041,20 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) // "type": "string" // }, // "SchemaRegistryURI": { - // "description": "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "[a-zA-Z0-9-/*:_+=.@-]*", // "type": "string" // }, // "SchemaValidationConfigs": { - // "description": "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Attribute": { - // "description": "The attribute you want your schema registry to validate and filter for.", + // "description": "", // "enum": [ // "KEY", // "VALUE" @@ -1099,7 +1099,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Type "type": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The type of authentication Lambda uses to access your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -1115,7 +1115,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ // Property: URI "uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -1128,7 +1128,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.List{ /*START VALIDATORS*/ @@ -1141,7 +1141,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ // Property: EventRecordFormat "event_record_format": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The record format that Lambda delivers to your function after schema validation.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -1156,7 +1156,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ // Property: SchemaRegistryURI "schema_registry_uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -1173,7 +1173,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Attribute "attribute": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The attribute you want your schema registry to validate and filter for.", + Description: "", Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ @@ -1188,7 +1188,7 @@ func eventSourceMappingResource(ctx context.Context) (resource.Resource, error) }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + Description: "", Optional: true, Computed: true, Validators: []validator.List{ /*START VALIDATORS*/ diff --git a/internal/aws/lambda/event_source_mapping_singular_data_source_gen.go b/internal/aws/lambda/event_source_mapping_singular_data_source_gen.go index 77114ad2a..c1a6b1658 100644 --- a/internal/aws/lambda/event_source_mapping_singular_data_source_gen.go +++ b/internal/aws/lambda/event_source_mapping_singular_data_source_gen.go @@ -42,13 +42,13 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "description": "", // "properties": { // "AccessConfigs": { - // "description": "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Type": { - // "description": "The type of authentication Lambda uses to access your schema registry.", + // "description": "", // "enum": [ // "BASIC_AUTH", // "CLIENT_CERTIFICATE_TLS_AUTH", @@ -57,7 +57,7 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "type": "string" // }, // "URI": { - // "description": "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?(-iso([a-z])?)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", @@ -71,7 +71,7 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "uniqueItems": true // }, // "EventRecordFormat": { - // "description": "The record format that Lambda delivers to your function after schema validation.", + // "description": "", // "enum": [ // "JSON", // "SOURCE" @@ -79,20 +79,20 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "type": "string" // }, // "SchemaRegistryURI": { - // "description": "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "[a-zA-Z0-9-/*:_+=.@-]*", // "type": "string" // }, // "SchemaValidationConfigs": { - // "description": "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Attribute": { - // "description": "The attribute you want your schema registry to validate and filter for.", + // "description": "", // "enum": [ // "KEY", // "VALUE" @@ -129,27 +129,27 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Type "type": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The type of authentication Lambda uses to access your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: URI "uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: EventRecordFormat "event_record_format": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The record format that Lambda delivers to your function after schema validation.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: SchemaRegistryURI "schema_registry_uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: SchemaValidationConfigs @@ -158,12 +158,12 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Attribute "attribute": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The attribute you want your schema registry to validate and filter for.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ @@ -686,13 +686,13 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "description": "", // "properties": { // "AccessConfigs": { - // "description": "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Type": { - // "description": "The type of authentication Lambda uses to access your schema registry.", + // "description": "", // "enum": [ // "BASIC_AUTH", // "CLIENT_CERTIFICATE_TLS_AUTH", @@ -701,7 +701,7 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "type": "string" // }, // "URI": { - // "description": "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?(-iso([a-z])?)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", @@ -715,7 +715,7 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "uniqueItems": true // }, // "EventRecordFormat": { - // "description": "The record format that Lambda delivers to your function after schema validation.", + // "description": "", // "enum": [ // "JSON", // "SOURCE" @@ -723,20 +723,20 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e // "type": "string" // }, // "SchemaRegistryURI": { - // "description": "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + // "description": "", // "maxLength": 10000, // "minLength": 1, // "pattern": "[a-zA-Z0-9-/*:_+=.@-]*", // "type": "string" // }, // "SchemaValidationConfigs": { - // "description": "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + // "description": "", // "items": { // "additionalProperties": false, // "description": "", // "properties": { // "Attribute": { - // "description": "The attribute you want your schema registry to validate and filter for.", + // "description": "", // "enum": [ // "KEY", // "VALUE" @@ -773,27 +773,27 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Type "type": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The type of authentication Lambda uses to access your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: URI "uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: EventRecordFormat "event_record_format": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The record format that Lambda delivers to your function after schema validation.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: SchemaRegistryURI "schema_registry_uri": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ // Property: SchemaValidationConfigs @@ -802,12 +802,12 @@ func eventSourceMappingDataSource(ctx context.Context) (datasource.DataSource, e Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ // Property: Attribute "attribute": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The attribute you want your schema registry to validate and filter for.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ }, /*END NESTED OBJECT*/ - Description: "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + Description: "", Computed: true, }, /*END ATTRIBUTE*/ }, /*END SCHEMA*/ diff --git a/internal/aws/mpa/identity_source_plural_data_source_gen.go b/internal/aws/mpa/identity_source_plural_data_source_gen.go new file mode 100644 index 000000000..4da70a6f0 --- /dev/null +++ b/internal/aws/mpa/identity_source_plural_data_source_gen.go @@ -0,0 +1,54 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package mpa + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_mpa_identity_sources", identitySourcesDataSource) +} + +// identitySourcesDataSource returns the Terraform awscc_mpa_identity_sources data source. +// This Terraform data source corresponds to the CloudFormation AWS::MPA::IdentitySource resource. +func identitySourcesDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ + "id": schema.StringAttribute{ + Description: "Uniquely identifies the data source.", + Computed: true, + }, + "ids": schema.SetAttribute{ + Description: "Set of Resource Identifiers.", + ElementType: types.StringType, + Computed: true, + }, + } + + schema := schema.Schema{ + Description: "Plural Data Source schema for AWS::MPA::IdentitySource", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::MPA::IdentitySource").WithTerraformTypeName("awscc_mpa_identity_sources") + opts = opts.WithTerraformSchema(schema) + + v, err := generic.NewPluralDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/mpa/identity_source_plural_data_source_gen_test.go b/internal/aws/mpa/identity_source_plural_data_source_gen_test.go new file mode 100644 index 000000000..e1a9de477 --- /dev/null +++ b/internal/aws/mpa/identity_source_plural_data_source_gen_test.go @@ -0,0 +1,27 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package mpa_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSMPAIdentitySourcesDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::MPA::IdentitySource", "awscc_mpa_identity_sources", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(fmt.Sprintf("data.%s", td.ResourceName), "ids.#"), + ), + }, + }) +} diff --git a/internal/aws/mpa/identity_source_resource_gen.go b/internal/aws/mpa/identity_source_resource_gen.go new file mode 100644 index 000000000..1b241953f --- /dev/null +++ b/internal/aws/mpa/identity_source_resource_gen.go @@ -0,0 +1,291 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package mpa + +import ( + "context" + "regexp" + + "github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/objectplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/setplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" + fwvalidators "github.com/hashicorp/terraform-provider-awscc/internal/validators" +) + +func init() { + registry.AddResourceFactory("awscc_mpa_identity_source", identitySourceResource) +} + +// identitySourceResource returns the Terraform awscc_mpa_identity_source resource. +// This Terraform resource corresponds to the CloudFormation AWS::MPA::IdentitySource resource. +func identitySourceResource(ctx context.Context) (resource.Resource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: CreationTime + // CloudFormation resource type schema: + // + // { + // "format": "date-time", + // "type": "string" + // } + "creation_time": schema.StringAttribute{ /*START ATTRIBUTE*/ + CustomType: timetypes.RFC3339Type{}, + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: IdentitySourceArn + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "identity_source_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: IdentitySourceParameters + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "properties": { + // "IamIdentityCenter": { + // "additionalProperties": false, + // "properties": { + // "ApprovalPortalUrl": { + // "type": "string" + // }, + // "InstanceArn": { + // "pattern": "^arn:.+:sso:::instance/(?:sso)?ins-[a-zA-Z0-9-.]{16}$", + // "type": "string" + // }, + // "Region": { + // "type": "string" + // } + // }, + // "required": [ + // "InstanceArn", + // "Region" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "IamIdentityCenter" + // ], + // "type": "object" + // } + "identity_source_parameters": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: IamIdentityCenter + "iam_identity_center": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: ApprovalPortalUrl + "approval_portal_url": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: InstanceArn + "instance_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Required: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.RegexMatches(regexp.MustCompile("^arn:.+:sso:::instance/(?:sso)?ins-[a-zA-Z0-9-.]{16}$"), ""), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.RequiresReplace(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Region + "region": schema.StringAttribute{ /*START ATTRIBUTE*/ + Required: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.RequiresReplace(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Required: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.RequiresReplace(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Required: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.RequiresReplace(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: IdentitySourceType + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "identity_source_type": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Status + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "status": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: StatusCode + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "status_code": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: StatusMessage + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "status_message": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Key": { + // "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "type": "string" + // }, + // "Value": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "type": "string" + // } + // }, + // "required": [ + // "Value", + // "Key" + // ], + // "type": "object" + // }, + // "type": "array", + // "uniqueItems": true + // } + "tags": schema.SetNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Key + "key": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Set{ /*START PLAN MODIFIERS*/ + setplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + // Corresponds to CloudFormation primaryIdentifier. + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + } + + schema := schema.Schema{ + Description: "Resource Type definition for AWS::MPA::IdentitySource.", + Version: 1, + Attributes: attributes, + } + + var opts generic.ResourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::MPA::IdentitySource").WithTerraformTypeName("awscc_mpa_identity_source") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "approval_portal_url": "ApprovalPortalUrl", + "creation_time": "CreationTime", + "iam_identity_center": "IamIdentityCenter", + "identity_source_arn": "IdentitySourceArn", + "identity_source_parameters": "IdentitySourceParameters", + "identity_source_type": "IdentitySourceType", + "instance_arn": "InstanceArn", + "key": "Key", + "region": "Region", + "status": "Status", + "status_code": "StatusCode", + "status_message": "StatusMessage", + "tags": "Tags", + "value": "Value", + }) + + opts = opts.WithCreateTimeoutInMinutes(0).WithDeleteTimeoutInMinutes(0) + + opts = opts.WithUpdateTimeoutInMinutes(0) + + v, err := generic.NewResource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/mpa/identity_source_resource_gen_test.go b/internal/aws/mpa/identity_source_resource_gen_test.go new file mode 100644 index 000000000..f73ac5d47 --- /dev/null +++ b/internal/aws/mpa/identity_source_resource_gen_test.go @@ -0,0 +1,25 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package mpa_test + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSMPAIdentitySource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::MPA::IdentitySource", "awscc_mpa_identity_source", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + ExpectError: regexp.MustCompile("Missing required argument"), + }, + }) +} diff --git a/internal/aws/mpa/identity_source_singular_data_source_gen.go b/internal/aws/mpa/identity_source_singular_data_source_gen.go new file mode 100644 index 000000000..1cc7e9e57 --- /dev/null +++ b/internal/aws/mpa/identity_source_singular_data_source_gen.go @@ -0,0 +1,220 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package mpa + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes" + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_mpa_identity_source", identitySourceDataSource) +} + +// identitySourceDataSource returns the Terraform awscc_mpa_identity_source data source. +// This Terraform data source corresponds to the CloudFormation AWS::MPA::IdentitySource resource. +func identitySourceDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: CreationTime + // CloudFormation resource type schema: + // + // { + // "format": "date-time", + // "type": "string" + // } + "creation_time": schema.StringAttribute{ /*START ATTRIBUTE*/ + CustomType: timetypes.RFC3339Type{}, + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: IdentitySourceArn + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "identity_source_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: IdentitySourceParameters + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "properties": { + // "IamIdentityCenter": { + // "additionalProperties": false, + // "properties": { + // "ApprovalPortalUrl": { + // "type": "string" + // }, + // "InstanceArn": { + // "pattern": "^arn:.+:sso:::instance/(?:sso)?ins-[a-zA-Z0-9-.]{16}$", + // "type": "string" + // }, + // "Region": { + // "type": "string" + // } + // }, + // "required": [ + // "InstanceArn", + // "Region" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "IamIdentityCenter" + // ], + // "type": "object" + // } + "identity_source_parameters": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: IamIdentityCenter + "iam_identity_center": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: ApprovalPortalUrl + "approval_portal_url": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: InstanceArn + "instance_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Region + "region": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: IdentitySourceType + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "identity_source_type": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Status + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "status": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: StatusCode + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "status_code": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: StatusMessage + // CloudFormation resource type schema: + // + // { + // "type": "string" + // } + "status_message": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "insertionOrder": false, + // "items": { + // "additionalProperties": false, + // "properties": { + // "Key": { + // "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "type": "string" + // }, + // "Value": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "type": "string" + // } + // }, + // "required": [ + // "Value", + // "Key" + // ], + // "type": "object" + // }, + // "type": "array", + // "uniqueItems": true + // } + "tags": schema.SetNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Key + "key": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Computed: true, + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Required: true, + } + + schema := schema.Schema{ + Description: "Data Source schema for AWS::MPA::IdentitySource", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::MPA::IdentitySource").WithTerraformTypeName("awscc_mpa_identity_source") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "approval_portal_url": "ApprovalPortalUrl", + "creation_time": "CreationTime", + "iam_identity_center": "IamIdentityCenter", + "identity_source_arn": "IdentitySourceArn", + "identity_source_parameters": "IdentitySourceParameters", + "identity_source_type": "IdentitySourceType", + "instance_arn": "InstanceArn", + "key": "Key", + "region": "Region", + "status": "Status", + "status_code": "StatusCode", + "status_message": "StatusMessage", + "tags": "Tags", + "value": "Value", + }) + + v, err := generic.NewSingularDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/mpa/identity_source_singular_data_source_gen_test.go b/internal/aws/mpa/identity_source_singular_data_source_gen_test.go new file mode 100644 index 000000000..037c3b6a5 --- /dev/null +++ b/internal/aws/mpa/identity_source_singular_data_source_gen_test.go @@ -0,0 +1,36 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package mpa_test + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSMPAIdentitySourceDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::MPA::IdentitySource", "awscc_mpa_identity_source", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + ExpectError: regexp.MustCompile("Missing required argument"), + }, + }) +} + +func TestAccAWSMPAIdentitySourceDataSource_NonExistent(t *testing.T) { + td := acctest.NewTestData(t, "AWS::MPA::IdentitySource", "awscc_mpa_identity_source", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithNonExistentIDConfig(), + ExpectError: regexp.MustCompile("Not Found"), + }, + }) +} diff --git a/internal/aws/opsworkscm/server_resource_gen.go b/internal/aws/opsworkscm/server_resource_gen.go index 5858f94f4..af84019b4 100644 --- a/internal/aws/opsworkscm/server_resource_gen.go +++ b/internal/aws/opsworkscm/server_resource_gen.go @@ -340,9 +340,11 @@ func serverResource(ctx context.Context) (resource.Resource, error) { // "type": "string" // } "server_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ stringplanmodifier.UseStateForUnknown(), + stringplanmodifier.RequiresReplaceIfConfigured(), }, /*END PLAN MODIFIERS*/ }, /*END ATTRIBUTE*/ // Property: ServiceRoleArn diff --git a/internal/aws/organizations/policy_resource_gen.go b/internal/aws/organizations/policy_resource_gen.go index 3ebbc2990..bebcb1432 100644 --- a/internal/aws/organizations/policy_resource_gen.go +++ b/internal/aws/organizations/policy_resource_gen.go @@ -239,7 +239,7 @@ func policyResource(ctx context.Context) (resource.Resource, error) { // CloudFormation resource type schema: // // { - // "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2", + // "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY", // "enum": [ // "SERVICE_CONTROL_POLICY", // "AISERVICES_OPT_OUT_POLICY", @@ -247,12 +247,13 @@ func policyResource(ctx context.Context) (resource.Resource, error) { // "TAG_POLICY", // "CHATBOT_POLICY", // "RESOURCE_CONTROL_POLICY", - // "DECLARATIVE_POLICY_EC2" + // "DECLARATIVE_POLICY_EC2", + // "SECURITYHUB_POLICY" // ], // "type": "string" // } "type": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2", + Description: "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY", Required: true, Validators: []validator.String{ /*START VALIDATORS*/ stringvalidator.OneOf( @@ -263,6 +264,7 @@ func policyResource(ctx context.Context) (resource.Resource, error) { "CHATBOT_POLICY", "RESOURCE_CONTROL_POLICY", "DECLARATIVE_POLICY_EC2", + "SECURITYHUB_POLICY", ), }, /*END VALIDATORS*/ PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ diff --git a/internal/aws/organizations/policy_singular_data_source_gen.go b/internal/aws/organizations/policy_singular_data_source_gen.go index f28f2e637..949bc36ce 100644 --- a/internal/aws/organizations/policy_singular_data_source_gen.go +++ b/internal/aws/organizations/policy_singular_data_source_gen.go @@ -174,7 +174,7 @@ func policyDataSource(ctx context.Context) (datasource.DataSource, error) { // CloudFormation resource type schema: // // { - // "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2", + // "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY", // "enum": [ // "SERVICE_CONTROL_POLICY", // "AISERVICES_OPT_OUT_POLICY", @@ -182,12 +182,13 @@ func policyDataSource(ctx context.Context) (datasource.DataSource, error) { // "TAG_POLICY", // "CHATBOT_POLICY", // "RESOURCE_CONTROL_POLICY", - // "DECLARATIVE_POLICY_EC2" + // "DECLARATIVE_POLICY_EC2", + // "SECURITYHUB_POLICY" // ], // "type": "string" // } "type": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2", + Description: "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY", Computed: true, }, /*END ATTRIBUTE*/ } /*END SCHEMA*/ diff --git a/internal/aws/rds/db_cluster_resource_gen.go b/internal/aws/rds/db_cluster_resource_gen.go index b7144acc3..58765fad1 100644 --- a/internal/aws/rds/db_cluster_resource_gen.go +++ b/internal/aws/rds/db_cluster_resource_gen.go @@ -571,11 +571,11 @@ func dBClusterResource(ctx context.Context) (resource.Resource, error) { // CloudFormation resource type schema: // // { - // "description": "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + // "description": "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", // "type": "string" // } "engine_lifecycle_support": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + Description: "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ diff --git a/internal/aws/rds/db_cluster_singular_data_source_gen.go b/internal/aws/rds/db_cluster_singular_data_source_gen.go index f5efdc4b3..0d8c81ef5 100644 --- a/internal/aws/rds/db_cluster_singular_data_source_gen.go +++ b/internal/aws/rds/db_cluster_singular_data_source_gen.go @@ -407,11 +407,11 @@ func dBClusterDataSource(ctx context.Context) (datasource.DataSource, error) { // CloudFormation resource type schema: // // { - // "description": "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + // "description": "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", // "type": "string" // } "engine_lifecycle_support": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + Description: "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", Computed: true, }, /*END ATTRIBUTE*/ // Property: EngineMode diff --git a/internal/aws/rds/db_instance_resource_gen.go b/internal/aws/rds/db_instance_resource_gen.go index 69fc95024..9742c9321 100644 --- a/internal/aws/rds/db_instance_resource_gen.go +++ b/internal/aws/rds/db_instance_resource_gen.go @@ -833,11 +833,11 @@ func dBInstanceResource(ctx context.Context) (resource.Resource, error) { // CloudFormation resource type schema: // // { - // "description": "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + // "description": "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", // "type": "string" // } "engine_lifecycle_support": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + Description: "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ diff --git a/internal/aws/rds/db_instance_singular_data_source_gen.go b/internal/aws/rds/db_instance_singular_data_source_gen.go index 0943f8f80..679e5106a 100644 --- a/internal/aws/rds/db_instance_singular_data_source_gen.go +++ b/internal/aws/rds/db_instance_singular_data_source_gen.go @@ -610,11 +610,11 @@ func dBInstanceDataSource(ctx context.Context) (datasource.DataSource, error) { // CloudFormation resource type schema: // // { - // "description": "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + // "description": "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", // "type": "string" // } "engine_lifecycle_support": schema.StringAttribute{ /*START ATTRIBUTE*/ - Description: "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + Description: "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", Computed: true, }, /*END ATTRIBUTE*/ // Property: EngineVersion diff --git a/internal/aws/rum/app_monitor_resource_gen.go b/internal/aws/rum/app_monitor_resource_gen.go index 436f5bd45..0e1c3f4de 100644 --- a/internal/aws/rum/app_monitor_resource_gen.go +++ b/internal/aws/rum/app_monitor_resource_gen.go @@ -576,7 +576,7 @@ func appMonitorResource(ctx context.Context) (resource.Resource, error) { // "properties": { // "S3Uri": { // "description": "The S3Uri of the bucket or folder that stores the source map files. It is required if status is ENABLED.", - // "pattern": "^s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$", + // "pattern": "^s3://[a-z0-9][-.a-z0-9]{1,62}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$", // "type": "string" // }, // "Status": { @@ -607,7 +607,7 @@ func appMonitorResource(ctx context.Context) (resource.Resource, error) { Optional: true, Computed: true, Validators: []validator.String{ /*START VALIDATORS*/ - stringvalidator.RegexMatches(regexp.MustCompile("^s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$"), ""), + stringvalidator.RegexMatches(regexp.MustCompile("^s3://[a-z0-9][-.a-z0-9]{1,62}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$"), ""), }, /*END VALIDATORS*/ PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ stringplanmodifier.UseStateForUnknown(), diff --git a/internal/aws/rum/app_monitor_singular_data_source_gen.go b/internal/aws/rum/app_monitor_singular_data_source_gen.go index d966118ec..f0eae2a5c 100644 --- a/internal/aws/rum/app_monitor_singular_data_source_gen.go +++ b/internal/aws/rum/app_monitor_singular_data_source_gen.go @@ -382,7 +382,7 @@ func appMonitorDataSource(ctx context.Context) (datasource.DataSource, error) { // "properties": { // "S3Uri": { // "description": "The S3Uri of the bucket or folder that stores the source map files. It is required if status is ENABLED.", - // "pattern": "^s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$", + // "pattern": "^s3://[a-z0-9][-.a-z0-9]{1,62}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$", // "type": "string" // }, // "Status": { diff --git a/internal/aws/securityhub/aggregator_v2_plural_data_source_gen.go b/internal/aws/securityhub/aggregator_v2_plural_data_source_gen.go new file mode 100644 index 000000000..593685463 --- /dev/null +++ b/internal/aws/securityhub/aggregator_v2_plural_data_source_gen.go @@ -0,0 +1,54 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_securityhub_aggregator_v2s", aggregatorV2sDataSource) +} + +// aggregatorV2sDataSource returns the Terraform awscc_securityhub_aggregator_v2s data source. +// This Terraform data source corresponds to the CloudFormation AWS::SecurityHub::AggregatorV2 resource. +func aggregatorV2sDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ + "id": schema.StringAttribute{ + Description: "Uniquely identifies the data source.", + Computed: true, + }, + "ids": schema.SetAttribute{ + Description: "Set of Resource Identifiers.", + ElementType: types.StringType, + Computed: true, + }, + } + + schema := schema.Schema{ + Description: "Plural Data Source schema for AWS::SecurityHub::AggregatorV2", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::AggregatorV2").WithTerraformTypeName("awscc_securityhub_aggregator_v2s") + opts = opts.WithTerraformSchema(schema) + + v, err := generic.NewPluralDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/aggregator_v2_plural_data_source_gen_test.go b/internal/aws/securityhub/aggregator_v2_plural_data_source_gen_test.go new file mode 100644 index 000000000..a350952e6 --- /dev/null +++ b/internal/aws/securityhub/aggregator_v2_plural_data_source_gen_test.go @@ -0,0 +1,27 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubAggregatorV2sDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AggregatorV2", "awscc_securityhub_aggregator_v2s", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(fmt.Sprintf("data.%s", td.ResourceName), "ids.#"), + ), + }, + }) +} diff --git a/internal/aws/securityhub/aggregator_v2_resource_gen.go b/internal/aws/securityhub/aggregator_v2_resource_gen.go new file mode 100644 index 000000000..1f4e78e75 --- /dev/null +++ b/internal/aws/securityhub/aggregator_v2_resource_gen.go @@ -0,0 +1,174 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + "regexp" + + "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/mapplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddResourceFactory("awscc_securityhub_aggregator_v2", aggregatorV2Resource) +} + +// aggregatorV2Resource returns the Terraform awscc_securityhub_aggregator_v2 resource. +// This Terraform resource corresponds to the CloudFormation AWS::SecurityHub::AggregatorV2 resource. +func aggregatorV2Resource(ctx context.Context) (resource.Resource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: AggregationRegion + // CloudFormation resource type schema: + // + // { + // "description": "The aggregation Region of the AggregatorV2", + // "pattern": "^[a-zA-Z0-9-]{1,32}$", + // "type": "string" + // } + "aggregation_region": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The aggregation Region of the AggregatorV2", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: AggregatorV2Arn + // CloudFormation resource type schema: + // + // { + // "description": "The ARN of the AggregatorV2 being created and assigned as the unique identifier", + // "pattern": "arn:aws\\S*:securityhub:\\S*", + // "type": "string" + // } + "aggregator_v2_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ARN of the AggregatorV2 being created and assigned as the unique identifier", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: LinkedRegions + // CloudFormation resource type schema: + // + // { + // "description": "The list of included Regions", + // "insertionOrder": false, + // "items": { + // "pattern": "^[a-zA-Z0-9-]{1,32}$", + // "type": "string" + // }, + // "maxItems": 50, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // } + "linked_regions": schema.SetAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "The list of included Regions", + Required: true, + Validators: []validator.Set{ /*START VALIDATORS*/ + setvalidator.SizeBetween(1, 50), + setvalidator.ValueStringsAre( + stringvalidator.RegexMatches(regexp.MustCompile("^[a-zA-Z0-9-]{1,32}$"), ""), + ), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + // Property: RegionLinkingMode + // CloudFormation resource type schema: + // + // { + // "description": "Indicates to link a list of included Regions", + // "enum": [ + // "SPECIFIED_REGIONS" + // ], + // "type": "string" + // } + "region_linking_mode": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "Indicates to link a list of included Regions", + Required: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "SPECIFIED_REGIONS", + ), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "A key-value pair to associate with the Security Hub V2 resource.", + // "patternProperties": { + // "": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "A key-value pair to associate with the Security Hub V2 resource.", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Map{ /*START PLAN MODIFIERS*/ + mapplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + // Corresponds to CloudFormation primaryIdentifier. + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + } + + schema := schema.Schema{ + Description: "The AWS::SecurityHub::AggregatorV2 resource represents the AWS Security Hub AggregatorV2 in your account. One aggregatorv2 resource is created for each account in non opt-in region in which you configure region linking mode.", + Version: 1, + Attributes: attributes, + } + + var opts generic.ResourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::AggregatorV2").WithTerraformTypeName("awscc_securityhub_aggregator_v2") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "aggregation_region": "AggregationRegion", + "aggregator_v2_arn": "AggregatorV2Arn", + "linked_regions": "LinkedRegions", + "region_linking_mode": "RegionLinkingMode", + "tags": "Tags", + }) + + opts = opts.WithCreateTimeoutInMinutes(0).WithDeleteTimeoutInMinutes(0) + + opts = opts.WithUpdateTimeoutInMinutes(0) + + v, err := generic.NewResource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/aggregator_v2_resource_gen_test.go b/internal/aws/securityhub/aggregator_v2_resource_gen_test.go new file mode 100644 index 000000000..32d714213 --- /dev/null +++ b/internal/aws/securityhub/aggregator_v2_resource_gen_test.go @@ -0,0 +1,25 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubAggregatorV2_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AggregatorV2", "awscc_securityhub_aggregator_v2", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + ExpectError: regexp.MustCompile("Missing required argument"), + }, + }) +} diff --git a/internal/aws/securityhub/aggregator_v2_singular_data_source_gen.go b/internal/aws/securityhub/aggregator_v2_singular_data_source_gen.go new file mode 100644 index 000000000..0b24a1c03 --- /dev/null +++ b/internal/aws/securityhub/aggregator_v2_singular_data_source_gen.go @@ -0,0 +1,137 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_securityhub_aggregator_v2", aggregatorV2DataSource) +} + +// aggregatorV2DataSource returns the Terraform awscc_securityhub_aggregator_v2 data source. +// This Terraform data source corresponds to the CloudFormation AWS::SecurityHub::AggregatorV2 resource. +func aggregatorV2DataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: AggregationRegion + // CloudFormation resource type schema: + // + // { + // "description": "The aggregation Region of the AggregatorV2", + // "pattern": "^[a-zA-Z0-9-]{1,32}$", + // "type": "string" + // } + "aggregation_region": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The aggregation Region of the AggregatorV2", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: AggregatorV2Arn + // CloudFormation resource type schema: + // + // { + // "description": "The ARN of the AggregatorV2 being created and assigned as the unique identifier", + // "pattern": "arn:aws\\S*:securityhub:\\S*", + // "type": "string" + // } + "aggregator_v2_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ARN of the AggregatorV2 being created and assigned as the unique identifier", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: LinkedRegions + // CloudFormation resource type schema: + // + // { + // "description": "The list of included Regions", + // "insertionOrder": false, + // "items": { + // "pattern": "^[a-zA-Z0-9-]{1,32}$", + // "type": "string" + // }, + // "maxItems": 50, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // } + "linked_regions": schema.SetAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "The list of included Regions", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: RegionLinkingMode + // CloudFormation resource type schema: + // + // { + // "description": "Indicates to link a list of included Regions", + // "enum": [ + // "SPECIFIED_REGIONS" + // ], + // "type": "string" + // } + "region_linking_mode": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "Indicates to link a list of included Regions", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "A key-value pair to associate with the Security Hub V2 resource.", + // "patternProperties": { + // "": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "A key-value pair to associate with the Security Hub V2 resource.", + Computed: true, + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Required: true, + } + + schema := schema.Schema{ + Description: "Data Source schema for AWS::SecurityHub::AggregatorV2", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::AggregatorV2").WithTerraformTypeName("awscc_securityhub_aggregator_v2") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "aggregation_region": "AggregationRegion", + "aggregator_v2_arn": "AggregatorV2Arn", + "linked_regions": "LinkedRegions", + "region_linking_mode": "RegionLinkingMode", + "tags": "Tags", + }) + + v, err := generic.NewSingularDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/aggregator_v2_singular_data_source_gen_test.go b/internal/aws/securityhub/aggregator_v2_singular_data_source_gen_test.go new file mode 100644 index 000000000..698e52ed9 --- /dev/null +++ b/internal/aws/securityhub/aggregator_v2_singular_data_source_gen_test.go @@ -0,0 +1,36 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubAggregatorV2DataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AggregatorV2", "awscc_securityhub_aggregator_v2", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + ExpectError: regexp.MustCompile("Missing required argument"), + }, + }) +} + +func TestAccAWSSecurityHubAggregatorV2DataSource_NonExistent(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AggregatorV2", "awscc_securityhub_aggregator_v2", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithNonExistentIDConfig(), + ExpectError: regexp.MustCompile("Not Found"), + }, + }) +} diff --git a/internal/aws/securityhub/automation_rule_v2_plural_data_source_gen.go b/internal/aws/securityhub/automation_rule_v2_plural_data_source_gen.go new file mode 100644 index 000000000..9827155d9 --- /dev/null +++ b/internal/aws/securityhub/automation_rule_v2_plural_data_source_gen.go @@ -0,0 +1,54 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_securityhub_automation_rule_v2s", automationRuleV2sDataSource) +} + +// automationRuleV2sDataSource returns the Terraform awscc_securityhub_automation_rule_v2s data source. +// This Terraform data source corresponds to the CloudFormation AWS::SecurityHub::AutomationRuleV2 resource. +func automationRuleV2sDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ + "id": schema.StringAttribute{ + Description: "Uniquely identifies the data source.", + Computed: true, + }, + "ids": schema.SetAttribute{ + Description: "Set of Resource Identifiers.", + ElementType: types.StringType, + Computed: true, + }, + } + + schema := schema.Schema{ + Description: "Plural Data Source schema for AWS::SecurityHub::AutomationRuleV2", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::AutomationRuleV2").WithTerraformTypeName("awscc_securityhub_automation_rule_v2s") + opts = opts.WithTerraformSchema(schema) + + v, err := generic.NewPluralDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/automation_rule_v2_plural_data_source_gen_test.go b/internal/aws/securityhub/automation_rule_v2_plural_data_source_gen_test.go new file mode 100644 index 000000000..80e4b0d9b --- /dev/null +++ b/internal/aws/securityhub/automation_rule_v2_plural_data_source_gen_test.go @@ -0,0 +1,27 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubAutomationRuleV2sDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AutomationRuleV2", "awscc_securityhub_automation_rule_v2s", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(fmt.Sprintf("data.%s", td.ResourceName), "ids.#"), + ), + }, + }) +} diff --git a/internal/aws/securityhub/automation_rule_v2_resource_gen.go b/internal/aws/securityhub/automation_rule_v2_resource_gen.go new file mode 100644 index 000000000..3c8bbfe74 --- /dev/null +++ b/internal/aws/securityhub/automation_rule_v2_resource_gen.go @@ -0,0 +1,1286 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + "regexp" + + "github.com/hashicorp/terraform-plugin-framework-validators/float64validator" + "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/float64planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/mapplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/objectplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" + fwvalidators "github.com/hashicorp/terraform-provider-awscc/internal/validators" +) + +func init() { + registry.AddResourceFactory("awscc_securityhub_automation_rule_v2", automationRuleV2Resource) +} + +// automationRuleV2Resource returns the Terraform awscc_securityhub_automation_rule_v2 resource. +// This Terraform resource corresponds to the CloudFormation AWS::SecurityHub::AutomationRuleV2 resource. +func automationRuleV2Resource(ctx context.Context) (resource.Resource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Actions + // CloudFormation resource type schema: + // + // { + // "description": "A list of actions to be performed when the rule criteria is met", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Allows you to configure automated responses", + // "properties": { + // "ExternalIntegrationConfiguration": { + // "additionalProperties": false, + // "description": "The settings for integrating automation rule actions with external systems or service", + // "properties": { + // "ConnectorArn": { + // "description": "The ARN of the connector that establishes the integration", + // "pattern": ".*\\S.*", + // "type": "string" + // } + // }, + // "type": "object" + // }, + // "FindingFieldsUpdate": { + // "additionalProperties": false, + // "description": "The changes to be applied to fields in a security finding when an automation rule is triggered", + // "properties": { + // "Comment": { + // "description": "Notes or contextual information for findings that are modified by the automation rule", + // "pattern": ".*\\S.*", + // "type": "string" + // }, + // "SeverityId": { + // "description": "The severity level to be assigned to findings that match the automation rule criteria", + // "type": "integer" + // }, + // "StatusId": { + // "description": "The status to be applied to findings that match automation rule criteria", + // "type": "integer" + // } + // }, + // "type": "object" + // }, + // "Type": { + // "description": "The category of action to be executed by the automation rule", + // "enum": [ + // "FINDING_FIELDS_UPDATE", + // "EXTERNAL_INTEGRATION" + // ], + // "type": "string" + // } + // }, + // "required": [ + // "Type" + // ], + // "type": "object" + // }, + // "maxItems": 1, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // } + "actions": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: ExternalIntegrationConfiguration + "external_integration_configuration": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: ConnectorArn + "connector_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ARN of the connector that establishes the integration", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.RegexMatches(regexp.MustCompile(".*\\S.*"), ""), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "The settings for integrating automation rule actions with external systems or service", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: FindingFieldsUpdate + "finding_fields_update": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comment + "comment": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "Notes or contextual information for findings that are modified by the automation rule", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.RegexMatches(regexp.MustCompile(".*\\S.*"), ""), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: SeverityId + "severity_id": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Description: "The severity level to be assigned to findings that match the automation rule criteria", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: StatusId + "status_id": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Description: "The status to be applied to findings that match automation rule criteria", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "The changes to be applied to fields in a security finding when an automation rule is triggered", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Type + "type": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The category of action to be executed by the automation rule", + Required: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "FINDING_FIELDS_UPDATE", + "EXTERNAL_INTEGRATION", + ), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "A list of actions to be performed when the rule criteria is met", + Required: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 1), + listvalidator.UniqueValues(), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + // Property: CreatedAt + // CloudFormation resource type schema: + // + // { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + "created_at": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Criteria + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "Defines the parameters and conditions used to evaluate and filter security findings", + // "properties": { + // "OcsfFindingCriteria": { + // "additionalProperties": false, + // "description": "The filtering conditions that align with OCSF standards", + // "properties": { + // "CompositeFilters": { + // "description": "Enables the creation of complex filtering conditions by combining filter", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables the creation of filtering criteria for security findings", + // "properties": { + // "BooleanFilters": { + // "description": "Enables filtering based on boolean field values", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on boolean field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "compliance.assessments.meets_criteria", + // "vulnerabilities.is_exploit_available", + // "vulnerabilities.is_fix_available" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "Boolean filter for querying findings", + // "properties": { + // "Value": { + // "description": "The value of the boolean", + // "type": "boolean" + // } + // }, + // "required": [ + // "Value" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // }, + // "DateFilters": { + // "description": "Enables filtering based on date and timestamp fields", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on date and timestamp fields in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "finding_info.created_time_dt", + // "finding_info.first_seen_time_dt", + // "finding_info.last_seen_time_dt", + // "finding_info.modified_time_dt" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A date filter for querying findings", + // "properties": { + // "DateRange": { + // "additionalProperties": false, + // "description": "A date range for the date filter", + // "properties": { + // "Unit": { + // "description": "A date range unit for the date filter", + // "enum": [ + // "DAYS" + // ], + // "type": "string" + // }, + // "Value": { + // "description": "A date range value for the date filter", + // "type": "number" + // } + // }, + // "required": [ + // "Unit", + // "Value" + // ], + // "type": "object" + // }, + // "End": { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // }, + // "Start": { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + // }, + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // }, + // "MapFilters": { + // "description": "Enables filtering based on map field value", + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on map field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "resources.tags" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A map filter for filtering findings", + // "properties": { + // "Comparison": { + // "description": "The condition to apply to the key value when filtering findings with a map filter", + // "enum": [ + // "EQUALS", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Key": { + // "description": "The key of the map filter", + // "maxLength": 4096, + // "minLength": 1, + // "type": "string" + // }, + // "Value": { + // "description": "The value for the key in the map filter", + // "maxLength": 4096, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Key", + // "Value" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array" + // }, + // "NumberFilters": { + // "description": "Enables filtering based on numerical field values", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on numerical field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "activity_id", + // "compliance.status_id", + // "confidence_score", + // "severity_id", + // "status_id", + // "finding_info.related_events_count" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A number filter for querying findings", + // "properties": { + // "Eq": { + // "description": "The equal-to condition to be applied to a single field when querying for findings", + // "type": "number" + // }, + // "Gte": { + // "description": "The greater-than-equal condition to be applied to a single field when querying for findings", + // "type": "number" + // }, + // "Lte": { + // "description": "The less-than-equal condition to be applied to a single field when querying for findings", + // "type": "number" + // } + // }, + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // }, + // "Operator": { + // "description": "The logical operator used to combine multiple conditions", + // "enum": [ + // "AND", + // "OR" + // ], + // "type": "string" + // }, + // "StringFilters": { + // "description": "Enables filtering based on string field values", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on string field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "metadata.uid", + // "activity_name", + // "cloud.account.name", + // "cloud.account.uid", + // "cloud.provider", + // "cloud.region", + // "compliance.assessments.category", + // "compliance.assessments.name", + // "compliance.control", + // "compliance.status", + // "compliance.standards", + // "finding_info.desc", + // "finding_info.src_url", + // "finding_info.title", + // "finding_info.types", + // "finding_info.uid", + // "finding_info.related_events.uid", + // "finding_info.related_events.product.uid", + // "finding_info.related_events.title", + // "metadata.product.feature.uid", + // "metadata.product.name", + // "metadata.product.uid", + // "metadata.product.vendor_name", + // "remediation.desc", + // "remediation.references", + // "resources.cloud_partition", + // "resources.name", + // "resources.region", + // "resources.type", + // "resources.uid", + // "severity", + // "status", + // "comment", + // "vulnerabilities.fix_coverage", + // "class_name" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A string filter for filtering findings", + // "properties": { + // "Comparison": { + // "description": "The condition to apply to a string value when filtering findings", + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS", + // "PREFIX_NOT_EQUALS", + // "CONTAINS" + // ], + // "type": "string" + // }, + // "Value": { + // "description": "The string filter value", + // "maxLength": 4096, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Value", + // "Comparison" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // } + // }, + // "type": "object" + // }, + // "type": "array", + // "uniqueItems": true + // }, + // "CompositeOperator": { + // "description": "The logical operator used to combine multiple conditions", + // "enum": [ + // "AND", + // "OR" + // ], + // "type": "string" + // } + // }, + // "type": "object" + // } + // }, + // "type": "object" + // } + "criteria": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: OcsfFindingCriteria + "ocsf_finding_criteria": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: CompositeFilters + "composite_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: BooleanFilters + "boolean_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "compliance.assessments.meets_criteria", + "vulnerabilities.is_exploit_available", + "vulnerabilities.is_fix_available", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Value + "value": schema.BoolAttribute{ /*START ATTRIBUTE*/ + Description: "The value of the boolean", + Optional: true, + Computed: true, + Validators: []validator.Bool{ /*START VALIDATORS*/ + fwvalidators.NotNullBool(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Bool{ /*START PLAN MODIFIERS*/ + boolplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "Boolean filter for querying findings", + Optional: true, + Computed: true, + Validators: []validator.Object{ /*START VALIDATORS*/ + fwvalidators.NotNullObject(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on boolean field values", + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 20), + listvalidator.UniqueValues(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: DateFilters + "date_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "finding_info.created_time_dt", + "finding_info.first_seen_time_dt", + "finding_info.last_seen_time_dt", + "finding_info.modified_time_dt", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: DateRange + "date_range": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Unit + "unit": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "A date range unit for the date filter", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "DAYS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "A date range value for the date filter", + Optional: true, + Computed: true, + Validators: []validator.Float64{ /*START VALIDATORS*/ + fwvalidators.NotNullFloat64(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A date range for the date filter", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: End + "end": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.RegexMatches(regexp.MustCompile("^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$"), ""), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Start + "start": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.RegexMatches(regexp.MustCompile("^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$"), ""), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A date filter for querying findings", + Optional: true, + Computed: true, + Validators: []validator.Object{ /*START VALIDATORS*/ + fwvalidators.NotNullObject(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on date and timestamp fields", + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 20), + listvalidator.UniqueValues(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: MapFilters + "map_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "resources.tags", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The condition to apply to the key value when filtering findings with a map filter", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "NOT_EQUALS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Key + "key": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The key of the map filter", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 4096), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The value for the key in the map filter", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 4096), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A map filter for filtering findings", + Optional: true, + Computed: true, + Validators: []validator.Object{ /*START VALIDATORS*/ + fwvalidators.NotNullObject(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on map field value", + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 20), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: NumberFilters + "number_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "activity_id", + "compliance.status_id", + "confidence_score", + "severity_id", + "status_id", + "finding_info.related_events_count", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Eq + "eq": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The equal-to condition to be applied to a single field when querying for findings", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Gte + "gte": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The greater-than-equal condition to be applied to a single field when querying for findings", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Lte + "lte": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The less-than-equal condition to be applied to a single field when querying for findings", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Float64{ /*START PLAN MODIFIERS*/ + float64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A number filter for querying findings", + Optional: true, + Computed: true, + Validators: []validator.Object{ /*START VALIDATORS*/ + fwvalidators.NotNullObject(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on numerical field values", + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 20), + listvalidator.UniqueValues(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Operator + "operator": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The logical operator used to combine multiple conditions", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "AND", + "OR", + ), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: StringFilters + "string_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "metadata.uid", + "activity_name", + "cloud.account.name", + "cloud.account.uid", + "cloud.provider", + "cloud.region", + "compliance.assessments.category", + "compliance.assessments.name", + "compliance.control", + "compliance.status", + "compliance.standards", + "finding_info.desc", + "finding_info.src_url", + "finding_info.title", + "finding_info.types", + "finding_info.uid", + "finding_info.related_events.uid", + "finding_info.related_events.product.uid", + "finding_info.related_events.title", + "metadata.product.feature.uid", + "metadata.product.name", + "metadata.product.uid", + "metadata.product.vendor_name", + "remediation.desc", + "remediation.references", + "resources.cloud_partition", + "resources.name", + "resources.region", + "resources.type", + "resources.uid", + "severity", + "status", + "comment", + "vulnerabilities.fix_coverage", + "class_name", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The condition to apply to a string value when filtering findings", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "EQUALS", + "PREFIX", + "NOT_EQUALS", + "PREFIX_NOT_EQUALS", + "CONTAINS", + ), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The string filter value", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 4096), + fwvalidators.NotNullString(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A string filter for filtering findings", + Optional: true, + Computed: true, + Validators: []validator.Object{ /*START VALIDATORS*/ + fwvalidators.NotNullObject(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on string field values", + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.SizeBetween(1, 20), + listvalidator.UniqueValues(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables the creation of complex filtering conditions by combining filter", + Optional: true, + Computed: true, + Validators: []validator.List{ /*START VALIDATORS*/ + listvalidator.UniqueValues(), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.List{ /*START PLAN MODIFIERS*/ + listplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: CompositeOperator + "composite_operator": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The logical operator used to combine multiple conditions", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "AND", + "OR", + ), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "The filtering conditions that align with OCSF standards", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Object{ /*START PLAN MODIFIERS*/ + objectplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "Defines the parameters and conditions used to evaluate and filter security findings", + Required: true, + }, /*END ATTRIBUTE*/ + // Property: Description + // CloudFormation resource type schema: + // + // { + // "description": "A description of the automation rule", + // "maxLength": 256, + // "minLength": 1, + // "pattern": ".*\\S.*", + // "type": "string" + // } + "description": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "A description of the automation rule", + Required: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 256), + stringvalidator.RegexMatches(regexp.MustCompile(".*\\S.*"), ""), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + // Property: RuleArn + // CloudFormation resource type schema: + // + // { + // "description": "The ARN of the automation rule", + // "pattern": "^arn:aws\\S*:securityhub:[a-z0-9-]+:[0-9]{12}:automation-rulev2/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + // "type": "string" + // } + "rule_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ARN of the automation rule", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: RuleId + // CloudFormation resource type schema: + // + // { + // "description": "The ID of the automation rule", + // "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + // "type": "string" + // } + "rule_id": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ID of the automation rule", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: RuleName + // CloudFormation resource type schema: + // + // { + // "description": "The name of the automation rule", + // "maxLength": 256, + // "minLength": 1, + // "pattern": ".*\\S.*", + // "type": "string" + // } + "rule_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the automation rule", + Required: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.LengthBetween(1, 256), + stringvalidator.RegexMatches(regexp.MustCompile(".*\\S.*"), ""), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + // Property: RuleOrder + // CloudFormation resource type schema: + // + // { + // "description": "The value for the rule priority", + // "maximum": 1000.0, + // "minimum": 1.0, + // "type": "number" + // } + "rule_order": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The value for the rule priority", + Required: true, + Validators: []validator.Float64{ /*START VALIDATORS*/ + float64validator.Between(1.000000, 1000.000000), + }, /*END VALIDATORS*/ + }, /*END ATTRIBUTE*/ + // Property: RuleStatus + // CloudFormation resource type schema: + // + // { + // "description": "The status of the automation rule", + // "enum": [ + // "ENABLED", + // "DISABLED" + // ], + // "type": "string" + // } + "rule_status": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The status of the automation rule", + Optional: true, + Computed: true, + Validators: []validator.String{ /*START VALIDATORS*/ + stringvalidator.OneOf( + "ENABLED", + "DISABLED", + ), + }, /*END VALIDATORS*/ + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "A key-value pair to associate with a resource.", + // "patternProperties": { + // "": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "A key-value pair to associate with a resource.", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Map{ /*START PLAN MODIFIERS*/ + mapplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: UpdatedAt + // CloudFormation resource type schema: + // + // { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + "updated_at": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + // Corresponds to CloudFormation primaryIdentifier. + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + } + + schema := schema.Schema{ + Description: "Resource schema for AWS::SecurityHub::AutomationRuleV2", + Version: 1, + Attributes: attributes, + } + + var opts generic.ResourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::AutomationRuleV2").WithTerraformTypeName("awscc_securityhub_automation_rule_v2") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "actions": "Actions", + "boolean_filters": "BooleanFilters", + "comment": "Comment", + "comparison": "Comparison", + "composite_filters": "CompositeFilters", + "composite_operator": "CompositeOperator", + "connector_arn": "ConnectorArn", + "created_at": "CreatedAt", + "criteria": "Criteria", + "date_filters": "DateFilters", + "date_range": "DateRange", + "description": "Description", + "end": "End", + "eq": "Eq", + "external_integration_configuration": "ExternalIntegrationConfiguration", + "field_name": "FieldName", + "filter": "Filter", + "finding_fields_update": "FindingFieldsUpdate", + "gte": "Gte", + "key": "Key", + "lte": "Lte", + "map_filters": "MapFilters", + "number_filters": "NumberFilters", + "ocsf_finding_criteria": "OcsfFindingCriteria", + "operator": "Operator", + "rule_arn": "RuleArn", + "rule_id": "RuleId", + "rule_name": "RuleName", + "rule_order": "RuleOrder", + "rule_status": "RuleStatus", + "severity_id": "SeverityId", + "start": "Start", + "status_id": "StatusId", + "string_filters": "StringFilters", + "tags": "Tags", + "type": "Type", + "unit": "Unit", + "updated_at": "UpdatedAt", + "value": "Value", + }) + + opts = opts.WithCreateTimeoutInMinutes(0).WithDeleteTimeoutInMinutes(0) + + opts = opts.WithUpdateTimeoutInMinutes(0) + + v, err := generic.NewResource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/automation_rule_v2_resource_gen_test.go b/internal/aws/securityhub/automation_rule_v2_resource_gen_test.go new file mode 100644 index 000000000..83b4d6688 --- /dev/null +++ b/internal/aws/securityhub/automation_rule_v2_resource_gen_test.go @@ -0,0 +1,25 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubAutomationRuleV2_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AutomationRuleV2", "awscc_securityhub_automation_rule_v2", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + ExpectError: regexp.MustCompile("Missing required argument"), + }, + }) +} diff --git a/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen.go b/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen.go new file mode 100644 index 000000000..a46189d8e --- /dev/null +++ b/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen.go @@ -0,0 +1,884 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_securityhub_automation_rule_v2", automationRuleV2DataSource) +} + +// automationRuleV2DataSource returns the Terraform awscc_securityhub_automation_rule_v2 data source. +// This Terraform data source corresponds to the CloudFormation AWS::SecurityHub::AutomationRuleV2 resource. +func automationRuleV2DataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Actions + // CloudFormation resource type schema: + // + // { + // "description": "A list of actions to be performed when the rule criteria is met", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Allows you to configure automated responses", + // "properties": { + // "ExternalIntegrationConfiguration": { + // "additionalProperties": false, + // "description": "The settings for integrating automation rule actions with external systems or service", + // "properties": { + // "ConnectorArn": { + // "description": "The ARN of the connector that establishes the integration", + // "pattern": ".*\\S.*", + // "type": "string" + // } + // }, + // "type": "object" + // }, + // "FindingFieldsUpdate": { + // "additionalProperties": false, + // "description": "The changes to be applied to fields in a security finding when an automation rule is triggered", + // "properties": { + // "Comment": { + // "description": "Notes or contextual information for findings that are modified by the automation rule", + // "pattern": ".*\\S.*", + // "type": "string" + // }, + // "SeverityId": { + // "description": "The severity level to be assigned to findings that match the automation rule criteria", + // "type": "integer" + // }, + // "StatusId": { + // "description": "The status to be applied to findings that match automation rule criteria", + // "type": "integer" + // } + // }, + // "type": "object" + // }, + // "Type": { + // "description": "The category of action to be executed by the automation rule", + // "enum": [ + // "FINDING_FIELDS_UPDATE", + // "EXTERNAL_INTEGRATION" + // ], + // "type": "string" + // } + // }, + // "required": [ + // "Type" + // ], + // "type": "object" + // }, + // "maxItems": 1, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // } + "actions": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: ExternalIntegrationConfiguration + "external_integration_configuration": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: ConnectorArn + "connector_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ARN of the connector that establishes the integration", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "The settings for integrating automation rule actions with external systems or service", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: FindingFieldsUpdate + "finding_fields_update": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comment + "comment": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "Notes or contextual information for findings that are modified by the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: SeverityId + "severity_id": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Description: "The severity level to be assigned to findings that match the automation rule criteria", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: StatusId + "status_id": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Description: "The status to be applied to findings that match automation rule criteria", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "The changes to be applied to fields in a security finding when an automation rule is triggered", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Type + "type": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The category of action to be executed by the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "A list of actions to be performed when the rule criteria is met", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: CreatedAt + // CloudFormation resource type schema: + // + // { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + "created_at": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Criteria + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "Defines the parameters and conditions used to evaluate and filter security findings", + // "properties": { + // "OcsfFindingCriteria": { + // "additionalProperties": false, + // "description": "The filtering conditions that align with OCSF standards", + // "properties": { + // "CompositeFilters": { + // "description": "Enables the creation of complex filtering conditions by combining filter", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables the creation of filtering criteria for security findings", + // "properties": { + // "BooleanFilters": { + // "description": "Enables filtering based on boolean field values", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on boolean field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "compliance.assessments.meets_criteria", + // "vulnerabilities.is_exploit_available", + // "vulnerabilities.is_fix_available" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "Boolean filter for querying findings", + // "properties": { + // "Value": { + // "description": "The value of the boolean", + // "type": "boolean" + // } + // }, + // "required": [ + // "Value" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // }, + // "DateFilters": { + // "description": "Enables filtering based on date and timestamp fields", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on date and timestamp fields in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "finding_info.created_time_dt", + // "finding_info.first_seen_time_dt", + // "finding_info.last_seen_time_dt", + // "finding_info.modified_time_dt" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A date filter for querying findings", + // "properties": { + // "DateRange": { + // "additionalProperties": false, + // "description": "A date range for the date filter", + // "properties": { + // "Unit": { + // "description": "A date range unit for the date filter", + // "enum": [ + // "DAYS" + // ], + // "type": "string" + // }, + // "Value": { + // "description": "A date range value for the date filter", + // "type": "number" + // } + // }, + // "required": [ + // "Unit", + // "Value" + // ], + // "type": "object" + // }, + // "End": { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // }, + // "Start": { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + // }, + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // }, + // "MapFilters": { + // "description": "Enables filtering based on map field value", + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on map field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "resources.tags" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A map filter for filtering findings", + // "properties": { + // "Comparison": { + // "description": "The condition to apply to the key value when filtering findings with a map filter", + // "enum": [ + // "EQUALS", + // "NOT_EQUALS" + // ], + // "type": "string" + // }, + // "Key": { + // "description": "The key of the map filter", + // "maxLength": 4096, + // "minLength": 1, + // "type": "string" + // }, + // "Value": { + // "description": "The value for the key in the map filter", + // "maxLength": 4096, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Comparison", + // "Key", + // "Value" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array" + // }, + // "NumberFilters": { + // "description": "Enables filtering based on numerical field values", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on numerical field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "activity_id", + // "compliance.status_id", + // "confidence_score", + // "severity_id", + // "status_id", + // "finding_info.related_events_count" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A number filter for querying findings", + // "properties": { + // "Eq": { + // "description": "The equal-to condition to be applied to a single field when querying for findings", + // "type": "number" + // }, + // "Gte": { + // "description": "The greater-than-equal condition to be applied to a single field when querying for findings", + // "type": "number" + // }, + // "Lte": { + // "description": "The less-than-equal condition to be applied to a single field when querying for findings", + // "type": "number" + // } + // }, + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // }, + // "Operator": { + // "description": "The logical operator used to combine multiple conditions", + // "enum": [ + // "AND", + // "OR" + // ], + // "type": "string" + // }, + // "StringFilters": { + // "description": "Enables filtering based on string field values", + // "insertionOrder": true, + // "items": { + // "additionalProperties": false, + // "description": "Enables filtering of security findings based on string field values in OCSF", + // "properties": { + // "FieldName": { + // "description": "The name of the field", + // "enum": [ + // "metadata.uid", + // "activity_name", + // "cloud.account.name", + // "cloud.account.uid", + // "cloud.provider", + // "cloud.region", + // "compliance.assessments.category", + // "compliance.assessments.name", + // "compliance.control", + // "compliance.status", + // "compliance.standards", + // "finding_info.desc", + // "finding_info.src_url", + // "finding_info.title", + // "finding_info.types", + // "finding_info.uid", + // "finding_info.related_events.uid", + // "finding_info.related_events.product.uid", + // "finding_info.related_events.title", + // "metadata.product.feature.uid", + // "metadata.product.name", + // "metadata.product.uid", + // "metadata.product.vendor_name", + // "remediation.desc", + // "remediation.references", + // "resources.cloud_partition", + // "resources.name", + // "resources.region", + // "resources.type", + // "resources.uid", + // "severity", + // "status", + // "comment", + // "vulnerabilities.fix_coverage", + // "class_name" + // ], + // "type": "string" + // }, + // "Filter": { + // "additionalProperties": false, + // "description": "A string filter for filtering findings", + // "properties": { + // "Comparison": { + // "description": "The condition to apply to a string value when filtering findings", + // "enum": [ + // "EQUALS", + // "PREFIX", + // "NOT_EQUALS", + // "PREFIX_NOT_EQUALS", + // "CONTAINS" + // ], + // "type": "string" + // }, + // "Value": { + // "description": "The string filter value", + // "maxLength": 4096, + // "minLength": 1, + // "type": "string" + // } + // }, + // "required": [ + // "Value", + // "Comparison" + // ], + // "type": "object" + // } + // }, + // "required": [ + // "FieldName", + // "Filter" + // ], + // "type": "object" + // }, + // "maxItems": 20, + // "minItems": 1, + // "type": "array", + // "uniqueItems": true + // } + // }, + // "type": "object" + // }, + // "type": "array", + // "uniqueItems": true + // }, + // "CompositeOperator": { + // "description": "The logical operator used to combine multiple conditions", + // "enum": [ + // "AND", + // "OR" + // ], + // "type": "string" + // } + // }, + // "type": "object" + // } + // }, + // "type": "object" + // } + "criteria": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: OcsfFindingCriteria + "ocsf_finding_criteria": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: CompositeFilters + "composite_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: BooleanFilters + "boolean_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Value + "value": schema.BoolAttribute{ /*START ATTRIBUTE*/ + Description: "The value of the boolean", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "Boolean filter for querying findings", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on boolean field values", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: DateFilters + "date_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: DateRange + "date_range": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Unit + "unit": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "A date range unit for the date filter", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "A date range value for the date filter", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A date range for the date filter", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: End + "end": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Start + "start": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A date filter for querying findings", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on date and timestamp fields", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: MapFilters + "map_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The condition to apply to the key value when filtering findings with a map filter", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Key + "key": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The key of the map filter", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The value for the key in the map filter", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A map filter for filtering findings", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on map field value", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: NumberFilters + "number_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Eq + "eq": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The equal-to condition to be applied to a single field when querying for findings", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Gte + "gte": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The greater-than-equal condition to be applied to a single field when querying for findings", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Lte + "lte": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The less-than-equal condition to be applied to a single field when querying for findings", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A number filter for querying findings", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on numerical field values", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Operator + "operator": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The logical operator used to combine multiple conditions", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: StringFilters + "string_filters": schema.ListNestedAttribute{ /*START ATTRIBUTE*/ + NestedObject: schema.NestedAttributeObject{ /*START NESTED OBJECT*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: FieldName + "field_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the field", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Filter + "filter": schema.SingleNestedAttribute{ /*START ATTRIBUTE*/ + Attributes: map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: Comparison + "comparison": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The condition to apply to a string value when filtering findings", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Value + "value": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The string filter value", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "A string filter for filtering findings", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables filtering based on string field values", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + }, /*END NESTED OBJECT*/ + Description: "Enables the creation of complex filtering conditions by combining filter", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: CompositeOperator + "composite_operator": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The logical operator used to combine multiple conditions", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "The filtering conditions that align with OCSF standards", + Computed: true, + }, /*END ATTRIBUTE*/ + }, /*END SCHEMA*/ + Description: "Defines the parameters and conditions used to evaluate and filter security findings", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Description + // CloudFormation resource type schema: + // + // { + // "description": "A description of the automation rule", + // "maxLength": 256, + // "minLength": 1, + // "pattern": ".*\\S.*", + // "type": "string" + // } + "description": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "A description of the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: RuleArn + // CloudFormation resource type schema: + // + // { + // "description": "The ARN of the automation rule", + // "pattern": "^arn:aws\\S*:securityhub:[a-z0-9-]+:[0-9]{12}:automation-rulev2/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + // "type": "string" + // } + "rule_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ARN of the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: RuleId + // CloudFormation resource type schema: + // + // { + // "description": "The ID of the automation rule", + // "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + // "type": "string" + // } + "rule_id": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The ID of the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: RuleName + // CloudFormation resource type schema: + // + // { + // "description": "The name of the automation rule", + // "maxLength": 256, + // "minLength": 1, + // "pattern": ".*\\S.*", + // "type": "string" + // } + "rule_name": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The name of the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: RuleOrder + // CloudFormation resource type schema: + // + // { + // "description": "The value for the rule priority", + // "maximum": 1000.0, + // "minimum": 1.0, + // "type": "number" + // } + "rule_order": schema.Float64Attribute{ /*START ATTRIBUTE*/ + Description: "The value for the rule priority", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: RuleStatus + // CloudFormation resource type schema: + // + // { + // "description": "The status of the automation rule", + // "enum": [ + // "ENABLED", + // "DISABLED" + // ], + // "type": "string" + // } + "rule_status": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The status of the automation rule", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "A key-value pair to associate with a resource.", + // "patternProperties": { + // "": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "A key-value pair to associate with a resource.", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: UpdatedAt + // CloudFormation resource type schema: + // + // { + // "description": "The timestamp formatted in ISO8601", + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + "updated_at": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The timestamp formatted in ISO8601", + Computed: true, + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Required: true, + } + + schema := schema.Schema{ + Description: "Data Source schema for AWS::SecurityHub::AutomationRuleV2", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::AutomationRuleV2").WithTerraformTypeName("awscc_securityhub_automation_rule_v2") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "actions": "Actions", + "boolean_filters": "BooleanFilters", + "comment": "Comment", + "comparison": "Comparison", + "composite_filters": "CompositeFilters", + "composite_operator": "CompositeOperator", + "connector_arn": "ConnectorArn", + "created_at": "CreatedAt", + "criteria": "Criteria", + "date_filters": "DateFilters", + "date_range": "DateRange", + "description": "Description", + "end": "End", + "eq": "Eq", + "external_integration_configuration": "ExternalIntegrationConfiguration", + "field_name": "FieldName", + "filter": "Filter", + "finding_fields_update": "FindingFieldsUpdate", + "gte": "Gte", + "key": "Key", + "lte": "Lte", + "map_filters": "MapFilters", + "number_filters": "NumberFilters", + "ocsf_finding_criteria": "OcsfFindingCriteria", + "operator": "Operator", + "rule_arn": "RuleArn", + "rule_id": "RuleId", + "rule_name": "RuleName", + "rule_order": "RuleOrder", + "rule_status": "RuleStatus", + "severity_id": "SeverityId", + "start": "Start", + "status_id": "StatusId", + "string_filters": "StringFilters", + "tags": "Tags", + "type": "Type", + "unit": "Unit", + "updated_at": "UpdatedAt", + "value": "Value", + }) + + v, err := generic.NewSingularDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen_test.go b/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen_test.go new file mode 100644 index 000000000..ab0e7186c --- /dev/null +++ b/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen_test.go @@ -0,0 +1,36 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubAutomationRuleV2DataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AutomationRuleV2", "awscc_securityhub_automation_rule_v2", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + ExpectError: regexp.MustCompile("Missing required argument"), + }, + }) +} + +func TestAccAWSSecurityHubAutomationRuleV2DataSource_NonExistent(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::AutomationRuleV2", "awscc_securityhub_automation_rule_v2", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithNonExistentIDConfig(), + ExpectError: regexp.MustCompile("Not Found"), + }, + }) +} diff --git a/internal/aws/securityhub/hub_v2_plural_data_source_gen.go b/internal/aws/securityhub/hub_v2_plural_data_source_gen.go new file mode 100644 index 000000000..ab34b33e2 --- /dev/null +++ b/internal/aws/securityhub/hub_v2_plural_data_source_gen.go @@ -0,0 +1,54 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_securityhub_hub_v2s", hubV2sDataSource) +} + +// hubV2sDataSource returns the Terraform awscc_securityhub_hub_v2s data source. +// This Terraform data source corresponds to the CloudFormation AWS::SecurityHub::HubV2 resource. +func hubV2sDataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ + "id": schema.StringAttribute{ + Description: "Uniquely identifies the data source.", + Computed: true, + }, + "ids": schema.SetAttribute{ + Description: "Set of Resource Identifiers.", + ElementType: types.StringType, + Computed: true, + }, + } + + schema := schema.Schema{ + Description: "Plural Data Source schema for AWS::SecurityHub::HubV2", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::HubV2").WithTerraformTypeName("awscc_securityhub_hub_v2s") + opts = opts.WithTerraformSchema(schema) + + v, err := generic.NewPluralDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/hub_v2_plural_data_source_gen_test.go b/internal/aws/securityhub/hub_v2_plural_data_source_gen_test.go new file mode 100644 index 000000000..18d6f02b7 --- /dev/null +++ b/internal/aws/securityhub/hub_v2_plural_data_source_gen_test.go @@ -0,0 +1,27 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/plural-data-source/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubHubV2sDataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::HubV2", "awscc_securityhub_hub_v2s", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.EmptyDataSourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(fmt.Sprintf("data.%s", td.ResourceName), "ids.#"), + ), + }, + }) +} diff --git a/internal/aws/securityhub/hub_v2_resource_gen.go b/internal/aws/securityhub/hub_v2_resource_gen.go new file mode 100644 index 000000000..ea88ef4ad --- /dev/null +++ b/internal/aws/securityhub/hub_v2_resource_gen.go @@ -0,0 +1,121 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/mapplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddResourceFactory("awscc_securityhub_hub_v2", hubV2Resource) +} + +// hubV2Resource returns the Terraform awscc_securityhub_hub_v2 resource. +// This Terraform resource corresponds to the CloudFormation AWS::SecurityHub::HubV2 resource. +func hubV2Resource(ctx context.Context) (resource.Resource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: HubV2Arn + // CloudFormation resource type schema: + // + // { + // "description": "The Amazon Resource Name of the Security Hub V2 resource.", + // "pattern": "", + // "type": "string" + // } + "hub_v2_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The Amazon Resource Name of the Security Hub V2 resource.", + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: SubscribedAt + // CloudFormation resource type schema: + // + // { + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + "subscribed_at": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + PlanModifiers: []planmodifier.String{ /*START PLAN MODIFIERS*/ + stringplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "patternProperties": { + // "": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length.", + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Map{ /*START PLAN MODIFIERS*/ + mapplanmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + // Corresponds to CloudFormation primaryIdentifier. + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + } + + schema := schema.Schema{ + Description: "The AWS::SecurityHub::HubV2 resource represents the implementation of the AWS Security Hub V2 service in your account. Only one hubv2 resource can created in each region in which you enable Security Hub V2.", + Version: 1, + Attributes: attributes, + } + + var opts generic.ResourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::HubV2").WithTerraformTypeName("awscc_securityhub_hub_v2") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "hub_v2_arn": "HubV2Arn", + "subscribed_at": "SubscribedAt", + "tags": "Tags", + }) + + opts = opts.WithCreateTimeoutInMinutes(0).WithDeleteTimeoutInMinutes(0) + + opts = opts.WithUpdateTimeoutInMinutes(0) + + v, err := generic.NewResource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/hub_v2_resource_gen_test.go b/internal/aws/securityhub/hub_v2_resource_gen_test.go new file mode 100644 index 000000000..fb4b2bf17 --- /dev/null +++ b/internal/aws/securityhub/hub_v2_resource_gen_test.go @@ -0,0 +1,46 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/resource/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubHubV2_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::HubV2", "awscc_securityhub_hub_v2", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + Check: resource.ComposeTestCheckFunc( + td.CheckExistsInAWS(), + ), + }, + { + ResourceName: td.ResourceName, + ImportState: true, + ImportStateVerify: true, + }, + }) +} + +func TestAccAWSSecurityHubHubV2_disappears(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::HubV2", "awscc_securityhub_hub_v2", "test") + + td.ResourceTest(t, []resource.TestStep{ + { + Config: td.EmptyConfig(), + Check: resource.ComposeTestCheckFunc( + td.CheckExistsInAWS(), + td.DeleteResource(), + ), + ExpectNonEmptyPlan: true, + }, + }) +} diff --git a/internal/aws/securityhub/hub_v2_singular_data_source_gen.go b/internal/aws/securityhub/hub_v2_singular_data_source_gen.go new file mode 100644 index 000000000..050ee53df --- /dev/null +++ b/internal/aws/securityhub/hub_v2_singular_data_source_gen.go @@ -0,0 +1,99 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package securityhub + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-awscc/internal/generic" + "github.com/hashicorp/terraform-provider-awscc/internal/registry" +) + +func init() { + registry.AddDataSourceFactory("awscc_securityhub_hub_v2", hubV2DataSource) +} + +// hubV2DataSource returns the Terraform awscc_securityhub_hub_v2 data source. +// This Terraform data source corresponds to the CloudFormation AWS::SecurityHub::HubV2 resource. +func hubV2DataSource(ctx context.Context) (datasource.DataSource, error) { + attributes := map[string]schema.Attribute{ /*START SCHEMA*/ + // Property: HubV2Arn + // CloudFormation resource type schema: + // + // { + // "description": "The Amazon Resource Name of the Security Hub V2 resource.", + // "pattern": "", + // "type": "string" + // } + "hub_v2_arn": schema.StringAttribute{ /*START ATTRIBUTE*/ + Description: "The Amazon Resource Name of the Security Hub V2 resource.", + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: SubscribedAt + // CloudFormation resource type schema: + // + // { + // "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$", + // "type": "string" + // } + "subscribed_at": schema.StringAttribute{ /*START ATTRIBUTE*/ + Computed: true, + }, /*END ATTRIBUTE*/ + // Property: Tags + // CloudFormation resource type schema: + // + // { + // "additionalProperties": false, + // "description": "A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + // "patternProperties": { + // "": { + // "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length.", + // "maxLength": 256, + // "minLength": 0, + // "type": "string" + // } + // }, + // "type": "object" + // } + "tags": // Pattern: "" + schema.MapAttribute{ /*START ATTRIBUTE*/ + ElementType: types.StringType, + Description: "A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + Computed: true, + }, /*END ATTRIBUTE*/ + } /*END SCHEMA*/ + + attributes["id"] = schema.StringAttribute{ + Description: "Uniquely identifies the resource.", + Required: true, + } + + schema := schema.Schema{ + Description: "Data Source schema for AWS::SecurityHub::HubV2", + Attributes: attributes, + } + + var opts generic.DataSourceOptions + + opts = opts.WithCloudFormationTypeName("AWS::SecurityHub::HubV2").WithTerraformTypeName("awscc_securityhub_hub_v2") + opts = opts.WithTerraformSchema(schema) + opts = opts.WithAttributeNameMap(map[string]string{ + "hub_v2_arn": "HubV2Arn", + "subscribed_at": "SubscribedAt", + "tags": "Tags", + }) + + v, err := generic.NewSingularDataSource(ctx, opts...) + + if err != nil { + return nil, err + } + + return v, nil +} diff --git a/internal/aws/securityhub/hub_v2_singular_data_source_gen_test.go b/internal/aws/securityhub/hub_v2_singular_data_source_gen_test.go new file mode 100644 index 000000000..f92c823f8 --- /dev/null +++ b/internal/aws/securityhub/hub_v2_singular_data_source_gen_test.go @@ -0,0 +1,40 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by generators/singular-data-source/main.go; DO NOT EDIT. + +package securityhub_test + +import ( + "fmt" + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-awscc/internal/acctest" +) + +func TestAccAWSSecurityHubHubV2DataSource_basic(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::HubV2", "awscc_securityhub_hub_v2", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithEmptyResourceConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(fmt.Sprintf("data.%s", td.ResourceName), "id", td.ResourceName, "id"), + resource.TestCheckResourceAttrPair(fmt.Sprintf("data.%s", td.ResourceName), "arn", td.ResourceName, "arn"), + ), + }, + }) +} + +func TestAccAWSSecurityHubHubV2DataSource_NonExistent(t *testing.T) { + td := acctest.NewTestData(t, "AWS::SecurityHub::HubV2", "awscc_securityhub_hub_v2", "test") + + td.DataSourceTest(t, []resource.TestStep{ + { + Config: td.DataSourceWithNonExistentIDConfig(), + ExpectError: regexp.MustCompile("Not Found"), + }, + }) +} diff --git a/internal/aws/synthetics/canary_resource_gen.go b/internal/aws/synthetics/canary_resource_gen.go index 065584a38..fbe1aed28 100644 --- a/internal/aws/synthetics/canary_resource_gen.go +++ b/internal/aws/synthetics/canary_resource_gen.go @@ -380,6 +380,10 @@ func canaryResource(ctx context.Context) (resource.Resource, error) { // }, // "type": "object" // }, + // "EphemeralStorage": { + // "description": "Provide ephemeralStorage available for canary in MB", + // "type": "integer" + // }, // "MemoryInMB": { // "description": "Provide maximum memory available for canary in MB", // "type": "integer" @@ -414,6 +418,15 @@ func canaryResource(ctx context.Context) (resource.Resource, error) { }, /*END PLAN MODIFIERS*/ // EnvironmentVariables is a write-only property. }, /*END ATTRIBUTE*/ + // Property: EphemeralStorage + "ephemeral_storage": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Description: "Provide ephemeralStorage available for canary in MB", + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Int64{ /*START PLAN MODIFIERS*/ + int64planmodifier.UseStateForUnknown(), + }, /*END PLAN MODIFIERS*/ + }, /*END ATTRIBUTE*/ // Property: MemoryInMB "memory_in_mb": schema.Int64Attribute{ /*START ATTRIBUTE*/ Description: "Provide maximum memory available for canary in MB", @@ -854,6 +867,7 @@ func canaryResource(ctx context.Context) (resource.Resource, error) { "duration_in_seconds": "DurationInSeconds", "encryption_mode": "EncryptionMode", "environment_variables": "EnvironmentVariables", + "ephemeral_storage": "EphemeralStorage", "execution_role_arn": "ExecutionRoleArn", "expression": "Expression", "failure_retention_period": "FailureRetentionPeriod", diff --git a/internal/aws/synthetics/canary_singular_data_source_gen.go b/internal/aws/synthetics/canary_singular_data_source_gen.go index 0159fe16b..96540371b 100644 --- a/internal/aws/synthetics/canary_singular_data_source_gen.go +++ b/internal/aws/synthetics/canary_singular_data_source_gen.go @@ -280,6 +280,10 @@ func canaryDataSource(ctx context.Context) (datasource.DataSource, error) { // }, // "type": "object" // }, + // "EphemeralStorage": { + // "description": "Provide ephemeralStorage available for canary in MB", + // "type": "integer" + // }, // "MemoryInMB": { // "description": "Provide maximum memory available for canary in MB", // "type": "integer" @@ -305,6 +309,11 @@ func canaryDataSource(ctx context.Context) (datasource.DataSource, error) { Description: "Environment variable key-value pairs.", Computed: true, }, /*END ATTRIBUTE*/ + // Property: EphemeralStorage + "ephemeral_storage": schema.Int64Attribute{ /*START ATTRIBUTE*/ + Description: "Provide ephemeralStorage available for canary in MB", + Computed: true, + }, /*END ATTRIBUTE*/ // Property: MemoryInMB "memory_in_mb": schema.Int64Attribute{ /*START ATTRIBUTE*/ Description: "Provide maximum memory available for canary in MB", @@ -628,6 +637,7 @@ func canaryDataSource(ctx context.Context) (datasource.DataSource, error) { "duration_in_seconds": "DurationInSeconds", "encryption_mode": "EncryptionMode", "environment_variables": "EnvironmentVariables", + "ephemeral_storage": "EphemeralStorage", "execution_role_arn": "ExecutionRoleArn", "expression": "Expression", "failure_retention_period": "FailureRetentionPeriod", diff --git a/internal/provider/all_schemas.hcl b/internal/provider/all_schemas.hcl index d0519e66a..e932489a0 100644 --- a/internal/provider/all_schemas.hcl +++ b/internal/provider/all_schemas.hcl @@ -10,7 +10,7 @@ meta_schema { path = "../service/cloudformation/meta-schemas/provider.definition.schema.v1.json" } -# 1168 CloudFormation resource types schemas are available for use with the Cloud Control API. +# 1181 CloudFormation resource types schemas are available for use with the Cloud Control API. resource_schema "aws_acmpca_certificate" { cloudformation_type_name = "AWS::ACMPCA::Certificate" @@ -1865,6 +1865,10 @@ resource_schema "aws_ec2_subnet_route_table_association" { cloudformation_type_name = "AWS::EC2::SubnetRouteTableAssociation" } +resource_schema "aws_ec2_traffic_mirror_filter" { + cloudformation_type_name = "AWS::EC2::TrafficMirrorFilter" +} + resource_schema "aws_ec2_transit_gateway" { cloudformation_type_name = "AWS::EC2::TransitGateway" } @@ -3353,6 +3357,20 @@ resource_schema "aws_m2_environment" { cloudformation_type_name = "AWS::M2::Environment" } +resource_schema "aws_mpa_approval_team" { + cloudformation_type_name = "AWS::MPA::ApprovalTeam" + + # Suppression Reason: Policies is of unsupported type: set of "" + # https://github.com/hashicorp/terraform-provider-awscc/issues/1510 + suppress_resource_generation = true + suppress_singular_data_source_generation = true + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mpa_identity_source" { + cloudformation_type_name = "AWS::MPA::IdentitySource" +} + resource_schema "aws_msk_batch_scram_secret" { cloudformation_type_name = "AWS::MSK::BatchScramSecret" suppress_plural_data_source_generation = true @@ -4848,6 +4866,10 @@ resource_schema "aws_secretsmanager_secret_target_attachment" { cloudformation_type_name = "AWS::SecretsManager::SecretTargetAttachment" } +resource_schema "aws_securityhub_aggregator_v2" { + cloudformation_type_name = "AWS::SecurityHub::AggregatorV2" +} + resource_schema "aws_securityhub_automation_rule" { cloudformation_type_name = "AWS::SecurityHub::AutomationRule" @@ -4859,6 +4881,10 @@ resource_schema "aws_securityhub_automation_rule" { suppress_plural_data_source_generation = true } +resource_schema "aws_securityhub_automation_rule_v2" { + cloudformation_type_name = "AWS::SecurityHub::AutomationRuleV2" +} + resource_schema "aws_securityhub_configuration_policy" { cloudformation_type_name = "AWS::SecurityHub::ConfigurationPolicy" } @@ -4875,6 +4901,10 @@ resource_schema "aws_securityhub_hub" { cloudformation_type_name = "AWS::SecurityHub::Hub" } +resource_schema "aws_securityhub_hub_v2" { + cloudformation_type_name = "AWS::SecurityHub::HubV2" +} + resource_schema "aws_securityhub_insight" { cloudformation_type_name = "AWS::SecurityHub::Insight" } diff --git a/internal/provider/generators/allschemas/available_schemas.2025-06-18.hcl b/internal/provider/generators/allschemas/available_schemas.2025-06-18.hcl new file mode 100644 index 000000000..85cf8572f --- /dev/null +++ b/internal/provider/generators/allschemas/available_schemas.2025-06-18.hcl @@ -0,0 +1,5019 @@ +# 1181 CloudFormation resource types schemas are available for use with the Cloud Control API. + +resource_schema "aws_acmpca_certificate" { + cloudformation_type_name = "AWS::ACMPCA::Certificate" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_acmpca_certificate_authority" { + cloudformation_type_name = "AWS::ACMPCA::CertificateAuthority" +} + +resource_schema "aws_acmpca_certificate_authority_activation" { + cloudformation_type_name = "AWS::ACMPCA::CertificateAuthorityActivation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_acmpca_permission" { + cloudformation_type_name = "AWS::ACMPCA::Permission" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_aps_rule_groups_namespace" { + cloudformation_type_name = "AWS::APS::RuleGroupsNamespace" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_aps_scraper" { + cloudformation_type_name = "AWS::APS::Scraper" +} + +resource_schema "aws_aps_workspace" { + cloudformation_type_name = "AWS::APS::Workspace" +} + +resource_schema "aws_arczonalshift_autoshift_observer_notification_status" { + cloudformation_type_name = "AWS::ARCZonalShift::AutoshiftObserverNotificationStatus" +} + +resource_schema "aws_arczonalshift_zonal_autoshift_configuration" { + cloudformation_type_name = "AWS::ARCZonalShift::ZonalAutoshiftConfiguration" +} + +resource_schema "aws_accessanalyzer_analyzer" { + cloudformation_type_name = "AWS::AccessAnalyzer::Analyzer" +} + +resource_schema "aws_amazonmq_configuration" { + cloudformation_type_name = "AWS::AmazonMQ::Configuration" +} + +resource_schema "aws_amplify_app" { + cloudformation_type_name = "AWS::Amplify::App" +} + +resource_schema "aws_amplify_branch" { + cloudformation_type_name = "AWS::Amplify::Branch" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_amplify_domain" { + cloudformation_type_name = "AWS::Amplify::Domain" +} + +resource_schema "aws_amplifyuibuilder_component" { + cloudformation_type_name = "AWS::AmplifyUIBuilder::Component" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_amplifyuibuilder_form" { + cloudformation_type_name = "AWS::AmplifyUIBuilder::Form" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_amplifyuibuilder_theme" { + cloudformation_type_name = "AWS::AmplifyUIBuilder::Theme" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_account" { + cloudformation_type_name = "AWS::ApiGateway::Account" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_api_key" { + cloudformation_type_name = "AWS::ApiGateway::ApiKey" +} + +resource_schema "aws_apigateway_authorizer" { + cloudformation_type_name = "AWS::ApiGateway::Authorizer" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_base_path_mapping" { + cloudformation_type_name = "AWS::ApiGateway::BasePathMapping" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_base_path_mapping_v2" { + cloudformation_type_name = "AWS::ApiGateway::BasePathMappingV2" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_client_certificate" { + cloudformation_type_name = "AWS::ApiGateway::ClientCertificate" +} + +resource_schema "aws_apigateway_deployment" { + cloudformation_type_name = "AWS::ApiGateway::Deployment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_documentation_part" { + cloudformation_type_name = "AWS::ApiGateway::DocumentationPart" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_documentation_version" { + cloudformation_type_name = "AWS::ApiGateway::DocumentationVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_domain_name" { + cloudformation_type_name = "AWS::ApiGateway::DomainName" +} + +resource_schema "aws_apigateway_domain_name_access_association" { + cloudformation_type_name = "AWS::ApiGateway::DomainNameAccessAssociation" +} + +resource_schema "aws_apigateway_domain_name_v2" { + cloudformation_type_name = "AWS::ApiGateway::DomainNameV2" +} + +resource_schema "aws_apigateway_gateway_response" { + cloudformation_type_name = "AWS::ApiGateway::GatewayResponse" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_method" { + cloudformation_type_name = "AWS::ApiGateway::Method" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_model" { + cloudformation_type_name = "AWS::ApiGateway::Model" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_request_validator" { + cloudformation_type_name = "AWS::ApiGateway::RequestValidator" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_resource" { + cloudformation_type_name = "AWS::ApiGateway::Resource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_rest_api" { + cloudformation_type_name = "AWS::ApiGateway::RestApi" +} + +resource_schema "aws_apigateway_stage" { + cloudformation_type_name = "AWS::ApiGateway::Stage" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_usage_plan" { + cloudformation_type_name = "AWS::ApiGateway::UsagePlan" +} + +resource_schema "aws_apigateway_usage_plan_key" { + cloudformation_type_name = "AWS::ApiGateway::UsagePlanKey" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigateway_vpc_link" { + cloudformation_type_name = "AWS::ApiGateway::VpcLink" +} + +resource_schema "aws_apigatewayv2_api" { + cloudformation_type_name = "AWS::ApiGatewayV2::Api" +} + +resource_schema "aws_apigatewayv2_api_mapping" { + cloudformation_type_name = "AWS::ApiGatewayV2::ApiMapping" +} + +resource_schema "aws_apigatewayv2_authorizer" { + cloudformation_type_name = "AWS::ApiGatewayV2::Authorizer" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigatewayv2_deployment" { + cloudformation_type_name = "AWS::ApiGatewayV2::Deployment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigatewayv2_domain_name" { + cloudformation_type_name = "AWS::ApiGatewayV2::DomainName" +} + +resource_schema "aws_apigatewayv2_integration" { + cloudformation_type_name = "AWS::ApiGatewayV2::Integration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigatewayv2_integration_response" { + cloudformation_type_name = "AWS::ApiGatewayV2::IntegrationResponse" +} + +resource_schema "aws_apigatewayv2_model" { + cloudformation_type_name = "AWS::ApiGatewayV2::Model" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigatewayv2_route" { + cloudformation_type_name = "AWS::ApiGatewayV2::Route" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigatewayv2_route_response" { + cloudformation_type_name = "AWS::ApiGatewayV2::RouteResponse" +} + +resource_schema "aws_apigatewayv2_routing_rule" { + cloudformation_type_name = "AWS::ApiGatewayV2::RoutingRule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apigatewayv2_vpc_link" { + cloudformation_type_name = "AWS::ApiGatewayV2::VpcLink" +} + +resource_schema "aws_appconfig_application" { + cloudformation_type_name = "AWS::AppConfig::Application" +} + +resource_schema "aws_appconfig_configuration_profile" { + cloudformation_type_name = "AWS::AppConfig::ConfigurationProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appconfig_deployment" { + cloudformation_type_name = "AWS::AppConfig::Deployment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appconfig_deployment_strategy" { + cloudformation_type_name = "AWS::AppConfig::DeploymentStrategy" +} + +resource_schema "aws_appconfig_environment" { + cloudformation_type_name = "AWS::AppConfig::Environment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appconfig_extension" { + cloudformation_type_name = "AWS::AppConfig::Extension" +} + +resource_schema "aws_appconfig_extension_association" { + cloudformation_type_name = "AWS::AppConfig::ExtensionAssociation" +} + +resource_schema "aws_appconfig_hosted_configuration_version" { + cloudformation_type_name = "AWS::AppConfig::HostedConfigurationVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appflow_connector" { + cloudformation_type_name = "AWS::AppFlow::Connector" +} + +resource_schema "aws_appflow_connector_profile" { + cloudformation_type_name = "AWS::AppFlow::ConnectorProfile" +} + +resource_schema "aws_appflow_flow" { + cloudformation_type_name = "AWS::AppFlow::Flow" +} + +resource_schema "aws_appintegrations_application" { + cloudformation_type_name = "AWS::AppIntegrations::Application" +} + +resource_schema "aws_appintegrations_data_integration" { + cloudformation_type_name = "AWS::AppIntegrations::DataIntegration" +} + +resource_schema "aws_appintegrations_event_integration" { + cloudformation_type_name = "AWS::AppIntegrations::EventIntegration" +} + +resource_schema "aws_apprunner_auto_scaling_configuration" { + cloudformation_type_name = "AWS::AppRunner::AutoScalingConfiguration" +} + +resource_schema "aws_apprunner_observability_configuration" { + cloudformation_type_name = "AWS::AppRunner::ObservabilityConfiguration" +} + +resource_schema "aws_apprunner_service" { + cloudformation_type_name = "AWS::AppRunner::Service" +} + +resource_schema "aws_apprunner_vpc_connector" { + cloudformation_type_name = "AWS::AppRunner::VpcConnector" +} + +resource_schema "aws_apprunner_vpc_ingress_connection" { + cloudformation_type_name = "AWS::AppRunner::VpcIngressConnection" +} + +resource_schema "aws_appstream_app_block" { + cloudformation_type_name = "AWS::AppStream::AppBlock" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appstream_app_block_builder" { + cloudformation_type_name = "AWS::AppStream::AppBlockBuilder" +} + +resource_schema "aws_appstream_application" { + cloudformation_type_name = "AWS::AppStream::Application" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appstream_application_entitlement_association" { + cloudformation_type_name = "AWS::AppStream::ApplicationEntitlementAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appstream_application_fleet_association" { + cloudformation_type_name = "AWS::AppStream::ApplicationFleetAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appstream_directory_config" { + cloudformation_type_name = "AWS::AppStream::DirectoryConfig" +} + +resource_schema "aws_appstream_entitlement" { + cloudformation_type_name = "AWS::AppStream::Entitlement" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appstream_image_builder" { + cloudformation_type_name = "AWS::AppStream::ImageBuilder" +} + +resource_schema "aws_appsync_api" { + cloudformation_type_name = "AWS::AppSync::Api" +} + +resource_schema "aws_appsync_channel_namespace" { + cloudformation_type_name = "AWS::AppSync::ChannelNamespace" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appsync_data_source" { + cloudformation_type_name = "AWS::AppSync::DataSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appsync_domain_name" { + cloudformation_type_name = "AWS::AppSync::DomainName" +} + +resource_schema "aws_appsync_domain_name_api_association" { + cloudformation_type_name = "AWS::AppSync::DomainNameApiAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appsync_function_configuration" { + cloudformation_type_name = "AWS::AppSync::FunctionConfiguration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appsync_graph_ql_api" { + cloudformation_type_name = "AWS::AppSync::GraphQLApi" +} + +resource_schema "aws_appsync_resolver" { + cloudformation_type_name = "AWS::AppSync::Resolver" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_appsync_source_api_association" { + cloudformation_type_name = "AWS::AppSync::SourceApiAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_apptest_test_case" { + cloudformation_type_name = "AWS::AppTest::TestCase" +} + +resource_schema "aws_applicationautoscaling_scalable_target" { + cloudformation_type_name = "AWS::ApplicationAutoScaling::ScalableTarget" +} + +resource_schema "aws_applicationautoscaling_scaling_policy" { + cloudformation_type_name = "AWS::ApplicationAutoScaling::ScalingPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_applicationinsights_application" { + cloudformation_type_name = "AWS::ApplicationInsights::Application" +} + +resource_schema "aws_applicationsignals_discovery" { + cloudformation_type_name = "AWS::ApplicationSignals::Discovery" +} + +resource_schema "aws_applicationsignals_service_level_objective" { + cloudformation_type_name = "AWS::ApplicationSignals::ServiceLevelObjective" +} + +resource_schema "aws_athena_capacity_reservation" { + cloudformation_type_name = "AWS::Athena::CapacityReservation" +} + +resource_schema "aws_athena_data_catalog" { + cloudformation_type_name = "AWS::Athena::DataCatalog" +} + +resource_schema "aws_athena_named_query" { + cloudformation_type_name = "AWS::Athena::NamedQuery" +} + +resource_schema "aws_athena_prepared_statement" { + cloudformation_type_name = "AWS::Athena::PreparedStatement" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_athena_work_group" { + cloudformation_type_name = "AWS::Athena::WorkGroup" +} + +resource_schema "aws_auditmanager_assessment" { + cloudformation_type_name = "AWS::AuditManager::Assessment" +} + +resource_schema "aws_autoscaling_auto_scaling_group" { + cloudformation_type_name = "AWS::AutoScaling::AutoScalingGroup" +} + +resource_schema "aws_autoscaling_launch_configuration" { + cloudformation_type_name = "AWS::AutoScaling::LaunchConfiguration" +} + +resource_schema "aws_autoscaling_lifecycle_hook" { + cloudformation_type_name = "AWS::AutoScaling::LifecycleHook" +} + +resource_schema "aws_autoscaling_scaling_policy" { + cloudformation_type_name = "AWS::AutoScaling::ScalingPolicy" +} + +resource_schema "aws_autoscaling_scheduled_action" { + cloudformation_type_name = "AWS::AutoScaling::ScheduledAction" +} + +resource_schema "aws_autoscaling_warm_pool" { + cloudformation_type_name = "AWS::AutoScaling::WarmPool" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_b2bi_capability" { + cloudformation_type_name = "AWS::B2BI::Capability" +} + +resource_schema "aws_b2bi_partnership" { + cloudformation_type_name = "AWS::B2BI::Partnership" +} + +resource_schema "aws_b2bi_profile" { + cloudformation_type_name = "AWS::B2BI::Profile" +} + +resource_schema "aws_b2bi_transformer" { + cloudformation_type_name = "AWS::B2BI::Transformer" +} + +resource_schema "aws_bcmdataexports_export" { + cloudformation_type_name = "AWS::BCMDataExports::Export" +} + +resource_schema "aws_backup_backup_plan" { + cloudformation_type_name = "AWS::Backup::BackupPlan" +} + +resource_schema "aws_backup_backup_selection" { + cloudformation_type_name = "AWS::Backup::BackupSelection" +} + +resource_schema "aws_backup_backup_vault" { + cloudformation_type_name = "AWS::Backup::BackupVault" +} + +resource_schema "aws_backup_framework" { + cloudformation_type_name = "AWS::Backup::Framework" +} + +resource_schema "aws_backup_logically_air_gapped_backup_vault" { + cloudformation_type_name = "AWS::Backup::LogicallyAirGappedBackupVault" +} + +resource_schema "aws_backup_report_plan" { + cloudformation_type_name = "AWS::Backup::ReportPlan" +} + +resource_schema "aws_backup_restore_testing_plan" { + cloudformation_type_name = "AWS::Backup::RestoreTestingPlan" +} + +resource_schema "aws_backup_restore_testing_selection" { + cloudformation_type_name = "AWS::Backup::RestoreTestingSelection" +} + +resource_schema "aws_backupgateway_hypervisor" { + cloudformation_type_name = "AWS::BackupGateway::Hypervisor" +} + +resource_schema "aws_batch_compute_environment" { + cloudformation_type_name = "AWS::Batch::ComputeEnvironment" +} + +resource_schema "aws_batch_consumable_resource" { + cloudformation_type_name = "AWS::Batch::ConsumableResource" +} + +resource_schema "aws_batch_job_definition" { + cloudformation_type_name = "AWS::Batch::JobDefinition" +} + +resource_schema "aws_batch_job_queue" { + cloudformation_type_name = "AWS::Batch::JobQueue" +} + +resource_schema "aws_batch_scheduling_policy" { + cloudformation_type_name = "AWS::Batch::SchedulingPolicy" +} + +resource_schema "aws_bedrock_agent" { + cloudformation_type_name = "AWS::Bedrock::Agent" +} + +resource_schema "aws_bedrock_agent_alias" { + cloudformation_type_name = "AWS::Bedrock::AgentAlias" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_bedrock_application_inference_profile" { + cloudformation_type_name = "AWS::Bedrock::ApplicationInferenceProfile" +} + +resource_schema "aws_bedrock_blueprint" { + cloudformation_type_name = "AWS::Bedrock::Blueprint" +} + +resource_schema "aws_bedrock_data_automation_project" { + cloudformation_type_name = "AWS::Bedrock::DataAutomationProject" +} + +resource_schema "aws_bedrock_data_source" { + cloudformation_type_name = "AWS::Bedrock::DataSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_bedrock_flow" { + cloudformation_type_name = "AWS::Bedrock::Flow" +} + +resource_schema "aws_bedrock_flow_alias" { + cloudformation_type_name = "AWS::Bedrock::FlowAlias" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_bedrock_flow_version" { + cloudformation_type_name = "AWS::Bedrock::FlowVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_bedrock_guardrail" { + cloudformation_type_name = "AWS::Bedrock::Guardrail" +} + +resource_schema "aws_bedrock_guardrail_version" { + cloudformation_type_name = "AWS::Bedrock::GuardrailVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_bedrock_intelligent_prompt_router" { + cloudformation_type_name = "AWS::Bedrock::IntelligentPromptRouter" +} + +resource_schema "aws_bedrock_knowledge_base" { + cloudformation_type_name = "AWS::Bedrock::KnowledgeBase" +} + +resource_schema "aws_bedrock_prompt" { + cloudformation_type_name = "AWS::Bedrock::Prompt" +} + +resource_schema "aws_bedrock_prompt_version" { + cloudformation_type_name = "AWS::Bedrock::PromptVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_billingconductor_billing_group" { + cloudformation_type_name = "AWS::BillingConductor::BillingGroup" +} + +resource_schema "aws_billingconductor_custom_line_item" { + cloudformation_type_name = "AWS::BillingConductor::CustomLineItem" +} + +resource_schema "aws_billingconductor_pricing_plan" { + cloudformation_type_name = "AWS::BillingConductor::PricingPlan" +} + +resource_schema "aws_billingconductor_pricing_rule" { + cloudformation_type_name = "AWS::BillingConductor::PricingRule" +} + +resource_schema "aws_budgets_budgets_action" { + cloudformation_type_name = "AWS::Budgets::BudgetsAction" +} + +resource_schema "aws_ce_anomaly_monitor" { + cloudformation_type_name = "AWS::CE::AnomalyMonitor" +} + +resource_schema "aws_ce_anomaly_subscription" { + cloudformation_type_name = "AWS::CE::AnomalySubscription" +} + +resource_schema "aws_ce_cost_category" { + cloudformation_type_name = "AWS::CE::CostCategory" +} + +resource_schema "aws_cur_report_definition" { + cloudformation_type_name = "AWS::CUR::ReportDefinition" +} + +resource_schema "aws_cassandra_keyspace" { + cloudformation_type_name = "AWS::Cassandra::Keyspace" +} + +resource_schema "aws_cassandra_table" { + cloudformation_type_name = "AWS::Cassandra::Table" +} + +resource_schema "aws_cassandra_type" { + cloudformation_type_name = "AWS::Cassandra::Type" +} + +resource_schema "aws_certificatemanager_account" { + cloudformation_type_name = "AWS::CertificateManager::Account" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_chatbot_custom_action" { + cloudformation_type_name = "AWS::Chatbot::CustomAction" +} + +resource_schema "aws_chatbot_microsoft_teams_channel_configuration" { + cloudformation_type_name = "AWS::Chatbot::MicrosoftTeamsChannelConfiguration" +} + +resource_schema "aws_chatbot_slack_channel_configuration" { + cloudformation_type_name = "AWS::Chatbot::SlackChannelConfiguration" +} + +resource_schema "aws_cleanrooms_analysis_template" { + cloudformation_type_name = "AWS::CleanRooms::AnalysisTemplate" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cleanrooms_collaboration" { + cloudformation_type_name = "AWS::CleanRooms::Collaboration" +} + +resource_schema "aws_cleanrooms_configured_table" { + cloudformation_type_name = "AWS::CleanRooms::ConfiguredTable" +} + +resource_schema "aws_cleanrooms_configured_table_association" { + cloudformation_type_name = "AWS::CleanRooms::ConfiguredTableAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cleanrooms_id_mapping_table" { + cloudformation_type_name = "AWS::CleanRooms::IdMappingTable" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cleanrooms_id_namespace_association" { + cloudformation_type_name = "AWS::CleanRooms::IdNamespaceAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cleanrooms_membership" { + cloudformation_type_name = "AWS::CleanRooms::Membership" +} + +resource_schema "aws_cleanrooms_privacy_budget_template" { + cloudformation_type_name = "AWS::CleanRooms::PrivacyBudgetTemplate" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cleanroomsml_training_dataset" { + cloudformation_type_name = "AWS::CleanRoomsML::TrainingDataset" +} + +resource_schema "aws_cloudformation_guard_hook" { + cloudformation_type_name = "AWS::CloudFormation::GuardHook" +} + +resource_schema "aws_cloudformation_hook_default_version" { + cloudformation_type_name = "AWS::CloudFormation::HookDefaultVersion" +} + +resource_schema "aws_cloudformation_hook_type_config" { + cloudformation_type_name = "AWS::CloudFormation::HookTypeConfig" +} + +resource_schema "aws_cloudformation_hook_version" { + cloudformation_type_name = "AWS::CloudFormation::HookVersion" +} + +resource_schema "aws_cloudformation_lambda_hook" { + cloudformation_type_name = "AWS::CloudFormation::LambdaHook" +} + +resource_schema "aws_cloudformation_module_default_version" { + cloudformation_type_name = "AWS::CloudFormation::ModuleDefaultVersion" +} + +resource_schema "aws_cloudformation_module_version" { + cloudformation_type_name = "AWS::CloudFormation::ModuleVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cloudformation_public_type_version" { + cloudformation_type_name = "AWS::CloudFormation::PublicTypeVersion" +} + +resource_schema "aws_cloudformation_publisher" { + cloudformation_type_name = "AWS::CloudFormation::Publisher" +} + +resource_schema "aws_cloudformation_resource_default_version" { + cloudformation_type_name = "AWS::CloudFormation::ResourceDefaultVersion" +} + +resource_schema "aws_cloudformation_resource_version" { + cloudformation_type_name = "AWS::CloudFormation::ResourceVersion" +} + +resource_schema "aws_cloudformation_stack" { + cloudformation_type_name = "AWS::CloudFormation::Stack" +} + +resource_schema "aws_cloudformation_stack_set" { + cloudformation_type_name = "AWS::CloudFormation::StackSet" +} + +resource_schema "aws_cloudformation_type_activation" { + cloudformation_type_name = "AWS::CloudFormation::TypeActivation" +} + +resource_schema "aws_cloudfront_anycast_ip_list" { + cloudformation_type_name = "AWS::CloudFront::AnycastIpList" +} + +resource_schema "aws_cloudfront_cache_policy" { + cloudformation_type_name = "AWS::CloudFront::CachePolicy" +} + +resource_schema "aws_cloudfront_cloudfront_origin_access_identity" { + cloudformation_type_name = "AWS::CloudFront::CloudFrontOriginAccessIdentity" +} + +resource_schema "aws_cloudfront_connection_group" { + cloudformation_type_name = "AWS::CloudFront::ConnectionGroup" +} + +resource_schema "aws_cloudfront_continuous_deployment_policy" { + cloudformation_type_name = "AWS::CloudFront::ContinuousDeploymentPolicy" +} + +resource_schema "aws_cloudfront_distribution" { + cloudformation_type_name = "AWS::CloudFront::Distribution" +} + +resource_schema "aws_cloudfront_distribution_tenant" { + cloudformation_type_name = "AWS::CloudFront::DistributionTenant" +} + +resource_schema "aws_cloudfront_function" { + cloudformation_type_name = "AWS::CloudFront::Function" +} + +resource_schema "aws_cloudfront_key_group" { + cloudformation_type_name = "AWS::CloudFront::KeyGroup" +} + +resource_schema "aws_cloudfront_key_value_store" { + cloudformation_type_name = "AWS::CloudFront::KeyValueStore" +} + +resource_schema "aws_cloudfront_monitoring_subscription" { + cloudformation_type_name = "AWS::CloudFront::MonitoringSubscription" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cloudfront_origin_access_control" { + cloudformation_type_name = "AWS::CloudFront::OriginAccessControl" +} + +resource_schema "aws_cloudfront_origin_request_policy" { + cloudformation_type_name = "AWS::CloudFront::OriginRequestPolicy" +} + +resource_schema "aws_cloudfront_public_key" { + cloudformation_type_name = "AWS::CloudFront::PublicKey" +} + +resource_schema "aws_cloudfront_realtime_log_config" { + cloudformation_type_name = "AWS::CloudFront::RealtimeLogConfig" +} + +resource_schema "aws_cloudfront_response_headers_policy" { + cloudformation_type_name = "AWS::CloudFront::ResponseHeadersPolicy" +} + +resource_schema "aws_cloudfront_vpc_origin" { + cloudformation_type_name = "AWS::CloudFront::VpcOrigin" +} + +resource_schema "aws_cloudtrail_channel" { + cloudformation_type_name = "AWS::CloudTrail::Channel" +} + +resource_schema "aws_cloudtrail_dashboard" { + cloudformation_type_name = "AWS::CloudTrail::Dashboard" +} + +resource_schema "aws_cloudtrail_event_data_store" { + cloudformation_type_name = "AWS::CloudTrail::EventDataStore" +} + +resource_schema "aws_cloudtrail_resource_policy" { + cloudformation_type_name = "AWS::CloudTrail::ResourcePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cloudtrail_trail" { + cloudformation_type_name = "AWS::CloudTrail::Trail" +} + +resource_schema "aws_cloudwatch_alarm" { + cloudformation_type_name = "AWS::CloudWatch::Alarm" +} + +resource_schema "aws_cloudwatch_composite_alarm" { + cloudformation_type_name = "AWS::CloudWatch::CompositeAlarm" +} + +resource_schema "aws_cloudwatch_dashboard" { + cloudformation_type_name = "AWS::CloudWatch::Dashboard" +} + +resource_schema "aws_cloudwatch_metric_stream" { + cloudformation_type_name = "AWS::CloudWatch::MetricStream" +} + +resource_schema "aws_codeartifact_domain" { + cloudformation_type_name = "AWS::CodeArtifact::Domain" +} + +resource_schema "aws_codeartifact_package_group" { + cloudformation_type_name = "AWS::CodeArtifact::PackageGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_codeartifact_repository" { + cloudformation_type_name = "AWS::CodeArtifact::Repository" +} + +resource_schema "aws_codebuild_fleet" { + cloudformation_type_name = "AWS::CodeBuild::Fleet" +} + +resource_schema "aws_codeconnections_connection" { + cloudformation_type_name = "AWS::CodeConnections::Connection" +} + +resource_schema "aws_codedeploy_application" { + cloudformation_type_name = "AWS::CodeDeploy::Application" +} + +resource_schema "aws_codedeploy_deployment_config" { + cloudformation_type_name = "AWS::CodeDeploy::DeploymentConfig" +} + +resource_schema "aws_codeguruprofiler_profiling_group" { + cloudformation_type_name = "AWS::CodeGuruProfiler::ProfilingGroup" +} + +resource_schema "aws_codegurureviewer_repository_association" { + cloudformation_type_name = "AWS::CodeGuruReviewer::RepositoryAssociation" +} + +resource_schema "aws_codepipeline_custom_action_type" { + cloudformation_type_name = "AWS::CodePipeline::CustomActionType" +} + +resource_schema "aws_codepipeline_pipeline" { + cloudformation_type_name = "AWS::CodePipeline::Pipeline" +} + +resource_schema "aws_codestarconnections_connection" { + cloudformation_type_name = "AWS::CodeStarConnections::Connection" +} + +resource_schema "aws_codestarconnections_repository_link" { + cloudformation_type_name = "AWS::CodeStarConnections::RepositoryLink" +} + +resource_schema "aws_codestarconnections_sync_configuration" { + cloudformation_type_name = "AWS::CodeStarConnections::SyncConfiguration" +} + +resource_schema "aws_codestarnotifications_notification_rule" { + cloudformation_type_name = "AWS::CodeStarNotifications::NotificationRule" +} + +resource_schema "aws_cognito_identity_pool" { + cloudformation_type_name = "AWS::Cognito::IdentityPool" +} + +resource_schema "aws_cognito_identity_pool_principal_tag" { + cloudformation_type_name = "AWS::Cognito::IdentityPoolPrincipalTag" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_identity_pool_role_attachment" { + cloudformation_type_name = "AWS::Cognito::IdentityPoolRoleAttachment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_log_delivery_configuration" { + cloudformation_type_name = "AWS::Cognito::LogDeliveryConfiguration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_managed_login_branding" { + cloudformation_type_name = "AWS::Cognito::ManagedLoginBranding" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool" { + cloudformation_type_name = "AWS::Cognito::UserPool" +} + +resource_schema "aws_cognito_user_pool_client" { + cloudformation_type_name = "AWS::Cognito::UserPoolClient" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_domain" { + cloudformation_type_name = "AWS::Cognito::UserPoolDomain" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_group" { + cloudformation_type_name = "AWS::Cognito::UserPoolGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_identity_provider" { + cloudformation_type_name = "AWS::Cognito::UserPoolIdentityProvider" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_resource_server" { + cloudformation_type_name = "AWS::Cognito::UserPoolResourceServer" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_risk_configuration_attachment" { + cloudformation_type_name = "AWS::Cognito::UserPoolRiskConfigurationAttachment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_ui_customization_attachment" { + cloudformation_type_name = "AWS::Cognito::UserPoolUICustomizationAttachment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_user" { + cloudformation_type_name = "AWS::Cognito::UserPoolUser" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_cognito_user_pool_user_to_group_attachment" { + cloudformation_type_name = "AWS::Cognito::UserPoolUserToGroupAttachment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_comprehend_document_classifier" { + cloudformation_type_name = "AWS::Comprehend::DocumentClassifier" +} + +resource_schema "aws_comprehend_flywheel" { + cloudformation_type_name = "AWS::Comprehend::Flywheel" +} + +resource_schema "aws_config_aggregation_authorization" { + cloudformation_type_name = "AWS::Config::AggregationAuthorization" +} + +resource_schema "aws_config_config_rule" { + cloudformation_type_name = "AWS::Config::ConfigRule" +} + +resource_schema "aws_config_configuration_aggregator" { + cloudformation_type_name = "AWS::Config::ConfigurationAggregator" +} + +resource_schema "aws_config_conformance_pack" { + cloudformation_type_name = "AWS::Config::ConformancePack" +} + +resource_schema "aws_config_organization_conformance_pack" { + cloudformation_type_name = "AWS::Config::OrganizationConformancePack" +} + +resource_schema "aws_config_stored_query" { + cloudformation_type_name = "AWS::Config::StoredQuery" +} + +resource_schema "aws_connect_agent_status" { + cloudformation_type_name = "AWS::Connect::AgentStatus" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_approved_origin" { + cloudformation_type_name = "AWS::Connect::ApprovedOrigin" +} + +resource_schema "aws_connect_contact_flow" { + cloudformation_type_name = "AWS::Connect::ContactFlow" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_contact_flow_module" { + cloudformation_type_name = "AWS::Connect::ContactFlowModule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_contact_flow_version" { + cloudformation_type_name = "AWS::Connect::ContactFlowVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_email_address" { + cloudformation_type_name = "AWS::Connect::EmailAddress" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_evaluation_form" { + cloudformation_type_name = "AWS::Connect::EvaluationForm" +} + +resource_schema "aws_connect_hours_of_operation" { + cloudformation_type_name = "AWS::Connect::HoursOfOperation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_instance" { + cloudformation_type_name = "AWS::Connect::Instance" +} + +resource_schema "aws_connect_instance_storage_config" { + cloudformation_type_name = "AWS::Connect::InstanceStorageConfig" +} + +resource_schema "aws_connect_integration_association" { + cloudformation_type_name = "AWS::Connect::IntegrationAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_phone_number" { + cloudformation_type_name = "AWS::Connect::PhoneNumber" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_predefined_attribute" { + cloudformation_type_name = "AWS::Connect::PredefinedAttribute" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_prompt" { + cloudformation_type_name = "AWS::Connect::Prompt" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_queue" { + cloudformation_type_name = "AWS::Connect::Queue" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_quick_connect" { + cloudformation_type_name = "AWS::Connect::QuickConnect" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_routing_profile" { + cloudformation_type_name = "AWS::Connect::RoutingProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_rule" { + cloudformation_type_name = "AWS::Connect::Rule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_security_key" { + cloudformation_type_name = "AWS::Connect::SecurityKey" +} + +resource_schema "aws_connect_security_profile" { + cloudformation_type_name = "AWS::Connect::SecurityProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_task_template" { + cloudformation_type_name = "AWS::Connect::TaskTemplate" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_traffic_distribution_group" { + cloudformation_type_name = "AWS::Connect::TrafficDistributionGroup" +} + +resource_schema "aws_connect_user" { + cloudformation_type_name = "AWS::Connect::User" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_user_hierarchy_group" { + cloudformation_type_name = "AWS::Connect::UserHierarchyGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_user_hierarchy_structure" { + cloudformation_type_name = "AWS::Connect::UserHierarchyStructure" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_view" { + cloudformation_type_name = "AWS::Connect::View" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connect_view_version" { + cloudformation_type_name = "AWS::Connect::ViewVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_connectcampaigns_campaign" { + cloudformation_type_name = "AWS::ConnectCampaigns::Campaign" +} + +resource_schema "aws_connectcampaignsv2_campaign" { + cloudformation_type_name = "AWS::ConnectCampaignsV2::Campaign" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_controltower_enabled_baseline" { + cloudformation_type_name = "AWS::ControlTower::EnabledBaseline" +} + +resource_schema "aws_controltower_enabled_control" { + cloudformation_type_name = "AWS::ControlTower::EnabledControl" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_controltower_landing_zone" { + cloudformation_type_name = "AWS::ControlTower::LandingZone" +} + +resource_schema "aws_customerprofiles_calculated_attribute_definition" { + cloudformation_type_name = "AWS::CustomerProfiles::CalculatedAttributeDefinition" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_customerprofiles_domain" { + cloudformation_type_name = "AWS::CustomerProfiles::Domain" +} + +resource_schema "aws_customerprofiles_event_stream" { + cloudformation_type_name = "AWS::CustomerProfiles::EventStream" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_customerprofiles_event_trigger" { + cloudformation_type_name = "AWS::CustomerProfiles::EventTrigger" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_customerprofiles_integration" { + cloudformation_type_name = "AWS::CustomerProfiles::Integration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_customerprofiles_object_type" { + cloudformation_type_name = "AWS::CustomerProfiles::ObjectType" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_customerprofiles_segment_definition" { + cloudformation_type_name = "AWS::CustomerProfiles::SegmentDefinition" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_dms_data_migration" { + cloudformation_type_name = "AWS::DMS::DataMigration" +} + +resource_schema "aws_dms_data_provider" { + cloudformation_type_name = "AWS::DMS::DataProvider" +} + +resource_schema "aws_dms_instance_profile" { + cloudformation_type_name = "AWS::DMS::InstanceProfile" +} + +resource_schema "aws_dms_migration_project" { + cloudformation_type_name = "AWS::DMS::MigrationProject" +} + +resource_schema "aws_dms_replication_config" { + cloudformation_type_name = "AWS::DMS::ReplicationConfig" +} + +resource_schema "aws_dsql_cluster" { + cloudformation_type_name = "AWS::DSQL::Cluster" +} + +resource_schema "aws_databrew_dataset" { + cloudformation_type_name = "AWS::DataBrew::Dataset" +} + +resource_schema "aws_databrew_job" { + cloudformation_type_name = "AWS::DataBrew::Job" +} + +resource_schema "aws_databrew_project" { + cloudformation_type_name = "AWS::DataBrew::Project" +} + +resource_schema "aws_databrew_recipe" { + cloudformation_type_name = "AWS::DataBrew::Recipe" +} + +resource_schema "aws_databrew_ruleset" { + cloudformation_type_name = "AWS::DataBrew::Ruleset" +} + +resource_schema "aws_databrew_schedule" { + cloudformation_type_name = "AWS::DataBrew::Schedule" +} + +resource_schema "aws_datapipeline_pipeline" { + cloudformation_type_name = "AWS::DataPipeline::Pipeline" +} + +resource_schema "aws_datasync_agent" { + cloudformation_type_name = "AWS::DataSync::Agent" +} + +resource_schema "aws_datasync_location_azure_blob" { + cloudformation_type_name = "AWS::DataSync::LocationAzureBlob" +} + +resource_schema "aws_datasync_location_efs" { + cloudformation_type_name = "AWS::DataSync::LocationEFS" +} + +resource_schema "aws_datasync_location_fsx_lustre" { + cloudformation_type_name = "AWS::DataSync::LocationFSxLustre" +} + +resource_schema "aws_datasync_location_fsx_ontap" { + cloudformation_type_name = "AWS::DataSync::LocationFSxONTAP" +} + +resource_schema "aws_datasync_location_fsx_open_zfs" { + cloudformation_type_name = "AWS::DataSync::LocationFSxOpenZFS" +} + +resource_schema "aws_datasync_location_fsx_windows" { + cloudformation_type_name = "AWS::DataSync::LocationFSxWindows" +} + +resource_schema "aws_datasync_location_hdfs" { + cloudformation_type_name = "AWS::DataSync::LocationHDFS" +} + +resource_schema "aws_datasync_location_nfs" { + cloudformation_type_name = "AWS::DataSync::LocationNFS" +} + +resource_schema "aws_datasync_location_object_storage" { + cloudformation_type_name = "AWS::DataSync::LocationObjectStorage" +} + +resource_schema "aws_datasync_location_s3" { + cloudformation_type_name = "AWS::DataSync::LocationS3" +} + +resource_schema "aws_datasync_location_smb" { + cloudformation_type_name = "AWS::DataSync::LocationSMB" +} + +resource_schema "aws_datasync_task" { + cloudformation_type_name = "AWS::DataSync::Task" +} + +resource_schema "aws_datazone_connection" { + cloudformation_type_name = "AWS::DataZone::Connection" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_data_source" { + cloudformation_type_name = "AWS::DataZone::DataSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_domain" { + cloudformation_type_name = "AWS::DataZone::Domain" +} + +resource_schema "aws_datazone_domain_unit" { + cloudformation_type_name = "AWS::DataZone::DomainUnit" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_environment" { + cloudformation_type_name = "AWS::DataZone::Environment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_environment_actions" { + cloudformation_type_name = "AWS::DataZone::EnvironmentActions" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_environment_blueprint_configuration" { + cloudformation_type_name = "AWS::DataZone::EnvironmentBlueprintConfiguration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_environment_profile" { + cloudformation_type_name = "AWS::DataZone::EnvironmentProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_group_profile" { + cloudformation_type_name = "AWS::DataZone::GroupProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_owner" { + cloudformation_type_name = "AWS::DataZone::Owner" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_project" { + cloudformation_type_name = "AWS::DataZone::Project" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_project_membership" { + cloudformation_type_name = "AWS::DataZone::ProjectMembership" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_project_profile" { + cloudformation_type_name = "AWS::DataZone::ProjectProfile" +} + +resource_schema "aws_datazone_subscription_target" { + cloudformation_type_name = "AWS::DataZone::SubscriptionTarget" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_datazone_user_profile" { + cloudformation_type_name = "AWS::DataZone::UserProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_farm" { + cloudformation_type_name = "AWS::Deadline::Farm" +} + +resource_schema "aws_deadline_fleet" { + cloudformation_type_name = "AWS::Deadline::Fleet" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_license_endpoint" { + cloudformation_type_name = "AWS::Deadline::LicenseEndpoint" +} + +resource_schema "aws_deadline_limit" { + cloudformation_type_name = "AWS::Deadline::Limit" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_metered_product" { + cloudformation_type_name = "AWS::Deadline::MeteredProduct" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_monitor" { + cloudformation_type_name = "AWS::Deadline::Monitor" +} + +resource_schema "aws_deadline_queue" { + cloudformation_type_name = "AWS::Deadline::Queue" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_queue_environment" { + cloudformation_type_name = "AWS::Deadline::QueueEnvironment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_queue_fleet_association" { + cloudformation_type_name = "AWS::Deadline::QueueFleetAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_queue_limit_association" { + cloudformation_type_name = "AWS::Deadline::QueueLimitAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_deadline_storage_profile" { + cloudformation_type_name = "AWS::Deadline::StorageProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_detective_graph" { + cloudformation_type_name = "AWS::Detective::Graph" +} + +resource_schema "aws_detective_member_invitation" { + cloudformation_type_name = "AWS::Detective::MemberInvitation" +} + +resource_schema "aws_detective_organization_admin" { + cloudformation_type_name = "AWS::Detective::OrganizationAdmin" +} + +resource_schema "aws_devopsguru_log_anomaly_detection_integration" { + cloudformation_type_name = "AWS::DevOpsGuru::LogAnomalyDetectionIntegration" +} + +resource_schema "aws_devopsguru_notification_channel" { + cloudformation_type_name = "AWS::DevOpsGuru::NotificationChannel" +} + +resource_schema "aws_devopsguru_resource_collection" { + cloudformation_type_name = "AWS::DevOpsGuru::ResourceCollection" +} + +resource_schema "aws_directoryservice_simple_ad" { + cloudformation_type_name = "AWS::DirectoryService::SimpleAD" +} + +resource_schema "aws_docdbelastic_cluster" { + cloudformation_type_name = "AWS::DocDBElastic::Cluster" +} + +resource_schema "aws_dynamodb_global_table" { + cloudformation_type_name = "AWS::DynamoDB::GlobalTable" +} + +resource_schema "aws_dynamodb_table" { + cloudformation_type_name = "AWS::DynamoDB::Table" +} + +resource_schema "aws_ec2_capacity_reservation" { + cloudformation_type_name = "AWS::EC2::CapacityReservation" +} + +resource_schema "aws_ec2_capacity_reservation_fleet" { + cloudformation_type_name = "AWS::EC2::CapacityReservationFleet" +} + +resource_schema "aws_ec2_carrier_gateway" { + cloudformation_type_name = "AWS::EC2::CarrierGateway" +} + +resource_schema "aws_ec2_customer_gateway" { + cloudformation_type_name = "AWS::EC2::CustomerGateway" +} + +resource_schema "aws_ec2_dhcp_options" { + cloudformation_type_name = "AWS::EC2::DHCPOptions" +} + +resource_schema "aws_ec2_ec2_fleet" { + cloudformation_type_name = "AWS::EC2::EC2Fleet" +} + +resource_schema "aws_ec2_eip" { + cloudformation_type_name = "AWS::EC2::EIP" +} + +resource_schema "aws_ec2_eip_association" { + cloudformation_type_name = "AWS::EC2::EIPAssociation" +} + +resource_schema "aws_ec2_egress_only_internet_gateway" { + cloudformation_type_name = "AWS::EC2::EgressOnlyInternetGateway" +} + +resource_schema "aws_ec2_enclave_certificate_iam_role_association" { + cloudformation_type_name = "AWS::EC2::EnclaveCertificateIamRoleAssociation" +} + +resource_schema "aws_ec2_flow_log" { + cloudformation_type_name = "AWS::EC2::FlowLog" +} + +resource_schema "aws_ec2_gateway_route_table_association" { + cloudformation_type_name = "AWS::EC2::GatewayRouteTableAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_host" { + cloudformation_type_name = "AWS::EC2::Host" +} + +resource_schema "aws_ec2_ipam" { + cloudformation_type_name = "AWS::EC2::IPAM" +} + +resource_schema "aws_ec2_ipam_allocation" { + cloudformation_type_name = "AWS::EC2::IPAMAllocation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_ipam_pool" { + cloudformation_type_name = "AWS::EC2::IPAMPool" +} + +resource_schema "aws_ec2_ipam_pool_cidr" { + cloudformation_type_name = "AWS::EC2::IPAMPoolCidr" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_ipam_resource_discovery" { + cloudformation_type_name = "AWS::EC2::IPAMResourceDiscovery" +} + +resource_schema "aws_ec2_ipam_resource_discovery_association" { + cloudformation_type_name = "AWS::EC2::IPAMResourceDiscoveryAssociation" +} + +resource_schema "aws_ec2_ipam_scope" { + cloudformation_type_name = "AWS::EC2::IPAMScope" +} + +resource_schema "aws_ec2_instance" { + cloudformation_type_name = "AWS::EC2::Instance" +} + +resource_schema "aws_ec2_instance_connect_endpoint" { + cloudformation_type_name = "AWS::EC2::InstanceConnectEndpoint" +} + +resource_schema "aws_ec2_internet_gateway" { + cloudformation_type_name = "AWS::EC2::InternetGateway" +} + +resource_schema "aws_ec2_key_pair" { + cloudformation_type_name = "AWS::EC2::KeyPair" +} + +resource_schema "aws_ec2_launch_template" { + cloudformation_type_name = "AWS::EC2::LaunchTemplate" +} + +resource_schema "aws_ec2_local_gateway_route" { + cloudformation_type_name = "AWS::EC2::LocalGatewayRoute" +} + +resource_schema "aws_ec2_local_gateway_route_table" { + cloudformation_type_name = "AWS::EC2::LocalGatewayRouteTable" +} + +resource_schema "aws_ec2_local_gateway_route_table_vpc_association" { + cloudformation_type_name = "AWS::EC2::LocalGatewayRouteTableVPCAssociation" +} + +resource_schema "aws_ec2_local_gateway_route_table_virtual_interface_group_association" { + cloudformation_type_name = "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation" +} + +resource_schema "aws_ec2_nat_gateway" { + cloudformation_type_name = "AWS::EC2::NatGateway" +} + +resource_schema "aws_ec2_network_acl" { + cloudformation_type_name = "AWS::EC2::NetworkAcl" +} + +resource_schema "aws_ec2_network_insights_access_scope" { + cloudformation_type_name = "AWS::EC2::NetworkInsightsAccessScope" +} + +resource_schema "aws_ec2_network_insights_access_scope_analysis" { + cloudformation_type_name = "AWS::EC2::NetworkInsightsAccessScopeAnalysis" +} + +resource_schema "aws_ec2_network_insights_analysis" { + cloudformation_type_name = "AWS::EC2::NetworkInsightsAnalysis" +} + +resource_schema "aws_ec2_network_insights_path" { + cloudformation_type_name = "AWS::EC2::NetworkInsightsPath" +} + +resource_schema "aws_ec2_network_interface" { + cloudformation_type_name = "AWS::EC2::NetworkInterface" +} + +resource_schema "aws_ec2_network_interface_attachment" { + cloudformation_type_name = "AWS::EC2::NetworkInterfaceAttachment" +} + +resource_schema "aws_ec2_network_performance_metric_subscription" { + cloudformation_type_name = "AWS::EC2::NetworkPerformanceMetricSubscription" +} + +resource_schema "aws_ec2_placement_group" { + cloudformation_type_name = "AWS::EC2::PlacementGroup" +} + +resource_schema "aws_ec2_prefix_list" { + cloudformation_type_name = "AWS::EC2::PrefixList" +} + +resource_schema "aws_ec2_route" { + cloudformation_type_name = "AWS::EC2::Route" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_route_server" { + cloudformation_type_name = "AWS::EC2::RouteServer" +} + +resource_schema "aws_ec2_route_server_association" { + cloudformation_type_name = "AWS::EC2::RouteServerAssociation" +} + +resource_schema "aws_ec2_route_server_endpoint" { + cloudformation_type_name = "AWS::EC2::RouteServerEndpoint" +} + +resource_schema "aws_ec2_route_server_peer" { + cloudformation_type_name = "AWS::EC2::RouteServerPeer" +} + +resource_schema "aws_ec2_route_server_propagation" { + cloudformation_type_name = "AWS::EC2::RouteServerPropagation" +} + +resource_schema "aws_ec2_route_table" { + cloudformation_type_name = "AWS::EC2::RouteTable" +} + +resource_schema "aws_ec2_security_group" { + cloudformation_type_name = "AWS::EC2::SecurityGroup" +} + +resource_schema "aws_ec2_security_group_egress" { + cloudformation_type_name = "AWS::EC2::SecurityGroupEgress" +} + +resource_schema "aws_ec2_security_group_ingress" { + cloudformation_type_name = "AWS::EC2::SecurityGroupIngress" +} + +resource_schema "aws_ec2_security_group_vpc_association" { + cloudformation_type_name = "AWS::EC2::SecurityGroupVpcAssociation" +} + +resource_schema "aws_ec2_snapshot_block_public_access" { + cloudformation_type_name = "AWS::EC2::SnapshotBlockPublicAccess" +} + +resource_schema "aws_ec2_spot_fleet" { + cloudformation_type_name = "AWS::EC2::SpotFleet" +} + +resource_schema "aws_ec2_subnet" { + cloudformation_type_name = "AWS::EC2::Subnet" +} + +resource_schema "aws_ec2_subnet_cidr_block" { + cloudformation_type_name = "AWS::EC2::SubnetCidrBlock" +} + +resource_schema "aws_ec2_subnet_network_acl_association" { + cloudformation_type_name = "AWS::EC2::SubnetNetworkAclAssociation" +} + +resource_schema "aws_ec2_subnet_route_table_association" { + cloudformation_type_name = "AWS::EC2::SubnetRouteTableAssociation" +} + +resource_schema "aws_ec2_traffic_mirror_filter" { + cloudformation_type_name = "AWS::EC2::TrafficMirrorFilter" +} + +resource_schema "aws_ec2_transit_gateway" { + cloudformation_type_name = "AWS::EC2::TransitGateway" +} + +resource_schema "aws_ec2_transit_gateway_attachment" { + cloudformation_type_name = "AWS::EC2::TransitGatewayAttachment" +} + +resource_schema "aws_ec2_transit_gateway_connect" { + cloudformation_type_name = "AWS::EC2::TransitGatewayConnect" +} + +resource_schema "aws_ec2_transit_gateway_multicast_domain" { + cloudformation_type_name = "AWS::EC2::TransitGatewayMulticastDomain" +} + +resource_schema "aws_ec2_transit_gateway_multicast_domain_association" { + cloudformation_type_name = "AWS::EC2::TransitGatewayMulticastDomainAssociation" +} + +resource_schema "aws_ec2_transit_gateway_multicast_group_member" { + cloudformation_type_name = "AWS::EC2::TransitGatewayMulticastGroupMember" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_transit_gateway_multicast_group_source" { + cloudformation_type_name = "AWS::EC2::TransitGatewayMulticastGroupSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_transit_gateway_peering_attachment" { + cloudformation_type_name = "AWS::EC2::TransitGatewayPeeringAttachment" +} + +resource_schema "aws_ec2_transit_gateway_route" { + cloudformation_type_name = "AWS::EC2::TransitGatewayRoute" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_transit_gateway_route_table" { + cloudformation_type_name = "AWS::EC2::TransitGatewayRouteTable" +} + +resource_schema "aws_ec2_transit_gateway_route_table_association" { + cloudformation_type_name = "AWS::EC2::TransitGatewayRouteTableAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_transit_gateway_route_table_propagation" { + cloudformation_type_name = "AWS::EC2::TransitGatewayRouteTablePropagation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_transit_gateway_vpc_attachment" { + cloudformation_type_name = "AWS::EC2::TransitGatewayVpcAttachment" +} + +resource_schema "aws_ec2_vpc" { + cloudformation_type_name = "AWS::EC2::VPC" +} + +resource_schema "aws_ec2_vpc_block_public_access_exclusion" { + cloudformation_type_name = "AWS::EC2::VPCBlockPublicAccessExclusion" +} + +resource_schema "aws_ec2_vpc_block_public_access_options" { + cloudformation_type_name = "AWS::EC2::VPCBlockPublicAccessOptions" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_vpc_cidr_block" { + cloudformation_type_name = "AWS::EC2::VPCCidrBlock" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ec2_vpcdhcp_options_association" { + cloudformation_type_name = "AWS::EC2::VPCDHCPOptionsAssociation" +} + +resource_schema "aws_ec2_vpc_endpoint" { + cloudformation_type_name = "AWS::EC2::VPCEndpoint" +} + +resource_schema "aws_ec2_vpc_endpoint_connection_notification" { + cloudformation_type_name = "AWS::EC2::VPCEndpointConnectionNotification" +} + +resource_schema "aws_ec2_vpc_endpoint_service" { + cloudformation_type_name = "AWS::EC2::VPCEndpointService" +} + +resource_schema "aws_ec2_vpc_endpoint_service_permissions" { + cloudformation_type_name = "AWS::EC2::VPCEndpointServicePermissions" +} + +resource_schema "aws_ec2_vpc_gateway_attachment" { + cloudformation_type_name = "AWS::EC2::VPCGatewayAttachment" +} + +resource_schema "aws_ec2_vpc_peering_connection" { + cloudformation_type_name = "AWS::EC2::VPCPeeringConnection" +} + +resource_schema "aws_ec2_vpn_connection" { + cloudformation_type_name = "AWS::EC2::VPNConnection" +} + +resource_schema "aws_ec2_vpn_connection_route" { + cloudformation_type_name = "AWS::EC2::VPNConnectionRoute" +} + +resource_schema "aws_ec2_vpn_gateway" { + cloudformation_type_name = "AWS::EC2::VPNGateway" +} + +resource_schema "aws_ec2_verified_access_endpoint" { + cloudformation_type_name = "AWS::EC2::VerifiedAccessEndpoint" +} + +resource_schema "aws_ec2_verified_access_group" { + cloudformation_type_name = "AWS::EC2::VerifiedAccessGroup" +} + +resource_schema "aws_ec2_verified_access_instance" { + cloudformation_type_name = "AWS::EC2::VerifiedAccessInstance" +} + +resource_schema "aws_ec2_verified_access_trust_provider" { + cloudformation_type_name = "AWS::EC2::VerifiedAccessTrustProvider" +} + +resource_schema "aws_ec2_volume" { + cloudformation_type_name = "AWS::EC2::Volume" +} + +resource_schema "aws_ec2_volume_attachment" { + cloudformation_type_name = "AWS::EC2::VolumeAttachment" +} + +resource_schema "aws_ecr_public_repository" { + cloudformation_type_name = "AWS::ECR::PublicRepository" +} + +resource_schema "aws_ecr_pull_through_cache_rule" { + cloudformation_type_name = "AWS::ECR::PullThroughCacheRule" +} + +resource_schema "aws_ecr_registry_policy" { + cloudformation_type_name = "AWS::ECR::RegistryPolicy" +} + +resource_schema "aws_ecr_registry_scanning_configuration" { + cloudformation_type_name = "AWS::ECR::RegistryScanningConfiguration" +} + +resource_schema "aws_ecr_replication_configuration" { + cloudformation_type_name = "AWS::ECR::ReplicationConfiguration" +} + +resource_schema "aws_ecr_repository" { + cloudformation_type_name = "AWS::ECR::Repository" +} + +resource_schema "aws_ecr_repository_creation_template" { + cloudformation_type_name = "AWS::ECR::RepositoryCreationTemplate" +} + +resource_schema "aws_ecs_capacity_provider" { + cloudformation_type_name = "AWS::ECS::CapacityProvider" +} + +resource_schema "aws_ecs_cluster" { + cloudformation_type_name = "AWS::ECS::Cluster" +} + +resource_schema "aws_ecs_cluster_capacity_provider_associations" { + cloudformation_type_name = "AWS::ECS::ClusterCapacityProviderAssociations" +} + +resource_schema "aws_ecs_primary_task_set" { + cloudformation_type_name = "AWS::ECS::PrimaryTaskSet" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ecs_service" { + cloudformation_type_name = "AWS::ECS::Service" +} + +resource_schema "aws_ecs_task_definition" { + cloudformation_type_name = "AWS::ECS::TaskDefinition" +} + +resource_schema "aws_ecs_task_set" { + cloudformation_type_name = "AWS::ECS::TaskSet" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_efs_access_point" { + cloudformation_type_name = "AWS::EFS::AccessPoint" +} + +resource_schema "aws_efs_file_system" { + cloudformation_type_name = "AWS::EFS::FileSystem" +} + +resource_schema "aws_efs_mount_target" { + cloudformation_type_name = "AWS::EFS::MountTarget" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eks_access_entry" { + cloudformation_type_name = "AWS::EKS::AccessEntry" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eks_addon" { + cloudformation_type_name = "AWS::EKS::Addon" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eks_cluster" { + cloudformation_type_name = "AWS::EKS::Cluster" +} + +resource_schema "aws_eks_fargate_profile" { + cloudformation_type_name = "AWS::EKS::FargateProfile" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eks_identity_provider_config" { + cloudformation_type_name = "AWS::EKS::IdentityProviderConfig" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eks_nodegroup" { + cloudformation_type_name = "AWS::EKS::Nodegroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eks_pod_identity_association" { + cloudformation_type_name = "AWS::EKS::PodIdentityAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_emr_security_configuration" { + cloudformation_type_name = "AWS::EMR::SecurityConfiguration" +} + +resource_schema "aws_emr_step" { + cloudformation_type_name = "AWS::EMR::Step" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_emr_studio" { + cloudformation_type_name = "AWS::EMR::Studio" +} + +resource_schema "aws_emr_studio_session_mapping" { + cloudformation_type_name = "AWS::EMR::StudioSessionMapping" +} + +resource_schema "aws_emr_wal_workspace" { + cloudformation_type_name = "AWS::EMR::WALWorkspace" +} + +resource_schema "aws_emrcontainers_virtual_cluster" { + cloudformation_type_name = "AWS::EMRContainers::VirtualCluster" +} + +resource_schema "aws_emrserverless_application" { + cloudformation_type_name = "AWS::EMRServerless::Application" +} + +resource_schema "aws_evs_environment" { + cloudformation_type_name = "AWS::EVS::Environment" +} + +resource_schema "aws_elasticache_global_replication_group" { + cloudformation_type_name = "AWS::ElastiCache::GlobalReplicationGroup" +} + +resource_schema "aws_elasticache_parameter_group" { + cloudformation_type_name = "AWS::ElastiCache::ParameterGroup" +} + +resource_schema "aws_elasticache_serverless_cache" { + cloudformation_type_name = "AWS::ElastiCache::ServerlessCache" +} + +resource_schema "aws_elasticache_subnet_group" { + cloudformation_type_name = "AWS::ElastiCache::SubnetGroup" +} + +resource_schema "aws_elasticache_user" { + cloudformation_type_name = "AWS::ElastiCache::User" +} + +resource_schema "aws_elasticache_user_group" { + cloudformation_type_name = "AWS::ElastiCache::UserGroup" +} + +resource_schema "aws_elasticbeanstalk_application" { + cloudformation_type_name = "AWS::ElasticBeanstalk::Application" +} + +resource_schema "aws_elasticbeanstalk_application_version" { + cloudformation_type_name = "AWS::ElasticBeanstalk::ApplicationVersion" +} + +resource_schema "aws_elasticbeanstalk_configuration_template" { + cloudformation_type_name = "AWS::ElasticBeanstalk::ConfigurationTemplate" +} + +resource_schema "aws_elasticbeanstalk_environment" { + cloudformation_type_name = "AWS::ElasticBeanstalk::Environment" +} + +resource_schema "aws_elasticloadbalancingv2_listener" { + cloudformation_type_name = "AWS::ElasticLoadBalancingV2::Listener" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_elasticloadbalancingv2_listener_rule" { + cloudformation_type_name = "AWS::ElasticLoadBalancingV2::ListenerRule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_elasticloadbalancingv2_load_balancer" { + cloudformation_type_name = "AWS::ElasticLoadBalancingV2::LoadBalancer" +} + +resource_schema "aws_elasticloadbalancingv2_target_group" { + cloudformation_type_name = "AWS::ElasticLoadBalancingV2::TargetGroup" +} + +resource_schema "aws_elasticloadbalancingv2_trust_store" { + cloudformation_type_name = "AWS::ElasticLoadBalancingV2::TrustStore" +} + +resource_schema "aws_elasticloadbalancingv2_trust_store_revocation" { + cloudformation_type_name = "AWS::ElasticLoadBalancingV2::TrustStoreRevocation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_entityresolution_id_mapping_workflow" { + cloudformation_type_name = "AWS::EntityResolution::IdMappingWorkflow" +} + +resource_schema "aws_entityresolution_id_namespace" { + cloudformation_type_name = "AWS::EntityResolution::IdNamespace" +} + +resource_schema "aws_entityresolution_matching_workflow" { + cloudformation_type_name = "AWS::EntityResolution::MatchingWorkflow" +} + +resource_schema "aws_entityresolution_policy_statement" { + cloudformation_type_name = "AWS::EntityResolution::PolicyStatement" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_entityresolution_schema_mapping" { + cloudformation_type_name = "AWS::EntityResolution::SchemaMapping" +} + +resource_schema "aws_eventschemas_discoverer" { + cloudformation_type_name = "AWS::EventSchemas::Discoverer" +} + +resource_schema "aws_eventschemas_registry" { + cloudformation_type_name = "AWS::EventSchemas::Registry" +} + +resource_schema "aws_eventschemas_registry_policy" { + cloudformation_type_name = "AWS::EventSchemas::RegistryPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_eventschemas_schema" { + cloudformation_type_name = "AWS::EventSchemas::Schema" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_events_api_destination" { + cloudformation_type_name = "AWS::Events::ApiDestination" +} + +resource_schema "aws_events_archive" { + cloudformation_type_name = "AWS::Events::Archive" +} + +resource_schema "aws_events_connection" { + cloudformation_type_name = "AWS::Events::Connection" +} + +resource_schema "aws_events_endpoint" { + cloudformation_type_name = "AWS::Events::Endpoint" +} + +resource_schema "aws_events_event_bus" { + cloudformation_type_name = "AWS::Events::EventBus" +} + +resource_schema "aws_events_rule" { + cloudformation_type_name = "AWS::Events::Rule" +} + +resource_schema "aws_evidently_experiment" { + cloudformation_type_name = "AWS::Evidently::Experiment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_evidently_feature" { + cloudformation_type_name = "AWS::Evidently::Feature" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_evidently_launch" { + cloudformation_type_name = "AWS::Evidently::Launch" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_evidently_project" { + cloudformation_type_name = "AWS::Evidently::Project" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_evidently_segment" { + cloudformation_type_name = "AWS::Evidently::Segment" +} + +resource_schema "aws_fis_experiment_template" { + cloudformation_type_name = "AWS::FIS::ExperimentTemplate" +} + +resource_schema "aws_fis_target_account_configuration" { + cloudformation_type_name = "AWS::FIS::TargetAccountConfiguration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_fms_notification_channel" { + cloudformation_type_name = "AWS::FMS::NotificationChannel" +} + +resource_schema "aws_fms_policy" { + cloudformation_type_name = "AWS::FMS::Policy" +} + +resource_schema "aws_fms_resource_set" { + cloudformation_type_name = "AWS::FMS::ResourceSet" +} + +resource_schema "aws_fsx_data_repository_association" { + cloudformation_type_name = "AWS::FSx::DataRepositoryAssociation" +} + +resource_schema "aws_finspace_environment" { + cloudformation_type_name = "AWS::FinSpace::Environment" +} + +resource_schema "aws_forecast_dataset" { + cloudformation_type_name = "AWS::Forecast::Dataset" +} + +resource_schema "aws_forecast_dataset_group" { + cloudformation_type_name = "AWS::Forecast::DatasetGroup" +} + +resource_schema "aws_frauddetector_detector" { + cloudformation_type_name = "AWS::FraudDetector::Detector" +} + +resource_schema "aws_frauddetector_entity_type" { + cloudformation_type_name = "AWS::FraudDetector::EntityType" +} + +resource_schema "aws_frauddetector_event_type" { + cloudformation_type_name = "AWS::FraudDetector::EventType" +} + +resource_schema "aws_frauddetector_label" { + cloudformation_type_name = "AWS::FraudDetector::Label" +} + +resource_schema "aws_frauddetector_list" { + cloudformation_type_name = "AWS::FraudDetector::List" +} + +resource_schema "aws_frauddetector_outcome" { + cloudformation_type_name = "AWS::FraudDetector::Outcome" +} + +resource_schema "aws_frauddetector_variable" { + cloudformation_type_name = "AWS::FraudDetector::Variable" +} + +resource_schema "aws_gamelift_alias" { + cloudformation_type_name = "AWS::GameLift::Alias" +} + +resource_schema "aws_gamelift_build" { + cloudformation_type_name = "AWS::GameLift::Build" +} + +resource_schema "aws_gamelift_container_fleet" { + cloudformation_type_name = "AWS::GameLift::ContainerFleet" +} + +resource_schema "aws_gamelift_container_group_definition" { + cloudformation_type_name = "AWS::GameLift::ContainerGroupDefinition" +} + +resource_schema "aws_gamelift_fleet" { + cloudformation_type_name = "AWS::GameLift::Fleet" +} + +resource_schema "aws_gamelift_game_server_group" { + cloudformation_type_name = "AWS::GameLift::GameServerGroup" +} + +resource_schema "aws_gamelift_game_session_queue" { + cloudformation_type_name = "AWS::GameLift::GameSessionQueue" +} + +resource_schema "aws_gamelift_location" { + cloudformation_type_name = "AWS::GameLift::Location" +} + +resource_schema "aws_gamelift_matchmaking_configuration" { + cloudformation_type_name = "AWS::GameLift::MatchmakingConfiguration" +} + +resource_schema "aws_gamelift_matchmaking_rule_set" { + cloudformation_type_name = "AWS::GameLift::MatchmakingRuleSet" +} + +resource_schema "aws_gamelift_script" { + cloudformation_type_name = "AWS::GameLift::Script" +} + +resource_schema "aws_globalaccelerator_accelerator" { + cloudformation_type_name = "AWS::GlobalAccelerator::Accelerator" +} + +resource_schema "aws_globalaccelerator_cross_account_attachment" { + cloudformation_type_name = "AWS::GlobalAccelerator::CrossAccountAttachment" +} + +resource_schema "aws_globalaccelerator_endpoint_group" { + cloudformation_type_name = "AWS::GlobalAccelerator::EndpointGroup" +} + +resource_schema "aws_globalaccelerator_listener" { + cloudformation_type_name = "AWS::GlobalAccelerator::Listener" +} + +resource_schema "aws_glue_crawler" { + cloudformation_type_name = "AWS::Glue::Crawler" +} + +resource_schema "aws_glue_database" { + cloudformation_type_name = "AWS::Glue::Database" +} + +resource_schema "aws_glue_job" { + cloudformation_type_name = "AWS::Glue::Job" +} + +resource_schema "aws_glue_registry" { + cloudformation_type_name = "AWS::Glue::Registry" +} + +resource_schema "aws_glue_schema" { + cloudformation_type_name = "AWS::Glue::Schema" +} + +resource_schema "aws_glue_schema_version" { + cloudformation_type_name = "AWS::Glue::SchemaVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_glue_schema_version_metadata" { + cloudformation_type_name = "AWS::Glue::SchemaVersionMetadata" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_glue_trigger" { + cloudformation_type_name = "AWS::Glue::Trigger" +} + +resource_schema "aws_glue_usage_profile" { + cloudformation_type_name = "AWS::Glue::UsageProfile" +} + +resource_schema "aws_grafana_workspace" { + cloudformation_type_name = "AWS::Grafana::Workspace" +} + +resource_schema "aws_greengrassv2_component_version" { + cloudformation_type_name = "AWS::GreengrassV2::ComponentVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_greengrassv2_deployment" { + cloudformation_type_name = "AWS::GreengrassV2::Deployment" +} + +resource_schema "aws_groundstation_config" { + cloudformation_type_name = "AWS::GroundStation::Config" +} + +resource_schema "aws_groundstation_dataflow_endpoint_group" { + cloudformation_type_name = "AWS::GroundStation::DataflowEndpointGroup" +} + +resource_schema "aws_groundstation_mission_profile" { + cloudformation_type_name = "AWS::GroundStation::MissionProfile" +} + +resource_schema "aws_guardduty_detector" { + cloudformation_type_name = "AWS::GuardDuty::Detector" +} + +resource_schema "aws_guardduty_filter" { + cloudformation_type_name = "AWS::GuardDuty::Filter" +} + +resource_schema "aws_guardduty_ip_set" { + cloudformation_type_name = "AWS::GuardDuty::IPSet" +} + +resource_schema "aws_guardduty_malware_protection_plan" { + cloudformation_type_name = "AWS::GuardDuty::MalwareProtectionPlan" +} + +resource_schema "aws_guardduty_master" { + cloudformation_type_name = "AWS::GuardDuty::Master" +} + +resource_schema "aws_guardduty_member" { + cloudformation_type_name = "AWS::GuardDuty::Member" +} + +resource_schema "aws_guardduty_publishing_destination" { + cloudformation_type_name = "AWS::GuardDuty::PublishingDestination" +} + +resource_schema "aws_guardduty_threat_intel_set" { + cloudformation_type_name = "AWS::GuardDuty::ThreatIntelSet" +} + +resource_schema "aws_healthimaging_datastore" { + cloudformation_type_name = "AWS::HealthImaging::Datastore" +} + +resource_schema "aws_healthlake_fhir_datastore" { + cloudformation_type_name = "AWS::HealthLake::FHIRDatastore" +} + +resource_schema "aws_iam_group" { + cloudformation_type_name = "AWS::IAM::Group" +} + +resource_schema "aws_iam_group_policy" { + cloudformation_type_name = "AWS::IAM::GroupPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iam_instance_profile" { + cloudformation_type_name = "AWS::IAM::InstanceProfile" +} + +resource_schema "aws_iam_managed_policy" { + cloudformation_type_name = "AWS::IAM::ManagedPolicy" +} + +resource_schema "aws_iam_oidc_provider" { + cloudformation_type_name = "AWS::IAM::OIDCProvider" +} + +resource_schema "aws_iam_role" { + cloudformation_type_name = "AWS::IAM::Role" +} + +resource_schema "aws_iam_role_policy" { + cloudformation_type_name = "AWS::IAM::RolePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iam_saml_provider" { + cloudformation_type_name = "AWS::IAM::SAMLProvider" +} + +resource_schema "aws_iam_server_certificate" { + cloudformation_type_name = "AWS::IAM::ServerCertificate" +} + +resource_schema "aws_iam_service_linked_role" { + cloudformation_type_name = "AWS::IAM::ServiceLinkedRole" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iam_user" { + cloudformation_type_name = "AWS::IAM::User" +} + +resource_schema "aws_iam_user_policy" { + cloudformation_type_name = "AWS::IAM::UserPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iam_virtual_mfa_device" { + cloudformation_type_name = "AWS::IAM::VirtualMFADevice" +} + +resource_schema "aws_ivs_channel" { + cloudformation_type_name = "AWS::IVS::Channel" +} + +resource_schema "aws_ivs_encoder_configuration" { + cloudformation_type_name = "AWS::IVS::EncoderConfiguration" +} + +resource_schema "aws_ivs_ingest_configuration" { + cloudformation_type_name = "AWS::IVS::IngestConfiguration" +} + +resource_schema "aws_ivs_playback_key_pair" { + cloudformation_type_name = "AWS::IVS::PlaybackKeyPair" +} + +resource_schema "aws_ivs_playback_restriction_policy" { + cloudformation_type_name = "AWS::IVS::PlaybackRestrictionPolicy" +} + +resource_schema "aws_ivs_public_key" { + cloudformation_type_name = "AWS::IVS::PublicKey" +} + +resource_schema "aws_ivs_recording_configuration" { + cloudformation_type_name = "AWS::IVS::RecordingConfiguration" +} + +resource_schema "aws_ivs_stage" { + cloudformation_type_name = "AWS::IVS::Stage" +} + +resource_schema "aws_ivs_storage_configuration" { + cloudformation_type_name = "AWS::IVS::StorageConfiguration" +} + +resource_schema "aws_ivs_stream_key" { + cloudformation_type_name = "AWS::IVS::StreamKey" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ivschat_logging_configuration" { + cloudformation_type_name = "AWS::IVSChat::LoggingConfiguration" +} + +resource_schema "aws_ivschat_room" { + cloudformation_type_name = "AWS::IVSChat::Room" +} + +resource_schema "aws_identitystore_group" { + cloudformation_type_name = "AWS::IdentityStore::Group" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_identitystore_group_membership" { + cloudformation_type_name = "AWS::IdentityStore::GroupMembership" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_imagebuilder_component" { + cloudformation_type_name = "AWS::ImageBuilder::Component" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_imagebuilder_container_recipe" { + cloudformation_type_name = "AWS::ImageBuilder::ContainerRecipe" +} + +resource_schema "aws_imagebuilder_distribution_configuration" { + cloudformation_type_name = "AWS::ImageBuilder::DistributionConfiguration" +} + +resource_schema "aws_imagebuilder_image" { + cloudformation_type_name = "AWS::ImageBuilder::Image" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_imagebuilder_image_pipeline" { + cloudformation_type_name = "AWS::ImageBuilder::ImagePipeline" +} + +resource_schema "aws_imagebuilder_image_recipe" { + cloudformation_type_name = "AWS::ImageBuilder::ImageRecipe" +} + +resource_schema "aws_imagebuilder_infrastructure_configuration" { + cloudformation_type_name = "AWS::ImageBuilder::InfrastructureConfiguration" +} + +resource_schema "aws_imagebuilder_lifecycle_policy" { + cloudformation_type_name = "AWS::ImageBuilder::LifecyclePolicy" +} + +resource_schema "aws_imagebuilder_workflow" { + cloudformation_type_name = "AWS::ImageBuilder::Workflow" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_inspector_assessment_target" { + cloudformation_type_name = "AWS::Inspector::AssessmentTarget" +} + +resource_schema "aws_inspector_assessment_template" { + cloudformation_type_name = "AWS::Inspector::AssessmentTemplate" +} + +resource_schema "aws_inspector_resource_group" { + cloudformation_type_name = "AWS::Inspector::ResourceGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_inspectorv2_cis_scan_configuration" { + cloudformation_type_name = "AWS::InspectorV2::CisScanConfiguration" +} + +resource_schema "aws_inspectorv2_filter" { + cloudformation_type_name = "AWS::InspectorV2::Filter" +} + +resource_schema "aws_internetmonitor_monitor" { + cloudformation_type_name = "AWS::InternetMonitor::Monitor" +} + +resource_schema "aws_invoicing_invoice_unit" { + cloudformation_type_name = "AWS::Invoicing::InvoiceUnit" +} + +resource_schema "aws_iot_account_audit_configuration" { + cloudformation_type_name = "AWS::IoT::AccountAuditConfiguration" +} + +resource_schema "aws_iot_authorizer" { + cloudformation_type_name = "AWS::IoT::Authorizer" +} + +resource_schema "aws_iot_billing_group" { + cloudformation_type_name = "AWS::IoT::BillingGroup" +} + +resource_schema "aws_iot_ca_certificate" { + cloudformation_type_name = "AWS::IoT::CACertificate" +} + +resource_schema "aws_iot_certificate" { + cloudformation_type_name = "AWS::IoT::Certificate" +} + +resource_schema "aws_iot_certificate_provider" { + cloudformation_type_name = "AWS::IoT::CertificateProvider" +} + +resource_schema "aws_iot_command" { + cloudformation_type_name = "AWS::IoT::Command" +} + +resource_schema "aws_iot_custom_metric" { + cloudformation_type_name = "AWS::IoT::CustomMetric" +} + +resource_schema "aws_iot_dimension" { + cloudformation_type_name = "AWS::IoT::Dimension" +} + +resource_schema "aws_iot_domain_configuration" { + cloudformation_type_name = "AWS::IoT::DomainConfiguration" +} + +resource_schema "aws_iot_fleet_metric" { + cloudformation_type_name = "AWS::IoT::FleetMetric" +} + +resource_schema "aws_iot_job_template" { + cloudformation_type_name = "AWS::IoT::JobTemplate" +} + +resource_schema "aws_iot_logging" { + cloudformation_type_name = "AWS::IoT::Logging" +} + +resource_schema "aws_iot_mitigation_action" { + cloudformation_type_name = "AWS::IoT::MitigationAction" +} + +resource_schema "aws_iot_policy" { + cloudformation_type_name = "AWS::IoT::Policy" +} + +resource_schema "aws_iot_provisioning_template" { + cloudformation_type_name = "AWS::IoT::ProvisioningTemplate" +} + +resource_schema "aws_iot_resource_specific_logging" { + cloudformation_type_name = "AWS::IoT::ResourceSpecificLogging" +} + +resource_schema "aws_iot_role_alias" { + cloudformation_type_name = "AWS::IoT::RoleAlias" +} + +resource_schema "aws_iot_scheduled_audit" { + cloudformation_type_name = "AWS::IoT::ScheduledAudit" +} + +resource_schema "aws_iot_security_profile" { + cloudformation_type_name = "AWS::IoT::SecurityProfile" +} + +resource_schema "aws_iot_software_package" { + cloudformation_type_name = "AWS::IoT::SoftwarePackage" +} + +resource_schema "aws_iot_software_package_version" { + cloudformation_type_name = "AWS::IoT::SoftwarePackageVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iot_thing" { + cloudformation_type_name = "AWS::IoT::Thing" +} + +resource_schema "aws_iot_thing_group" { + cloudformation_type_name = "AWS::IoT::ThingGroup" +} + +resource_schema "aws_iot_thing_type" { + cloudformation_type_name = "AWS::IoT::ThingType" +} + +resource_schema "aws_iot_topic_rule" { + cloudformation_type_name = "AWS::IoT::TopicRule" +} + +resource_schema "aws_iot_topic_rule_destination" { + cloudformation_type_name = "AWS::IoT::TopicRuleDestination" +} + +resource_schema "aws_iotanalytics_channel" { + cloudformation_type_name = "AWS::IoTAnalytics::Channel" +} + +resource_schema "aws_iotanalytics_dataset" { + cloudformation_type_name = "AWS::IoTAnalytics::Dataset" +} + +resource_schema "aws_iotanalytics_datastore" { + cloudformation_type_name = "AWS::IoTAnalytics::Datastore" +} + +resource_schema "aws_iotanalytics_pipeline" { + cloudformation_type_name = "AWS::IoTAnalytics::Pipeline" +} + +resource_schema "aws_iotcoredeviceadvisor_suite_definition" { + cloudformation_type_name = "AWS::IoTCoreDeviceAdvisor::SuiteDefinition" +} + +resource_schema "aws_iotevents_alarm_model" { + cloudformation_type_name = "AWS::IoTEvents::AlarmModel" +} + +resource_schema "aws_iotevents_detector_model" { + cloudformation_type_name = "AWS::IoTEvents::DetectorModel" +} + +resource_schema "aws_iotevents_input" { + cloudformation_type_name = "AWS::IoTEvents::Input" +} + +resource_schema "aws_iotfleethub_application" { + cloudformation_type_name = "AWS::IoTFleetHub::Application" +} + +resource_schema "aws_iotfleetwise_campaign" { + cloudformation_type_name = "AWS::IoTFleetWise::Campaign" +} + +resource_schema "aws_iotfleetwise_decoder_manifest" { + cloudformation_type_name = "AWS::IoTFleetWise::DecoderManifest" +} + +resource_schema "aws_iotfleetwise_fleet" { + cloudformation_type_name = "AWS::IoTFleetWise::Fleet" +} + +resource_schema "aws_iotfleetwise_model_manifest" { + cloudformation_type_name = "AWS::IoTFleetWise::ModelManifest" +} + +resource_schema "aws_iotfleetwise_signal_catalog" { + cloudformation_type_name = "AWS::IoTFleetWise::SignalCatalog" +} + +resource_schema "aws_iotfleetwise_state_template" { + cloudformation_type_name = "AWS::IoTFleetWise::StateTemplate" +} + +resource_schema "aws_iotfleetwise_vehicle" { + cloudformation_type_name = "AWS::IoTFleetWise::Vehicle" +} + +resource_schema "aws_iotsitewise_access_policy" { + cloudformation_type_name = "AWS::IoTSiteWise::AccessPolicy" +} + +resource_schema "aws_iotsitewise_asset" { + cloudformation_type_name = "AWS::IoTSiteWise::Asset" +} + +resource_schema "aws_iotsitewise_asset_model" { + cloudformation_type_name = "AWS::IoTSiteWise::AssetModel" +} + +resource_schema "aws_iotsitewise_dashboard" { + cloudformation_type_name = "AWS::IoTSiteWise::Dashboard" +} + +resource_schema "aws_iotsitewise_dataset" { + cloudformation_type_name = "AWS::IoTSiteWise::Dataset" +} + +resource_schema "aws_iotsitewise_gateway" { + cloudformation_type_name = "AWS::IoTSiteWise::Gateway" +} + +resource_schema "aws_iotsitewise_portal" { + cloudformation_type_name = "AWS::IoTSiteWise::Portal" +} + +resource_schema "aws_iotsitewise_project" { + cloudformation_type_name = "AWS::IoTSiteWise::Project" +} + +resource_schema "aws_iottwinmaker_component_type" { + cloudformation_type_name = "AWS::IoTTwinMaker::ComponentType" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iottwinmaker_entity" { + cloudformation_type_name = "AWS::IoTTwinMaker::Entity" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iottwinmaker_scene" { + cloudformation_type_name = "AWS::IoTTwinMaker::Scene" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iottwinmaker_sync_job" { + cloudformation_type_name = "AWS::IoTTwinMaker::SyncJob" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_iottwinmaker_workspace" { + cloudformation_type_name = "AWS::IoTTwinMaker::Workspace" +} + +resource_schema "aws_iotwireless_destination" { + cloudformation_type_name = "AWS::IoTWireless::Destination" +} + +resource_schema "aws_iotwireless_device_profile" { + cloudformation_type_name = "AWS::IoTWireless::DeviceProfile" +} + +resource_schema "aws_iotwireless_fuota_task" { + cloudformation_type_name = "AWS::IoTWireless::FuotaTask" +} + +resource_schema "aws_iotwireless_multicast_group" { + cloudformation_type_name = "AWS::IoTWireless::MulticastGroup" +} + +resource_schema "aws_iotwireless_network_analyzer_configuration" { + cloudformation_type_name = "AWS::IoTWireless::NetworkAnalyzerConfiguration" +} + +resource_schema "aws_iotwireless_partner_account" { + cloudformation_type_name = "AWS::IoTWireless::PartnerAccount" +} + +resource_schema "aws_iotwireless_service_profile" { + cloudformation_type_name = "AWS::IoTWireless::ServiceProfile" +} + +resource_schema "aws_iotwireless_task_definition" { + cloudformation_type_name = "AWS::IoTWireless::TaskDefinition" +} + +resource_schema "aws_iotwireless_wireless_device" { + cloudformation_type_name = "AWS::IoTWireless::WirelessDevice" +} + +resource_schema "aws_iotwireless_wireless_device_import_task" { + cloudformation_type_name = "AWS::IoTWireless::WirelessDeviceImportTask" +} + +resource_schema "aws_iotwireless_wireless_gateway" { + cloudformation_type_name = "AWS::IoTWireless::WirelessGateway" +} + +resource_schema "aws_kms_alias" { + cloudformation_type_name = "AWS::KMS::Alias" +} + +resource_schema "aws_kms_key" { + cloudformation_type_name = "AWS::KMS::Key" +} + +resource_schema "aws_kms_replica_key" { + cloudformation_type_name = "AWS::KMS::ReplicaKey" +} + +resource_schema "aws_kafkaconnect_connector" { + cloudformation_type_name = "AWS::KafkaConnect::Connector" +} + +resource_schema "aws_kafkaconnect_custom_plugin" { + cloudformation_type_name = "AWS::KafkaConnect::CustomPlugin" +} + +resource_schema "aws_kafkaconnect_worker_configuration" { + cloudformation_type_name = "AWS::KafkaConnect::WorkerConfiguration" +} + +resource_schema "aws_kendra_data_source" { + cloudformation_type_name = "AWS::Kendra::DataSource" +} + +resource_schema "aws_kendra_faq" { + cloudformation_type_name = "AWS::Kendra::Faq" +} + +resource_schema "aws_kendra_index" { + cloudformation_type_name = "AWS::Kendra::Index" +} + +resource_schema "aws_kendraranking_execution_plan" { + cloudformation_type_name = "AWS::KendraRanking::ExecutionPlan" +} + +resource_schema "aws_kinesis_resource_policy" { + cloudformation_type_name = "AWS::Kinesis::ResourcePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_kinesis_stream" { + cloudformation_type_name = "AWS::Kinesis::Stream" +} + +resource_schema "aws_kinesisanalyticsv2_application" { + cloudformation_type_name = "AWS::KinesisAnalyticsV2::Application" +} + +resource_schema "aws_kinesisfirehose_delivery_stream" { + cloudformation_type_name = "AWS::KinesisFirehose::DeliveryStream" +} + +resource_schema "aws_kinesisvideo_signaling_channel" { + cloudformation_type_name = "AWS::KinesisVideo::SignalingChannel" +} + +resource_schema "aws_kinesisvideo_stream" { + cloudformation_type_name = "AWS::KinesisVideo::Stream" +} + +resource_schema "aws_lakeformation_data_cells_filter" { + cloudformation_type_name = "AWS::LakeFormation::DataCellsFilter" +} + +resource_schema "aws_lakeformation_principal_permissions" { + cloudformation_type_name = "AWS::LakeFormation::PrincipalPermissions" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_lakeformation_tag" { + cloudformation_type_name = "AWS::LakeFormation::Tag" +} + +resource_schema "aws_lakeformation_tag_association" { + cloudformation_type_name = "AWS::LakeFormation::TagAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_lambda_alias" { + cloudformation_type_name = "AWS::Lambda::Alias" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_lambda_code_signing_config" { + cloudformation_type_name = "AWS::Lambda::CodeSigningConfig" +} + +resource_schema "aws_lambda_event_invoke_config" { + cloudformation_type_name = "AWS::Lambda::EventInvokeConfig" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_lambda_event_source_mapping" { + cloudformation_type_name = "AWS::Lambda::EventSourceMapping" +} + +resource_schema "aws_lambda_function" { + cloudformation_type_name = "AWS::Lambda::Function" +} + +resource_schema "aws_lambda_layer_version" { + cloudformation_type_name = "AWS::Lambda::LayerVersion" +} + +resource_schema "aws_lambda_layer_version_permission" { + cloudformation_type_name = "AWS::Lambda::LayerVersionPermission" +} + +resource_schema "aws_lambda_permission" { + cloudformation_type_name = "AWS::Lambda::Permission" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_lambda_url" { + cloudformation_type_name = "AWS::Lambda::Url" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_lambda_version" { + cloudformation_type_name = "AWS::Lambda::Version" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_launchwizard_deployment" { + cloudformation_type_name = "AWS::LaunchWizard::Deployment" +} + +resource_schema "aws_lex_bot" { + cloudformation_type_name = "AWS::Lex::Bot" +} + +resource_schema "aws_lex_bot_alias" { + cloudformation_type_name = "AWS::Lex::BotAlias" +} + +resource_schema "aws_lex_bot_version" { + cloudformation_type_name = "AWS::Lex::BotVersion" +} + +resource_schema "aws_lex_resource_policy" { + cloudformation_type_name = "AWS::Lex::ResourcePolicy" +} + +resource_schema "aws_licensemanager_grant" { + cloudformation_type_name = "AWS::LicenseManager::Grant" +} + +resource_schema "aws_licensemanager_license" { + cloudformation_type_name = "AWS::LicenseManager::License" +} + +resource_schema "aws_lightsail_alarm" { + cloudformation_type_name = "AWS::Lightsail::Alarm" +} + +resource_schema "aws_lightsail_bucket" { + cloudformation_type_name = "AWS::Lightsail::Bucket" +} + +resource_schema "aws_lightsail_certificate" { + cloudformation_type_name = "AWS::Lightsail::Certificate" +} + +resource_schema "aws_lightsail_container" { + cloudformation_type_name = "AWS::Lightsail::Container" +} + +resource_schema "aws_lightsail_database" { + cloudformation_type_name = "AWS::Lightsail::Database" +} + +resource_schema "aws_lightsail_disk" { + cloudformation_type_name = "AWS::Lightsail::Disk" +} + +resource_schema "aws_lightsail_distribution" { + cloudformation_type_name = "AWS::Lightsail::Distribution" +} + +resource_schema "aws_lightsail_instance" { + cloudformation_type_name = "AWS::Lightsail::Instance" +} + +resource_schema "aws_lightsail_instance_snapshot" { + cloudformation_type_name = "AWS::Lightsail::InstanceSnapshot" +} + +resource_schema "aws_lightsail_load_balancer" { + cloudformation_type_name = "AWS::Lightsail::LoadBalancer" +} + +resource_schema "aws_lightsail_load_balancer_tls_certificate" { + cloudformation_type_name = "AWS::Lightsail::LoadBalancerTlsCertificate" +} + +resource_schema "aws_lightsail_static_ip" { + cloudformation_type_name = "AWS::Lightsail::StaticIp" +} + +resource_schema "aws_location_api_key" { + cloudformation_type_name = "AWS::Location::APIKey" +} + +resource_schema "aws_location_geofence_collection" { + cloudformation_type_name = "AWS::Location::GeofenceCollection" +} + +resource_schema "aws_location_map" { + cloudformation_type_name = "AWS::Location::Map" +} + +resource_schema "aws_location_place_index" { + cloudformation_type_name = "AWS::Location::PlaceIndex" +} + +resource_schema "aws_location_route_calculator" { + cloudformation_type_name = "AWS::Location::RouteCalculator" +} + +resource_schema "aws_location_tracker" { + cloudformation_type_name = "AWS::Location::Tracker" +} + +resource_schema "aws_location_tracker_consumer" { + cloudformation_type_name = "AWS::Location::TrackerConsumer" +} + +resource_schema "aws_logs_account_policy" { + cloudformation_type_name = "AWS::Logs::AccountPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_logs_delivery" { + cloudformation_type_name = "AWS::Logs::Delivery" +} + +resource_schema "aws_logs_delivery_destination" { + cloudformation_type_name = "AWS::Logs::DeliveryDestination" +} + +resource_schema "aws_logs_delivery_source" { + cloudformation_type_name = "AWS::Logs::DeliverySource" +} + +resource_schema "aws_logs_destination" { + cloudformation_type_name = "AWS::Logs::Destination" +} + +resource_schema "aws_logs_integration" { + cloudformation_type_name = "AWS::Logs::Integration" +} + +resource_schema "aws_logs_log_anomaly_detector" { + cloudformation_type_name = "AWS::Logs::LogAnomalyDetector" +} + +resource_schema "aws_logs_log_group" { + cloudformation_type_name = "AWS::Logs::LogGroup" +} + +resource_schema "aws_logs_log_stream" { + cloudformation_type_name = "AWS::Logs::LogStream" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_logs_metric_filter" { + cloudformation_type_name = "AWS::Logs::MetricFilter" +} + +resource_schema "aws_logs_query_definition" { + cloudformation_type_name = "AWS::Logs::QueryDefinition" +} + +resource_schema "aws_logs_resource_policy" { + cloudformation_type_name = "AWS::Logs::ResourcePolicy" +} + +resource_schema "aws_logs_subscription_filter" { + cloudformation_type_name = "AWS::Logs::SubscriptionFilter" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_logs_transformer" { + cloudformation_type_name = "AWS::Logs::Transformer" +} + +resource_schema "aws_lookoutequipment_inference_scheduler" { + cloudformation_type_name = "AWS::LookoutEquipment::InferenceScheduler" +} + +resource_schema "aws_lookoutmetrics_alert" { + cloudformation_type_name = "AWS::LookoutMetrics::Alert" +} + +resource_schema "aws_lookoutmetrics_anomaly_detector" { + cloudformation_type_name = "AWS::LookoutMetrics::AnomalyDetector" +} + +resource_schema "aws_lookoutvision_project" { + cloudformation_type_name = "AWS::LookoutVision::Project" +} + +resource_schema "aws_m2_application" { + cloudformation_type_name = "AWS::M2::Application" +} + +resource_schema "aws_m2_deployment" { + cloudformation_type_name = "AWS::M2::Deployment" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_m2_environment" { + cloudformation_type_name = "AWS::M2::Environment" +} + +resource_schema "aws_mpa_approval_team" { + cloudformation_type_name = "AWS::MPA::ApprovalTeam" +} + +resource_schema "aws_mpa_identity_source" { + cloudformation_type_name = "AWS::MPA::IdentitySource" +} + +resource_schema "aws_msk_batch_scram_secret" { + cloudformation_type_name = "AWS::MSK::BatchScramSecret" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_msk_cluster" { + cloudformation_type_name = "AWS::MSK::Cluster" +} + +resource_schema "aws_msk_cluster_policy" { + cloudformation_type_name = "AWS::MSK::ClusterPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_msk_configuration" { + cloudformation_type_name = "AWS::MSK::Configuration" +} + +resource_schema "aws_msk_replicator" { + cloudformation_type_name = "AWS::MSK::Replicator" +} + +resource_schema "aws_msk_serverless_cluster" { + cloudformation_type_name = "AWS::MSK::ServerlessCluster" +} + +resource_schema "aws_msk_vpc_connection" { + cloudformation_type_name = "AWS::MSK::VpcConnection" +} + +resource_schema "aws_mwaa_environment" { + cloudformation_type_name = "AWS::MWAA::Environment" +} + +resource_schema "aws_macie_allow_list" { + cloudformation_type_name = "AWS::Macie::AllowList" +} + +resource_schema "aws_macie_custom_data_identifier" { + cloudformation_type_name = "AWS::Macie::CustomDataIdentifier" +} + +resource_schema "aws_macie_findings_filter" { + cloudformation_type_name = "AWS::Macie::FindingsFilter" +} + +resource_schema "aws_macie_session" { + cloudformation_type_name = "AWS::Macie::Session" +} + +resource_schema "aws_managedblockchain_accessor" { + cloudformation_type_name = "AWS::ManagedBlockchain::Accessor" +} + +resource_schema "aws_mediaconnect_bridge" { + cloudformation_type_name = "AWS::MediaConnect::Bridge" +} + +resource_schema "aws_mediaconnect_bridge_output" { + cloudformation_type_name = "AWS::MediaConnect::BridgeOutput" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediaconnect_bridge_source" { + cloudformation_type_name = "AWS::MediaConnect::BridgeSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediaconnect_flow" { + cloudformation_type_name = "AWS::MediaConnect::Flow" +} + +resource_schema "aws_mediaconnect_flow_entitlement" { + cloudformation_type_name = "AWS::MediaConnect::FlowEntitlement" +} + +resource_schema "aws_mediaconnect_flow_output" { + cloudformation_type_name = "AWS::MediaConnect::FlowOutput" +} + +resource_schema "aws_mediaconnect_flow_source" { + cloudformation_type_name = "AWS::MediaConnect::FlowSource" +} + +resource_schema "aws_mediaconnect_flow_vpc_interface" { + cloudformation_type_name = "AWS::MediaConnect::FlowVpcInterface" +} + +resource_schema "aws_mediaconnect_gateway" { + cloudformation_type_name = "AWS::MediaConnect::Gateway" +} + +resource_schema "aws_medialive_channel_placement_group" { + cloudformation_type_name = "AWS::MediaLive::ChannelPlacementGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_medialive_cloudwatch_alarm_template" { + cloudformation_type_name = "AWS::MediaLive::CloudWatchAlarmTemplate" +} + +resource_schema "aws_medialive_cloudwatch_alarm_template_group" { + cloudformation_type_name = "AWS::MediaLive::CloudWatchAlarmTemplateGroup" +} + +resource_schema "aws_medialive_cluster" { + cloudformation_type_name = "AWS::MediaLive::Cluster" +} + +resource_schema "aws_medialive_event_bridge_rule_template" { + cloudformation_type_name = "AWS::MediaLive::EventBridgeRuleTemplate" +} + +resource_schema "aws_medialive_event_bridge_rule_template_group" { + cloudformation_type_name = "AWS::MediaLive::EventBridgeRuleTemplateGroup" +} + +resource_schema "aws_medialive_multiplex" { + cloudformation_type_name = "AWS::MediaLive::Multiplex" +} + +resource_schema "aws_medialive_multiplexprogram" { + cloudformation_type_name = "AWS::MediaLive::Multiplexprogram" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_medialive_network" { + cloudformation_type_name = "AWS::MediaLive::Network" +} + +resource_schema "aws_medialive_sdi_source" { + cloudformation_type_name = "AWS::MediaLive::SdiSource" +} + +resource_schema "aws_medialive_signal_map" { + cloudformation_type_name = "AWS::MediaLive::SignalMap" +} + +resource_schema "aws_mediapackage_asset" { + cloudformation_type_name = "AWS::MediaPackage::Asset" +} + +resource_schema "aws_mediapackage_channel" { + cloudformation_type_name = "AWS::MediaPackage::Channel" +} + +resource_schema "aws_mediapackage_origin_endpoint" { + cloudformation_type_name = "AWS::MediaPackage::OriginEndpoint" +} + +resource_schema "aws_mediapackage_packaging_configuration" { + cloudformation_type_name = "AWS::MediaPackage::PackagingConfiguration" +} + +resource_schema "aws_mediapackage_packaging_group" { + cloudformation_type_name = "AWS::MediaPackage::PackagingGroup" +} + +resource_schema "aws_mediapackagev2_channel" { + cloudformation_type_name = "AWS::MediaPackageV2::Channel" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediapackagev2_channel_group" { + cloudformation_type_name = "AWS::MediaPackageV2::ChannelGroup" +} + +resource_schema "aws_mediapackagev2_channel_policy" { + cloudformation_type_name = "AWS::MediaPackageV2::ChannelPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediapackagev2_origin_endpoint" { + cloudformation_type_name = "AWS::MediaPackageV2::OriginEndpoint" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediapackagev2_origin_endpoint_policy" { + cloudformation_type_name = "AWS::MediaPackageV2::OriginEndpointPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediatailor_channel" { + cloudformation_type_name = "AWS::MediaTailor::Channel" +} + +resource_schema "aws_mediatailor_channel_policy" { + cloudformation_type_name = "AWS::MediaTailor::ChannelPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediatailor_live_source" { + cloudformation_type_name = "AWS::MediaTailor::LiveSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_mediatailor_playback_configuration" { + cloudformation_type_name = "AWS::MediaTailor::PlaybackConfiguration" +} + +resource_schema "aws_mediatailor_source_location" { + cloudformation_type_name = "AWS::MediaTailor::SourceLocation" +} + +resource_schema "aws_mediatailor_vod_source" { + cloudformation_type_name = "AWS::MediaTailor::VodSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_memorydb_acl" { + cloudformation_type_name = "AWS::MemoryDB::ACL" +} + +resource_schema "aws_memorydb_cluster" { + cloudformation_type_name = "AWS::MemoryDB::Cluster" +} + +resource_schema "aws_memorydb_multi_region_cluster" { + cloudformation_type_name = "AWS::MemoryDB::MultiRegionCluster" +} + +resource_schema "aws_memorydb_parameter_group" { + cloudformation_type_name = "AWS::MemoryDB::ParameterGroup" +} + +resource_schema "aws_memorydb_subnet_group" { + cloudformation_type_name = "AWS::MemoryDB::SubnetGroup" +} + +resource_schema "aws_memorydb_user" { + cloudformation_type_name = "AWS::MemoryDB::User" +} + +resource_schema "aws_neptune_db_cluster" { + cloudformation_type_name = "AWS::Neptune::DBCluster" +} + +resource_schema "aws_neptune_db_cluster_parameter_group" { + cloudformation_type_name = "AWS::Neptune::DBClusterParameterGroup" +} + +resource_schema "aws_neptune_db_parameter_group" { + cloudformation_type_name = "AWS::Neptune::DBParameterGroup" +} + +resource_schema "aws_neptune_db_subnet_group" { + cloudformation_type_name = "AWS::Neptune::DBSubnetGroup" +} + +resource_schema "aws_neptunegraph_graph" { + cloudformation_type_name = "AWS::NeptuneGraph::Graph" +} + +resource_schema "aws_neptunegraph_private_graph_endpoint" { + cloudformation_type_name = "AWS::NeptuneGraph::PrivateGraphEndpoint" +} + +resource_schema "aws_networkfirewall_firewall" { + cloudformation_type_name = "AWS::NetworkFirewall::Firewall" +} + +resource_schema "aws_networkfirewall_firewall_policy" { + cloudformation_type_name = "AWS::NetworkFirewall::FirewallPolicy" +} + +resource_schema "aws_networkfirewall_logging_configuration" { + cloudformation_type_name = "AWS::NetworkFirewall::LoggingConfiguration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkfirewall_rule_group" { + cloudformation_type_name = "AWS::NetworkFirewall::RuleGroup" +} + +resource_schema "aws_networkfirewall_tls_inspection_configuration" { + cloudformation_type_name = "AWS::NetworkFirewall::TLSInspectionConfiguration" +} + +resource_schema "aws_networkfirewall_vpc_endpoint_association" { + cloudformation_type_name = "AWS::NetworkFirewall::VpcEndpointAssociation" +} + +resource_schema "aws_networkmanager_connect_attachment" { + cloudformation_type_name = "AWS::NetworkManager::ConnectAttachment" +} + +resource_schema "aws_networkmanager_connect_peer" { + cloudformation_type_name = "AWS::NetworkManager::ConnectPeer" +} + +resource_schema "aws_networkmanager_core_network" { + cloudformation_type_name = "AWS::NetworkManager::CoreNetwork" +} + +resource_schema "aws_networkmanager_customer_gateway_association" { + cloudformation_type_name = "AWS::NetworkManager::CustomerGatewayAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkmanager_device" { + cloudformation_type_name = "AWS::NetworkManager::Device" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkmanager_direct_connect_gateway_attachment" { + cloudformation_type_name = "AWS::NetworkManager::DirectConnectGatewayAttachment" +} + +resource_schema "aws_networkmanager_global_network" { + cloudformation_type_name = "AWS::NetworkManager::GlobalNetwork" +} + +resource_schema "aws_networkmanager_link" { + cloudformation_type_name = "AWS::NetworkManager::Link" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkmanager_link_association" { + cloudformation_type_name = "AWS::NetworkManager::LinkAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkmanager_site" { + cloudformation_type_name = "AWS::NetworkManager::Site" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkmanager_site_to_site_vpn_attachment" { + cloudformation_type_name = "AWS::NetworkManager::SiteToSiteVpnAttachment" +} + +resource_schema "aws_networkmanager_transit_gateway_peering" { + cloudformation_type_name = "AWS::NetworkManager::TransitGatewayPeering" +} + +resource_schema "aws_networkmanager_transit_gateway_registration" { + cloudformation_type_name = "AWS::NetworkManager::TransitGatewayRegistration" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_networkmanager_transit_gateway_route_table_attachment" { + cloudformation_type_name = "AWS::NetworkManager::TransitGatewayRouteTableAttachment" +} + +resource_schema "aws_networkmanager_vpc_attachment" { + cloudformation_type_name = "AWS::NetworkManager::VpcAttachment" +} + +resource_schema "aws_notifications_channel_association" { + cloudformation_type_name = "AWS::Notifications::ChannelAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_notifications_event_rule" { + cloudformation_type_name = "AWS::Notifications::EventRule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_notifications_managed_notification_account_contact_association" { + cloudformation_type_name = "AWS::Notifications::ManagedNotificationAccountContactAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_notifications_managed_notification_additional_channel_association" { + cloudformation_type_name = "AWS::Notifications::ManagedNotificationAdditionalChannelAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_notifications_notification_configuration" { + cloudformation_type_name = "AWS::Notifications::NotificationConfiguration" +} + +resource_schema "aws_notifications_notification_hub" { + cloudformation_type_name = "AWS::Notifications::NotificationHub" +} + +resource_schema "aws_notificationscontacts_email_contact" { + cloudformation_type_name = "AWS::NotificationsContacts::EmailContact" +} + +resource_schema "aws_osis_pipeline" { + cloudformation_type_name = "AWS::OSIS::Pipeline" +} + +resource_schema "aws_oam_link" { + cloudformation_type_name = "AWS::Oam::Link" +} + +resource_schema "aws_oam_sink" { + cloudformation_type_name = "AWS::Oam::Sink" +} + +resource_schema "aws_omics_annotation_store" { + cloudformation_type_name = "AWS::Omics::AnnotationStore" +} + +resource_schema "aws_omics_reference_store" { + cloudformation_type_name = "AWS::Omics::ReferenceStore" +} + +resource_schema "aws_omics_run_group" { + cloudformation_type_name = "AWS::Omics::RunGroup" +} + +resource_schema "aws_omics_sequence_store" { + cloudformation_type_name = "AWS::Omics::SequenceStore" +} + +resource_schema "aws_omics_variant_store" { + cloudformation_type_name = "AWS::Omics::VariantStore" +} + +resource_schema "aws_omics_workflow" { + cloudformation_type_name = "AWS::Omics::Workflow" +} + +resource_schema "aws_omics_workflow_version" { + cloudformation_type_name = "AWS::Omics::WorkflowVersion" +} + +resource_schema "aws_opensearchserverless_access_policy" { + cloudformation_type_name = "AWS::OpenSearchServerless::AccessPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_opensearchserverless_collection" { + cloudformation_type_name = "AWS::OpenSearchServerless::Collection" +} + +resource_schema "aws_opensearchserverless_index" { + cloudformation_type_name = "AWS::OpenSearchServerless::Index" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_opensearchserverless_lifecycle_policy" { + cloudformation_type_name = "AWS::OpenSearchServerless::LifecyclePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_opensearchserverless_security_config" { + cloudformation_type_name = "AWS::OpenSearchServerless::SecurityConfig" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_opensearchserverless_security_policy" { + cloudformation_type_name = "AWS::OpenSearchServerless::SecurityPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_opensearchserverless_vpc_endpoint" { + cloudformation_type_name = "AWS::OpenSearchServerless::VpcEndpoint" +} + +resource_schema "aws_opensearchservice_application" { + cloudformation_type_name = "AWS::OpenSearchService::Application" +} + +resource_schema "aws_opensearchservice_domain" { + cloudformation_type_name = "AWS::OpenSearchService::Domain" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_organizations_account" { + cloudformation_type_name = "AWS::Organizations::Account" +} + +resource_schema "aws_organizations_organization" { + cloudformation_type_name = "AWS::Organizations::Organization" +} + +resource_schema "aws_organizations_organizational_unit" { + cloudformation_type_name = "AWS::Organizations::OrganizationalUnit" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_organizations_policy" { + cloudformation_type_name = "AWS::Organizations::Policy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_organizations_resource_policy" { + cloudformation_type_name = "AWS::Organizations::ResourcePolicy" +} + +resource_schema "aws_pcaconnectorad_connector" { + cloudformation_type_name = "AWS::PCAConnectorAD::Connector" +} + +resource_schema "aws_pcaconnectorad_directory_registration" { + cloudformation_type_name = "AWS::PCAConnectorAD::DirectoryRegistration" +} + +resource_schema "aws_pcaconnectorad_service_principal_name" { + cloudformation_type_name = "AWS::PCAConnectorAD::ServicePrincipalName" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_pcaconnectorad_template" { + cloudformation_type_name = "AWS::PCAConnectorAD::Template" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_pcaconnectorad_template_group_access_control_entry" { + cloudformation_type_name = "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_pcaconnectorscep_challenge" { + cloudformation_type_name = "AWS::PCAConnectorSCEP::Challenge" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_pcaconnectorscep_connector" { + cloudformation_type_name = "AWS::PCAConnectorSCEP::Connector" +} + +resource_schema "aws_pcs_cluster" { + cloudformation_type_name = "AWS::PCS::Cluster" +} + +resource_schema "aws_pcs_compute_node_group" { + cloudformation_type_name = "AWS::PCS::ComputeNodeGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_pcs_queue" { + cloudformation_type_name = "AWS::PCS::Queue" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_panorama_application_instance" { + cloudformation_type_name = "AWS::Panorama::ApplicationInstance" +} + +resource_schema "aws_panorama_package" { + cloudformation_type_name = "AWS::Panorama::Package" +} + +resource_schema "aws_panorama_package_version" { + cloudformation_type_name = "AWS::Panorama::PackageVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_paymentcryptography_alias" { + cloudformation_type_name = "AWS::PaymentCryptography::Alias" +} + +resource_schema "aws_paymentcryptography_key" { + cloudformation_type_name = "AWS::PaymentCryptography::Key" +} + +resource_schema "aws_personalize_dataset" { + cloudformation_type_name = "AWS::Personalize::Dataset" +} + +resource_schema "aws_personalize_dataset_group" { + cloudformation_type_name = "AWS::Personalize::DatasetGroup" +} + +resource_schema "aws_personalize_schema" { + cloudformation_type_name = "AWS::Personalize::Schema" +} + +resource_schema "aws_personalize_solution" { + cloudformation_type_name = "AWS::Personalize::Solution" +} + +resource_schema "aws_pinpoint_in_app_template" { + cloudformation_type_name = "AWS::Pinpoint::InAppTemplate" +} + +resource_schema "aws_pipes_pipe" { + cloudformation_type_name = "AWS::Pipes::Pipe" +} + +resource_schema "aws_proton_environment_account_connection" { + cloudformation_type_name = "AWS::Proton::EnvironmentAccountConnection" +} + +resource_schema "aws_proton_environment_template" { + cloudformation_type_name = "AWS::Proton::EnvironmentTemplate" +} + +resource_schema "aws_proton_service_template" { + cloudformation_type_name = "AWS::Proton::ServiceTemplate" +} + +resource_schema "aws_qbusiness_application" { + cloudformation_type_name = "AWS::QBusiness::Application" +} + +resource_schema "aws_qbusiness_data_accessor" { + cloudformation_type_name = "AWS::QBusiness::DataAccessor" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qbusiness_data_source" { + cloudformation_type_name = "AWS::QBusiness::DataSource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qbusiness_index" { + cloudformation_type_name = "AWS::QBusiness::Index" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qbusiness_permission" { + cloudformation_type_name = "AWS::QBusiness::Permission" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qbusiness_plugin" { + cloudformation_type_name = "AWS::QBusiness::Plugin" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qbusiness_retriever" { + cloudformation_type_name = "AWS::QBusiness::Retriever" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qbusiness_web_experience" { + cloudformation_type_name = "AWS::QBusiness::WebExperience" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_qldb_stream" { + cloudformation_type_name = "AWS::QLDB::Stream" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_quicksight_analysis" { + cloudformation_type_name = "AWS::QuickSight::Analysis" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_quicksight_custom_permissions" { + cloudformation_type_name = "AWS::QuickSight::CustomPermissions" +} + +resource_schema "aws_quicksight_dashboard" { + cloudformation_type_name = "AWS::QuickSight::Dashboard" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_quicksight_data_set" { + cloudformation_type_name = "AWS::QuickSight::DataSet" +} + +resource_schema "aws_quicksight_data_source" { + cloudformation_type_name = "AWS::QuickSight::DataSource" +} + +resource_schema "aws_quicksight_folder" { + cloudformation_type_name = "AWS::QuickSight::Folder" +} + +resource_schema "aws_quicksight_refresh_schedule" { + cloudformation_type_name = "AWS::QuickSight::RefreshSchedule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_quicksight_template" { + cloudformation_type_name = "AWS::QuickSight::Template" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_quicksight_theme" { + cloudformation_type_name = "AWS::QuickSight::Theme" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_quicksight_topic" { + cloudformation_type_name = "AWS::QuickSight::Topic" +} + +resource_schema "aws_quicksight_vpc_connection" { + cloudformation_type_name = "AWS::QuickSight::VPCConnection" +} + +resource_schema "aws_ram_permission" { + cloudformation_type_name = "AWS::RAM::Permission" +} + +resource_schema "aws_ram_resource_share" { + cloudformation_type_name = "AWS::RAM::ResourceShare" +} + +resource_schema "aws_rds_custom_db_engine_version" { + cloudformation_type_name = "AWS::RDS::CustomDBEngineVersion" +} + +resource_schema "aws_rds_db_cluster" { + cloudformation_type_name = "AWS::RDS::DBCluster" +} + +resource_schema "aws_rds_db_cluster_parameter_group" { + cloudformation_type_name = "AWS::RDS::DBClusterParameterGroup" +} + +resource_schema "aws_rds_db_instance" { + cloudformation_type_name = "AWS::RDS::DBInstance" +} + +resource_schema "aws_rds_db_parameter_group" { + cloudformation_type_name = "AWS::RDS::DBParameterGroup" +} + +resource_schema "aws_rds_db_proxy" { + cloudformation_type_name = "AWS::RDS::DBProxy" +} + +resource_schema "aws_rds_db_proxy_endpoint" { + cloudformation_type_name = "AWS::RDS::DBProxyEndpoint" +} + +resource_schema "aws_rds_db_proxy_target_group" { + cloudformation_type_name = "AWS::RDS::DBProxyTargetGroup" +} + +resource_schema "aws_rds_db_shard_group" { + cloudformation_type_name = "AWS::RDS::DBShardGroup" +} + +resource_schema "aws_rds_db_subnet_group" { + cloudformation_type_name = "AWS::RDS::DBSubnetGroup" +} + +resource_schema "aws_rds_event_subscription" { + cloudformation_type_name = "AWS::RDS::EventSubscription" +} + +resource_schema "aws_rds_global_cluster" { + cloudformation_type_name = "AWS::RDS::GlobalCluster" +} + +resource_schema "aws_rds_integration" { + cloudformation_type_name = "AWS::RDS::Integration" +} + +resource_schema "aws_rds_option_group" { + cloudformation_type_name = "AWS::RDS::OptionGroup" +} + +resource_schema "aws_rum_app_monitor" { + cloudformation_type_name = "AWS::RUM::AppMonitor" +} + +resource_schema "aws_rbin_rule" { + cloudformation_type_name = "AWS::Rbin::Rule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_redshift_cluster" { + cloudformation_type_name = "AWS::Redshift::Cluster" +} + +resource_schema "aws_redshift_cluster_parameter_group" { + cloudformation_type_name = "AWS::Redshift::ClusterParameterGroup" +} + +resource_schema "aws_redshift_cluster_subnet_group" { + cloudformation_type_name = "AWS::Redshift::ClusterSubnetGroup" +} + +resource_schema "aws_redshift_endpoint_access" { + cloudformation_type_name = "AWS::Redshift::EndpointAccess" +} + +resource_schema "aws_redshift_endpoint_authorization" { + cloudformation_type_name = "AWS::Redshift::EndpointAuthorization" +} + +resource_schema "aws_redshift_event_subscription" { + cloudformation_type_name = "AWS::Redshift::EventSubscription" +} + +resource_schema "aws_redshift_integration" { + cloudformation_type_name = "AWS::Redshift::Integration" +} + +resource_schema "aws_redshift_scheduled_action" { + cloudformation_type_name = "AWS::Redshift::ScheduledAction" +} + +resource_schema "aws_redshiftserverless_namespace" { + cloudformation_type_name = "AWS::RedshiftServerless::Namespace" +} + +resource_schema "aws_redshiftserverless_workgroup" { + cloudformation_type_name = "AWS::RedshiftServerless::Workgroup" +} + +resource_schema "aws_refactorspaces_application" { + cloudformation_type_name = "AWS::RefactorSpaces::Application" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_refactorspaces_environment" { + cloudformation_type_name = "AWS::RefactorSpaces::Environment" +} + +resource_schema "aws_refactorspaces_route" { + cloudformation_type_name = "AWS::RefactorSpaces::Route" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_refactorspaces_service" { + cloudformation_type_name = "AWS::RefactorSpaces::Service" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_rekognition_collection" { + cloudformation_type_name = "AWS::Rekognition::Collection" +} + +resource_schema "aws_rekognition_project" { + cloudformation_type_name = "AWS::Rekognition::Project" +} + +resource_schema "aws_rekognition_stream_processor" { + cloudformation_type_name = "AWS::Rekognition::StreamProcessor" +} + +resource_schema "aws_resiliencehub_app" { + cloudformation_type_name = "AWS::ResilienceHub::App" +} + +resource_schema "aws_resiliencehub_resiliency_policy" { + cloudformation_type_name = "AWS::ResilienceHub::ResiliencyPolicy" +} + +resource_schema "aws_resourceexplorer2_default_view_association" { + cloudformation_type_name = "AWS::ResourceExplorer2::DefaultViewAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_resourceexplorer2_index" { + cloudformation_type_name = "AWS::ResourceExplorer2::Index" +} + +resource_schema "aws_resourceexplorer2_view" { + cloudformation_type_name = "AWS::ResourceExplorer2::View" +} + +resource_schema "aws_resourcegroups_group" { + cloudformation_type_name = "AWS::ResourceGroups::Group" +} + +resource_schema "aws_resourcegroups_tag_sync_task" { + cloudformation_type_name = "AWS::ResourceGroups::TagSyncTask" +} + +resource_schema "aws_robomaker_fleet" { + cloudformation_type_name = "AWS::RoboMaker::Fleet" +} + +resource_schema "aws_robomaker_robot" { + cloudformation_type_name = "AWS::RoboMaker::Robot" +} + +resource_schema "aws_robomaker_robot_application" { + cloudformation_type_name = "AWS::RoboMaker::RobotApplication" +} + +resource_schema "aws_robomaker_robot_application_version" { + cloudformation_type_name = "AWS::RoboMaker::RobotApplicationVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_robomaker_simulation_application" { + cloudformation_type_name = "AWS::RoboMaker::SimulationApplication" +} + +resource_schema "aws_robomaker_simulation_application_version" { + cloudformation_type_name = "AWS::RoboMaker::SimulationApplicationVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_rolesanywhere_crl" { + cloudformation_type_name = "AWS::RolesAnywhere::CRL" +} + +resource_schema "aws_rolesanywhere_profile" { + cloudformation_type_name = "AWS::RolesAnywhere::Profile" +} + +resource_schema "aws_rolesanywhere_trust_anchor" { + cloudformation_type_name = "AWS::RolesAnywhere::TrustAnchor" +} + +resource_schema "aws_route53_cidr_collection" { + cloudformation_type_name = "AWS::Route53::CidrCollection" +} + +resource_schema "aws_route53_dnssec" { + cloudformation_type_name = "AWS::Route53::DNSSEC" +} + +resource_schema "aws_route53_health_check" { + cloudformation_type_name = "AWS::Route53::HealthCheck" +} + +resource_schema "aws_route53_hosted_zone" { + cloudformation_type_name = "AWS::Route53::HostedZone" +} + +resource_schema "aws_route53_key_signing_key" { + cloudformation_type_name = "AWS::Route53::KeySigningKey" +} + +resource_schema "aws_route53profiles_profile" { + cloudformation_type_name = "AWS::Route53Profiles::Profile" +} + +resource_schema "aws_route53profiles_profile_association" { + cloudformation_type_name = "AWS::Route53Profiles::ProfileAssociation" +} + +resource_schema "aws_route53profiles_profile_resource_association" { + cloudformation_type_name = "AWS::Route53Profiles::ProfileResourceAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_route53recoverycontrol_cluster" { + cloudformation_type_name = "AWS::Route53RecoveryControl::Cluster" +} + +resource_schema "aws_route53recoverycontrol_control_panel" { + cloudformation_type_name = "AWS::Route53RecoveryControl::ControlPanel" +} + +resource_schema "aws_route53recoverycontrol_routing_control" { + cloudformation_type_name = "AWS::Route53RecoveryControl::RoutingControl" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_route53recoverycontrol_safety_rule" { + cloudformation_type_name = "AWS::Route53RecoveryControl::SafetyRule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_route53recoveryreadiness_cell" { + cloudformation_type_name = "AWS::Route53RecoveryReadiness::Cell" +} + +resource_schema "aws_route53recoveryreadiness_readiness_check" { + cloudformation_type_name = "AWS::Route53RecoveryReadiness::ReadinessCheck" +} + +resource_schema "aws_route53recoveryreadiness_recovery_group" { + cloudformation_type_name = "AWS::Route53RecoveryReadiness::RecoveryGroup" +} + +resource_schema "aws_route53recoveryreadiness_resource_set" { + cloudformation_type_name = "AWS::Route53RecoveryReadiness::ResourceSet" +} + +resource_schema "aws_route53resolver_firewall_domain_list" { + cloudformation_type_name = "AWS::Route53Resolver::FirewallDomainList" +} + +resource_schema "aws_route53resolver_firewall_rule_group" { + cloudformation_type_name = "AWS::Route53Resolver::FirewallRuleGroup" +} + +resource_schema "aws_route53resolver_firewall_rule_group_association" { + cloudformation_type_name = "AWS::Route53Resolver::FirewallRuleGroupAssociation" +} + +resource_schema "aws_route53resolver_outpost_resolver" { + cloudformation_type_name = "AWS::Route53Resolver::OutpostResolver" +} + +resource_schema "aws_route53resolver_resolver_config" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverConfig" +} + +resource_schema "aws_route53resolver_resolver_dnssec_config" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverDNSSECConfig" +} + +resource_schema "aws_route53resolver_resolver_endpoint" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverEndpoint" +} + +resource_schema "aws_route53resolver_resolver_query_logging_config" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverQueryLoggingConfig" +} + +resource_schema "aws_route53resolver_resolver_query_logging_config_association" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" +} + +resource_schema "aws_route53resolver_resolver_rule" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverRule" +} + +resource_schema "aws_route53resolver_resolver_rule_association" { + cloudformation_type_name = "AWS::Route53Resolver::ResolverRuleAssociation" +} + +resource_schema "aws_s3_access_grant" { + cloudformation_type_name = "AWS::S3::AccessGrant" +} + +resource_schema "aws_s3_access_grants_instance" { + cloudformation_type_name = "AWS::S3::AccessGrantsInstance" +} + +resource_schema "aws_s3_access_grants_location" { + cloudformation_type_name = "AWS::S3::AccessGrantsLocation" +} + +resource_schema "aws_s3_access_point" { + cloudformation_type_name = "AWS::S3::AccessPoint" +} + +resource_schema "aws_s3_bucket" { + cloudformation_type_name = "AWS::S3::Bucket" +} + +resource_schema "aws_s3_bucket_policy" { + cloudformation_type_name = "AWS::S3::BucketPolicy" +} + +resource_schema "aws_s3_multi_region_access_point" { + cloudformation_type_name = "AWS::S3::MultiRegionAccessPoint" +} + +resource_schema "aws_s3_multi_region_access_point_policy" { + cloudformation_type_name = "AWS::S3::MultiRegionAccessPointPolicy" +} + +resource_schema "aws_s3_storage_lens" { + cloudformation_type_name = "AWS::S3::StorageLens" +} + +resource_schema "aws_s3_storage_lens_group" { + cloudformation_type_name = "AWS::S3::StorageLensGroup" +} + +resource_schema "aws_s3express_access_point" { + cloudformation_type_name = "AWS::S3Express::AccessPoint" +} + +resource_schema "aws_s3express_bucket_policy" { + cloudformation_type_name = "AWS::S3Express::BucketPolicy" +} + +resource_schema "aws_s3express_directory_bucket" { + cloudformation_type_name = "AWS::S3Express::DirectoryBucket" +} + +resource_schema "aws_s3objectlambda_access_point" { + cloudformation_type_name = "AWS::S3ObjectLambda::AccessPoint" +} + +resource_schema "aws_s3objectlambda_access_point_policy" { + cloudformation_type_name = "AWS::S3ObjectLambda::AccessPointPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_s3outposts_access_point" { + cloudformation_type_name = "AWS::S3Outposts::AccessPoint" +} + +resource_schema "aws_s3outposts_bucket" { + cloudformation_type_name = "AWS::S3Outposts::Bucket" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_s3outposts_bucket_policy" { + cloudformation_type_name = "AWS::S3Outposts::BucketPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_s3outposts_endpoint" { + cloudformation_type_name = "AWS::S3Outposts::Endpoint" +} + +resource_schema "aws_s3tables_table_bucket" { + cloudformation_type_name = "AWS::S3Tables::TableBucket" +} + +resource_schema "aws_s3tables_table_bucket_policy" { + cloudformation_type_name = "AWS::S3Tables::TableBucketPolicy" +} + +resource_schema "aws_ses_configuration_set" { + cloudformation_type_name = "AWS::SES::ConfigurationSet" +} + +resource_schema "aws_ses_configuration_set_event_destination" { + cloudformation_type_name = "AWS::SES::ConfigurationSetEventDestination" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ses_contact_list" { + cloudformation_type_name = "AWS::SES::ContactList" +} + +resource_schema "aws_ses_dedicated_ip_pool" { + cloudformation_type_name = "AWS::SES::DedicatedIpPool" +} + +resource_schema "aws_ses_email_identity" { + cloudformation_type_name = "AWS::SES::EmailIdentity" +} + +resource_schema "aws_ses_mail_manager_addon_instance" { + cloudformation_type_name = "AWS::SES::MailManagerAddonInstance" +} + +resource_schema "aws_ses_mail_manager_addon_subscription" { + cloudformation_type_name = "AWS::SES::MailManagerAddonSubscription" +} + +resource_schema "aws_ses_mail_manager_address_list" { + cloudformation_type_name = "AWS::SES::MailManagerAddressList" +} + +resource_schema "aws_ses_mail_manager_archive" { + cloudformation_type_name = "AWS::SES::MailManagerArchive" +} + +resource_schema "aws_ses_mail_manager_ingress_point" { + cloudformation_type_name = "AWS::SES::MailManagerIngressPoint" +} + +resource_schema "aws_ses_mail_manager_relay" { + cloudformation_type_name = "AWS::SES::MailManagerRelay" +} + +resource_schema "aws_ses_mail_manager_rule_set" { + cloudformation_type_name = "AWS::SES::MailManagerRuleSet" +} + +resource_schema "aws_ses_mail_manager_traffic_policy" { + cloudformation_type_name = "AWS::SES::MailManagerTrafficPolicy" +} + +resource_schema "aws_ses_template" { + cloudformation_type_name = "AWS::SES::Template" +} + +resource_schema "aws_ses_vdm_attributes" { + cloudformation_type_name = "AWS::SES::VdmAttributes" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_sns_subscription" { + cloudformation_type_name = "AWS::SNS::Subscription" +} + +resource_schema "aws_sns_topic" { + cloudformation_type_name = "AWS::SNS::Topic" +} + +resource_schema "aws_sns_topic_inline_policy" { + cloudformation_type_name = "AWS::SNS::TopicInlinePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_sqs_queue" { + cloudformation_type_name = "AWS::SQS::Queue" +} + +resource_schema "aws_sqs_queue_inline_policy" { + cloudformation_type_name = "AWS::SQS::QueueInlinePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ssm_association" { + cloudformation_type_name = "AWS::SSM::Association" +} + +resource_schema "aws_ssm_document" { + cloudformation_type_name = "AWS::SSM::Document" +} + +resource_schema "aws_ssm_parameter" { + cloudformation_type_name = "AWS::SSM::Parameter" +} + +resource_schema "aws_ssm_patch_baseline" { + cloudformation_type_name = "AWS::SSM::PatchBaseline" +} + +resource_schema "aws_ssm_resource_data_sync" { + cloudformation_type_name = "AWS::SSM::ResourceDataSync" +} + +resource_schema "aws_ssm_resource_policy" { + cloudformation_type_name = "AWS::SSM::ResourcePolicy" +} + +resource_schema "aws_ssmcontacts_contact" { + cloudformation_type_name = "AWS::SSMContacts::Contact" +} + +resource_schema "aws_ssmcontacts_contact_channel" { + cloudformation_type_name = "AWS::SSMContacts::ContactChannel" +} + +resource_schema "aws_ssmcontacts_plan" { + cloudformation_type_name = "AWS::SSMContacts::Plan" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_ssmcontacts_rotation" { + cloudformation_type_name = "AWS::SSMContacts::Rotation" +} + +resource_schema "aws_ssmguiconnect_preferences" { + cloudformation_type_name = "AWS::SSMGuiConnect::Preferences" +} + +resource_schema "aws_ssmincidents_replication_set" { + cloudformation_type_name = "AWS::SSMIncidents::ReplicationSet" +} + +resource_schema "aws_ssmincidents_response_plan" { + cloudformation_type_name = "AWS::SSMIncidents::ResponsePlan" +} + +resource_schema "aws_ssmquicksetup_configuration_manager" { + cloudformation_type_name = "AWS::SSMQuickSetup::ConfigurationManager" +} + +resource_schema "aws_sso_application" { + cloudformation_type_name = "AWS::SSO::Application" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_sso_application_assignment" { + cloudformation_type_name = "AWS::SSO::ApplicationAssignment" +} + +resource_schema "aws_sso_assignment" { + cloudformation_type_name = "AWS::SSO::Assignment" +} + +resource_schema "aws_sso_instance" { + cloudformation_type_name = "AWS::SSO::Instance" +} + +resource_schema "aws_sso_instance_access_control_attribute_configuration" { + cloudformation_type_name = "AWS::SSO::InstanceAccessControlAttributeConfiguration" +} + +resource_schema "aws_sso_permission_set" { + cloudformation_type_name = "AWS::SSO::PermissionSet" +} + +resource_schema "aws_sagemaker_app" { + cloudformation_type_name = "AWS::SageMaker::App" +} + +resource_schema "aws_sagemaker_app_image_config" { + cloudformation_type_name = "AWS::SageMaker::AppImageConfig" +} + +resource_schema "aws_sagemaker_cluster" { + cloudformation_type_name = "AWS::SageMaker::Cluster" +} + +resource_schema "aws_sagemaker_data_quality_job_definition" { + cloudformation_type_name = "AWS::SageMaker::DataQualityJobDefinition" +} + +resource_schema "aws_sagemaker_device" { + cloudformation_type_name = "AWS::SageMaker::Device" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_sagemaker_device_fleet" { + cloudformation_type_name = "AWS::SageMaker::DeviceFleet" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_sagemaker_domain" { + cloudformation_type_name = "AWS::SageMaker::Domain" +} + +resource_schema "aws_sagemaker_endpoint" { + cloudformation_type_name = "AWS::SageMaker::Endpoint" +} + +resource_schema "aws_sagemaker_feature_group" { + cloudformation_type_name = "AWS::SageMaker::FeatureGroup" +} + +resource_schema "aws_sagemaker_image" { + cloudformation_type_name = "AWS::SageMaker::Image" +} + +resource_schema "aws_sagemaker_image_version" { + cloudformation_type_name = "AWS::SageMaker::ImageVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_sagemaker_inference_component" { + cloudformation_type_name = "AWS::SageMaker::InferenceComponent" +} + +resource_schema "aws_sagemaker_inference_experiment" { + cloudformation_type_name = "AWS::SageMaker::InferenceExperiment" +} + +resource_schema "aws_sagemaker_mlflow_tracking_server" { + cloudformation_type_name = "AWS::SageMaker::MlflowTrackingServer" +} + +resource_schema "aws_sagemaker_model_bias_job_definition" { + cloudformation_type_name = "AWS::SageMaker::ModelBiasJobDefinition" +} + +resource_schema "aws_sagemaker_model_card" { + cloudformation_type_name = "AWS::SageMaker::ModelCard" +} + +resource_schema "aws_sagemaker_model_explainability_job_definition" { + cloudformation_type_name = "AWS::SageMaker::ModelExplainabilityJobDefinition" +} + +resource_schema "aws_sagemaker_model_package" { + cloudformation_type_name = "AWS::SageMaker::ModelPackage" +} + +resource_schema "aws_sagemaker_model_package_group" { + cloudformation_type_name = "AWS::SageMaker::ModelPackageGroup" +} + +resource_schema "aws_sagemaker_model_quality_job_definition" { + cloudformation_type_name = "AWS::SageMaker::ModelQualityJobDefinition" +} + +resource_schema "aws_sagemaker_monitoring_schedule" { + cloudformation_type_name = "AWS::SageMaker::MonitoringSchedule" +} + +resource_schema "aws_sagemaker_partner_app" { + cloudformation_type_name = "AWS::SageMaker::PartnerApp" +} + +resource_schema "aws_sagemaker_pipeline" { + cloudformation_type_name = "AWS::SageMaker::Pipeline" +} + +resource_schema "aws_sagemaker_project" { + cloudformation_type_name = "AWS::SageMaker::Project" +} + +resource_schema "aws_sagemaker_space" { + cloudformation_type_name = "AWS::SageMaker::Space" +} + +resource_schema "aws_sagemaker_studio_lifecycle_config" { + cloudformation_type_name = "AWS::SageMaker::StudioLifecycleConfig" +} + +resource_schema "aws_sagemaker_user_profile" { + cloudformation_type_name = "AWS::SageMaker::UserProfile" +} + +resource_schema "aws_scheduler_schedule" { + cloudformation_type_name = "AWS::Scheduler::Schedule" +} + +resource_schema "aws_scheduler_schedule_group" { + cloudformation_type_name = "AWS::Scheduler::ScheduleGroup" +} + +resource_schema "aws_secretsmanager_resource_policy" { + cloudformation_type_name = "AWS::SecretsManager::ResourcePolicy" +} + +resource_schema "aws_secretsmanager_rotation_schedule" { + cloudformation_type_name = "AWS::SecretsManager::RotationSchedule" +} + +resource_schema "aws_secretsmanager_secret" { + cloudformation_type_name = "AWS::SecretsManager::Secret" +} + +resource_schema "aws_secretsmanager_secret_target_attachment" { + cloudformation_type_name = "AWS::SecretsManager::SecretTargetAttachment" +} + +resource_schema "aws_securityhub_aggregator_v2" { + cloudformation_type_name = "AWS::SecurityHub::AggregatorV2" +} + +resource_schema "aws_securityhub_automation_rule" { + cloudformation_type_name = "AWS::SecurityHub::AutomationRule" +} + +resource_schema "aws_securityhub_automation_rule_v2" { + cloudformation_type_name = "AWS::SecurityHub::AutomationRuleV2" +} + +resource_schema "aws_securityhub_configuration_policy" { + cloudformation_type_name = "AWS::SecurityHub::ConfigurationPolicy" +} + +resource_schema "aws_securityhub_delegated_admin" { + cloudformation_type_name = "AWS::SecurityHub::DelegatedAdmin" +} + +resource_schema "aws_securityhub_finding_aggregator" { + cloudformation_type_name = "AWS::SecurityHub::FindingAggregator" +} + +resource_schema "aws_securityhub_hub" { + cloudformation_type_name = "AWS::SecurityHub::Hub" +} + +resource_schema "aws_securityhub_hub_v2" { + cloudformation_type_name = "AWS::SecurityHub::HubV2" +} + +resource_schema "aws_securityhub_insight" { + cloudformation_type_name = "AWS::SecurityHub::Insight" +} + +resource_schema "aws_securityhub_organization_configuration" { + cloudformation_type_name = "AWS::SecurityHub::OrganizationConfiguration" +} + +resource_schema "aws_securityhub_policy_association" { + cloudformation_type_name = "AWS::SecurityHub::PolicyAssociation" +} + +resource_schema "aws_securityhub_product_subscription" { + cloudformation_type_name = "AWS::SecurityHub::ProductSubscription" +} + +resource_schema "aws_securityhub_security_control" { + cloudformation_type_name = "AWS::SecurityHub::SecurityControl" +} + +resource_schema "aws_securityhub_standard" { + cloudformation_type_name = "AWS::SecurityHub::Standard" +} + +resource_schema "aws_securitylake_aws_log_source" { + cloudformation_type_name = "AWS::SecurityLake::AwsLogSource" +} + +resource_schema "aws_securitylake_data_lake" { + cloudformation_type_name = "AWS::SecurityLake::DataLake" +} + +resource_schema "aws_securitylake_subscriber" { + cloudformation_type_name = "AWS::SecurityLake::Subscriber" +} + +resource_schema "aws_securitylake_subscriber_notification" { + cloudformation_type_name = "AWS::SecurityLake::SubscriberNotification" +} + +resource_schema "aws_servicecatalog_cloudformation_provisioned_product" { + cloudformation_type_name = "AWS::ServiceCatalog::CloudFormationProvisionedProduct" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_servicecatalog_service_action" { + cloudformation_type_name = "AWS::ServiceCatalog::ServiceAction" +} + +resource_schema "aws_servicecatalog_service_action_association" { + cloudformation_type_name = "AWS::ServiceCatalog::ServiceActionAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_servicecatalogappregistry_application" { + cloudformation_type_name = "AWS::ServiceCatalogAppRegistry::Application" +} + +resource_schema "aws_servicecatalogappregistry_attribute_group" { + cloudformation_type_name = "AWS::ServiceCatalogAppRegistry::AttributeGroup" +} + +resource_schema "aws_servicecatalogappregistry_attribute_group_association" { + cloudformation_type_name = "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_servicecatalogappregistry_resource_association" { + cloudformation_type_name = "AWS::ServiceCatalogAppRegistry::ResourceAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_shield_drt_access" { + cloudformation_type_name = "AWS::Shield::DRTAccess" +} + +resource_schema "aws_shield_proactive_engagement" { + cloudformation_type_name = "AWS::Shield::ProactiveEngagement" +} + +resource_schema "aws_shield_protection" { + cloudformation_type_name = "AWS::Shield::Protection" +} + +resource_schema "aws_shield_protection_group" { + cloudformation_type_name = "AWS::Shield::ProtectionGroup" +} + +resource_schema "aws_signer_profile_permission" { + cloudformation_type_name = "AWS::Signer::ProfilePermission" +} + +resource_schema "aws_signer_signing_profile" { + cloudformation_type_name = "AWS::Signer::SigningProfile" +} + +resource_schema "aws_simspaceweaver_simulation" { + cloudformation_type_name = "AWS::SimSpaceWeaver::Simulation" +} + +resource_schema "aws_stepfunctions_activity" { + cloudformation_type_name = "AWS::StepFunctions::Activity" +} + +resource_schema "aws_stepfunctions_state_machine" { + cloudformation_type_name = "AWS::StepFunctions::StateMachine" +} + +resource_schema "aws_stepfunctions_state_machine_alias" { + cloudformation_type_name = "AWS::StepFunctions::StateMachineAlias" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_stepfunctions_state_machine_version" { + cloudformation_type_name = "AWS::StepFunctions::StateMachineVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_supportapp_account_alias" { + cloudformation_type_name = "AWS::SupportApp::AccountAlias" +} + +resource_schema "aws_supportapp_slack_channel_configuration" { + cloudformation_type_name = "AWS::SupportApp::SlackChannelConfiguration" +} + +resource_schema "aws_supportapp_slack_workspace_configuration" { + cloudformation_type_name = "AWS::SupportApp::SlackWorkspaceConfiguration" +} + +resource_schema "aws_synthetics_canary" { + cloudformation_type_name = "AWS::Synthetics::Canary" +} + +resource_schema "aws_synthetics_group" { + cloudformation_type_name = "AWS::Synthetics::Group" +} + +resource_schema "aws_systemsmanagersap_application" { + cloudformation_type_name = "AWS::SystemsManagerSAP::Application" +} + +resource_schema "aws_timestream_database" { + cloudformation_type_name = "AWS::Timestream::Database" +} + +resource_schema "aws_timestream_influx_db_instance" { + cloudformation_type_name = "AWS::Timestream::InfluxDBInstance" +} + +resource_schema "aws_timestream_scheduled_query" { + cloudformation_type_name = "AWS::Timestream::ScheduledQuery" +} + +resource_schema "aws_timestream_table" { + cloudformation_type_name = "AWS::Timestream::Table" +} + +resource_schema "aws_transfer_agreement" { + cloudformation_type_name = "AWS::Transfer::Agreement" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_transfer_certificate" { + cloudformation_type_name = "AWS::Transfer::Certificate" +} + +resource_schema "aws_transfer_connector" { + cloudformation_type_name = "AWS::Transfer::Connector" +} + +resource_schema "aws_transfer_profile" { + cloudformation_type_name = "AWS::Transfer::Profile" +} + +resource_schema "aws_transfer_server" { + cloudformation_type_name = "AWS::Transfer::Server" +} + +resource_schema "aws_transfer_user" { + cloudformation_type_name = "AWS::Transfer::User" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_transfer_web_app" { + cloudformation_type_name = "AWS::Transfer::WebApp" +} + +resource_schema "aws_transfer_workflow" { + cloudformation_type_name = "AWS::Transfer::Workflow" +} + +resource_schema "aws_verifiedpermissions_identity_source" { + cloudformation_type_name = "AWS::VerifiedPermissions::IdentitySource" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_verifiedpermissions_policy" { + cloudformation_type_name = "AWS::VerifiedPermissions::Policy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_verifiedpermissions_policy_store" { + cloudformation_type_name = "AWS::VerifiedPermissions::PolicyStore" +} + +resource_schema "aws_verifiedpermissions_policy_template" { + cloudformation_type_name = "AWS::VerifiedPermissions::PolicyTemplate" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_voiceid_domain" { + cloudformation_type_name = "AWS::VoiceID::Domain" +} + +resource_schema "aws_vpclattice_access_log_subscription" { + cloudformation_type_name = "AWS::VpcLattice::AccessLogSubscription" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_vpclattice_auth_policy" { + cloudformation_type_name = "AWS::VpcLattice::AuthPolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_vpclattice_listener" { + cloudformation_type_name = "AWS::VpcLattice::Listener" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_vpclattice_resource_configuration" { + cloudformation_type_name = "AWS::VpcLattice::ResourceConfiguration" +} + +resource_schema "aws_vpclattice_resource_gateway" { + cloudformation_type_name = "AWS::VpcLattice::ResourceGateway" +} + +resource_schema "aws_vpclattice_resource_policy" { + cloudformation_type_name = "AWS::VpcLattice::ResourcePolicy" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_vpclattice_rule" { + cloudformation_type_name = "AWS::VpcLattice::Rule" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_vpclattice_service" { + cloudformation_type_name = "AWS::VpcLattice::Service" +} + +resource_schema "aws_vpclattice_service_network" { + cloudformation_type_name = "AWS::VpcLattice::ServiceNetwork" +} + +resource_schema "aws_vpclattice_service_network_resource_association" { + cloudformation_type_name = "AWS::VpcLattice::ServiceNetworkResourceAssociation" +} + +resource_schema "aws_vpclattice_service_network_service_association" { + cloudformation_type_name = "AWS::VpcLattice::ServiceNetworkServiceAssociation" +} + +resource_schema "aws_vpclattice_service_network_vpc_association" { + cloudformation_type_name = "AWS::VpcLattice::ServiceNetworkVpcAssociation" +} + +resource_schema "aws_vpclattice_target_group" { + cloudformation_type_name = "AWS::VpcLattice::TargetGroup" +} + +resource_schema "aws_wafv2_ip_set" { + cloudformation_type_name = "AWS::WAFv2::IPSet" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wafv2_logging_configuration" { + cloudformation_type_name = "AWS::WAFv2::LoggingConfiguration" +} + +resource_schema "aws_wafv2_regex_pattern_set" { + cloudformation_type_name = "AWS::WAFv2::RegexPatternSet" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wafv2_rule_group" { + cloudformation_type_name = "AWS::WAFv2::RuleGroup" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wafv2_web_acl" { + cloudformation_type_name = "AWS::WAFv2::WebACL" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wafv2_web_acl_association" { + cloudformation_type_name = "AWS::WAFv2::WebACLAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_ai_agent" { + cloudformation_type_name = "AWS::Wisdom::AIAgent" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_ai_agent_version" { + cloudformation_type_name = "AWS::Wisdom::AIAgentVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_ai_guardrail" { + cloudformation_type_name = "AWS::Wisdom::AIGuardrail" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_ai_guardrail_version" { + cloudformation_type_name = "AWS::Wisdom::AIGuardrailVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_ai_prompt" { + cloudformation_type_name = "AWS::Wisdom::AIPrompt" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_ai_prompt_version" { + cloudformation_type_name = "AWS::Wisdom::AIPromptVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_assistant" { + cloudformation_type_name = "AWS::Wisdom::Assistant" +} + +resource_schema "aws_wisdom_assistant_association" { + cloudformation_type_name = "AWS::Wisdom::AssistantAssociation" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_knowledge_base" { + cloudformation_type_name = "AWS::Wisdom::KnowledgeBase" +} + +resource_schema "aws_wisdom_message_template" { + cloudformation_type_name = "AWS::Wisdom::MessageTemplate" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_wisdom_message_template_version" { + cloudformation_type_name = "AWS::Wisdom::MessageTemplateVersion" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_workspaces_connection_alias" { + cloudformation_type_name = "AWS::WorkSpaces::ConnectionAlias" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_workspaces_workspaces_pool" { + cloudformation_type_name = "AWS::WorkSpaces::WorkspacesPool" +} + +resource_schema "aws_workspacesthinclient_environment" { + cloudformation_type_name = "AWS::WorkSpacesThinClient::Environment" +} + +resource_schema "aws_workspacesweb_browser_settings" { + cloudformation_type_name = "AWS::WorkSpacesWeb::BrowserSettings" +} + +resource_schema "aws_workspacesweb_data_protection_settings" { + cloudformation_type_name = "AWS::WorkSpacesWeb::DataProtectionSettings" +} + +resource_schema "aws_workspacesweb_identity_provider" { + cloudformation_type_name = "AWS::WorkSpacesWeb::IdentityProvider" + suppress_plural_data_source_generation = true +} + +resource_schema "aws_workspacesweb_ip_access_settings" { + cloudformation_type_name = "AWS::WorkSpacesWeb::IpAccessSettings" +} + +resource_schema "aws_workspacesweb_network_settings" { + cloudformation_type_name = "AWS::WorkSpacesWeb::NetworkSettings" +} + +resource_schema "aws_workspacesweb_portal" { + cloudformation_type_name = "AWS::WorkSpacesWeb::Portal" +} + +resource_schema "aws_workspacesweb_trust_store" { + cloudformation_type_name = "AWS::WorkSpacesWeb::TrustStore" +} + +resource_schema "aws_workspacesweb_user_access_logging_settings" { + cloudformation_type_name = "AWS::WorkSpacesWeb::UserAccessLoggingSettings" +} + +resource_schema "aws_workspacesweb_user_settings" { + cloudformation_type_name = "AWS::WorkSpacesWeb::UserSettings" +} + +resource_schema "aws_xray_group" { + cloudformation_type_name = "AWS::XRay::Group" +} + +resource_schema "aws_xray_resource_policy" { + cloudformation_type_name = "AWS::XRay::ResourcePolicy" +} + +resource_schema "aws_xray_sampling_rule" { + cloudformation_type_name = "AWS::XRay::SamplingRule" +} + +resource_schema "aws_xray_transaction_search_config" { + cloudformation_type_name = "AWS::XRay::TransactionSearchConfig" +} diff --git a/internal/provider/import_examples_gen.json b/internal/provider/import_examples_gen.json index 7e208e44d..ffdde2f3e 100644 --- a/internal/provider/import_examples_gen.json +++ b/internal/provider/import_examples_gen.json @@ -1934,6 +1934,11 @@ "identifier": ["Id"], "path": "./examples/resources/awscc_ec2_subnet_route_table_association/import.sh" }, + { + "resource": "awscc_ec2_traffic_mirror_filter", + "identifier": ["Id"], + "path": "./examples/resources/awscc_ec2_traffic_mirror_filter/import.sh" + }, { "resource": "awscc_ec2_transit_gateway", "identifier": ["Id"], @@ -3619,6 +3624,11 @@ "identifier": ["EnvironmentArn"], "path": "./examples/resources/awscc_m2_environment/import.sh" }, + { + "resource": "awscc_mpa_identity_source", + "identifier": ["IdentitySourceArn"], + "path": "./examples/resources/awscc_mpa_identity_source/import.sh" + }, { "resource": "awscc_msk_batch_scram_secret", "identifier": ["ClusterArn"], @@ -5264,6 +5274,16 @@ "identifier": ["Id"], "path": "./examples/resources/awscc_secretsmanager_secret_target_attachment/import.sh" }, + { + "resource": "awscc_securityhub_aggregator_v2", + "identifier": ["AggregatorV2Arn"], + "path": "./examples/resources/awscc_securityhub_aggregator_v2/import.sh" + }, + { + "resource": "awscc_securityhub_automation_rule_v2", + "identifier": ["RuleArn"], + "path": "./examples/resources/awscc_securityhub_automation_rule_v2/import.sh" + }, { "resource": "awscc_securityhub_configuration_policy", "identifier": ["Arn"], @@ -5284,6 +5304,11 @@ "identifier": ["ARN"], "path": "./examples/resources/awscc_securityhub_hub/import.sh" }, + { + "resource": "awscc_securityhub_hub_v2", + "identifier": ["HubV2Arn"], + "path": "./examples/resources/awscc_securityhub_hub_v2/import.sh" + }, { "resource": "awscc_securityhub_insight", "identifier": ["InsightArn"], diff --git a/internal/provider/plural_data_sources.go b/internal/provider/plural_data_sources.go index 35c9106d6..c5642ea17 100644 --- a/internal/provider/plural_data_sources.go +++ b/internal/provider/plural_data_sources.go @@ -265,6 +265,7 @@ //go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_subnet_cidr_blocks -cftype AWS::EC2::SubnetCidrBlock -package ec2 ../aws/ec2/subnet_cidr_block_plural_data_source_gen.go ../aws/ec2/subnet_cidr_block_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_subnet_network_acl_associations -cftype AWS::EC2::SubnetNetworkAclAssociation -package ec2 ../aws/ec2/subnet_network_acl_association_plural_data_source_gen.go ../aws/ec2/subnet_network_acl_association_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_subnet_route_table_associations -cftype AWS::EC2::SubnetRouteTableAssociation -package ec2 ../aws/ec2/subnet_route_table_association_plural_data_source_gen.go ../aws/ec2/subnet_route_table_association_plural_data_source_gen_test.go +//go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_traffic_mirror_filters -cftype AWS::EC2::TrafficMirrorFilter -package ec2 ../aws/ec2/traffic_mirror_filter_plural_data_source_gen.go ../aws/ec2/traffic_mirror_filter_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_transit_gateways -cftype AWS::EC2::TransitGateway -package ec2 ../aws/ec2/transit_gateway_plural_data_source_gen.go ../aws/ec2/transit_gateway_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_transit_gateway_attachments -cftype AWS::EC2::TransitGatewayAttachment -package ec2 ../aws/ec2/transit_gateway_attachment_plural_data_source_gen.go ../aws/ec2/transit_gateway_attachment_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_ec2_transit_gateway_connects -cftype AWS::EC2::TransitGatewayConnect -package ec2 ../aws/ec2/transit_gateway_connect_plural_data_source_gen.go ../aws/ec2/transit_gateway_connect_plural_data_source_gen_test.go @@ -548,6 +549,7 @@ //go:generate go run generators/plural-data-source/main.go -data-source awscc_lookoutvision_projects -cftype AWS::LookoutVision::Project -package lookoutvision ../aws/lookoutvision/project_plural_data_source_gen.go ../aws/lookoutvision/project_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_m2_applications -cftype AWS::M2::Application -package m2 ../aws/m2/application_plural_data_source_gen.go ../aws/m2/application_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_m2_environments -cftype AWS::M2::Environment -package m2 ../aws/m2/environment_plural_data_source_gen.go ../aws/m2/environment_plural_data_source_gen_test.go +//go:generate go run generators/plural-data-source/main.go -data-source awscc_mpa_identity_sources -cftype AWS::MPA::IdentitySource -package mpa ../aws/mpa/identity_source_plural_data_source_gen.go ../aws/mpa/identity_source_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_msk_clusters -cftype AWS::MSK::Cluster -package msk ../aws/msk/cluster_plural_data_source_gen.go ../aws/msk/cluster_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_msk_configurations -cftype AWS::MSK::Configuration -package msk ../aws/msk/configuration_plural_data_source_gen.go ../aws/msk/configuration_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_msk_replicators -cftype AWS::MSK::Replicator -package msk ../aws/msk/replicator_plural_data_source_gen.go ../aws/msk/replicator_plural_data_source_gen_test.go @@ -805,10 +807,13 @@ //go:generate go run generators/plural-data-source/main.go -data-source awscc_secretsmanager_rotation_schedules -cftype AWS::SecretsManager::RotationSchedule -package secretsmanager ../aws/secretsmanager/rotation_schedule_plural_data_source_gen.go ../aws/secretsmanager/rotation_schedule_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_secretsmanager_secrets -cftype AWS::SecretsManager::Secret -package secretsmanager ../aws/secretsmanager/secret_plural_data_source_gen.go ../aws/secretsmanager/secret_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_secretsmanager_secret_target_attachments -cftype AWS::SecretsManager::SecretTargetAttachment -package secretsmanager ../aws/secretsmanager/secret_target_attachment_plural_data_source_gen.go ../aws/secretsmanager/secret_target_attachment_plural_data_source_gen_test.go +//go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_aggregator_v2s -cftype AWS::SecurityHub::AggregatorV2 -package securityhub ../aws/securityhub/aggregator_v2_plural_data_source_gen.go ../aws/securityhub/aggregator_v2_plural_data_source_gen_test.go +//go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_automation_rule_v2s -cftype AWS::SecurityHub::AutomationRuleV2 -package securityhub ../aws/securityhub/automation_rule_v2_plural_data_source_gen.go ../aws/securityhub/automation_rule_v2_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_configuration_policies -cftype AWS::SecurityHub::ConfigurationPolicy -package securityhub ../aws/securityhub/configuration_policy_plural_data_source_gen.go ../aws/securityhub/configuration_policy_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_delegated_admins -cftype AWS::SecurityHub::DelegatedAdmin -package securityhub ../aws/securityhub/delegated_admin_plural_data_source_gen.go ../aws/securityhub/delegated_admin_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_finding_aggregators -cftype AWS::SecurityHub::FindingAggregator -package securityhub ../aws/securityhub/finding_aggregator_plural_data_source_gen.go ../aws/securityhub/finding_aggregator_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_hubs -cftype AWS::SecurityHub::Hub -package securityhub ../aws/securityhub/hub_plural_data_source_gen.go ../aws/securityhub/hub_plural_data_source_gen_test.go +//go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_hub_v2s -cftype AWS::SecurityHub::HubV2 -package securityhub ../aws/securityhub/hub_v2_plural_data_source_gen.go ../aws/securityhub/hub_v2_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_insights -cftype AWS::SecurityHub::Insight -package securityhub ../aws/securityhub/insight_plural_data_source_gen.go ../aws/securityhub/insight_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_organization_configurations -cftype AWS::SecurityHub::OrganizationConfiguration -package securityhub ../aws/securityhub/organization_configuration_plural_data_source_gen.go ../aws/securityhub/organization_configuration_plural_data_source_gen_test.go //go:generate go run generators/plural-data-source/main.go -data-source awscc_securityhub_policy_associations -cftype AWS::SecurityHub::PolicyAssociation -package securityhub ../aws/securityhub/policy_association_plural_data_source_gen.go ../aws/securityhub/policy_association_plural_data_source_gen_test.go @@ -1017,6 +1022,7 @@ import ( _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mediapackagev2" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mediatailor" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/memorydb" + _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mpa" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/msk" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mwaa" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/neptune" diff --git a/internal/provider/resources.go b/internal/provider/resources.go index bec6705ed..613e115ac 100644 --- a/internal/provider/resources.go +++ b/internal/provider/resources.go @@ -389,6 +389,7 @@ //go:generate go run generators/resource/main.go -resource awscc_ec2_subnet_cidr_block -cfschema ../service/cloudformation/schemas/AWS_EC2_SubnetCidrBlock.json -package ec2 -- ../aws/ec2/subnet_cidr_block_resource_gen.go ../aws/ec2/subnet_cidr_block_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_ec2_subnet_network_acl_association -cfschema ../service/cloudformation/schemas/AWS_EC2_SubnetNetworkAclAssociation.json -package ec2 -- ../aws/ec2/subnet_network_acl_association_resource_gen.go ../aws/ec2/subnet_network_acl_association_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_ec2_subnet_route_table_association -cfschema ../service/cloudformation/schemas/AWS_EC2_SubnetRouteTableAssociation.json -package ec2 -- ../aws/ec2/subnet_route_table_association_resource_gen.go ../aws/ec2/subnet_route_table_association_resource_gen_test.go +//go:generate go run generators/resource/main.go -resource awscc_ec2_traffic_mirror_filter -cfschema ../service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json -package ec2 -- ../aws/ec2/traffic_mirror_filter_resource_gen.go ../aws/ec2/traffic_mirror_filter_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_ec2_transit_gateway -cfschema ../service/cloudformation/schemas/AWS_EC2_TransitGateway.json -package ec2 -- ../aws/ec2/transit_gateway_resource_gen.go ../aws/ec2/transit_gateway_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_ec2_transit_gateway_attachment -cfschema ../service/cloudformation/schemas/AWS_EC2_TransitGatewayAttachment.json -package ec2 -- ../aws/ec2/transit_gateway_attachment_resource_gen.go ../aws/ec2/transit_gateway_attachment_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_ec2_transit_gateway_connect -cfschema ../service/cloudformation/schemas/AWS_EC2_TransitGatewayConnect.json -package ec2 -- ../aws/ec2/transit_gateway_connect_resource_gen.go ../aws/ec2/transit_gateway_connect_resource_gen_test.go @@ -726,6 +727,7 @@ //go:generate go run generators/resource/main.go -resource awscc_m2_application -cfschema ../service/cloudformation/schemas/AWS_M2_Application.json -package m2 -- ../aws/m2/application_resource_gen.go ../aws/m2/application_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_m2_deployment -cfschema ../service/cloudformation/schemas/AWS_M2_Deployment.json -package m2 -- ../aws/m2/deployment_resource_gen.go ../aws/m2/deployment_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_m2_environment -cfschema ../service/cloudformation/schemas/AWS_M2_Environment.json -package m2 -- ../aws/m2/environment_resource_gen.go ../aws/m2/environment_resource_gen_test.go +//go:generate go run generators/resource/main.go -resource awscc_mpa_identity_source -cfschema ../service/cloudformation/schemas/AWS_MPA_IdentitySource.json -package mpa -- ../aws/mpa/identity_source_resource_gen.go ../aws/mpa/identity_source_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_msk_batch_scram_secret -cfschema ../service/cloudformation/schemas/AWS_MSK_BatchScramSecret.json -package msk -- ../aws/msk/batch_scram_secret_resource_gen.go ../aws/msk/batch_scram_secret_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_msk_cluster -cfschema ../service/cloudformation/schemas/AWS_MSK_Cluster.json -package msk -- ../aws/msk/cluster_resource_gen.go ../aws/msk/cluster_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_msk_cluster_policy -cfschema ../service/cloudformation/schemas/AWS_MSK_ClusterPolicy.json -package msk -- ../aws/msk/cluster_policy_resource_gen.go ../aws/msk/cluster_policy_resource_gen_test.go @@ -1055,10 +1057,13 @@ //go:generate go run generators/resource/main.go -resource awscc_secretsmanager_rotation_schedule -cfschema ../service/cloudformation/schemas/AWS_SecretsManager_RotationSchedule.json -package secretsmanager -- ../aws/secretsmanager/rotation_schedule_resource_gen.go ../aws/secretsmanager/rotation_schedule_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_secretsmanager_secret -cfschema ../service/cloudformation/schemas/AWS_SecretsManager_Secret.json -package secretsmanager -- ../aws/secretsmanager/secret_resource_gen.go ../aws/secretsmanager/secret_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_secretsmanager_secret_target_attachment -cfschema ../service/cloudformation/schemas/AWS_SecretsManager_SecretTargetAttachment.json -package secretsmanager -- ../aws/secretsmanager/secret_target_attachment_resource_gen.go ../aws/secretsmanager/secret_target_attachment_resource_gen_test.go +//go:generate go run generators/resource/main.go -resource awscc_securityhub_aggregator_v2 -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json -package securityhub -- ../aws/securityhub/aggregator_v2_resource_gen.go ../aws/securityhub/aggregator_v2_resource_gen_test.go +//go:generate go run generators/resource/main.go -resource awscc_securityhub_automation_rule_v2 -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_AutomationRuleV2.json -package securityhub -- ../aws/securityhub/automation_rule_v2_resource_gen.go ../aws/securityhub/automation_rule_v2_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_configuration_policy -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_ConfigurationPolicy.json -package securityhub -- ../aws/securityhub/configuration_policy_resource_gen.go ../aws/securityhub/configuration_policy_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_delegated_admin -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_DelegatedAdmin.json -package securityhub -- ../aws/securityhub/delegated_admin_resource_gen.go ../aws/securityhub/delegated_admin_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_finding_aggregator -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_FindingAggregator.json -package securityhub -- ../aws/securityhub/finding_aggregator_resource_gen.go ../aws/securityhub/finding_aggregator_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_hub -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_Hub.json -package securityhub -- ../aws/securityhub/hub_resource_gen.go ../aws/securityhub/hub_resource_gen_test.go +//go:generate go run generators/resource/main.go -resource awscc_securityhub_hub_v2 -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_HubV2.json -package securityhub -- ../aws/securityhub/hub_v2_resource_gen.go ../aws/securityhub/hub_v2_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_insight -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_Insight.json -package securityhub -- ../aws/securityhub/insight_resource_gen.go ../aws/securityhub/insight_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_organization_configuration -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_OrganizationConfiguration.json -package securityhub -- ../aws/securityhub/organization_configuration_resource_gen.go ../aws/securityhub/organization_configuration_resource_gen_test.go //go:generate go run generators/resource/main.go -resource awscc_securityhub_policy_association -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_PolicyAssociation.json -package securityhub -- ../aws/securityhub/policy_association_resource_gen.go ../aws/securityhub/policy_association_resource_gen_test.go @@ -1301,6 +1306,7 @@ import ( _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mediapackagev2" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mediatailor" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/memorydb" + _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mpa" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/msk" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mwaa" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/neptune" diff --git a/internal/provider/singular_data_sources.go b/internal/provider/singular_data_sources.go index 6ae545d9c..14fb7dc2b 100644 --- a/internal/provider/singular_data_sources.go +++ b/internal/provider/singular_data_sources.go @@ -389,6 +389,7 @@ //go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_subnet_cidr_block -cfschema ../service/cloudformation/schemas/AWS_EC2_SubnetCidrBlock.json -package ec2 ../aws/ec2/subnet_cidr_block_singular_data_source_gen.go ../aws/ec2/subnet_cidr_block_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_subnet_network_acl_association -cfschema ../service/cloudformation/schemas/AWS_EC2_SubnetNetworkAclAssociation.json -package ec2 ../aws/ec2/subnet_network_acl_association_singular_data_source_gen.go ../aws/ec2/subnet_network_acl_association_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_subnet_route_table_association -cfschema ../service/cloudformation/schemas/AWS_EC2_SubnetRouteTableAssociation.json -package ec2 ../aws/ec2/subnet_route_table_association_singular_data_source_gen.go ../aws/ec2/subnet_route_table_association_singular_data_source_gen_test.go +//go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_traffic_mirror_filter -cfschema ../service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json -package ec2 ../aws/ec2/traffic_mirror_filter_singular_data_source_gen.go ../aws/ec2/traffic_mirror_filter_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_transit_gateway -cfschema ../service/cloudformation/schemas/AWS_EC2_TransitGateway.json -package ec2 ../aws/ec2/transit_gateway_singular_data_source_gen.go ../aws/ec2/transit_gateway_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_transit_gateway_attachment -cfschema ../service/cloudformation/schemas/AWS_EC2_TransitGatewayAttachment.json -package ec2 ../aws/ec2/transit_gateway_attachment_singular_data_source_gen.go ../aws/ec2/transit_gateway_attachment_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_ec2_transit_gateway_connect -cfschema ../service/cloudformation/schemas/AWS_EC2_TransitGatewayConnect.json -package ec2 ../aws/ec2/transit_gateway_connect_singular_data_source_gen.go ../aws/ec2/transit_gateway_connect_singular_data_source_gen_test.go @@ -726,6 +727,7 @@ //go:generate go run generators/singular-data-source/main.go -data-source awscc_m2_application -cfschema ../service/cloudformation/schemas/AWS_M2_Application.json -package m2 ../aws/m2/application_singular_data_source_gen.go ../aws/m2/application_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_m2_deployment -cfschema ../service/cloudformation/schemas/AWS_M2_Deployment.json -package m2 ../aws/m2/deployment_singular_data_source_gen.go ../aws/m2/deployment_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_m2_environment -cfschema ../service/cloudformation/schemas/AWS_M2_Environment.json -package m2 ../aws/m2/environment_singular_data_source_gen.go ../aws/m2/environment_singular_data_source_gen_test.go +//go:generate go run generators/singular-data-source/main.go -data-source awscc_mpa_identity_source -cfschema ../service/cloudformation/schemas/AWS_MPA_IdentitySource.json -package mpa ../aws/mpa/identity_source_singular_data_source_gen.go ../aws/mpa/identity_source_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_msk_batch_scram_secret -cfschema ../service/cloudformation/schemas/AWS_MSK_BatchScramSecret.json -package msk ../aws/msk/batch_scram_secret_singular_data_source_gen.go ../aws/msk/batch_scram_secret_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_msk_cluster -cfschema ../service/cloudformation/schemas/AWS_MSK_Cluster.json -package msk ../aws/msk/cluster_singular_data_source_gen.go ../aws/msk/cluster_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_msk_cluster_policy -cfschema ../service/cloudformation/schemas/AWS_MSK_ClusterPolicy.json -package msk ../aws/msk/cluster_policy_singular_data_source_gen.go ../aws/msk/cluster_policy_singular_data_source_gen_test.go @@ -1055,10 +1057,13 @@ //go:generate go run generators/singular-data-source/main.go -data-source awscc_secretsmanager_rotation_schedule -cfschema ../service/cloudformation/schemas/AWS_SecretsManager_RotationSchedule.json -package secretsmanager ../aws/secretsmanager/rotation_schedule_singular_data_source_gen.go ../aws/secretsmanager/rotation_schedule_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_secretsmanager_secret -cfschema ../service/cloudformation/schemas/AWS_SecretsManager_Secret.json -package secretsmanager ../aws/secretsmanager/secret_singular_data_source_gen.go ../aws/secretsmanager/secret_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_secretsmanager_secret_target_attachment -cfschema ../service/cloudformation/schemas/AWS_SecretsManager_SecretTargetAttachment.json -package secretsmanager ../aws/secretsmanager/secret_target_attachment_singular_data_source_gen.go ../aws/secretsmanager/secret_target_attachment_singular_data_source_gen_test.go +//go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_aggregator_v2 -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json -package securityhub ../aws/securityhub/aggregator_v2_singular_data_source_gen.go ../aws/securityhub/aggregator_v2_singular_data_source_gen_test.go +//go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_automation_rule_v2 -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_AutomationRuleV2.json -package securityhub ../aws/securityhub/automation_rule_v2_singular_data_source_gen.go ../aws/securityhub/automation_rule_v2_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_configuration_policy -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_ConfigurationPolicy.json -package securityhub ../aws/securityhub/configuration_policy_singular_data_source_gen.go ../aws/securityhub/configuration_policy_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_delegated_admin -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_DelegatedAdmin.json -package securityhub ../aws/securityhub/delegated_admin_singular_data_source_gen.go ../aws/securityhub/delegated_admin_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_finding_aggregator -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_FindingAggregator.json -package securityhub ../aws/securityhub/finding_aggregator_singular_data_source_gen.go ../aws/securityhub/finding_aggregator_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_hub -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_Hub.json -package securityhub ../aws/securityhub/hub_singular_data_source_gen.go ../aws/securityhub/hub_singular_data_source_gen_test.go +//go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_hub_v2 -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_HubV2.json -package securityhub ../aws/securityhub/hub_v2_singular_data_source_gen.go ../aws/securityhub/hub_v2_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_insight -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_Insight.json -package securityhub ../aws/securityhub/insight_singular_data_source_gen.go ../aws/securityhub/insight_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_organization_configuration -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_OrganizationConfiguration.json -package securityhub ../aws/securityhub/organization_configuration_singular_data_source_gen.go ../aws/securityhub/organization_configuration_singular_data_source_gen_test.go //go:generate go run generators/singular-data-source/main.go -data-source awscc_securityhub_policy_association -cfschema ../service/cloudformation/schemas/AWS_SecurityHub_PolicyAssociation.json -package securityhub ../aws/securityhub/policy_association_singular_data_source_gen.go ../aws/securityhub/policy_association_singular_data_source_gen_test.go @@ -1301,6 +1306,7 @@ import ( _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mediapackagev2" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mediatailor" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/memorydb" + _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mpa" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/msk" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/mwaa" _ "github.com/hashicorp/terraform-provider-awscc/internal/aws/neptune" diff --git a/internal/service/cloudformation/schemas/AWS_Amplify_App.json b/internal/service/cloudformation/schemas/AWS_Amplify_App.json index 095942ae5..6841c7bc8 100644 --- a/internal/service/cloudformation/schemas/AWS_Amplify_App.json +++ b/internal/service/cloudformation/schemas/AWS_Amplify_App.json @@ -115,6 +115,9 @@ "items": { "$ref": "#/definitions/Tag" } + }, + "JobConfig": { + "$ref": "#/definitions/JobConfig" } }, "definitions": { @@ -212,6 +215,23 @@ } } }, + "JobConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "BuildComputeType": { + "type": "string", + "enum": [ + "STANDARD_8GB", + "LARGE_16GB", + "XLARGE_72GB" + ] + } + }, + "required": [ + "BuildComputeType" + ] + }, "CustomRule": { "type": "object", "additionalProperties": false, diff --git a/internal/service/cloudformation/schemas/AWS_CleanRooms_Collaboration.json b/internal/service/cloudformation/schemas/AWS_CleanRooms_Collaboration.json index 8e669cc44..ecab7df65 100644 --- a/internal/service/cloudformation/schemas/AWS_CleanRooms_Collaboration.json +++ b/internal/service/cloudformation/schemas/AWS_CleanRooms_Collaboration.json @@ -115,8 +115,7 @@ }, "required": [ "AccountId", - "DisplayName", - "MemberAbilities" + "DisplayName" ], "additionalProperties": false }, @@ -302,8 +301,6 @@ }, "required": [ "CreatorDisplayName", - "CreatorMemberAbilities", - "Members", "Name", "Description", "QueryLogStatus" diff --git a/internal/service/cloudformation/schemas/AWS_DynamoDB_Table.json b/internal/service/cloudformation/schemas/AWS_DynamoDB_Table.json index c973fab54..9b9d8e59a 100644 --- a/internal/service/cloudformation/schemas/AWS_DynamoDB_Table.json +++ b/internal/service/cloudformation/schemas/AWS_DynamoDB_Table.json @@ -453,7 +453,7 @@ "type": "string" }, "OnDemandThroughput": { - "description": "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both.", + "description": "The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify ``MaxReadRequestUnits``, ``MaxWriteRequestUnits``, or both. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.", "$ref": "#/definitions/OnDemandThroughput" }, "ContributorInsightsSpecification": { @@ -465,7 +465,7 @@ "$ref": "#/definitions/Projection" }, "ProvisionedThroughput": { - "description": "Represents the provisioned throughput settings for the specified global secondary index.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", + "description": "Represents the provisioned throughput settings for the specified global secondary index. You must use either ``OnDemandThroughput`` or ``ProvisionedThroughput`` based on your table's capacity mode.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", "$ref": "#/definitions/ProvisionedThroughput" }, "KeySchema": { diff --git a/internal/service/cloudformation/schemas/AWS_EC2_Subnet.json b/internal/service/cloudformation/schemas/AWS_EC2_Subnet.json index 79d5b40f2..8a982b426 100644 --- a/internal/service/cloudformation/schemas/AWS_EC2_Subnet.json +++ b/internal/service/cloudformation/schemas/AWS_EC2_Subnet.json @@ -13,7 +13,7 @@ }, "MapPublicIpOnLaunch": { "type": "boolean", - "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/)." + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/)." }, "EnableLniAtDeviceIndex": { "type": "integer", @@ -102,6 +102,17 @@ "Ipv6NetmaskLength": { "type": "integer", "description": "An IPv6 netmask length for the subnet." + }, + "BlockPublicAccessStates": { + "type": "object", + "additionalProperties": false, + "description": "", + "properties": { + "InternetGatewayBlockMode": { + "type": "string", + "description": "The mode of VPC BPA. Options here are off, block-bidirectional, block-ingress " + } + } } }, "tagging": { @@ -160,7 +171,8 @@ "readOnlyProperties": [ "/properties/NetworkAclAssociationId", "/properties/SubnetId", - "/properties/Ipv6CidrBlocks" + "/properties/Ipv6CidrBlocks", + "/properties/BlockPublicAccessStates" ], "writeOnlyProperties": [ "/properties/EnableLniAtDeviceIndex", diff --git a/internal/service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json b/internal/service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json new file mode 100644 index 000000000..9e3ec32ee --- /dev/null +++ b/internal/service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json @@ -0,0 +1,119 @@ +{ + "typeName": "AWS::EC2::TrafficMirrorFilter", + "description": "Resource schema for AWS::EC2::TrafficMirrorFilter", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TrafficMirrorNetworkService": { + "description": "The network service traffic that is associated with the traffic mirror filter.", + "type": "string", + "enum": [ + "amazon-dns" + ] + } + }, + "properties": { + "Id": { + "description": "The ID of a traffic mirror filter.", + "type": "string" + }, + "NetworkServices": { + "description": "The network service that is associated with the traffic mirror filter.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TrafficMirrorNetworkService" + } + }, + "Description": { + "description": "The description of a traffic mirror filter.", + "type": "string" + }, + "Tags": { + "description": "The tags for a traffic mirror filter.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Description" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateTrafficMirrorFilter", + "ec2:DescribeTrafficMirrorFilters", + "ec2:CreateTags", + "ec2:ModifyTrafficMirrorFilterNetworkServices", + "ec2:DescribeTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeTrafficMirrorFilters", + "ec2:DescribeTags" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyTrafficMirrorFilterNetworkServices", + "ec2:DescribeTrafficMirrorFilters", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeTrafficMirrorFilters", + "ec2:DeleteTrafficMirrorFilter", + "ec2:DeleteTags", + "ec2:DescribeTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTrafficMirrorFilters", + "ec2:DescribeTags" + ] + } + } +} diff --git a/internal/service/cloudformation/schemas/AWS_InspectorV2_CisScanConfiguration.json b/internal/service/cloudformation/schemas/AWS_InspectorV2_CisScanConfiguration.json index 18b1aa909..6c3fb0522 100644 --- a/internal/service/cloudformation/schemas/AWS_InspectorV2_CisScanConfiguration.json +++ b/internal/service/cloudformation/schemas/AWS_InspectorV2_CisScanConfiguration.json @@ -204,7 +204,11 @@ "tagOnCreate": true, "tagUpdatable": true, "cloudFormationSystemTags": true, - "tagProperty": "/properties/Tags" + "tagProperty": "/properties/Tags", + "permissions": [ + "inspector2:TagResource", + "inspector2:UntagResource" + ] }, "handlers": { "create": { diff --git a/internal/service/cloudformation/schemas/AWS_InspectorV2_Filter.json b/internal/service/cloudformation/schemas/AWS_InspectorV2_Filter.json index 571f33cbc..91f030755 100644 --- a/internal/service/cloudformation/schemas/AWS_InspectorV2_Filter.json +++ b/internal/service/cloudformation/schemas/AWS_InspectorV2_Filter.json @@ -3,6 +3,16 @@ "description": "Inspector Filter resource schema", "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-inspector.git", "definitions": { + "FilterTagMap": { + "type": "object", + "patternProperties": { + "": { + "type": "string", + "pattern": "^.{1,255}$" + } + }, + "additionalProperties": false + }, "StringComparison": { "type": "string", "enum": [ @@ -156,12 +166,18 @@ "Epoch": { "$ref": "#/definitions/NumberFilter" }, + "FilePath": { + "$ref": "#/definitions/StringFilter" + }, "Name": { "$ref": "#/definitions/StringFilter" }, "Release": { "$ref": "#/definitions/StringFilter" }, + "SourceLambdaLayerArn": { + "$ref": "#/definitions/StringFilter" + }, "SourceLayerHash": { "$ref": "#/definitions/StringFilter" }, @@ -186,6 +202,15 @@ "AwsAccountId": { "$ref": "#/definitions/StringFilterList" }, + "CodeVulnerabilityDetectorName": { + "$ref": "#/definitions/StringFilterList" + }, + "CodeVulnerabilityDetectorTags": { + "$ref": "#/definitions/StringFilterList" + }, + "CodeVulnerabilityFilePath": { + "$ref": "#/definitions/StringFilterList" + }, "ComponentId": { "$ref": "#/definitions/StringFilterList" }, @@ -207,9 +232,6 @@ "EcrImageHash": { "$ref": "#/definitions/StringFilterList" }, - "EcrImageTags": { - "$ref": "#/definitions/StringFilterList" - }, "EcrImagePushedAt": { "$ref": "#/definitions/DateFilterList" }, @@ -219,6 +241,15 @@ "EcrImageRepositoryName": { "$ref": "#/definitions/StringFilterList" }, + "EcrImageTags": { + "$ref": "#/definitions/StringFilterList" + }, + "EpssScore": { + "$ref": "#/definitions/NumberFilterList" + }, + "ExploitAvailable": { + "$ref": "#/definitions/StringFilterList" + }, "FindingArn": { "$ref": "#/definitions/StringFilterList" }, @@ -231,9 +262,27 @@ "FirstObservedAt": { "$ref": "#/definitions/DateFilterList" }, + "FixAvailable": { + "$ref": "#/definitions/StringFilterList" + }, "InspectorScore": { "$ref": "#/definitions/NumberFilterList" }, + "LambdaFunctionExecutionRoleArn": { + "$ref": "#/definitions/StringFilterList" + }, + "LambdaFunctionLastModifiedAt": { + "$ref": "#/definitions/DateFilterList" + }, + "LambdaFunctionLayers": { + "$ref": "#/definitions/StringFilterList" + }, + "LambdaFunctionName": { + "$ref": "#/definitions/StringFilterList" + }, + "LambdaFunctionRuntime": { + "$ref": "#/definitions/StringFilterList" + }, "LastObservedAt": { "$ref": "#/definitions/DateFilterList" }, @@ -322,10 +371,21 @@ "type": "string", "maxLength": 128, "minLength": 1 + }, + "Tags": { + "$ref": "#/definitions/FilterTagMap" } }, "tagging": { - "taggable": false + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "inspector2:TagResource", + "inspector2:UntagResource" + ] }, "required": [ "Name", @@ -343,18 +403,23 @@ "create": { "permissions": [ "inspector2:CreateFilter", - "inspector2:ListFilters" + "inspector2:ListFilters", + "inspector2:TagResource" ] }, "read": { "permissions": [ - "inspector2:ListFilters" + "inspector2:ListFilters", + "inspector2:ListTagsForResource" ] }, "update": { "permissions": [ "inspector2:ListFilters", - "inspector2:UpdateFilter" + "inspector2:UpdateFilter", + "inspector2:TagResource", + "inspector2:UntagResource", + "inspector2:ListTagsForResource" ] }, "delete": { diff --git a/internal/service/cloudformation/schemas/AWS_IoTSiteWise_Asset.json b/internal/service/cloudformation/schemas/AWS_IoTSiteWise_Asset.json index dc91b61f1..be58c1257 100644 --- a/internal/service/cloudformation/schemas/AWS_IoTSiteWise_Asset.json +++ b/internal/service/cloudformation/schemas/AWS_IoTSiteWise_Asset.json @@ -155,7 +155,18 @@ } }, "additionalProperties": false, - "taggable": true, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "iotsitewise:TagResource", + "iotsitewise:UntagResource", + "iotsitewise:ListTagsForResource" + ] + }, "required": [ "AssetName", "AssetModelId" diff --git a/internal/service/cloudformation/schemas/AWS_KMS_Key.json b/internal/service/cloudformation/schemas/AWS_KMS_Key.json index deb937fbd..2bac6c399 100644 --- a/internal/service/cloudformation/schemas/AWS_KMS_Key.json +++ b/internal/service/cloudformation/schemas/AWS_KMS_Key.json @@ -87,7 +87,10 @@ "HMAC_256", "HMAC_384", "HMAC_512", - "SM2" + "SM2", + "ML_DSA_44", + "ML_DSA_65", + "ML_DSA_87" ] }, "MultiRegion": { diff --git a/internal/service/cloudformation/schemas/AWS_Lambda_EventSourceMapping.json b/internal/service/cloudformation/schemas/AWS_Lambda_EventSourceMapping.json index 13bec7394..22fc57bfd 100644 --- a/internal/service/cloudformation/schemas/AWS_Lambda_EventSourceMapping.json +++ b/internal/service/cloudformation/schemas/AWS_Lambda_EventSourceMapping.json @@ -192,7 +192,7 @@ "DestinationConfig": { "type": "object", "additionalProperties": false, - "description": "A configuration object that specifies the destination of an event after Lambda processes it.", + "description": "A configuration object that specifies the destination of an event after Lambda processes it. For more information, see [Adding a destination](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations).", "properties": { "OnFailure": { "description": "The destination configuration for failed invocations.", @@ -233,7 +233,7 @@ }, "OnFailure": { "type": "object", - "description": "A destination for events that failed processing. See [Capturing records of Lambda asynchronous invocations](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html) for more information.", + "description": "A destination for events that failed processing. For more information, see [Adding a destination](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations).", "additionalProperties": false, "properties": { "Destination": { @@ -433,14 +433,14 @@ "additionalProperties": false, "properties": { "SchemaRegistryURI": { - "description": "The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.", + "description": "", "type": "string", "pattern": "[a-zA-Z0-9-/*:_+=.@-]*", "minLength": 1, "maxLength": 10000 }, "EventRecordFormat": { - "description": "The record format that Lambda delivers to your function after schema validation.", + "description": "", "enum": [ "JSON", "SOURCE" @@ -448,7 +448,7 @@ "type": "string" }, "AccessConfigs": { - "description": "An array of access configuration objects that tell Lambda how to authenticate with your schema registry.", + "description": "", "type": "array", "uniqueItems": true, "maxItems": 2, @@ -457,7 +457,7 @@ } }, "SchemaValidationConfigs": { - "description": "An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.", + "description": "", "type": "array", "uniqueItems": true, "minItems": 1, @@ -474,7 +474,7 @@ "additionalProperties": false, "properties": { "Type": { - "description": "The type of authentication Lambda uses to access your schema registry.", + "description": "", "type": "string", "enum": [ "BASIC_AUTH", @@ -483,7 +483,7 @@ ] }, "URI": { - "description": "The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry.", + "description": "", "type": "string", "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?(-iso([a-z])?)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", "minLength": 1, @@ -497,7 +497,7 @@ "additionalProperties": false, "properties": { "Attribute": { - "description": "The attribute you want your schema registry to validate and filter for.", + "description": "", "type": "string", "enum": [ "KEY", diff --git a/internal/service/cloudformation/schemas/AWS_MPA_ApprovalTeam.json b/internal/service/cloudformation/schemas/AWS_MPA_ApprovalTeam.json new file mode 100644 index 000000000..71904f92c --- /dev/null +++ b/internal/service/cloudformation/schemas/AWS_MPA_ApprovalTeam.json @@ -0,0 +1,240 @@ +{ + "typeName": "AWS::MPA::ApprovalTeam", + "description": "Resource Type definition for AWS::MPA::ApprovalTeam.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Timestamp": { + "type": "string", + "format": "date-time" + }, + "MofNApprovalStrategy": { + "type": "object", + "properties": { + "MinApprovalsRequired": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "MinApprovalsRequired" + ] + }, + "ApprovalStrategy": { + "type": "object", + "properties": { + "MofN": { + "$ref": "#/definitions/MofNApprovalStrategy" + } + }, + "additionalProperties": false, + "required": [ + "MofN" + ] + }, + "Approver": { + "type": "object", + "properties": { + "PrimaryIdentityId": { + "type": "string" + }, + "PrimaryIdentitySourceArn": { + "type": "string" + }, + "ApproverId": { + "type": "string" + }, + "ResponseTime": { + "$ref": "#/definitions/Timestamp" + }, + "PrimaryIdentityStatus": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "PrimaryIdentityId", + "PrimaryIdentitySourceArn" + ] + }, + "Policy": { + "properties": { + "PolicyArn": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "PolicyArn" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "properties": { + "ApprovalStrategy": { + "$ref": "#/definitions/ApprovalStrategy" + }, + "Approvers": { + "type": "array", + "items": { + "$ref": "#/definitions/Approver" + }, + "minItems": 1, + "insertionOrder": false, + "uniqueItems": true + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "Policies": { + "type": "array", + "items": { + "$ref": "#/definitions/Policy" + }, + "minItems": 1, + "insertionOrder": false, + "uniqueItems": true + }, + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "VersionId": { + "type": "string" + }, + "UpdateSessionArn": { + "type": "string" + }, + "CreationTime": { + "$ref": "#/definitions/Timestamp" + }, + "LastUpdateTime": { + "$ref": "#/definitions/Timestamp" + }, + "NumberOfApprovers": { + "type": "integer" + }, + "Status": { + "type": "string" + }, + "StatusCode": { + "type": "string" + }, + "StatusMessage": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags", + "permissions": [ + "mpa:TagResource", + "mpa:ListTagsForResource", + "mpa:UntagResource" + ] + }, + "required": [ + "ApprovalStrategy", + "Approvers", + "Policies", + "Name", + "Description" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/VersionId", + "/properties/NumberOfApprovers", + "/properties/Approvers/*/ApproverId", + "/properties/Approvers/*/ResponseTime", + "/properties/Approvers/*/PrimaryIdentityStatus", + "/properties/UpdateSessionArn", + "/properties/CreationTime", + "/properties/LastUpdateTime", + "/properties/Status", + "/properties/StatusCode", + "/properties/StatusMessage" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Policies", + "/properties/Policies/*/PolicyArn" + ], + "handlers": { + "create": { + "permissions": [ + "mpa:CreateApprovalTeam", + "mpa:TagResource", + "mpa:GetApprovalTeam", + "mpa:ListTagsForResource" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "mpa:GetApprovalTeam", + "mpa:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "mpa:GetApprovalTeam", + "mpa:UpdateApprovalTeam", + "mpa:TagResource", + "mpa:ListTagsForResource", + "mpa:UntagResource" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "mpa:StartActiveApprovalTeamDeletion", + "mpa:DeleteInactiveApprovalTeamVersion", + "mpa:GetApprovalTeam", + "mpa:UntagResource" + ], + "timeoutInMinutes": 2160 + }, + "list": { + "permissions": [ + "mpa:ListApprovalTeams", + "mpa:ListTagsForResource" + ] + } + } +} diff --git a/internal/service/cloudformation/schemas/AWS_MPA_IdentitySource.json b/internal/service/cloudformation/schemas/AWS_MPA_IdentitySource.json new file mode 100644 index 000000000..e2550ab61 --- /dev/null +++ b/internal/service/cloudformation/schemas/AWS_MPA_IdentitySource.json @@ -0,0 +1,174 @@ +{ + "typeName": "AWS::MPA::IdentitySource", + "description": "Resource Type definition for AWS::MPA::IdentitySource.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "IdentitySourceArn": { + "type": "string" + }, + "IamIdentityCenter": { + "type": "object", + "properties": { + "InstanceArn": { + "type": "string", + "pattern": "^arn:.+:sso:::instance/(?:sso)?ins-[a-zA-Z0-9-.]{16}$" + }, + "Region": { + "type": "string" + }, + "ApprovalPortalUrl": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "InstanceArn", + "Region" + ] + }, + "IdentitySourceParameters": { + "type": "object", + "properties": { + "IamIdentityCenter": { + "$ref": "#/definitions/IamIdentityCenter" + } + }, + "additionalProperties": false, + "required": [ + "IamIdentityCenter" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "properties": { + "IdentitySourceArn": { + "$ref": "#/definitions/IdentitySourceArn" + }, + "IdentitySourceParameters": { + "$ref": "#/definitions/IdentitySourceParameters" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "IdentitySourceType": { + "type": "string" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Status": { + "type": "string" + }, + "StatusCode": { + "type": "string" + }, + "StatusMessage": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags", + "permissions": [ + "mpa:TagResource", + "mpa:ListTagsForResource", + "mpa:UntagResource" + ] + }, + "required": [ + "IdentitySourceParameters" + ], + "primaryIdentifier": [ + "/properties/IdentitySourceArn" + ], + "readOnlyProperties": [ + "/properties/IdentitySourceArn", + "/properties/IdentitySourceType", + "/properties/IdentitySourceParameters/IamIdentityCenter/ApprovalPortalUrl", + "/properties/CreationTime", + "/properties/Status", + "/properties/StatusCode", + "/properties/StatusMessage" + ], + "createOnlyProperties": [ + "/properties/IdentitySourceParameters", + "/properties/IdentitySourceParameters/IamIdentityCenter", + "/properties/IdentitySourceParameters/IamIdentityCenter/InstanceArn", + "/properties/IdentitySourceParameters/IamIdentityCenter/Region" + ], + "handlers": { + "create": { + "permissions": [ + "mpa:CreateIdentitySource", + "mpa:TagResource", + "mpa:ListTagsForResource", + "mpa:GetIdentitySource", + "sso:DescribeApplication", + "sso:DescribeInstance", + "sso:CreateApplication", + "sso:PutApplicationAssignmentConfiguration", + "sso:PutApplicationGrant", + "sso:PutApplicationAuthenticationMethod", + "sso:PutApplicationAccessScope" + ] + }, + "read": { + "permissions": [ + "mpa:GetIdentitySource", + "mpa:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "mpa:GetIdentitySource", + "mpa:TagResource", + "mpa:ListTagsForResource", + "mpa:UntagResource" + ] + }, + "delete": { + "permissions": [ + "mpa:DeleteIdentitySource", + "mpa:GetIdentitySource", + "mpa:UntagResource", + "sso:DeleteApplication" + ] + }, + "list": { + "permissions": [ + "mpa:ListIdentitySources", + "mpa:ListTagsForResource" + ] + } + } +} diff --git a/internal/service/cloudformation/schemas/AWS_MediaTailor_PlaybackConfiguration.json b/internal/service/cloudformation/schemas/AWS_MediaTailor_PlaybackConfiguration.json index e94779007..e1fdc6773 100644 --- a/internal/service/cloudformation/schemas/AWS_MediaTailor_PlaybackConfiguration.json +++ b/internal/service/cloudformation/schemas/AWS_MediaTailor_PlaybackConfiguration.json @@ -57,6 +57,10 @@ "description": "The configuration for HLS content.", "$ref": "#/definitions/HlsConfiguration" }, + "LogConfiguration": { + "description": "The configuration that defines where AWS Elemental MediaTailor sends logs for the playback configuration.", + "$ref": "#/definitions/LogConfiguration" + }, "PlaybackConfigurationArn": { "description": "The Amazon Resource Name (ARN) for the playback configuration.", "type": "string" @@ -260,6 +264,69 @@ "type": "string" } } + }, + "LogConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdsInteractionLog": { + "description": "The event types that MediaTailor emits in logs for interactions with the ADS.", + "$ref": "#/definitions/AdsInteractionLog" + }, + "EnabledLoggingStrategies": { + "description": "The method used for collecting logs from AWS Elemental MediaTailor. To configure MediaTailor to send logs directly to Amazon CloudWatch Logs, choose LEGACY_CLOUDWATCH. To configure MediaTailor to send logs to CloudWatch, which then vends the logs to your destination of choice, choose VENDED_LOGS. Supported destinations are CloudWatch Logs log group, Amazon S3 bucket, and Amazon Data Firehose stream. To use vended logs, you must configure the delivery destination in Amazon CloudWatch", + "type": "array", + "items": { + "type": "string" + } + }, + "ManifestServiceInteractionLog": { + "description": "The event types that MediaTailor emits in logs for interactions with the origin server.", + "$ref": "#/definitions/ManifestServiceInteractionLog" + }, + "PercentEnabled": { + "description": "The percentage of session logs that MediaTailor sends to your CloudWatch Logs account. For example, if your playback configuration has 1000 sessions and percentEnabled is set to 60, MediaTailor sends logs for 600 of the sessions to CloudWatch Logs. MediaTailor decides at random which of the playback configuration sessions to send logs for. If you want to view logs for a specific session, you can use the debug log mode.", + "type": "integer", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "PercentEnabled" + ] + }, + "AdsInteractionLog": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExcludeEventTypes": { + "type": "array", + "description": "Indicates that MediaTailor won't emit the selected events in the logs for playback sessions that are initialized with this configuration.", + "items": { + "type": "string" + } + }, + "PublishOptInEventTypes": { + "type": "array", + "description": "Indicates that MediaTailor emits RAW_ADS_RESPONSE logs for playback sessions that are initialized with this configuration.", + "items": { + "type": "string" + } + } + } + }, + "ManifestServiceInteractionLog": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExcludeEventTypes": { + "type": "array", + "description": "Indicates that MediaTailor won't emit the selected events in the logs for playback sessions that are initialized with this configuration.", + "items": { + "type": "string" + } + } + } } }, "tagging": { diff --git a/internal/service/cloudformation/schemas/AWS_OpsWorksCM_Server.json b/internal/service/cloudformation/schemas/AWS_OpsWorksCM_Server.json index 01ba713f1..2fe8e9c39 100644 --- a/internal/service/cloudformation/schemas/AWS_OpsWorksCM_Server.json +++ b/internal/service/cloudformation/schemas/AWS_OpsWorksCM_Server.json @@ -136,6 +136,7 @@ "/properties/CustomDomain", "/properties/InstanceProfileArn", "/properties/SecurityGroupIds", + "/properties/ServerName", "/properties/SubnetIds", "/properties/BackupId", "/properties/EngineModel", @@ -148,7 +149,6 @@ ], "readOnlyProperties": [ "/properties/Id", - "/properties/ServerName", "/properties/Endpoint", "/properties/Arn" ] diff --git a/internal/service/cloudformation/schemas/AWS_Organizations_Policy.json b/internal/service/cloudformation/schemas/AWS_Organizations_Policy.json index 9aa3b8602..2a39955d9 100644 --- a/internal/service/cloudformation/schemas/AWS_Organizations_Policy.json +++ b/internal/service/cloudformation/schemas/AWS_Organizations_Policy.json @@ -11,7 +11,7 @@ "maxLength": 128 }, "Type": { - "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2", + "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY, CHATBOT_POLICY, RESOURCE_CONTROL_POLICY,DECLARATIVE_POLICY_EC2, SECURITYHUB_POLICY", "type": "string", "enum": [ "SERVICE_CONTROL_POLICY", @@ -20,7 +20,8 @@ "TAG_POLICY", "CHATBOT_POLICY", "RESOURCE_CONTROL_POLICY", - "DECLARATIVE_POLICY_EC2" + "DECLARATIVE_POLICY_EC2", + "SECURITYHUB_POLICY" ] }, "Content": { diff --git a/internal/service/cloudformation/schemas/AWS_QuickSight_CustomPermissions.json b/internal/service/cloudformation/schemas/AWS_QuickSight_CustomPermissions.json index f48efdea0..69f203b76 100644 --- a/internal/service/cloudformation/schemas/AWS_QuickSight_CustomPermissions.json +++ b/internal/service/cloudformation/schemas/AWS_QuickSight_CustomPermissions.json @@ -1,63 +1,119 @@ { + "tagging": { + "permissions": [ + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ], + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "handlers": { + "read": { + "permissions": [ + "quicksight:DescribeCustomPermissions", + "quicksight:ListTagsForResource" + ] + }, + "create": { + "permissions": [ + "quicksight:CreateCustomPermissions", + "quicksight:TagResource" + ] + }, + "update": { + "permissions": [ + "quicksight:UpdateCustomPermissions", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "quicksight:ListCustomPermissions" + ] + }, + "delete": { + "permissions": [ + "quicksight:DeleteCustomPermissions" + ] + } + }, "typeName": "AWS::QuickSight::CustomPermissions", + "readOnlyProperties": [ + "/properties/Arn" + ], "description": "Definition of the AWS::QuickSight::CustomPermissions Resource Type.", + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/CustomPermissionsName" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/CustomPermissionsName" + ], "definitions": { "Capabilities": { + "additionalProperties": false, "type": "object", "properties": { - "ExportToCsv": { + "ShareDashboards": { "$ref": "#/definitions/CapabilityState" }, - "ExportToExcel": { + "RenameSharedFolders": { "$ref": "#/definitions/CapabilityState" }, - "CreateAndUpdateThemes": { + "CreateAndUpdateDataSources": { "$ref": "#/definitions/CapabilityState" }, "AddOrRunAnomalyDetectionForAnalyses": { "$ref": "#/definitions/CapabilityState" }, - "ShareAnalyses": { + "ViewAccountSPICECapacity": { "$ref": "#/definitions/CapabilityState" }, - "CreateAndUpdateDatasets": { + "CreateSPICEDataset": { "$ref": "#/definitions/CapabilityState" }, - "ShareDatasets": { + "ShareDataSources": { "$ref": "#/definitions/CapabilityState" }, - "SubscribeDashboardEmailReports": { + "ExportToExcel": { "$ref": "#/definitions/CapabilityState" }, - "CreateAndUpdateDashboardEmailReports": { + "CreateAndUpdateDatasets": { "$ref": "#/definitions/CapabilityState" }, - "ShareDashboards": { + "ShareAnalyses": { "$ref": "#/definitions/CapabilityState" }, - "CreateAndUpdateThresholdAlerts": { + "SubscribeDashboardEmailReports": { "$ref": "#/definitions/CapabilityState" }, - "RenameSharedFolders": { + "ShareDatasets": { "$ref": "#/definitions/CapabilityState" }, - "CreateSharedFolders": { + "ExportToCsv": { "$ref": "#/definitions/CapabilityState" }, - "CreateAndUpdateDataSources": { + "CreateAndUpdateThemes": { "$ref": "#/definitions/CapabilityState" }, - "ShareDataSources": { + "CreateAndUpdateDashboardEmailReports": { "$ref": "#/definitions/CapabilityState" }, - "ViewAccountSPICECapacity": { + "CreateAndUpdateThresholdAlerts": { "$ref": "#/definitions/CapabilityState" }, - "CreateSPICEDataset": { + "CreateSharedFolders": { "$ref": "#/definitions/CapabilityState" } - }, - "additionalProperties": false + } }, "CapabilityState": { "type": "string", @@ -66,115 +122,59 @@ ] }, "Tag": { + "description": "
The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.<\/p>", + "additionalProperties": false, "type": "object", - "description": "
The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
", "properties": { - "Key": { - "type": "string", - "maxLength": 128, - "minLength": 1, - "description": "Tag key.
" - }, "Value": { + "minLength": 1, + "description": "Tag value.<\/p>", "type": "string", - "maxLength": 256, + "maxLength": 256 + }, + "Key": { "minLength": 1, - "description": "
Tag value.
" + "description": "Tag key.<\/p>", + "type": "string", + "maxLength": 128 } }, "required": [ "Key", "Value" - ], - "additionalProperties": false + ] } }, "properties": { - "Arn": { - "type": "string" - }, - "AwsAccountId": { + "CustomPermissionsName": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9+=,.@_-]+$", "type": "string", - "maxLength": 12, - "minLength": 12, - "pattern": "^[0-9]{12}$" + "maxLength": 64 }, "Capabilities": { "$ref": "#/definitions/Capabilities" }, - "CustomPermissionsName": { + "AwsAccountId": { + "minLength": 12, + "pattern": "^[0-9]{12}$", "type": "string", - "maxLength": 64, - "minLength": 1, - "pattern": "^[a-zA-Z0-9+=,.@_-]+$" + "maxLength": 12 + }, + "Arn": { + "type": "string" }, "Tags": { + "minItems": 1, + "maxItems": 200, "type": "array", "items": { "$ref": "#/definitions/Tag" - }, - "maxItems": 200, - "minItems": 1 + } } }, - "readOnlyProperties": [ - "/properties/Arn" - ], - "createOnlyProperties": [ - "/properties/AwsAccountId", - "/properties/CustomPermissionsName" - ], - "primaryIdentifier": [ - "/properties/AwsAccountId", - "/properties/CustomPermissionsName" - ], - "handlers": { - "create": { - "permissions": [ - "quicksight:CreateCustomPermissions", - "quicksight:TagResource" - ] - }, - "read": { - "permissions": [ - "quicksight:DescribeCustomPermissions", - "quicksight:ListTagsForResource" - ] - }, - "update": { - "permissions": [ - "quicksight:UpdateCustomPermissions", - "quicksight:TagResource", - "quicksight:UntagResource", - "quicksight:ListTagsForResource" - ] - }, - "delete": { - "permissions": [ - "quicksight:DeleteCustomPermissions" - ] - }, - "list": { - "permissions": [ - "quicksight:ListCustomPermissions" - ] - } - }, - "additionalProperties": false, "required": [ "AwsAccountId", "CustomPermissionsName" - ], - "tagging": { - "taggable": true, - "tagOnCreate": true, - "tagUpdatable": true, - "cloudFormationSystemTags": false, - "tagProperty": "/properties/Tags", - "permissions": [ - "quicksight:TagResource", - "quicksight:UntagResource", - "quicksight:ListTagsForResource" - ] - } + ] } diff --git a/internal/service/cloudformation/schemas/AWS_RDS_DBCluster.json b/internal/service/cloudformation/schemas/AWS_RDS_DBCluster.json index 03c632cd6..349387e26 100644 --- a/internal/service/cloudformation/schemas/AWS_RDS_DBCluster.json +++ b/internal/service/cloudformation/schemas/AWS_RDS_DBCluster.json @@ -145,7 +145,7 @@ "type": "string" }, "EngineLifecycleSupport": { - "description": "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", + "description": "The life cycle type for this DB cluster.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.\n You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:\n + Amazon Aurora - [Amazon RDS Extended Support with Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html) in the *Amazon Aurora User Guide*\n + Amazon RDS - [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*\n \n Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``", "type": "string" }, "EngineMode": { diff --git a/internal/service/cloudformation/schemas/AWS_RDS_DBInstance.json b/internal/service/cloudformation/schemas/AWS_RDS_DBInstance.json index 850bf1ee3..a4e0ab45f 100644 --- a/internal/service/cloudformation/schemas/AWS_RDS_DBInstance.json +++ b/internal/service/cloudformation/schemas/AWS_RDS_DBInstance.json @@ -304,7 +304,7 @@ }, "EngineLifecycleSupport": { "type": "string", - "description": "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``" + "description": "The life cycle type for this DB instance.\n By default, this value is set to ``open-source-rds-extended-support``, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to ``open-source-rds-extended-support-disabled``. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.\n This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.\n You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see [Amazon RDS Extended Support with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html) in the *Amazon RDS User Guide*.\n Valid Values: ``open-source-rds-extended-support | open-source-rds-extended-support-disabled``\n Default: ``open-source-rds-extended-support``" }, "EngineVersion": { "type": "string", diff --git a/internal/service/cloudformation/schemas/AWS_RUM_AppMonitor.json b/internal/service/cloudformation/schemas/AWS_RUM_AppMonitor.json index 79e2a81d0..5218832ef 100644 --- a/internal/service/cloudformation/schemas/AWS_RUM_AppMonitor.json +++ b/internal/service/cloudformation/schemas/AWS_RUM_AppMonitor.json @@ -292,7 +292,7 @@ "S3Uri": { "description": "The S3Uri of the bucket or folder that stores the source map files. It is required if status is ENABLED.", "type": "string", - "pattern": "^s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$" + "pattern": "^s3://[a-z0-9][-.a-z0-9]{1,62}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$" } }, "required": [ diff --git a/internal/service/cloudformation/schemas/AWS_SQS_Queue.json b/internal/service/cloudformation/schemas/AWS_SQS_Queue.json index 803ad3a0f..ac4d0b259 100644 --- a/internal/service/cloudformation/schemas/AWS_SQS_Queue.json +++ b/internal/service/cloudformation/schemas/AWS_SQS_Queue.json @@ -125,7 +125,12 @@ "tagOnCreate": true, "tagUpdatable": true, "cloudFormationSystemTags": true, - "tagProperty": "/properties/Tags" + "tagProperty": "/properties/Tags", + "permissions": [ + "sqs:TagQueue", + "sqs:UntagQueue", + "sqs:ListQueueTags" + ] }, "handlers": { "create": { diff --git a/internal/service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json b/internal/service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json new file mode 100644 index 000000000..0c4bb5d42 --- /dev/null +++ b/internal/service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json @@ -0,0 +1,117 @@ +{ + "typeName": "AWS::SecurityHub::AggregatorV2", + "description": "The AWS::SecurityHub::AggregatorV2 resource represents the AWS Security Hub AggregatorV2 in your account. One aggregatorv2 resource is created for each account in non opt-in region in which you configure region linking mode.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-securityhub", + "definitions": { + "Region": { + "type": "string", + "pattern": "^[a-zA-Z0-9-]{1,32}$" + }, + "Tags": { + "description": "A key-value pair to associate with the Security Hub V2 resource.", + "type": "object", + "patternProperties": { + "": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "maxProperties": 50 + } + }, + "properties": { + "AggregatorV2Arn": { + "description": "The ARN of the AggregatorV2 being created and assigned as the unique identifier", + "type": "string", + "pattern": "arn:aws\\S*:securityhub:\\S*" + }, + "RegionLinkingMode": { + "description": "Indicates to link a list of included Regions", + "type": "string", + "enum": [ + "SPECIFIED_REGIONS" + ] + }, + "LinkedRegions": { + "description": "The list of included Regions", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Region" + } + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "AggregationRegion": { + "description": "The aggregation Region of the AggregatorV2", + "$ref": "#/definitions/Region" + } + }, + "additionalProperties": false, + "required": [ + "RegionLinkingMode", + "LinkedRegions" + ], + "readOnlyProperties": [ + "/properties/AggregatorV2Arn", + "/properties/AggregationRegion" + ], + "primaryIdentifier": [ + "/properties/AggregatorV2Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "securityhub:ListTagsForResource", + "securityhub:TagResource", + "securityhub:UntagResource" + ] + }, + "handlers": { + "create": { + "permissions": [ + "securityhub:CreateAggregatorV2", + "securityhub:GetAggregatorV2", + "securityhub:TagResource", + "securityhub:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "securityhub:GetAggregatorV2", + "securityhub:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "securityhub:UpdateAggregatorV2", + "securityhub:GetAggregatorV2", + "securityhub:TagResource", + "securityhub:UntagResource", + "securityhub:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "securityhub:DeleteAggregatorV2" + ] + }, + "list": { + "permissions": [ + "securityhub:ListAggregatorsV2", + "securityhub:ListTagsForResource" + ] + } + } +} diff --git a/internal/service/cloudformation/schemas/AWS_SecurityHub_AutomationRuleV2.json b/internal/service/cloudformation/schemas/AWS_SecurityHub_AutomationRuleV2.json new file mode 100644 index 000000000..5e46ca745 --- /dev/null +++ b/internal/service/cloudformation/schemas/AWS_SecurityHub_AutomationRuleV2.json @@ -0,0 +1,593 @@ +{ + "typeName": "AWS::SecurityHub::AutomationRuleV2", + "description": "Resource schema for AWS::SecurityHub::AutomationRuleV2", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-securityhub", + "definitions": { + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + } + }, + "OcsfFindingFilters": { + "description": "The filtering conditions that align with OCSF standards", + "type": "object", + "additionalProperties": false, + "properties": { + "CompositeFilters": { + "description": "Enables the creation of complex filtering conditions by combining filter", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/CompositeFilter" + } + }, + "CompositeOperator": { + "$ref": "#/definitions/AllowedOperators" + } + } + }, + "CompositeFilter": { + "description": "Enables the creation of filtering criteria for security findings", + "type": "object", + "additionalProperties": false, + "properties": { + "StringFilters": { + "description": "Enables filtering based on string field values", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/OcsfStringFilter" + }, + "minItems": 1, + "maxItems": 20 + }, + "DateFilters": { + "description": "Enables filtering based on date and timestamp fields", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/OcsfDateFilter" + }, + "minItems": 1, + "maxItems": 20 + }, + "BooleanFilters": { + "description": "Enables filtering based on boolean field values", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/OcsfBooleanFilter" + }, + "minItems": 1, + "maxItems": 20 + }, + "NumberFilters": { + "description": "Enables filtering based on numerical field values", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/OcsfNumberFilter" + }, + "minItems": 1, + "maxItems": 20 + }, + "MapFilters": { + "description": "Enables filtering based on map field value", + "items": { + "$ref": "#/definitions/OcsfMapFilter" + }, + "type": "array", + "minItems": 1, + "maxItems": 20 + }, + "Operator": { + "$ref": "#/definitions/AllowedOperators" + } + } + }, + "OcsfStringFilter": { + "description": "Enables filtering of security findings based on string field values in OCSF", + "type": "object", + "additionalProperties": false, + "properties": { + "FieldName": { + "$ref": "#/definitions/OcsfStringField" + }, + "Filter": { + "$ref": "#/definitions/StringFilter" + } + }, + "required": [ + "FieldName", + "Filter" + ] + }, + "OcsfDateFilter": { + "description": "Enables filtering of security findings based on date and timestamp fields in OCSF", + "type": "object", + "additionalProperties": false, + "properties": { + "FieldName": { + "type": "string", + "description": "The name of the field", + "enum": [ + "finding_info.created_time_dt", + "finding_info.first_seen_time_dt", + "finding_info.last_seen_time_dt", + "finding_info.modified_time_dt" + ] + }, + "Filter": { + "$ref": "#/definitions/DateFilter" + } + }, + "required": [ + "FieldName", + "Filter" + ] + }, + "OcsfBooleanFilter": { + "description": "Enables filtering of security findings based on boolean field values in OCSF", + "type": "object", + "additionalProperties": false, + "properties": { + "FieldName": { + "description": "The name of the field", + "type": "string", + "enum": [ + "compliance.assessments.meets_criteria", + "vulnerabilities.is_exploit_available", + "vulnerabilities.is_fix_available" + ] + }, + "Filter": { + "$ref": "#/definitions/BooleanFilter" + } + }, + "required": [ + "FieldName", + "Filter" + ] + }, + "OcsfNumberFilter": { + "description": "Enables filtering of security findings based on numerical field values in OCSF", + "type": "object", + "additionalProperties": false, + "properties": { + "FieldName": { + "description": "The name of the field", + "type": "string", + "enum": [ + "activity_id", + "compliance.status_id", + "confidence_score", + "severity_id", + "status_id", + "finding_info.related_events_count" + ] + }, + "Filter": { + "$ref": "#/definitions/NumberFilter" + } + }, + "required": [ + "FieldName", + "Filter" + ] + }, + "OcsfMapFilter": { + "description": "Enables filtering of security findings based on map field values in OCSF", + "properties": { + "FieldName": { + "description": "The name of the field", + "enum": [ + "resources.tags" + ], + "type": "string" + }, + "Filter": { + "$ref": "#/definitions/MapFilter" + } + }, + "required": [ + "FieldName", + "Filter" + ], + "type": "object", + "additionalProperties": false + }, + "StringFilter": { + "description": "A string filter for filtering findings", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The string filter value", + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "Comparison": { + "description": "The condition to apply to a string value when filtering findings", + "type": "string", + "enum": [ + "EQUALS", + "PREFIX", + "NOT_EQUALS", + "PREFIX_NOT_EQUALS", + "CONTAINS" + ] + } + }, + "required": [ + "Value", + "Comparison" + ] + }, + "DateFilter": { + "description": "A date filter for querying findings", + "type": "object", + "additionalProperties": false, + "properties": { + "DateRange": { + "$ref": "#/definitions/DateRange" + }, + "End": { + "$ref": "#/definitions/ISO8601DateString" + }, + "Start": { + "$ref": "#/definitions/ISO8601DateString" + } + } + }, + "DateRange": { + "description": "A date range for the date filter", + "properties": { + "Unit": { + "description": "A date range unit for the date filter", + "enum": [ + "DAYS" + ], + "type": "string" + }, + "Value": { + "description": "A date range value for the date filter", + "type": "number" + } + }, + "required": [ + "Unit", + "Value" + ], + "type": "object", + "additionalProperties": false + }, + "BooleanFilter": { + "description": "Boolean filter for querying findings", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The value of the boolean", + "type": "boolean" + } + }, + "required": [ + "Value" + ] + }, + "NumberFilter": { + "type": "object", + "description": "A number filter for querying findings", + "additionalProperties": false, + "properties": { + "Eq": { + "description": "The equal-to condition to be applied to a single field when querying for findings", + "type": "number" + }, + "Gte": { + "description": "The greater-than-equal condition to be applied to a single field when querying for findings", + "type": "number" + }, + "Lte": { + "description": "The less-than-equal condition to be applied to a single field when querying for findings", + "type": "number" + } + } + }, + "MapFilter": { + "description": "A map filter for filtering findings", + "properties": { + "Comparison": { + "description": "The condition to apply to the key value when filtering findings with a map filter", + "enum": [ + "EQUALS", + "NOT_EQUALS" + ], + "type": "string" + }, + "Key": { + "description": "The key of the map filter", + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "Value": { + "description": "The value for the key in the map filter", + "type": "string", + "minLength": 1, + "maxLength": 4096 + } + }, + "required": [ + "Comparison", + "Key", + "Value" + ], + "type": "object", + "additionalProperties": false + }, + "OcsfStringField": { + "description": "The name of the field", + "type": "string", + "enum": [ + "metadata.uid", + "activity_name", + "cloud.account.name", + "cloud.account.uid", + "cloud.provider", + "cloud.region", + "compliance.assessments.category", + "compliance.assessments.name", + "compliance.control", + "compliance.status", + "compliance.standards", + "finding_info.desc", + "finding_info.src_url", + "finding_info.title", + "finding_info.types", + "finding_info.uid", + "finding_info.related_events.uid", + "finding_info.related_events.product.uid", + "finding_info.related_events.title", + "metadata.product.feature.uid", + "metadata.product.name", + "metadata.product.uid", + "metadata.product.vendor_name", + "remediation.desc", + "remediation.references", + "resources.cloud_partition", + "resources.name", + "resources.region", + "resources.type", + "resources.uid", + "severity", + "status", + "comment", + "vulnerabilities.fix_coverage", + "class_name" + ] + }, + "AllowedOperators": { + "description": "The logical operator used to combine multiple conditions", + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "ISO8601DateString": { + "description": "The timestamp formatted in ISO8601", + "type": "string", + "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$" + }, + "Criteria": { + "type": "object", + "description": "Defines the parameters and conditions used to evaluate and filter security findings", + "additionalProperties": false, + "properties": { + "OcsfFindingCriteria": { + "$ref": "#/definitions/OcsfFindingFilters" + } + } + }, + "AutomationRulesActionV2": { + "description": "Allows you to configure automated responses", + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "The category of action to be executed by the automation rule", + "type": "string", + "enum": [ + "FINDING_FIELDS_UPDATE", + "EXTERNAL_INTEGRATION" + ] + }, + "FindingFieldsUpdate": { + "$ref": "#/definitions/AutomationRulesFindingFieldsUpdateV2" + }, + "ExternalIntegrationConfiguration": { + "$ref": "#/definitions/ExternalIntegrationConfiguration" + } + }, + "required": [ + "Type" + ] + }, + "AutomationRulesFindingFieldsUpdateV2": { + "description": "The changes to be applied to fields in a security finding when an automation rule is triggered", + "type": "object", + "additionalProperties": false, + "properties": { + "SeverityId": { + "description": "The severity level to be assigned to findings that match the automation rule criteria", + "type": "integer" + }, + "Comment": { + "description": "Notes or contextual information for findings that are modified by the automation rule", + "type": "string", + "pattern": ".*\\S.*" + }, + "StatusId": { + "description": "The status to be applied to findings that match automation rule criteria", + "type": "integer" + } + } + }, + "ExternalIntegrationConfiguration": { + "description": "The settings for integrating automation rule actions with external systems or service", + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectorArn": { + "description": "The ARN of the connector that establishes the integration", + "type": "string", + "pattern": ".*\\S.*" + } + } + } + }, + "properties": { + "RuleName": { + "description": "The name of the automation rule", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 256 + }, + "RuleStatus": { + "description": "The status of the automation rule", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "Description": { + "description": "A description of the automation rule", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 256 + }, + "RuleOrder": { + "description": "The value for the rule priority", + "type": "number", + "minimum": 1.0, + "maximum": 1000.0 + }, + "Criteria": { + "$ref": "#/definitions/Criteria" + }, + "Actions": { + "description": "A list of actions to be performed when the rule criteria is met", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AutomationRulesActionV2" + }, + "minItems": 1, + "maxItems": 1 + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "RuleArn": { + "description": "The ARN of the automation rule", + "type": "string", + "pattern": "^arn:aws\\S*:securityhub:[a-z0-9-]+:[0-9]{12}:automation-rulev2/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "RuleId": { + "description": "The ID of the automation rule", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "CreatedAt": { + "$ref": "#/definitions/ISO8601DateString" + }, + "UpdatedAt": { + "$ref": "#/definitions/ISO8601DateString" + } + }, + "required": [ + "RuleName", + "Description", + "RuleOrder", + "Criteria", + "Actions" + ], + "readOnlyProperties": [ + "/properties/RuleArn", + "/properties/RuleId", + "/properties/CreatedAt", + "/properties/UpdatedAt" + ], + "primaryIdentifier": [ + "/properties/RuleArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "securityhub:ListTagsForResource", + "securityhub:TagResource", + "securityhub:UntagResource" + ] + }, + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "securityhub:CreateAutomationRuleV2", + "securityhub:GetAutomationRuleV2", + "securityhub:TagResource", + "securityhub:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "securityhub:GetAutomationRuleV2", + "securityhub:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "securityhub:UpdateAutomationRuleV2", + "securityhub:GetAutomationRuleV2", + "securityhub:TagResource", + "securityhub:UntagResource", + "securityhub:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "securityhub:GetAutomationRuleV2", + "securityhub:DeleteAutomationRuleV2" + ] + }, + "list": { + "permissions": [ + "securityhub:ListAutomationRulesV2", + "securityhub:ListTagsForResource" + ] + } + } +} diff --git a/internal/service/cloudformation/schemas/AWS_SecurityHub_HubV2.json b/internal/service/cloudformation/schemas/AWS_SecurityHub_HubV2.json new file mode 100644 index 000000000..a2d8c3681 --- /dev/null +++ b/internal/service/cloudformation/schemas/AWS_SecurityHub_HubV2.json @@ -0,0 +1,95 @@ +{ + "typeName": "AWS::SecurityHub::HubV2", + "description": "The AWS::SecurityHub::HubV2 resource represents the implementation of the AWS Security Hub V2 service in your account. Only one hubv2 resource can created in each region in which you enable Security Hub V2.", + "sourceUrl": "https://placeholder.notreal", + "definitions": { + "Tags": { + "description": "A key-value pair to associate with the Security Hub V2 resource. You can specify a key that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "object", + "patternProperties": { + "": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "maxProperties": 50 + }, + "ISO8601DateString": { + "type": "string", + "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$" + } + }, + "properties": { + "HubV2Arn": { + "description": "The Amazon Resource Name of the Security Hub V2 resource.", + "type": "string", + "pattern": "" + }, + "SubscribedAt": { + "$ref": "#/definitions/ISO8601DateString" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "replacementStrategy": "delete_then_create", + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/HubV2Arn" + ], + "readOnlyProperties": [ + "/properties/HubV2Arn", + "/properties/SubscribedAt" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "securityhub:ListTagsForResource", + "securityhub:TagResource", + "securityhub:UntagResource" + ] + }, + "handlers": { + "create": { + "permissions": [ + "securityhub:EnableSecurityHubV2", + "securityhub:DescribeSecurityHubV2", + "securityhub:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "securityhub:DescribeSecurityHubV2", + "securityhub:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "securityhub:DescribeSecurityHubV2", + "securityhub:TagResource", + "securityhub:UntagResource", + "securityhub:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "securityhub:DescribeSecurityHubV2", + "securityhub:DisableSecurityHubV2" + ] + }, + "list": { + "permissions": [ + "securityhub:DescribeSecurityHubV2", + "securityhub:ListTagsForResource" + ] + } + } +} diff --git a/internal/service/cloudformation/schemas/AWS_Synthetics_Canary.json b/internal/service/cloudformation/schemas/AWS_Synthetics_Canary.json index ae9fde210..a1cd531ca 100644 --- a/internal/service/cloudformation/schemas/AWS_Synthetics_Canary.json +++ b/internal/service/cloudformation/schemas/AWS_Synthetics_Canary.json @@ -221,6 +221,10 @@ "description": "Provide maximum memory available for canary in MB", "type": "integer" }, + "EphemeralStorage": { + "description": "Provide ephemeralStorage available for canary in MB", + "type": "integer" + }, "ActiveTracing": { "description": "Enable active tracing if set to true", "type": "boolean" diff --git a/internal/service/cloudformation/schemas/AWS_WAFv2_RuleGroup.json b/internal/service/cloudformation/schemas/AWS_WAFv2_RuleGroup.json index 2f2406808..9511bd579 100644 --- a/internal/service/cloudformation/schemas/AWS_WAFv2_RuleGroup.json +++ b/internal/service/cloudformation/schemas/AWS_WAFv2_RuleGroup.json @@ -340,6 +340,9 @@ }, "JA4Fingerprint": { "$ref": "#/definitions/RateLimitJA4Fingerprint" + }, + "ASN": { + "$ref": "#/definitions/RateLimitAsn" } }, "additionalProperties": false @@ -509,6 +512,10 @@ ], "additionalProperties": false }, + "RateLimitAsn": { + "description": "Specifies the request's ASN as an aggregate key for a rate-based rule.", + "type": "object" + }, "RateLimit": { "type": "integer", "minimum": 10, @@ -994,6 +1001,9 @@ }, "RegexMatchStatement": { "$ref": "#/definitions/RegexMatchStatement" + }, + "AsnMatchStatement": { + "$ref": "#/definitions/AsnMatchStatement" } }, "additionalProperties": false @@ -1184,6 +1194,23 @@ ], "additionalProperties": false }, + "AsnMatchStatement": { + "type": "object", + "properties": { + "AsnList": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + } + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" + } + }, + "additionalProperties": false + }, "CaptchaConfig": { "type": "object", "properties": { diff --git a/internal/service/cloudformation/schemas/AWS_WAFv2_WebACL.json b/internal/service/cloudformation/schemas/AWS_WAFv2_WebACL.json index 8d0f9a005..7a35c69b7 100644 --- a/internal/service/cloudformation/schemas/AWS_WAFv2_WebACL.json +++ b/internal/service/cloudformation/schemas/AWS_WAFv2_WebACL.json @@ -1,308 +1,222 @@ { - "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", - "tagging": { - "permissions": [ - "wafv2:TagResource", - "wafv2:UntagResource", - "wafv2:ListTagsForResource" - ], - "tagOnCreate": true, - "taggable": true, - "tagUpdatable": true, - "tagProperty": "/properties/Tags", - "cloudFormationSystemTags": true - }, - "handlers": { - "read": { - "permissions": [ - "wafv2:GetWebACL", - "wafv2:ListTagsForResource" - ] - }, - "create": { - "permissions": [ - "wafv2:CreateWebACL", - "wafv2:GetWebACL", - "wafv2:ListTagsForResource", - "wafv2:TagResource", - "wafv2:UntagResource" - ] - }, - "update": { - "permissions": [ - "wafv2:UpdateWebACL", - "wafv2:GetWebACL", - "wafv2:ListTagsForResource", - "wafv2:TagResource", - "wafv2:UntagResource" - ] - }, - "list": { - "permissions": [ - "wafv2:listWebACLs" - ], - "handlerSchema": { - "properties": { - "Scope": { - "$ref": "resource-schema.json#/properties/Scope" - } - }, - "required": [ - "Scope" - ] - } - }, - "delete": { - "permissions": [ - "wafv2:DeleteWebACL", - "wafv2:GetWebACL" - ] - } - }, "typeName": "AWS::WAFv2::WebACL", - "readOnlyProperties": [ - "/properties/Arn", - "/properties/Capacity", - "/properties/Id", - "/properties/LabelNamespace" - ], "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a WebACL, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a WebACL, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the WebACL with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a WebACL, a request needs to match only one of the specifications to be allowed, blocked, or counted.", - "createOnlyProperties": [ - "/properties/Name", - "/properties/Scope" - ], - "additionalProperties": false, - "primaryIdentifier": [ - "/properties/Name", - "/properties/Id", - "/properties/Scope" - ], + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", "definitions": { - "CustomHTTPHeaderName": { - "minLength": 1, - "description": "HTTP header name.", - "type": "string", - "maxLength": 64 - }, - "SearchString": { - "description": "String that is searched to find a match.", - "type": "string" - }, - "BodyParsingFallbackBehavior": { - "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.", - "type": "string", - "enum": [ - "MATCH", - "NO_MATCH", - "EVALUATE_AS_STRING" - ] - }, - "DataProtect": { - "additionalProperties": false, - "type": "object", - "properties": { - "Field": { - "$ref": "#/definitions/FieldToProtect" - }, - "Action": { - "$ref": "#/definitions/DataProtectionAction" - }, - "ExcludeRateBasedDetails": { - "type": "boolean" - }, - "ExcludeRuleMatchDetails": { - "type": "boolean" - } - }, - "required": [ - "Field", - "Action" - ] - }, - "ResponseStatusCode": { - "description": "Custom response code.", - "maximum": 599, - "type": "integer", - "minimum": 200 - }, - "HeaderMatchPattern": { - "description": "The pattern to look for in the request headers.", - "additionalProperties": false, - "type": "object", - "properties": { - "All": { - "description": "Inspect all parts of the web request headers.", - "type": "object" - }, - "IncludedHeaders": { - "minItems": 1, - "maxItems": 199, - "type": "array", - "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 64 - } - }, - "ExcludedHeaders": { - "minItems": 1, - "maxItems": 199, - "type": "array", - "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 64 - } - } - } - }, - "CustomResponse": { - "description": "Custom response.", - "additionalProperties": false, + "AndStatement": { "type": "object", "properties": { - "ResponseCode": { - "$ref": "#/definitions/ResponseStatusCode" - }, - "CustomResponseBodyKey": { - "pattern": "^[\\w\\-]+$", - "description": "Custom response body key.", - "type": "string" - }, - "ResponseHeaders": { - "minItems": 1, - "description": "Collection of HTTP headers.", + "Statements": { "type": "array", "items": { - "$ref": "#/definitions/CustomHTTPHeader" + "$ref": "#/definitions/Statement" } } }, "required": [ - "ResponseCode" - ] + "Statements" + ], + "additionalProperties": false }, - "JA4Fingerprint": { - "description": "Includes the JA4 fingerprint of a web request.", - "additionalProperties": false, + "Body": { + "description": "The body of a web request. This immediately follows the request headers.", "type": "object", "properties": { - "FallbackBehavior": { - "type": "string", - "enum": [ - "MATCH", - "NO_MATCH" - ] + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" } }, - "required": [ - "FallbackBehavior" - ] + "additionalProperties": false }, - "RegexMatchStatement": { - "additionalProperties": false, + "ByteMatchStatement": { + "description": "Byte Match statement.", "type": "object", "properties": { - "TextTransformations": { - "type": "array", - "items": { - "$ref": "#/definitions/TextTransformation" - } + "SearchString": { + "$ref": "#/definitions/SearchString" }, - "RegexString": { - "minLength": 1, - "type": "string", - "maxLength": 512 + "SearchStringBase64": { + "$ref": "#/definitions/SearchStringBase64" }, "FieldToMatch": { "$ref": "#/definitions/FieldToMatch" - } - }, - "required": [ - "RegexString", - "FieldToMatch", - "TextTransformations" - ] - }, - "RegexPatternSetReferenceStatement": { - "additionalProperties": false, - "type": "object", - "properties": { + }, "TextTransformations": { "type": "array", "items": { "$ref": "#/definitions/TextTransformation" } }, - "Arn": { - "$ref": "#/definitions/ResourceArn" - }, - "FieldToMatch": { - "$ref": "#/definitions/FieldToMatch" + "PositionalConstraint": { + "$ref": "#/definitions/PositionalConstraint" } }, "required": [ - "Arn", "FieldToMatch", + "PositionalConstraint", "TextTransformations" - ] + ], + "additionalProperties": false }, - "IPSetReferenceStatement": { - "additionalProperties": false, + "DefaultAction": { + "description": "Default Action WebACL will take against ingress traffic when there is no matching Rule.", "type": "object", "properties": { - "IPSetForwardedIPConfig": { - "$ref": "#/definitions/IPSetForwardedIPConfiguration" + "Allow": { + "$ref": "#/definitions/AllowAction" }, - "Arn": { - "$ref": "#/definitions/ResourceArn" + "Block": { + "$ref": "#/definitions/BlockAction" } }, - "required": [ - "Arn" - ] + "additionalProperties": false }, - "RequestBodyAssociatedResourceTypeConfig": { - "description": "Configures the inspection size in the request body.", - "additionalProperties": false, + "EntityDescription": { + "description": "Description of the entity.", + "type": "string", + "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$" + }, + "EntityName": { + "description": "Name of the WebACL.", + "type": "string", + "pattern": "^[0-9A-Za-z_-]{1,128}$" + }, + "ExcludedRule": { + "description": "Excluded Rule in the RuleGroup or ManagedRuleGroup will not be evaluated.", "type": "object", "properties": { - "DefaultSizeInspectionLimit": { - "$ref": "#/definitions/SizeInspectionLimit" + "Name": { + "$ref": "#/definitions/EntityName" } }, "required": [ - "DefaultSizeInspectionLimit" - ] - }, - "RateLimitJA3Fingerprint": { - "description": "Specifies the request's JA3 fingerprint as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "Name" + ], + "additionalProperties": false + }, + "RuleActionOverride": { + "description": "Action override for rules in the rule group.", "type": "object", "properties": { - "FallbackBehavior": { - "type": "string", - "enum": [ - "MATCH", - "NO_MATCH" - ] + "Name": { + "$ref": "#/definitions/EntityName" + }, + "ActionToUse": { + "$ref": "#/definitions/RuleAction" } }, "required": [ - "FallbackBehavior" - ] + "Name", + "ActionToUse" + ], + "additionalProperties": false }, - "AssociationConfig": { - "description": "AssociationConfig for body inspection", - "additionalProperties": false, + "ExcludedRules": { + "type": "array", + "items": { + "$ref": "#/definitions/ExcludedRule" + } + }, + "FieldToMatch": { + "description": "Field of the request to match.", "type": "object", "properties": { - "RequestBody": { - "$ref": "#/definitions/RequestBody" + "SingleHeader": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "SingleQueryArgument": { + "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "AllQueryArguments": { + "description": "All query arguments of a web request.", + "type": "object" + }, + "UriPath": { + "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.", + "type": "object" + }, + "QueryString": { + "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.", + "type": "object" + }, + "Body": { + "$ref": "#/definitions/Body" + }, + "Method": { + "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.", + "type": "object" + }, + "JsonBody": { + "$ref": "#/definitions/JsonBody" + }, + "Headers": { + "$ref": "#/definitions/Headers" + }, + "Cookies": { + "$ref": "#/definitions/Cookies" + }, + "JA3Fingerprint": { + "$ref": "#/definitions/JA3Fingerprint" + }, + "JA4Fingerprint": { + "$ref": "#/definitions/JA4Fingerprint" + }, + "UriFragment": { + "$ref": "#/definitions/UriFragment" } - } + }, + "additionalProperties": false + }, + "JsonBody": { + "description": "Inspect the request body as JSON. The request body immediately follows the request headers.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/JsonMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/JsonMatchScope" + }, + "InvalidFallbackBehavior": { + "$ref": "#/definitions/BodyParsingFallbackBehavior" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope" + ], + "additionalProperties": false + }, + "BodyParsingFallbackBehavior": { + "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.", + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH", + "EVALUATE_AS_STRING" + ] }, "JsonMatchScope": { "description": "The parts of the JSON to match against using the MatchPattern.", @@ -313,327 +227,441 @@ "VALUE" ] }, - "RulePriority": { - "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.", - "type": "integer", - "minimum": 0 - }, - "RuleActionOverride": { - "description": "Action override for rules in the rule group.", - "additionalProperties": false, + "JsonMatchPattern": { + "description": "The pattern to look for in the JSON body.", "type": "object", "properties": { - "ActionToUse": { - "$ref": "#/definitions/RuleAction" + "All": { + "description": "Inspect all parts of the web request's JSON body.", + "type": "object" }, - "Name": { - "$ref": "#/definitions/EntityName" + "IncludedPaths": { + "type": "array", + "items": { + "$ref": "#/definitions/JsonPointerPath" + } } }, - "required": [ - "Name", - "ActionToUse" - ] + "additionalProperties": false }, - "ExcludedRule": { - "description": "Excluded Rule in the RuleGroup or ManagedRuleGroup will not be evaluated.", - "additionalProperties": false, + "JsonPointerPath": { + "description": "JSON pointer path in the web request's JSON body", + "type": "string", + "pattern": "" + }, + "GeoMatchStatement": { "type": "object", "properties": { - "Name": { - "$ref": "#/definitions/EntityName" + "CountryCodes": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2 + } + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" } }, - "required": [ - "Name" - ] + "additionalProperties": false }, - "EntityDescription": { - "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$", - "description": "Description of the entity.", - "type": "string" + "EntityId": { + "description": "Id of the WebACL", + "type": "string", + "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$" }, - "RateLimitQueryArgument": { - "description": "Specifies a query argument in the request as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "IPSetReferenceStatement": { "type": "object", "properties": { - "TextTransformations": { - "type": "array", - "items": { - "$ref": "#/definitions/TextTransformation" - } + "Arn": { + "$ref": "#/definitions/ResourceArn" }, - "Name": { - "minLength": 1, - "pattern": ".*\\S.*", - "description": "The name of the query argument to use.", - "type": "string", - "maxLength": 64 + "IPSetForwardedIPConfig": { + "$ref": "#/definitions/IPSetForwardedIPConfiguration" } }, "required": [ - "Name", - "TextTransformations" - ] + "Arn" + ], + "additionalProperties": false }, - "Rule": { - "description": "Rule of WebACL that contains condition and action.", - "additionalProperties": false, + "ManagedRuleGroupStatement": { "type": "object", "properties": { - "Action": { - "$ref": "#/definitions/RuleAction" - }, - "Priority": { - "$ref": "#/definitions/RulePriority" - }, - "Statement": { - "$ref": "#/definitions/Statement" + "Name": { + "$ref": "#/definitions/EntityName" }, - "ChallengeConfig": { - "$ref": "#/definitions/ChallengeConfig" + "VendorName": { + "type": "string" }, - "OverrideAction": { - "$ref": "#/definitions/OverrideAction" + "Version": { + "type": "string", + "pattern": "^[\\w#:\\.\\-/]+$", + "minLength": 1, + "maxLength": 64 }, - "RuleLabels": { - "description": "Collection of Rule Labels.", + "ExcludedRules": { "type": "array", "items": { - "$ref": "#/definitions/Label" + "$ref": "#/definitions/ExcludedRule" } }, - "VisibilityConfig": { - "$ref": "#/definitions/VisibilityConfig" + "ScopeDownStatement": { + "$ref": "#/definitions/Statement" }, - "CaptchaConfig": { - "$ref": "#/definitions/CaptchaConfig" + "ManagedRuleGroupConfigs": { + "description": "Collection of ManagedRuleGroupConfig.", + "type": "array", + "items": { + "$ref": "#/definitions/ManagedRuleGroupConfig" + } }, - "Name": { - "$ref": "#/definitions/EntityName" + "RuleActionOverrides": { + "description": "Action overrides for rules in the rule group.", + "type": "array", + "items": { + "$ref": "#/definitions/RuleActionOverride" + }, + "maxItems": 100 } }, "required": [ - "Name", - "Priority", - "Statement", - "VisibilityConfig" - ] - }, - "TextTransformationPriority": { - "description": "Priority of Rule being evaluated.", - "type": "integer", - "minimum": 0 + "VendorName", + "Name" + ], + "additionalProperties": false }, - "RateLimitHeader": { - "description": "Specifies a header as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "NotStatement": { "type": "object", "properties": { - "TextTransformations": { + "Statement": { + "$ref": "#/definitions/Statement" + } + }, + "required": [ + "Statement" + ], + "additionalProperties": false + }, + "OrStatement": { + "type": "object", + "properties": { + "Statements": { "type": "array", "items": { - "$ref": "#/definitions/TextTransformation" + "$ref": "#/definitions/Statement" } - }, - "Name": { - "minLength": 1, - "pattern": ".*\\S.*", - "description": "The name of the header to use.", - "type": "string", - "maxLength": 64 } }, "required": [ - "Name", - "TextTransformations" + "Statements" + ], + "additionalProperties": false + }, + "OverrideAction": { + "description": "Override a RuleGroup or ManagedRuleGroup behavior. This can only be applied to Rule that has RuleGroupReferenceStatement or ManagedRuleGroupReferenceStatement.", + "type": "object", + "properties": { + "Count": { + "description": "Count traffic towards application.", + "type": "object" + }, + "None": { + "description": "Keep the RuleGroup or ManagedRuleGroup behavior as is.", + "type": "object" + } + }, + "additionalProperties": false + }, + "PositionalConstraint": { + "description": "Position of the evaluation in the FieldToMatch of request.", + "type": "string", + "enum": [ + "EXACTLY", + "STARTS_WITH", + "ENDS_WITH", + "CONTAINS", + "CONTAINS_WORD" ] }, - "IPSetForwardedIPConfiguration": { - "additionalProperties": false, + "QueryString": { + "type": "object" + }, + "RateBasedStatement": { "type": "object", "properties": { - "FallbackBehavior": { - "type": "string", - "enum": [ - "MATCH", - "NO_MATCH" - ] + "Limit": { + "$ref": "#/definitions/RateLimit" }, - "HeaderName": { - "pattern": "", - "type": "string" + "EvaluationWindowSec": { + "$ref": "#/definitions/EvaluationWindowSec" }, - "Position": { + "AggregateKeyType": { "type": "string", "enum": [ - "FIRST", - "LAST", - "ANY" + "CONSTANT", + "IP", + "FORWARDED_IP", + "CUSTOM_KEYS" ] + }, + "CustomKeys": { + "description": "Specifies the aggregate keys to use in a rate-base rule.", + "type": "array", + "items": { + "$ref": "#/definitions/RateBasedStatementCustomKey" + }, + "maxItems": 5 + }, + "ScopeDownStatement": { + "$ref": "#/definitions/Statement" + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" } }, "required": [ - "HeaderName", - "FallbackBehavior", - "Position" - ] + "Limit", + "AggregateKeyType" + ], + "additionalProperties": false }, - "SizeConstraintStatement": { - "description": "Size Constraint statement.", - "additionalProperties": false, + "RateBasedStatementCustomKey": { + "description": "Specifies a single custom aggregate key for a rate-base rule.", "type": "object", "properties": { - "ComparisonOperator": { + "Cookie": { + "$ref": "#/definitions/RateLimitCookie" + }, + "ForwardedIP": { + "$ref": "#/definitions/RateLimitForwardedIP" + }, + "Header": { + "$ref": "#/definitions/RateLimitHeader" + }, + "HTTPMethod": { + "$ref": "#/definitions/RateLimitHTTPMethod" + }, + "IP": { + "$ref": "#/definitions/RateLimitIP" + }, + "LabelNamespace": { + "$ref": "#/definitions/RateLimitLabelNamespace" + }, + "QueryArgument": { + "$ref": "#/definitions/RateLimitQueryArgument" + }, + "QueryString": { + "$ref": "#/definitions/RateLimitQueryString" + }, + "UriPath": { + "$ref": "#/definitions/RateLimitUriPath" + }, + "JA3Fingerprint": { + "$ref": "#/definitions/RateLimitJA3Fingerprint" + }, + "JA4Fingerprint": { + "$ref": "#/definitions/RateLimitJA4Fingerprint" + }, + "ASN": { + "$ref": "#/definitions/RateLimitAsn" + } + }, + "additionalProperties": false + }, + "RateLimitCookie": { + "description": "Specifies a cookie as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the cookie to use.", "type": "string", - "enum": [ - "EQ", - "NE", - "LE", - "LT", - "GE", - "GT" - ] + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 }, "TextTransformations": { "type": "array", "items": { "$ref": "#/definitions/TextTransformation" } - }, - "Size": { - "maximum": 21474836480, - "type": "number", - "minimum": 0 - }, - "FieldToMatch": { - "$ref": "#/definitions/FieldToMatch" } }, "required": [ - "FieldToMatch", - "ComparisonOperator", - "Size", + "Name", "TextTransformations" - ] + ], + "additionalProperties": false }, - "AndStatement": { - "additionalProperties": false, + "RateLimitForwardedIP": { + "description": "Specifies the first IP address in an HTTP header as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitHeader": { + "description": "Specifies a header as an aggregate key for a rate-based rule.", "type": "object", "properties": { - "Statements": { + "Name": { + "description": "The name of the header to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { "type": "array", "items": { - "$ref": "#/definitions/Statement" + "$ref": "#/definitions/TextTransformation" } } }, "required": [ - "Statements" - ] + "Name", + "TextTransformations" + ], + "additionalProperties": false }, - "ResponseContent": { - "minLength": 1, - "description": "Response content.", - "type": "string", - "maxLength": 10240 + "RateLimitHTTPMethod": { + "description": "Specifies the request's HTTP method as an aggregate key for a rate-based rule.", + "type": "object" }, - "JA3Fingerprint": { - "description": "Includes the JA3 fingerprint of a web request.", - "additionalProperties": false, + "RateLimitIP": { + "description": "Specifies the IP address in the web request as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitLabelNamespace": { + "description": "Specifies a label namespace to use as an aggregate key for a rate-based rule.", "type": "object", "properties": { - "FallbackBehavior": { + "Namespace": { + "description": "The namespace to use for aggregation.", "type": "string", - "enum": [ - "MATCH", - "NO_MATCH" - ] + "pattern": "" } }, "required": [ - "FallbackBehavior" - ] - }, - "EntityName": { - "pattern": "^[0-9A-Za-z_-]{1,128}$", - "description": "Name of the WebACL.", - "type": "string" + "Namespace" + ], + "additionalProperties": false }, - "NotStatement": { - "additionalProperties": false, + "RateLimitQueryArgument": { + "description": "Specifies a query argument in the request as an aggregate key for a rate-based rule.", "type": "object", "properties": { - "Statement": { - "$ref": "#/definitions/Statement" + "Name": { + "description": "The name of the query argument to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } } }, "required": [ - "Statement" - ] + "Name", + "TextTransformations" + ], + "additionalProperties": false }, - "ResponseInspectionStatusCode": { - "description": "Response status codes that indicate success or failure of a login request", - "additionalProperties": false, + "RateLimitQueryString": { + "description": "Specifies the request's query string as an aggregate key for a rate-based rule.", "type": "object", "properties": { - "SuccessCodes": { - "minItems": 1, - "maxItems": 10, + "TextTransformations": { "type": "array", "items": { - "minLength": 0, - "type": "integer", - "maxLength": 999 + "$ref": "#/definitions/TextTransformation" } - }, - "FailureCodes": { - "minItems": 1, - "maxItems": 10, + } + }, + "required": [ + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitUriPath": { + "description": "Specifies the request's URI Path as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "TextTransformations": { "type": "array", "items": { - "minLength": 0, - "type": "integer", - "maxLength": 999 + "$ref": "#/definitions/TextTransformation" } } }, "required": [ - "SuccessCodes", - "FailureCodes" - ] + "TextTransformations" + ], + "additionalProperties": false }, - "PhoneNumberField": { - "$ref": "#/definitions/FieldIdentifier" + "RateLimitJA3Fingerprint": { + "description": "Specifies the request's JA3 fingerprint as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + } + }, + "required": [ + "FallbackBehavior" + ], + "additionalProperties": false }, - "RuleAction": { - "description": "Action taken when Rule matches its condition.", - "additionalProperties": false, + "RateLimitJA4Fingerprint": { + "description": "Specifies the request's JA4 fingerprint as an aggregate key for a rate-based rule.", "type": "object", "properties": { - "Captcha": { - "$ref": "#/definitions/CaptchaAction" - }, - "Block": { - "$ref": "#/definitions/BlockAction" - }, - "Count": { - "$ref": "#/definitions/CountAction" - }, - "Allow": { - "$ref": "#/definitions/AllowAction" - }, - "Challenge": { - "$ref": "#/definitions/ChallengeAction" + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] } - } + }, + "required": [ + "FallbackBehavior" + ], + "additionalProperties": false }, - "RateLimitUriPath": { - "description": "Specifies the request's URI Path as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "RateLimitAsn": { + "description": "Specifies the request's ASN as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimit": { + "type": "integer", + "minimum": 10, + "maximum": 2000000000 + }, + "EvaluationWindowSec": { + "type": "integer", + "enum": [ + 60, + 120, + 300, + 600 + ] + }, + "RegexPatternSetReferenceStatement": { "type": "object", "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, "TextTransformations": { "type": "array", "items": { @@ -642,1073 +670,1066 @@ } }, "required": [ + "Arn", + "FieldToMatch", "TextTransformations" - ] - }, - "TextTransformationType": { - "description": "Type of text transformation.", - "type": "string", - "enum": [ - "NONE", - "COMPRESS_WHITE_SPACE", - "HTML_ENTITY_DECODE", - "LOWERCASE", - "CMD_LINE", - "URL_DECODE", - "BASE64_DECODE", - "HEX_DECODE", - "MD5", - "REPLACE_COMMENTS", - "ESCAPE_SEQ_DECODE", - "SQL_HEX_DECODE", - "CSS_DECODE", - "JS_DECODE", - "NORMALIZE_PATH", - "NORMALIZE_PATH_WIN", - "REMOVE_NULLS", - "REPLACE_NULLS", - "BASE64_DECODE_EXT", - "URL_DECODE_UNI", - "UTF8_TO_UNICODE" - ] - }, - "LabelName": { - "pattern": "", - "description": "Name of the Label.", - "type": "string" - }, - "PositionalConstraint": { - "description": "Position of the evaluation in the FieldToMatch of request.", - "type": "string", - "enum": [ - "EXACTLY", - "STARTS_WITH", - "ENDS_WITH", - "CONTAINS", - "CONTAINS_WORD" - ] + ], + "additionalProperties": false }, - "CustomHTTPHeaderValue": { - "minLength": 1, - "description": "HTTP header value.", + "ResourceArn": { + "description": "ARN of the WAF entity.", "type": "string", - "maxLength": 255 + "minLength": 20, + "maxLength": 2048 }, - "LabelMatchStatement": { - "additionalProperties": false, + "ForwardedIPConfiguration": { "type": "object", "properties": { - "Scope": { - "$ref": "#/definitions/LabelMatchScope" + "HeaderName": { + "type": "string", + "pattern": "" }, - "Key": { - "$ref": "#/definitions/LabelMatchKey" + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] } }, "required": [ - "Scope", - "Key" - ] + "HeaderName", + "FallbackBehavior" + ], + "additionalProperties": false }, - "ResponseInspectionBodyContains": { - "description": "Response body contents that indicate success or failure of a login request", - "additionalProperties": false, + "IPSetForwardedIPConfiguration": { "type": "object", "properties": { - "SuccessStrings": { - "minItems": 1, - "maxItems": 5, - "type": "array", - "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 100 - } + "HeaderName": { + "type": "string", + "pattern": "" }, - "FailureStrings": { - "minItems": 1, - "maxItems": 5, - "type": "array", - "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 100 - } + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + }, + "Position": { + "type": "string", + "enum": [ + "FIRST", + "LAST", + "ANY" + ] } }, "required": [ - "SuccessStrings", - "FailureStrings" - ] - }, - "ExcludedRules": { - "type": "array", - "items": { - "$ref": "#/definitions/ExcludedRule" - } + "HeaderName", + "FallbackBehavior", + "Position" + ], + "additionalProperties": false }, - "FieldToMatch": { - "description": "Field of the request to match.", - "additionalProperties": false, + "Rule": { + "description": "Rule of WebACL that contains condition and action.", "type": "object", "properties": { - "AllQueryArguments": { - "description": "All query arguments of a web request.", - "type": "object" + "Name": { + "$ref": "#/definitions/EntityName" }, - "JA3Fingerprint": { - "$ref": "#/definitions/JA3Fingerprint" + "Priority": { + "$ref": "#/definitions/RulePriority" }, - "SingleQueryArgument": { - "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.", - "additionalProperties": false, - "type": "object", - "properties": { - "Name": { - "type": "string" - } - }, - "required": [ - "Name" - ] + "Statement": { + "$ref": "#/definitions/Statement" }, - "QueryString": { - "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.", - "type": "object" + "Action": { + "$ref": "#/definitions/RuleAction" }, - "Headers": { - "$ref": "#/definitions/Headers" + "OverrideAction": { + "$ref": "#/definitions/OverrideAction" }, - "Method": { - "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.", - "type": "object" + "RuleLabels": { + "description": "Collection of Rule Labels.", + "type": "array", + "items": { + "$ref": "#/definitions/Label" + } }, - "UriFragment": { - "$ref": "#/definitions/UriFragment" + "VisibilityConfig": { + "$ref": "#/definitions/VisibilityConfig" }, - "JsonBody": { - "$ref": "#/definitions/JsonBody" + "CaptchaConfig": { + "$ref": "#/definitions/CaptchaConfig" }, - "UriPath": { - "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.", - "type": "object" + "ChallengeConfig": { + "$ref": "#/definitions/ChallengeConfig" + } + }, + "required": [ + "Name", + "Priority", + "Statement", + "VisibilityConfig" + ], + "additionalProperties": false + }, + "Rules": { + "description": "Collection of Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Rule" + } + }, + "RuleAction": { + "description": "Action taken when Rule matches its condition.", + "type": "object", + "properties": { + "Allow": { + "$ref": "#/definitions/AllowAction" }, - "Cookies": { - "$ref": "#/definitions/Cookies" + "Block": { + "$ref": "#/definitions/BlockAction" }, - "JA4Fingerprint": { - "$ref": "#/definitions/JA4Fingerprint" + "Count": { + "$ref": "#/definitions/CountAction" }, - "Body": { - "$ref": "#/definitions/Body" + "Captcha": { + "$ref": "#/definitions/CaptchaAction" }, - "SingleHeader": { - "additionalProperties": false, - "type": "object", - "properties": { - "Name": { - "type": "string" - } - }, - "required": [ - "Name" - ] + "Challenge": { + "$ref": "#/definitions/ChallengeAction" } - } + }, + "additionalProperties": false }, - "RequestBody": { - "patternProperties": { - "": { - "$ref": "#/definitions/RequestBodyAssociatedResourceTypeConfig" + "AllowAction": { + "description": "Allow traffic towards application.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" } }, - "description": "Map of AssociatedResourceType and RequestBodyAssociatedResourceTypeConfig", - "additionalProperties": false, - "type": "object" + "additionalProperties": false }, - "Statement": { - "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc", - "additionalProperties": false, + "CountAction": { + "description": "Allow traffic towards application.", "type": "object", "properties": { - "SizeConstraintStatement": { - "$ref": "#/definitions/SizeConstraintStatement" - }, - "AndStatement": { - "$ref": "#/definitions/AndStatement" - }, - "XssMatchStatement": { - "$ref": "#/definitions/XssMatchStatement" - }, - "NotStatement": { - "$ref": "#/definitions/NotStatement" - }, - "ByteMatchStatement": { - "$ref": "#/definitions/ByteMatchStatement" - }, - "RateBasedStatement": { - "$ref": "#/definitions/RateBasedStatement" - }, - "GeoMatchStatement": { - "$ref": "#/definitions/GeoMatchStatement" - }, - "RuleGroupReferenceStatement": { - "$ref": "#/definitions/RuleGroupReferenceStatement" - }, - "LabelMatchStatement": { - "$ref": "#/definitions/LabelMatchStatement" - }, - "RegexMatchStatement": { - "$ref": "#/definitions/RegexMatchStatement" - }, - "SqliMatchStatement": { - "$ref": "#/definitions/SqliMatchStatement" - }, - "RegexPatternSetReferenceStatement": { - "$ref": "#/definitions/RegexPatternSetReferenceStatement" - }, - "OrStatement": { - "$ref": "#/definitions/OrStatement" - }, - "ManagedRuleGroupStatement": { - "$ref": "#/definitions/ManagedRuleGroupStatement" - }, - "IPSetReferenceStatement": { - "$ref": "#/definitions/IPSetReferenceStatement" + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" } - } + }, + "additionalProperties": false }, - "ChallengeConfig": { - "additionalProperties": false, + "CaptchaAction": { + "description": "Checks valid token exists with request.", "type": "object", "properties": { - "ImmunityTimeProperty": { - "$ref": "#/definitions/ImmunityTimeProperty" + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" } - } + }, + "additionalProperties": false }, - "RateBasedStatement": { - "additionalProperties": false, + "ChallengeAction": { + "description": "Checks that the request has a valid token with an unexpired challenge timestamp and, if not, returns a browser challenge to the client.", "type": "object", "properties": { - "AggregateKeyType": { - "type": "string", - "enum": [ - "CONSTANT", - "IP", - "FORWARDED_IP", - "CUSTOM_KEYS" - ] - }, - "CustomKeys": { - "maxItems": 5, - "description": "Specifies the aggregate keys to use in a rate-base rule.", - "type": "array", - "items": { - "$ref": "#/definitions/RateBasedStatementCustomKey" - } - }, - "ForwardedIPConfig": { - "$ref": "#/definitions/ForwardedIPConfiguration" - }, - "Limit": { - "$ref": "#/definitions/RateLimit" - }, - "EvaluationWindowSec": { - "$ref": "#/definitions/EvaluationWindowSec" + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "BlockAction": { + "description": "Block traffic towards application.", + "type": "object", + "properties": { + "CustomResponse": { + "$ref": "#/definitions/CustomResponse" + } + }, + "additionalProperties": false + }, + "CustomHTTPHeaderName": { + "description": "HTTP header name.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "CustomHTTPHeaderValue": { + "description": "HTTP header value.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "CustomHTTPHeader": { + "description": "HTTP header.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/CustomHTTPHeaderName" }, - "ScopeDownStatement": { - "$ref": "#/definitions/Statement" + "Value": { + "$ref": "#/definitions/CustomHTTPHeaderValue" } }, "required": [ - "Limit", - "AggregateKeyType" - ] - }, - "LabelMatchKey": { - "pattern": "", - "type": "string" + "Name", + "Value" + ], + "additionalProperties": false }, - "FieldIdentifier": { - "additionalProperties": false, + "CustomRequestHandling": { + "description": "Custom request handling.", "type": "object", "properties": { - "Identifier": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 512 + "InsertHeaders": { + "description": "Collection of HTTP headers.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomHTTPHeader" + }, + "minItems": 1 } }, "required": [ - "Identifier" - ] + "InsertHeaders" + ], + "additionalProperties": false }, - "Rules": { - "description": "Collection of Rules.", - "type": "array", - "items": { - "$ref": "#/definitions/Rule" - } + "ResponseStatusCode": { + "description": "Custom response code.", + "type": "integer", + "minimum": 200, + "maximum": 599 }, - "OversizeHandling": { - "description": "Handling of requests containing oversize fields", + "ResponseContentType": { + "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.", "type": "string", "enum": [ - "CONTINUE", - "MATCH", - "NO_MATCH" + "TEXT_PLAIN", + "TEXT_HTML", + "APPLICATION_JSON" ] }, - "SearchStringBase64": { - "description": "Base64 encoded string that is searched to find a match.", - "type": "string" - }, - "UriPath": { - "type": "object" - }, - "CustomResponseBodies": { - "patternProperties": { - "": { - "$ref": "#/definitions/CustomResponseBody" - } - }, - "description": "Custom response key and body map.", - "additionalProperties": false, - "type": "object", - "minProperties": 1 + "ResponseContent": { + "description": "Response content.", + "type": "string", + "minLength": 1, + "maxLength": 10240 }, - "Tag": { - "additionalProperties": false, + "CustomResponseBody": { + "description": "Custom response body.", "type": "object", "properties": { - "Value": { - "minLength": 0, - "type": "string", - "maxLength": 256 + "ContentType": { + "$ref": "#/definitions/ResponseContentType" }, - "Key": { - "minLength": 1, - "type": "string", - "maxLength": 128 + "Content": { + "$ref": "#/definitions/ResponseContent" } - } + }, + "required": [ + "ContentType", + "Content" + ], + "additionalProperties": false }, - "CookieMatchPattern": { - "description": "The pattern to look for in the request cookies.", - "additionalProperties": false, + "CustomResponse": { + "description": "Custom response.", "type": "object", "properties": { - "All": { - "description": "Inspect all parts of the web request cookies.", - "type": "object" + "ResponseCode": { + "$ref": "#/definitions/ResponseStatusCode" }, - "IncludedCookies": { - "minItems": 1, - "maxItems": 199, - "type": "array", - "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 60 - } + "CustomResponseBodyKey": { + "description": "Custom response body key.", + "type": "string", + "pattern": "^[\\w\\-]+$" }, - "ExcludedCookies": { - "minItems": 1, - "maxItems": 199, + "ResponseHeaders": { + "description": "Collection of HTTP headers.", "type": "array", "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 60 - } + "$ref": "#/definitions/CustomHTTPHeader" + }, + "minItems": 1 } - } + }, + "required": [ + "ResponseCode" + ], + "additionalProperties": false }, - "ResponseInspectionHeader": { - "description": "Response headers that indicate success or failure of a login request", - "additionalProperties": false, + "CustomResponseBodies": { + "description": "Custom response key and body map.", + "type": "object", + "patternProperties": { + "": { + "$ref": "#/definitions/CustomResponseBody" + } + }, + "minProperties": 1, + "additionalProperties": false + }, + "RuleGroupReferenceStatement": { "type": "object", "properties": { - "SuccessValues": { - "minItems": 1, - "maxItems": 3, + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "ExcludedRules": { "type": "array", "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 100 + "$ref": "#/definitions/ExcludedRule" } }, - "FailureValues": { - "minItems": 1, - "maxItems": 3, + "RuleActionOverrides": { + "description": "Action overrides for rules in the rule group.", "type": "array", "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 100 - } - }, - "Name": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 200 + "$ref": "#/definitions/RuleActionOverride" + }, + "maxItems": 100 } }, "required": [ - "Name", - "SuccessValues", - "FailureValues" - ] - }, - "CaptchaAction": { - "description": "Checks valid token exists with request.", - "additionalProperties": false, - "type": "object", - "properties": { - "CustomRequestHandling": { - "$ref": "#/definitions/CustomRequestHandling" - } - } + "Arn" + ], + "additionalProperties": false }, - "BlockAction": { - "description": "Block traffic towards application.", - "additionalProperties": false, - "type": "object", - "properties": { - "CustomResponse": { - "$ref": "#/definitions/CustomResponse" - } - } + "RulePriority": { + "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.", + "type": "integer", + "minimum": 0 }, - "DataProtectionAction": { + "Scope": { + "description": "Use CLOUDFRONT for CloudFront WebACL, use REGIONAL for Application Load Balancer and API Gateway.", "type": "string", "enum": [ - "SUBSTITUTION", - "HASH" + "CLOUDFRONT", + "REGIONAL" ] }, - "Label": { - "additionalProperties": false, + "SearchString": { + "description": "String that is searched to find a match.", + "type": "string" + }, + "SearchStringBase64": { + "description": "Base64 encoded string that is searched to find a match.", + "type": "string" + }, + "SingleHeader": { "type": "object", "properties": { "Name": { - "$ref": "#/definitions/LabelName" + "type": "string" } }, - "required": [ - "Name" - ] + "additionalProperties": false }, - "DataProtectionConfig": { - "additionalProperties": false, + "SingleQueryArgument": { "type": "object", "properties": { - "DataProtections": { - "$ref": "#/definitions/DataProtections" + "Name": { + "type": "string" } }, - "required": [ - "DataProtections" - ] + "additionalProperties": false }, - "UriFragment": { - "description": "The path component of the URI Fragment. This is the part of a web request that identifies a fragment uri, for example, /abcd#introduction", - "additionalProperties": false, + "SizeConstraintStatement": { + "description": "Size Constraint statement.", "type": "object", "properties": { - "FallbackBehavior": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "ComparisonOperator": { "type": "string", "enum": [ - "MATCH", - "NO_MATCH" + "EQ", + "NE", + "LE", + "LT", + "GE", + "GT" ] - } - } - }, - "ResponseInspectionJson": { - "description": "Response JSON that indicate success or failure of a login request", - "additionalProperties": false, - "type": "object", - "properties": { - "Identifier": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 512 }, - "SuccessValues": { - "minItems": 1, - "maxItems": 5, - "type": "array", - "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 100 - } + "Size": { + "type": "number", + "minimum": 0, + "maximum": 21474836480 }, - "FailureValues": { - "minItems": 1, - "maxItems": 5, + "TextTransformations": { "type": "array", "items": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 100 + "$ref": "#/definitions/TextTransformation" } } }, "required": [ - "Identifier", - "SuccessValues", - "FailureValues" - ] + "FieldToMatch", + "ComparisonOperator", + "Size", + "TextTransformations" + ], + "additionalProperties": false }, - "FieldToProtect": { - "description": "Field in log to protect.", - "additionalProperties": false, + "SqliMatchStatement": { + "description": "Sqli Match Statement.", "type": "object", "properties": { - "FieldKeys": { - "description": "List of field keys to protect", + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { "type": "array", "items": { - "$ref": "#/definitions/FieldToProtectKeyName" + "$ref": "#/definitions/TextTransformation" } }, - "FieldType": { - "description": "Field type to protect", - "type": "string", - "enum": [ - "SINGLE_HEADER", - "SINGLE_COOKIE", - "SINGLE_QUERY_ARGUMENT", - "QUERY_STRING", - "BODY" - ] + "SensitivityLevel": { + "$ref": "#/definitions/SensitivityLevel" } }, "required": [ - "FieldType" - ] + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false }, - "ManagedRuleGroupConfig": { - "description": "ManagedRuleGroupConfig.", - "additionalProperties": false, + "Statement": { + "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc", "type": "object", "properties": { - "UsernameField": { - "$ref": "#/definitions/FieldIdentifier" + "ByteMatchStatement": { + "$ref": "#/definitions/ByteMatchStatement" }, - "LoginPath": { - "minLength": 1, - "pattern": ".*\\S.*", - "type": "string", - "maxLength": 256 + "SqliMatchStatement": { + "$ref": "#/definitions/SqliMatchStatement" }, - "AWSManagedRulesATPRuleSet": { - "$ref": "#/definitions/AWSManagedRulesATPRuleSet" + "XssMatchStatement": { + "$ref": "#/definitions/XssMatchStatement" }, - "AWSManagedRulesBotControlRuleSet": { - "$ref": "#/definitions/AWSManagedRulesBotControlRuleSet" + "SizeConstraintStatement": { + "$ref": "#/definitions/SizeConstraintStatement" + }, + "GeoMatchStatement": { + "$ref": "#/definitions/GeoMatchStatement" + }, + "RuleGroupReferenceStatement": { + "$ref": "#/definitions/RuleGroupReferenceStatement" + }, + "IPSetReferenceStatement": { + "$ref": "#/definitions/IPSetReferenceStatement" + }, + "RegexPatternSetReferenceStatement": { + "$ref": "#/definitions/RegexPatternSetReferenceStatement" + }, + "ManagedRuleGroupStatement": { + "$ref": "#/definitions/ManagedRuleGroupStatement" + }, + "RateBasedStatement": { + "$ref": "#/definitions/RateBasedStatement" + }, + "AndStatement": { + "$ref": "#/definitions/AndStatement" + }, + "OrStatement": { + "$ref": "#/definitions/OrStatement" + }, + "NotStatement": { + "$ref": "#/definitions/NotStatement" + }, + "LabelMatchStatement": { + "$ref": "#/definitions/LabelMatchStatement" }, - "PasswordField": { - "$ref": "#/definitions/FieldIdentifier" + "RegexMatchStatement": { + "$ref": "#/definitions/RegexMatchStatement" }, - "AWSManagedRulesACFPRuleSet": { - "$ref": "#/definitions/AWSManagedRulesACFPRuleSet" + "AsnMatchStatement": { + "$ref": "#/definitions/AsnMatchStatement" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 }, - "PayloadType": { + "Value": { "type": "string", - "enum": [ - "JSON", - "FORM_ENCODED" - ] + "minLength": 0, + "maxLength": 256 } - } + }, + "additionalProperties": false }, - "Cookies": { - "description": "Includes cookies of a web request.", - "additionalProperties": false, + "TextTransformation": { + "description": "Text Transformation on the Search String before match.", "type": "object", "properties": { - "MatchScope": { - "$ref": "#/definitions/MapMatchScope" - }, - "MatchPattern": { - "$ref": "#/definitions/CookieMatchPattern" + "Priority": { + "$ref": "#/definitions/TextTransformationPriority" }, - "OversizeHandling": { - "$ref": "#/definitions/OversizeHandling" + "Type": { + "$ref": "#/definitions/TextTransformationType" } }, "required": [ - "MatchPattern", - "MatchScope", - "OversizeHandling" + "Priority", + "Type" + ], + "additionalProperties": false + }, + "TextTransformationPriority": { + "description": "Priority of Rule being evaluated.", + "type": "integer", + "minimum": 0 + }, + "TextTransformationType": { + "description": "Type of text transformation.", + "type": "string", + "enum": [ + "NONE", + "COMPRESS_WHITE_SPACE", + "HTML_ENTITY_DECODE", + "LOWERCASE", + "CMD_LINE", + "URL_DECODE", + "BASE64_DECODE", + "HEX_DECODE", + "MD5", + "REPLACE_COMMENTS", + "ESCAPE_SEQ_DECODE", + "SQL_HEX_DECODE", + "CSS_DECODE", + "JS_DECODE", + "NORMALIZE_PATH", + "NORMALIZE_PATH_WIN", + "REMOVE_NULLS", + "REPLACE_NULLS", + "BASE64_DECODE_EXT", + "URL_DECODE_UNI", + "UTF8_TO_UNICODE" ] }, - "AllowAction": { - "description": "Allow traffic towards application.", - "additionalProperties": false, - "type": "object", - "properties": { - "CustomRequestHandling": { - "$ref": "#/definitions/CustomRequestHandling" - } - } + "UriPath": { + "type": "object" }, - "AWSManagedRulesBotControlRuleSet": { - "description": "Configures how to use the Bot Control managed rule group in the web ACL", - "additionalProperties": false, + "VisibilityConfig": { + "description": "Visibility Metric of the WebACL.", "type": "object", "properties": { - "InspectionLevel": { - "type": "string", - "enum": [ - "COMMON", - "TARGETED" - ] + "SampledRequestsEnabled": { + "type": "boolean" }, - "EnableMachineLearning": { + "CloudWatchMetricsEnabled": { "type": "boolean" + }, + "MetricName": { + "type": "string", + "maxLength": 128, + "minLength": 1 } }, "required": [ - "InspectionLevel" - ] + "SampledRequestsEnabled", + "CloudWatchMetricsEnabled", + "MetricName" + ], + "additionalProperties": false }, - "SqliMatchStatement": { - "description": "Sqli Match Statement.", - "additionalProperties": false, + "DataProtectionConfig": { "type": "object", "properties": { - "SensitivityLevel": { - "$ref": "#/definitions/SensitivityLevel" - }, - "TextTransformations": { - "type": "array", - "items": { - "$ref": "#/definitions/TextTransformation" - } - }, - "FieldToMatch": { - "$ref": "#/definitions/FieldToMatch" + "DataProtections": { + "$ref": "#/definitions/DataProtections" } }, "required": [ - "FieldToMatch", - "TextTransformations" - ] + "DataProtections" + ], + "additionalProperties": false }, - "ManagedRuleGroupStatement": { - "additionalProperties": false, + "DataProtections": { + "type": "array", + "items": { + "$ref": "#/definitions/DataProtect" + }, + "minItems": 1 + }, + "DataProtect": { "type": "object", "properties": { - "VendorName": { - "type": "string" - }, - "Version": { - "minLength": 1, - "pattern": "^[\\w#:\\.\\-/]+$", - "type": "string", - "maxLength": 64 - }, - "RuleActionOverrides": { - "maxItems": 100, - "description": "Action overrides for rules in the rule group.", - "type": "array", - "items": { - "$ref": "#/definitions/RuleActionOverride" - } - }, - "ManagedRuleGroupConfigs": { - "description": "Collection of ManagedRuleGroupConfig.", - "type": "array", - "items": { - "$ref": "#/definitions/ManagedRuleGroupConfig" - } + "Field": { + "$ref": "#/definitions/FieldToProtect" }, - "ExcludedRules": { - "type": "array", - "items": { - "$ref": "#/definitions/ExcludedRule" - } + "Action": { + "$ref": "#/definitions/DataProtectionAction" }, - "Name": { - "$ref": "#/definitions/EntityName" + "ExcludeRuleMatchDetails": { + "type": "boolean" }, - "ScopeDownStatement": { - "$ref": "#/definitions/Statement" + "ExcludeRateBasedDetails": { + "type": "boolean" } }, "required": [ - "VendorName", - "Name" - ] + "Field", + "Action" + ], + "additionalProperties": false }, - "EvaluationWindowSec": { - "type": "integer", + "DataProtectionAction": { + "type": "string", "enum": [ - 60, - 120, - 300, - 600 + "SUBSTITUTION", + "HASH" ] }, - "RateLimitCookie": { - "description": "Specifies a cookie as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "FieldToProtect": { + "description": "Field in log to protect.", "type": "object", "properties": { - "TextTransformations": { + "FieldType": { + "description": "Field type to protect", + "type": "string", + "enum": [ + "SINGLE_HEADER", + "SINGLE_COOKIE", + "SINGLE_QUERY_ARGUMENT", + "QUERY_STRING", + "BODY" + ] + }, + "FieldKeys": { + "description": "List of field keys to protect", "type": "array", "items": { - "$ref": "#/definitions/TextTransformation" + "$ref": "#/definitions/FieldToProtectKeyName" } - }, - "Name": { - "minLength": 1, - "pattern": ".*\\S.*", - "description": "The name of the cookie to use.", - "type": "string", - "maxLength": 64 } }, "required": [ - "Name", - "TextTransformations" - ] + "FieldType" + ], + "additionalProperties": false }, - "AddressField": { - "$ref": "#/definitions/FieldIdentifier" + "FieldToProtectKeyName": { + "description": "Key of the field to protect.", + "type": "string", + "minLength": 1, + "maxLength": 64 }, - "JsonMatchPattern": { - "description": "The pattern to look for in the JSON body.", - "additionalProperties": false, + "XssMatchStatement": { + "description": "Xss Match Statement.", "type": "object", "properties": { - "All": { - "description": "Inspect all parts of the web request's JSON body.", - "type": "object" + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" }, - "IncludedPaths": { + "TextTransformations": { "type": "array", "items": { - "$ref": "#/definitions/JsonPointerPath" + "$ref": "#/definitions/TextTransformation" } } - } - }, - "RateLimitIP": { - "description": "Specifies the IP address in the web request as an aggregate key for a rate-based rule.", - "type": "object" + }, + "required": [ + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false }, - "ChallengeAction": { - "description": "Checks that the request has a valid token with an unexpired challenge timestamp and, if not, returns a browser challenge to the client.", - "additionalProperties": false, + "LabelName": { + "description": "Name of the Label.", + "type": "string", + "pattern": "" + }, + "Label": { "type": "object", "properties": { - "CustomRequestHandling": { - "$ref": "#/definitions/CustomRequestHandling" + "Name": { + "$ref": "#/definitions/LabelName" } - } + }, + "required": [ + "Name" + ], + "additionalProperties": false }, - "FieldToProtectKeyName": { - "minLength": 1, - "description": "Key of the field to protect.", + "LabelMatchKey": { "type": "string", - "maxLength": 64 + "pattern": "" }, - "CountAction": { - "description": "Allow traffic towards application.", - "additionalProperties": false, + "LabelMatchScope": { + "type": "string", + "enum": [ + "LABEL", + "NAMESPACE" + ] + }, + "LabelMatchStatement": { "type": "object", "properties": { - "CustomRequestHandling": { - "$ref": "#/definitions/CustomRequestHandling" + "Scope": { + "$ref": "#/definitions/LabelMatchScope" + }, + "Key": { + "$ref": "#/definitions/LabelMatchKey" } - } + }, + "required": [ + "Scope", + "Key" + ], + "additionalProperties": false }, - "ByteMatchStatement": { - "description": "Byte Match statement.", - "additionalProperties": false, + "RegexMatchStatement": { "type": "object", "properties": { - "SearchStringBase64": { - "$ref": "#/definitions/SearchStringBase64" + "RegexString": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" }, "TextTransformations": { "type": "array", "items": { "$ref": "#/definitions/TextTransformation" } - }, - "PositionalConstraint": { - "$ref": "#/definitions/PositionalConstraint" - }, - "SearchString": { - "$ref": "#/definitions/SearchString" - }, - "FieldToMatch": { - "$ref": "#/definitions/FieldToMatch" } }, "required": [ + "RegexString", "FieldToMatch", - "PositionalConstraint", "TextTransformations" - ] - }, - "SizeInspectionLimit": { - "type": "string", - "enum": [ - "KB_16", - "KB_32", - "KB_48", - "KB_64" - ] + ], + "additionalProperties": false }, - "CustomRequestHandling": { - "description": "Custom request handling.", - "additionalProperties": false, + "AsnMatchStatement": { "type": "object", "properties": { - "InsertHeaders": { - "minItems": 1, - "description": "Collection of HTTP headers.", + "AsnList": { "type": "array", "items": { - "$ref": "#/definitions/CustomHTTPHeader" + "type": "integer", + "minimum": 0, + "maximum": 4294967295 } + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" } }, - "required": [ - "InsertHeaders" - ] + "additionalProperties": false }, - "DataProtections": { - "minItems": 1, - "type": "array", - "items": { - "$ref": "#/definitions/DataProtect" - } + "CaptchaConfig": { + "type": "object", + "properties": { + "ImmunityTimeProperty": { + "$ref": "#/definitions/ImmunityTimeProperty" + } + }, + "additionalProperties": false }, - "OverrideAction": { - "description": "Override a RuleGroup or ManagedRuleGroup behavior. This can only be applied to Rule that has RuleGroupReferenceStatement or ManagedRuleGroupReferenceStatement.", - "additionalProperties": false, + "ChallengeConfig": { "type": "object", "properties": { - "Count": { - "description": "Count traffic towards application.", - "type": "object" - }, - "None": { - "description": "Keep the RuleGroup or ManagedRuleGroup behavior as is.", - "type": "object" + "ImmunityTimeProperty": { + "$ref": "#/definitions/ImmunityTimeProperty" } - } + }, + "additionalProperties": false }, - "GeoMatchStatement": { - "additionalProperties": false, + "ImmunityTimeProperty": { "type": "object", "properties": { - "ForwardedIPConfig": { - "$ref": "#/definitions/ForwardedIPConfiguration" - }, - "CountryCodes": { - "type": "array", - "items": { - "minLength": 1, - "type": "string", - "maxLength": 2 - } + "ImmunityTime": { + "type": "integer", + "minimum": 60, + "maximum": 259200 } - } + }, + "required": [ + "ImmunityTime" + ], + "additionalProperties": false }, - "VisibilityConfig": { - "description": "Visibility Metric of the WebACL.", - "additionalProperties": false, + "ManagedRuleGroupConfig": { + "description": "ManagedRuleGroupConfig.", "type": "object", "properties": { - "MetricName": { + "LoginPath": { + "type": "string", + "pattern": ".*\\S.*", "minLength": 1, + "maxLength": 256 + }, + "PayloadType": { "type": "string", - "maxLength": 128 + "enum": [ + "JSON", + "FORM_ENCODED" + ] }, - "SampledRequestsEnabled": { + "UsernameField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "PasswordField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "AWSManagedRulesBotControlRuleSet": { + "$ref": "#/definitions/AWSManagedRulesBotControlRuleSet" + }, + "AWSManagedRulesATPRuleSet": { + "$ref": "#/definitions/AWSManagedRulesATPRuleSet" + }, + "AWSManagedRulesACFPRuleSet": { + "$ref": "#/definitions/AWSManagedRulesACFPRuleSet" + }, + "AWSManagedRulesAntiDDoSRuleSet": { + "$ref": "#/definitions/AWSManagedRulesAntiDDoSRuleSet" + } + }, + "additionalProperties": false + }, + "AWSManagedRulesBotControlRuleSet": { + "description": "Configures how to use the Bot Control managed rule group in the web ACL", + "type": "object", + "properties": { + "InspectionLevel": { + "type": "string", + "enum": [ + "COMMON", + "TARGETED" + ] + }, + "EnableMachineLearning": { "type": "boolean" + } + }, + "required": [ + "InspectionLevel" + ], + "additionalProperties": false + }, + "AWSManagedRulesATPRuleSet": { + "description": "Configures how to use the Account Takeover Prevention managed rule group in the web ACL", + "type": "object", + "properties": { + "LoginPath": { + "type": "string" }, - "CloudWatchMetricsEnabled": { + "EnableRegexInPath": { "type": "boolean" + }, + "RequestInspection": { + "$ref": "#/definitions/RequestInspection" + }, + "ResponseInspection": { + "$ref": "#/definitions/ResponseInspection" } }, "required": [ - "SampledRequestsEnabled", - "CloudWatchMetricsEnabled", - "MetricName" - ] + "LoginPath" + ], + "additionalProperties": false }, "AWSManagedRulesACFPRuleSet": { "description": "Configures how to use the Account creation fraud prevention managed rule group in the web ACL", - "additionalProperties": false, "type": "object", "properties": { + "CreationPath": { + "type": "string" + }, "RegistrationPagePath": { "type": "string" }, + "RequestInspection": { + "$ref": "#/definitions/RequestInspectionACFP" + }, "ResponseInspection": { "$ref": "#/definitions/ResponseInspection" }, - "CreationPath": { - "type": "string" - }, "EnableRegexInPath": { "type": "boolean" - }, - "RequestInspection": { - "$ref": "#/definitions/RequestInspectionACFP" } }, "required": [ "CreationPath", "RegistrationPagePath", "RequestInspection" - ] + ], + "additionalProperties": false }, - "RuleGroupReferenceStatement": { - "additionalProperties": false, + "AWSManagedRulesAntiDDoSRuleSet": { + "description": "Configures how to use the AntiDDOS AWS managed rule group in the web ACL", "type": "object", "properties": { - "RuleActionOverrides": { - "maxItems": 100, - "description": "Action overrides for rules in the rule group.", - "type": "array", - "items": { - "$ref": "#/definitions/RuleActionOverride" - } - }, - "Arn": { - "$ref": "#/definitions/ResourceArn" + "ClientSideActionConfig": { + "$ref": "#/definitions/ClientSideActionConfig" }, - "ExcludedRules": { - "type": "array", - "items": { - "$ref": "#/definitions/ExcludedRule" - } + "SensitivityToBlock": { + "$ref": "#/definitions/SensitivityToAct" } }, "required": [ - "Arn" - ] + "ClientSideActionConfig" + ], + "additionalProperties": false }, - "TokenDomains": { - "description": "List of domains to accept in web request tokens, in addition to the domain of the protected resource.", - "type": "array", - "items": { - "minLength": 1, - "pattern": "^[\\w\\.\\-/]+$", - "type": "string", - "maxLength": 253 - } + "ClientSideActionConfig": { + "description": "Client side action config for AntiDDOS AMR.", + "type": "object", + "properties": { + "Challenge": { + "$ref": "#/definitions/ClientSideAction" + } + }, + "required": [ + "Challenge" + ], + "additionalProperties": false }, - "RateLimitJA4Fingerprint": { - "description": "Specifies the request's JA4 fingerprint as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "ClientSideAction": { + "description": "Client side action config for AntiDDOS AMR.", "type": "object", "properties": { - "FallbackBehavior": { - "type": "string", - "enum": [ - "MATCH", - "NO_MATCH" - ] + "UsageOfAction": { + "$ref": "#/definitions/UsageOfAction" + }, + "Sensitivity": { + "$ref": "#/definitions/SensitivityToAct" + }, + "ExemptUriRegularExpressions": { + "$ref": "#/definitions/RegularExpressionList" } }, "required": [ - "FallbackBehavior" + "UsageOfAction" + ], + "additionalProperties": false + }, + "UsageOfAction": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" ] }, - "ResourceArn": { - "minLength": 20, - "description": "ARN of the WAF entity.", + "SensitivityToAct": { "type": "string", - "maxLength": 2048 + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ] }, - "DefaultAction": { - "description": "Default Action WebACL will take against ingress traffic when there is no matching Rule.", - "additionalProperties": false, + "RegularExpressionList": { + "type": "array", + "items": { + "$ref": "#/definitions/Regex" + } + }, + "Regex": { + "description": "Regex", "type": "object", "properties": { - "Block": { - "$ref": "#/definitions/BlockAction" - }, - "Allow": { - "$ref": "#/definitions/AllowAction" + "RegexString": { + "$ref": "#/definitions/RegexPatternString" } } }, - "JsonPointerPath": { - "pattern": "", - "description": "JSON pointer path in the web request's JSON body", - "type": "string" + "RegexPatternString": { + "type": "string", + "maxLength": 512, + "minLength": 1 }, - "RateBasedStatementCustomKey": { - "description": "Specifies a single custom aggregate key for a rate-base rule.", - "additionalProperties": false, + "RequestInspection": { + "description": "Configures the inspection of login requests", "type": "object", "properties": { - "Cookie": { - "$ref": "#/definitions/RateLimitCookie" - }, - "ForwardedIP": { - "$ref": "#/definitions/RateLimitForwardedIP" - }, - "QueryArgument": { - "$ref": "#/definitions/RateLimitQueryArgument" - }, - "JA3Fingerprint": { - "$ref": "#/definitions/RateLimitJA3Fingerprint" + "PayloadType": { + "type": "string", + "enum": [ + "JSON", + "FORM_ENCODED" + ] }, - "Header": { - "$ref": "#/definitions/RateLimitHeader" + "UsernameField": { + "$ref": "#/definitions/FieldIdentifier" }, - "HTTPMethod": { - "$ref": "#/definitions/RateLimitHTTPMethod" + "PasswordField": { + "$ref": "#/definitions/FieldIdentifier" + } + }, + "required": [ + "PayloadType", + "UsernameField", + "PasswordField" + ], + "additionalProperties": false + }, + "RequestInspectionACFP": { + "description": "Configures the inspection of sign-up requests", + "type": "object", + "properties": { + "PayloadType": { + "type": "string", + "enum": [ + "JSON", + "FORM_ENCODED" + ] }, - "QueryString": { - "$ref": "#/definitions/RateLimitQueryString" + "UsernameField": { + "$ref": "#/definitions/FieldIdentifier" }, - "UriPath": { - "$ref": "#/definitions/RateLimitUriPath" + "PasswordField": { + "$ref": "#/definitions/FieldIdentifier" }, - "IP": { - "$ref": "#/definitions/RateLimitIP" + "EmailField": { + "$ref": "#/definitions/FieldIdentifier" }, - "JA4Fingerprint": { - "$ref": "#/definitions/RateLimitJA4Fingerprint" + "PhoneNumberFields": { + "type": "array", + "items": { + "$ref": "#/definitions/PhoneNumberField" + } }, - "LabelNamespace": { - "$ref": "#/definitions/RateLimitLabelNamespace" + "AddressFields": { + "type": "array", + "items": { + "$ref": "#/definitions/AddressField" + } } - } + }, + "required": [ + "PayloadType" + ], + "additionalProperties": false }, "ResponseInspection": { "description": "Configures the inspection of login responses", - "additionalProperties": false, "type": "object", "properties": { + "StatusCode": { + "$ref": "#/definitions/ResponseInspectionStatusCode" + }, "Header": { "$ref": "#/definitions/ResponseInspectionHeader" }, @@ -1717,130 +1738,237 @@ }, "Json": { "$ref": "#/definitions/ResponseInspectionJson" - }, - "StatusCode": { - "$ref": "#/definitions/ResponseInspectionStatusCode" } - } - }, - "LabelMatchScope": { - "type": "string", - "enum": [ - "LABEL", - "NAMESPACE" - ] - }, - "RateLimitHTTPMethod": { - "description": "Specifies the request's HTTP method as an aggregate key for a rate-based rule.", - "type": "object" + }, + "additionalProperties": false }, - "RequestInspectionACFP": { - "description": "Configures the inspection of sign-up requests", - "additionalProperties": false, + "ResponseInspectionStatusCode": { + "description": "Response status codes that indicate success or failure of a login request", "type": "object", "properties": { - "UsernameField": { - "$ref": "#/definitions/FieldIdentifier" + "SuccessCodes": { + "type": "array", + "items": { + "type": "integer", + "minLength": 0, + "maxLength": 999 + }, + "minItems": 1, + "maxItems": 10 }, - "EmailField": { - "$ref": "#/definitions/FieldIdentifier" + "FailureCodes": { + "type": "array", + "items": { + "type": "integer", + "minLength": 0, + "maxLength": 999 + }, + "minItems": 1, + "maxItems": 10 + } + }, + "required": [ + "SuccessCodes", + "FailureCodes" + ], + "additionalProperties": false + }, + "ResponseInspectionHeader": { + "description": "Response headers that indicate success or failure of a login request", + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 200 }, - "PasswordField": { - "$ref": "#/definitions/FieldIdentifier" + "SuccessValues": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 3 }, - "AddressFields": { + "FailureValues": { "type": "array", "items": { - "$ref": "#/definitions/AddressField" - } + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 3 + } + }, + "required": [ + "Name", + "SuccessValues", + "FailureValues" + ], + "additionalProperties": false + }, + "ResponseInspectionBodyContains": { + "description": "Response body contents that indicate success or failure of a login request", + "type": "object", + "properties": { + "SuccessStrings": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 }, - "PayloadType": { + "FailureStrings": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 + } + }, + "required": [ + "SuccessStrings", + "FailureStrings" + ], + "additionalProperties": false + }, + "ResponseInspectionJson": { + "description": "Response JSON that indicate success or failure of a login request", + "type": "object", + "properties": { + "Identifier": { "type": "string", - "enum": [ - "JSON", - "FORM_ENCODED" - ] + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 512 + }, + "SuccessValues": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 }, - "PhoneNumberFields": { + "FailureValues": { "type": "array", "items": { - "$ref": "#/definitions/PhoneNumberField" - } + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 } }, "required": [ - "PayloadType" - ] + "Identifier", + "SuccessValues", + "FailureValues" + ], + "additionalProperties": false }, - "ImmunityTimeProperty": { - "additionalProperties": false, + "TokenDomains": { + "description": "List of domains to accept in web request tokens, in addition to the domain of the protected resource.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w\\.\\-/]+$", + "minLength": 1, + "maxLength": 253 + } + }, + "AssociationConfig": { + "description": "AssociationConfig for body inspection", "type": "object", "properties": { - "ImmunityTime": { - "maximum": 259200, - "type": "integer", - "minimum": 60 + "RequestBody": { + "$ref": "#/definitions/RequestBody" } }, - "required": [ - "ImmunityTime" - ] + "additionalProperties": false }, - "RateLimitLabelNamespace": { - "description": "Specifies a label namespace to use as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "RequestBody": { "type": "object", - "properties": { - "Namespace": { - "pattern": "", - "description": "The namespace to use for aggregation.", - "type": "string" + "description": "Map of AssociatedResourceType and RequestBodyAssociatedResourceTypeConfig", + "patternProperties": { + "": { + "$ref": "#/definitions/RequestBodyAssociatedResourceTypeConfig" } }, - "required": [ - "Namespace" - ] + "additionalProperties": false }, - "SingleQueryArgument": { - "additionalProperties": false, + "RequestBodyAssociatedResourceTypeConfig": { + "description": "Configures the inspection size in the request body.", "type": "object", "properties": { - "Name": { - "type": "string" + "DefaultSizeInspectionLimit": { + "$ref": "#/definitions/SizeInspectionLimit" } - } + }, + "required": [ + "DefaultSizeInspectionLimit" + ], + "additionalProperties": false }, - "XssMatchStatement": { - "description": "Xss Match Statement.", - "additionalProperties": false, + "SizeInspectionLimit": { + "type": "string", + "enum": [ + "KB_16", + "KB_32", + "KB_48", + "KB_64" + ] + }, + "PhoneNumberField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "AddressField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "FieldIdentifier": { "type": "object", "properties": { - "TextTransformations": { - "type": "array", - "items": { - "$ref": "#/definitions/TextTransformation" - } - }, - "FieldToMatch": { - "$ref": "#/definitions/FieldToMatch" + "Identifier": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 512 } }, "required": [ - "FieldToMatch", - "TextTransformations" - ] + "Identifier" + ], + "additionalProperties": false }, "Headers": { "description": "Includes headers of a web request.", - "additionalProperties": false, "type": "object", "properties": { - "MatchScope": { - "$ref": "#/definitions/MapMatchScope" - }, "MatchPattern": { "$ref": "#/definitions/HeaderMatchPattern" }, + "MatchScope": { + "$ref": "#/definitions/MapMatchScope" + }, "OversizeHandling": { "$ref": "#/definitions/OversizeHandling" } @@ -1849,72 +1977,18 @@ "MatchPattern", "MatchScope", "OversizeHandling" - ] - }, - "RateLimitForwardedIP": { - "description": "Specifies the first IP address in an HTTP header as an aggregate key for a rate-based rule.", - "type": "object" - }, - "AWSManagedRulesATPRuleSet": { - "description": "Configures how to use the Account Takeover Prevention managed rule group in the web ACL", - "additionalProperties": false, - "type": "object", - "properties": { - "ResponseInspection": { - "$ref": "#/definitions/ResponseInspection" - }, - "EnableRegexInPath": { - "type": "boolean" - }, - "LoginPath": { - "type": "string" - }, - "RequestInspection": { - "$ref": "#/definitions/RequestInspection" - } - }, - "required": [ - "LoginPath" - ] - }, - "RequestInspection": { - "description": "Configures the inspection of login requests", - "additionalProperties": false, - "type": "object", - "properties": { - "UsernameField": { - "$ref": "#/definitions/FieldIdentifier" - }, - "PasswordField": { - "$ref": "#/definitions/FieldIdentifier" - }, - "PayloadType": { - "type": "string", - "enum": [ - "JSON", - "FORM_ENCODED" - ] - } - }, - "required": [ - "PayloadType", - "UsernameField", - "PasswordField" - ] + ], + "additionalProperties": false }, - "JsonBody": { - "description": "Inspect the request body as JSON. The request body immediately follows the request headers.", - "additionalProperties": false, + "Cookies": { + "description": "Includes cookies of a web request.", "type": "object", "properties": { - "MatchScope": { - "$ref": "#/definitions/JsonMatchScope" - }, "MatchPattern": { - "$ref": "#/definitions/JsonMatchPattern" + "$ref": "#/definitions/CookieMatchPattern" }, - "InvalidFallbackBehavior": { - "$ref": "#/definitions/BodyParsingFallbackBehavior" + "MatchScope": { + "$ref": "#/definitions/MapMatchScope" }, "OversizeHandling": { "$ref": "#/definitions/OversizeHandling" @@ -1922,106 +1996,95 @@ }, "required": [ "MatchPattern", - "MatchScope" - ] - }, - "RateLimit": { - "maximum": 2000000000, - "type": "integer", - "minimum": 10 + "MatchScope", + "OversizeHandling" + ], + "additionalProperties": false }, - "OrStatement": { - "additionalProperties": false, + "HeaderMatchPattern": { + "description": "The pattern to look for in the request headers.", "type": "object", "properties": { - "Statements": { + "All": { + "description": "Inspect all parts of the web request headers.", + "type": "object" + }, + "IncludedHeaders": { "type": "array", "items": { - "$ref": "#/definitions/Statement" - } - } - }, - "required": [ - "Statements" - ] - }, - "Body": { - "description": "The body of a web request. This immediately follows the request headers.", - "additionalProperties": false, - "type": "object", - "properties": { - "OversizeHandling": { - "$ref": "#/definitions/OversizeHandling" - } - } - }, - "CustomHTTPHeader": { - "description": "HTTP header.", - "additionalProperties": false, - "type": "object", - "properties": { - "Value": { - "$ref": "#/definitions/CustomHTTPHeaderValue" + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 1, + "maxItems": 199 }, - "Name": { - "$ref": "#/definitions/CustomHTTPHeaderName" + "ExcludedHeaders": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 1, + "maxItems": 199 } }, - "required": [ - "Name", - "Value" - ] + "additionalProperties": false }, - "RateLimitQueryString": { - "description": "Specifies the request's query string as an aggregate key for a rate-based rule.", - "additionalProperties": false, + "CookieMatchPattern": { + "description": "The pattern to look for in the request cookies.", "type": "object", "properties": { - "TextTransformations": { + "All": { + "description": "Inspect all parts of the web request cookies.", + "type": "object" + }, + "IncludedCookies": { "type": "array", "items": { - "$ref": "#/definitions/TextTransformation" - } + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 60 + }, + "minItems": 1, + "maxItems": 199 + }, + "ExcludedCookies": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 60 + }, + "minItems": 1, + "maxItems": 199 } }, - "required": [ - "TextTransformations" - ] - }, - "QueryString": { - "type": "object" + "additionalProperties": false }, - "ResponseContentType": { - "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.", + "MapMatchScope": { + "description": "The parts of the request to match against using the MatchPattern.", "type": "string", "enum": [ - "TEXT_PLAIN", - "TEXT_HTML", - "APPLICATION_JSON" + "ALL", + "KEY", + "VALUE" ] }, - "TextTransformation": { - "description": "Text Transformation on the Search String before match.", - "additionalProperties": false, - "type": "object", - "properties": { - "Type": { - "$ref": "#/definitions/TextTransformationType" - }, - "Priority": { - "$ref": "#/definitions/TextTransformationPriority" - } - }, - "required": [ - "Priority", - "Type" + "OversizeHandling": { + "description": "Handling of requests containing oversize fields", + "type": "string", + "enum": [ + "CONTINUE", + "MATCH", + "NO_MATCH" ] }, - "EntityId": { - "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$", - "description": "Id of the WebACL", - "type": "string" - }, "SensitivityLevel": { "description": "Sensitivity Level current only used for sqli match statements.", "type": "string", @@ -2030,33 +2093,25 @@ "HIGH" ] }, - "Scope": { - "description": "Use CLOUDFRONT for CloudFront WebACL, use REGIONAL for Application Load Balancer and API Gateway.", - "type": "string", - "enum": [ - "CLOUDFRONT", - "REGIONAL" - ] - }, - "CustomResponseBody": { - "description": "Custom response body.", - "additionalProperties": false, + "JA3Fingerprint": { + "description": "Includes the JA3 fingerprint of a web request.", "type": "object", "properties": { - "ContentType": { - "$ref": "#/definitions/ResponseContentType" - }, - "Content": { - "$ref": "#/definitions/ResponseContent" + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] } }, "required": [ - "ContentType", - "Content" - ] + "FallbackBehavior" + ], + "additionalProperties": false }, - "ForwardedIPConfiguration": { - "additionalProperties": false, + "JA4Fingerprint": { + "description": "Includes the JA4 fingerprint of a web request.", "type": "object", "properties": { "FallbackBehavior": { @@ -2065,65 +2120,68 @@ "MATCH", "NO_MATCH" ] - }, - "HeaderName": { - "pattern": "", - "type": "string" } }, "required": [ - "HeaderName", "FallbackBehavior" - ] + ], + "additionalProperties": false }, - "CaptchaConfig": { - "additionalProperties": false, + "UriFragment": { + "description": "The path component of the URI Fragment. This is the part of a web request that identifies a fragment uri, for example, /abcd#introduction", "type": "object", "properties": { - "ImmunityTimeProperty": { - "$ref": "#/definitions/ImmunityTimeProperty" + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] } - } + }, + "additionalProperties": false }, - "SingleHeader": { - "additionalProperties": false, + "OnSourceDDoSProtectionConfig": { + "description": "Configures the options for on-source DDoS protection provided by supported resource type.", "type": "object", "properties": { - "Name": { - "type": "string" + "ALBLowReputationMode": { + "type": "string", + "enum": [ + "ACTIVE_UNDER_DDOS", + "ALWAYS_ON" + ] } - } - }, - "MapMatchScope": { - "description": "The parts of the request to match against using the MatchPattern.", - "type": "string", - "enum": [ - "ALL", - "KEY", - "VALUE" - ] + }, + "required": [ + "ALBLowReputationMode" + ], + "additionalProperties": false } }, - "required": [ - "DefaultAction", - "Scope", - "VisibilityConfig" - ], "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "Capacity": { + "type": "integer", + "minimum": 0 + }, + "DefaultAction": { + "$ref": "#/definitions/DefaultAction" + }, "Description": { "$ref": "#/definitions/EntityDescription" }, - "AssociationConfig": { - "$ref": "#/definitions/AssociationConfig" + "Name": { + "$ref": "#/definitions/EntityName" }, - "ChallengeConfig": { - "$ref": "#/definitions/ChallengeConfig" + "Id": { + "$ref": "#/definitions/EntityId" }, - "DataProtectionConfig": { - "description": "Collection of dataProtects.", - "$ref": "#/definitions/DataProtectionConfig" + "Scope": { + "$ref": "#/definitions/Scope" }, - "OnSourceDDoSProtectionConfig": {}, "Rules": { "description": "Collection of Rules.", "type": "array", @@ -2134,42 +2192,116 @@ "VisibilityConfig": { "$ref": "#/definitions/VisibilityConfig" }, + "DataProtectionConfig": { + "description": "Collection of dataProtects.", + "$ref": "#/definitions/DataProtectionConfig" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1 + }, "LabelNamespace": { "$ref": "#/definitions/LabelName" }, - "Name": { - "$ref": "#/definitions/EntityName" + "CustomResponseBodies": { + "$ref": "#/definitions/CustomResponseBodies" }, - "TokenDomains": { - "$ref": "#/definitions/TokenDomains" + "CaptchaConfig": { + "$ref": "#/definitions/CaptchaConfig" }, - "DefaultAction": { - "$ref": "#/definitions/DefaultAction" + "ChallengeConfig": { + "$ref": "#/definitions/ChallengeConfig" }, - "Scope": { - "$ref": "#/definitions/Scope" + "TokenDomains": { + "$ref": "#/definitions/TokenDomains" }, - "Capacity": { - "type": "integer", - "minimum": 0 + "AssociationConfig": { + "$ref": "#/definitions/AssociationConfig" }, - "CustomResponseBodies": { - "$ref": "#/definitions/CustomResponseBodies" + "OnSourceDDoSProtectionConfig": { + "$ref": "#/definitions/OnSourceDDoSProtectionConfig" + } + }, + "required": [ + "DefaultAction", + "Scope", + "VisibilityConfig" + ], + "primaryIdentifier": [ + "/properties/Name", + "/properties/Id", + "/properties/Scope" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Scope" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Capacity", + "/properties/Id", + "/properties/LabelNamespace" + ], + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": true, + "tagOnCreate": true, + "tagUpdatable": true, + "taggable": true, + "tagProperty": "/properties/Tags", + "permissions": [ + "wafv2:TagResource", + "wafv2:UntagResource", + "wafv2:ListTagsForResource" + ] + }, + "handlers": { + "create": { + "permissions": [ + "wafv2:CreateWebACL", + "wafv2:GetWebACL", + "wafv2:ListTagsForResource", + "wafv2:TagResource", + "wafv2:UntagResource" + ] }, - "Id": { - "$ref": "#/definitions/EntityId" + "delete": { + "permissions": [ + "wafv2:DeleteWebACL", + "wafv2:GetWebACL" + ] }, - "Arn": { - "$ref": "#/definitions/ResourceArn" + "read": { + "permissions": [ + "wafv2:GetWebACL", + "wafv2:ListTagsForResource" + ] }, - "CaptchaConfig": { - "$ref": "#/definitions/CaptchaConfig" + "update": { + "permissions": [ + "wafv2:UpdateWebACL", + "wafv2:GetWebACL", + "wafv2:ListTagsForResource", + "wafv2:TagResource", + "wafv2:UntagResource" + ] }, - "Tags": { - "minItems": 1, - "type": "array", - "items": { - "$ref": "#/definitions/Tag" + "list": { + "permissions": [ + "wafv2:listWebACLs" + ], + "handlerSchema": { + "properties": { + "Scope": { + "$ref": "resource-schema.json#/properties/Scope" + } + }, + "required": [ + "Scope" + ] } } } diff --git a/version/VERSION b/version/VERSION index 34d29b8fe..241e887d6 100644 --- a/version/VERSION +++ b/version/VERSION @@ -1 +1 @@ -1.45.1 \ No newline at end of file +1.46.0 \ No newline at end of file