From 3183b9ea73d5903d58de0e5ceafc9c41a63a9d67 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 11:32:42 -0400 Subject: [PATCH 1/7] 2025/06/18 CloudFormation schemas in us-east-1; Refresh existing schemas. --- .../schemas/AWS_Amplify_App.json | 20 + .../schemas/AWS_CleanRooms_Collaboration.json | 5 +- .../schemas/AWS_DynamoDB_Table.json | 4 +- .../schemas/AWS_EC2_Subnet.json | 16 +- .../AWS_InspectorV2_CisScanConfiguration.json | 6 +- .../schemas/AWS_InspectorV2_Filter.json | 79 +- .../schemas/AWS_IoTSiteWise_Asset.json | 13 +- .../cloudformation/schemas/AWS_KMS_Key.json | 5 +- .../AWS_Lambda_EventSourceMapping.json | 18 +- ...AWS_MediaTailor_PlaybackConfiguration.json | 67 + .../schemas/AWS_OpsWorksCM_Server.json | 2 +- .../schemas/AWS_Organizations_Policy.json | 5 +- .../AWS_QuickSight_CustomPermissions.json | 200 +- .../schemas/AWS_RDS_DBCluster.json | 2 +- .../schemas/AWS_RDS_DBInstance.json | 2 +- .../schemas/AWS_RUM_AppMonitor.json | 2 +- .../cloudformation/schemas/AWS_SQS_Queue.json | 7 +- .../schemas/AWS_Synthetics_Canary.json | 4 + .../schemas/AWS_WAFv2_RuleGroup.json | 27 + .../schemas/AWS_WAFv2_WebACL.json | 3182 +++++++++-------- 20 files changed, 2007 insertions(+), 1659 deletions(-) diff --git a/internal/service/cloudformation/schemas/AWS_Amplify_App.json b/internal/service/cloudformation/schemas/AWS_Amplify_App.json index 095942ae5f..6841c7bc8a 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 8e669cc442..ecab7df656 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 c973fab544..9b9d8e59a7 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 79d5b40f28..8a982b426c 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_InspectorV2_CisScanConfiguration.json b/internal/service/cloudformation/schemas/AWS_InspectorV2_CisScanConfiguration.json index 18b1aa909e..6c3fb05229 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 571f33cbca..91f0307555 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 dc91b61f1a..be58c12572 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 deb937fbd4..2bac6c3999 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 13bec73947..22fc57bfdb 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_MediaTailor_PlaybackConfiguration.json b/internal/service/cloudformation/schemas/AWS_MediaTailor_PlaybackConfiguration.json index e947790075..e1fdc67737 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 01ba713f1f..2fe8e9c395 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 9aa3b86029..2a39955d97 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 f48efdea0e..69f203b76f 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 03c632cd69..349387e263 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 850bf1ee31..a4e0ab45f0 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 79e2a81d08..5218832ef7 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 803ad3a0f7..ac4d0b2593 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_Synthetics_Canary.json b/internal/service/cloudformation/schemas/AWS_Synthetics_Canary.json index ae9fde2101..a1cd531ca0 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 2f24068081..9511bd579a 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 8d0f9a005d..7a35c69b76 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" + ] } } } From e6ecb27e927766215d5ba65ea7d9de2f6c193eb9 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 11:53:56 -0400 Subject: [PATCH 2/7] 2025/06/18 CloudFormation schemas in us-east-1; New schemas. --- internal/provider/all_schemas.hcl | 32 +- .../available_schemas.2025-06-18.hcl | 5019 +++++++++++++++++ internal/provider/import_examples_gen.json | 25 + internal/provider/plural_data_sources.go | 6 + internal/provider/resources.go | 6 + internal/provider/singular_data_sources.go | 6 + .../schemas/AWS_EC2_TrafficMirrorFilter.json | 119 + .../schemas/AWS_MPA_ApprovalTeam.json | 240 + .../schemas/AWS_MPA_IdentitySource.json | 174 + .../schemas/AWS_SecurityHub_AggregatorV2.json | 117 + .../AWS_SecurityHub_AutomationRuleV2.json | 593 ++ .../schemas/AWS_SecurityHub_HubV2.json | 95 + 12 files changed, 6431 insertions(+), 1 deletion(-) create mode 100644 internal/provider/generators/allschemas/available_schemas.2025-06-18.hcl create mode 100644 internal/service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json create mode 100644 internal/service/cloudformation/schemas/AWS_MPA_ApprovalTeam.json create mode 100644 internal/service/cloudformation/schemas/AWS_MPA_IdentitySource.json create mode 100644 internal/service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json create mode 100644 internal/service/cloudformation/schemas/AWS_SecurityHub_AutomationRuleV2.json create mode 100644 internal/service/cloudformation/schemas/AWS_SecurityHub_HubV2.json diff --git a/internal/provider/all_schemas.hcl b/internal/provider/all_schemas.hcl index d0519e66aa..e932489a01 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 0000000000..85cf8572f3 --- /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 7e208e44d2..ffdde2f3e2 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 35c9106d6c..c5642ea17f 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 bec6705ede..613e115ac8 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 6ae545d9c8..14fb7dc2b3 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_EC2_TrafficMirrorFilter.json b/internal/service/cloudformation/schemas/AWS_EC2_TrafficMirrorFilter.json new file mode 100644 index 0000000000..9e3ec32ee5 --- /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_MPA_ApprovalTeam.json b/internal/service/cloudformation/schemas/AWS_MPA_ApprovalTeam.json new file mode 100644 index 0000000000..71904f92c3 --- /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 0000000000..e2550ab617 --- /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_SecurityHub_AggregatorV2.json b/internal/service/cloudformation/schemas/AWS_SecurityHub_AggregatorV2.json new file mode 100644 index 0000000000..0c4bb5d428 --- /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 0000000000..5e46ca7457 --- /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 0000000000..a2d8c3681f --- /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" + ] + } + } +} From dd32955bf7a6fa87d5d63601275d04682cba964c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 12:00:02 -0400 Subject: [PATCH 3/7] 2025/06/18 CloudFormation schemas in us-east-1; Generate Terraform resource schemas. --- internal/aws/amplify/app_resource_gen.go | 47 + .../cleanrooms/collaboration_resource_gen.go | 35 +- internal/aws/dynamodb/table_resource_gen.go | 8 +- internal/aws/ec2/subnet_resource_gen.go | 34 +- .../ec2/traffic_mirror_filter_resource_gen.go | 197 +++ ...traffic_mirror_filter_resource_gen_test.go | 46 + .../aws/inspectorv2/filter_resource_gen.go | 1467 ++++++++++++++--- internal/aws/kms/key_resource_gen.go | 8 +- .../event_source_mapping_resource_gen.go | 56 +- .../aws/mpa/identity_source_resource_gen.go | 291 ++++ .../mpa/identity_source_resource_gen_test.go | 25 + .../aws/opsworkscm/server_resource_gen.go | 2 + .../aws/organizations/policy_resource_gen.go | 8 +- internal/aws/rds/db_cluster_resource_gen.go | 4 +- internal/aws/rds/db_instance_resource_gen.go | 4 +- internal/aws/rum/app_monitor_resource_gen.go | 4 +- .../securityhub/aggregator_v2_resource_gen.go | 174 ++ .../aggregator_v2_resource_gen_test.go | 25 + .../automation_rule_v2_resource_gen.go | 1286 +++++++++++++++ .../automation_rule_v2_resource_gen_test.go | 25 + .../aws/securityhub/hub_v2_resource_gen.go | 121 ++ .../securityhub/hub_v2_resource_gen_test.go | 46 + .../aws/synthetics/canary_resource_gen.go | 14 + 23 files changed, 3600 insertions(+), 327 deletions(-) create mode 100644 internal/aws/ec2/traffic_mirror_filter_resource_gen.go create mode 100644 internal/aws/ec2/traffic_mirror_filter_resource_gen_test.go create mode 100644 internal/aws/mpa/identity_source_resource_gen.go create mode 100644 internal/aws/mpa/identity_source_resource_gen_test.go create mode 100644 internal/aws/securityhub/aggregator_v2_resource_gen.go create mode 100644 internal/aws/securityhub/aggregator_v2_resource_gen_test.go create mode 100644 internal/aws/securityhub/automation_rule_v2_resource_gen.go create mode 100644 internal/aws/securityhub/automation_rule_v2_resource_gen_test.go create mode 100644 internal/aws/securityhub/hub_v2_resource_gen.go create mode 100644 internal/aws/securityhub/hub_v2_resource_gen_test.go diff --git a/internal/aws/amplify/app_resource_gen.go b/internal/aws/amplify/app_resource_gen.go index 5e13d40fce..2f9ff9e87a 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/cleanrooms/collaboration_resource_gen.go b/internal/aws/cleanrooms/collaboration_resource_gen.go index b003774415..fbe92f5be5 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/dynamodb/table_resource_gen.go b/internal/aws/dynamodb/table_resource_gen.go index b957fb09dc..963debb164 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/ec2/subnet_resource_gen.go b/internal/aws/ec2/subnet_resource_gen.go index fddb06516f..6bbfe7d878 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/traffic_mirror_filter_resource_gen.go b/internal/aws/ec2/traffic_mirror_filter_resource_gen.go new file mode 100644 index 0000000000..e9682e2323 --- /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 0000000000..e8fe6ed225 --- /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/inspectorv2/filter_resource_gen.go b/internal/aws/inspectorv2/filter_resource_gen.go index 231a416c39..1a3a1b545e 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/kms/key_resource_gen.go b/internal/aws/kms/key_resource_gen.go index f6ccee2b97..0eb843ddf4 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/lambda/event_source_mapping_resource_gen.go b/internal/aws/lambda/event_source_mapping_resource_gen.go index 85aeda70e2..a0108638b8 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/mpa/identity_source_resource_gen.go b/internal/aws/mpa/identity_source_resource_gen.go new file mode 100644 index 0000000000..1b241953f9 --- /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 0000000000..f73ac5d47e --- /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/opsworkscm/server_resource_gen.go b/internal/aws/opsworkscm/server_resource_gen.go index 5858f94f48..af84019b4d 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 3ebbc29906..bebcb1432d 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/rds/db_cluster_resource_gen.go b/internal/aws/rds/db_cluster_resource_gen.go index b7144acc37..58765fad1c 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_instance_resource_gen.go b/internal/aws/rds/db_instance_resource_gen.go index 69fc950247..9742c93217 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/rum/app_monitor_resource_gen.go b/internal/aws/rum/app_monitor_resource_gen.go index 436f5bd451..0e1c3f4de0 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/securityhub/aggregator_v2_resource_gen.go b/internal/aws/securityhub/aggregator_v2_resource_gen.go new file mode 100644 index 0000000000..1f4e78e750 --- /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 0000000000..32d7142132 --- /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/automation_rule_v2_resource_gen.go b/internal/aws/securityhub/automation_rule_v2_resource_gen.go new file mode 100644 index 0000000000..3c8bbfe744 --- /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 0000000000..83b4d66888 --- /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/hub_v2_resource_gen.go b/internal/aws/securityhub/hub_v2_resource_gen.go new file mode 100644 index 0000000000..ea88ef4ad5 --- /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 0000000000..fb4b2bf17f --- /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/synthetics/canary_resource_gen.go b/internal/aws/synthetics/canary_resource_gen.go index 065584a382..fbe1aed285 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", From 2a99fdc1559b048351c53df7b7c1f1815f7b263f Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 12:08:54 -0400 Subject: [PATCH 4/7] 2025/06/18 CloudFormation schemas in us-east-1; Generate Terraform data source schemas. --- .../amplify/app_singular_data_source_gen.go | 31 + .../collaboration_singular_data_source_gen.go | 3 +- .../table_singular_data_source_gen.go | 8 +- .../ec2/subnet_singular_data_source_gen.go | 31 +- ...ic_mirror_filter_plural_data_source_gen.go | 54 ++ ...rror_filter_plural_data_source_gen_test.go | 27 + ..._mirror_filter_singular_data_source_gen.go | 142 +++ ...or_filter_singular_data_source_gen_test.go | 40 + .../filter_singular_data_source_gen.go | 690 ++++++++++++-- .../aws/kms/key_singular_data_source_gen.go | 5 +- ...source_mapping_singular_data_source_gen.go | 56 +- .../identity_source_plural_data_source_gen.go | 54 ++ ...tity_source_plural_data_source_gen_test.go | 27 + ...dentity_source_singular_data_source_gen.go | 220 +++++ ...ty_source_singular_data_source_gen_test.go | 36 + .../policy_singular_data_source_gen.go | 7 +- .../db_cluster_singular_data_source_gen.go | 4 +- .../db_instance_singular_data_source_gen.go | 4 +- .../app_monitor_singular_data_source_gen.go | 2 +- .../aggregator_v2_plural_data_source_gen.go | 54 ++ ...gregator_v2_plural_data_source_gen_test.go | 27 + .../aggregator_v2_singular_data_source_gen.go | 137 +++ ...egator_v2_singular_data_source_gen_test.go | 36 + ...tomation_rule_v2_plural_data_source_gen.go | 54 ++ ...ion_rule_v2_plural_data_source_gen_test.go | 27 + ...mation_rule_v2_singular_data_source_gen.go | 884 ++++++++++++++++++ ...n_rule_v2_singular_data_source_gen_test.go | 36 + .../hub_v2_plural_data_source_gen.go | 54 ++ .../hub_v2_plural_data_source_gen_test.go | 27 + .../hub_v2_singular_data_source_gen.go | 99 ++ .../hub_v2_singular_data_source_gen_test.go | 40 + .../canary_singular_data_source_gen.go | 10 + 32 files changed, 2827 insertions(+), 99 deletions(-) create mode 100644 internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen.go create mode 100644 internal/aws/ec2/traffic_mirror_filter_plural_data_source_gen_test.go create mode 100644 internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen.go create mode 100644 internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen_test.go create mode 100644 internal/aws/mpa/identity_source_plural_data_source_gen.go create mode 100644 internal/aws/mpa/identity_source_plural_data_source_gen_test.go create mode 100644 internal/aws/mpa/identity_source_singular_data_source_gen.go create mode 100644 internal/aws/mpa/identity_source_singular_data_source_gen_test.go create mode 100644 internal/aws/securityhub/aggregator_v2_plural_data_source_gen.go create mode 100644 internal/aws/securityhub/aggregator_v2_plural_data_source_gen_test.go create mode 100644 internal/aws/securityhub/aggregator_v2_singular_data_source_gen.go create mode 100644 internal/aws/securityhub/aggregator_v2_singular_data_source_gen_test.go create mode 100644 internal/aws/securityhub/automation_rule_v2_plural_data_source_gen.go create mode 100644 internal/aws/securityhub/automation_rule_v2_plural_data_source_gen_test.go create mode 100644 internal/aws/securityhub/automation_rule_v2_singular_data_source_gen.go create mode 100644 internal/aws/securityhub/automation_rule_v2_singular_data_source_gen_test.go create mode 100644 internal/aws/securityhub/hub_v2_plural_data_source_gen.go create mode 100644 internal/aws/securityhub/hub_v2_plural_data_source_gen_test.go create mode 100644 internal/aws/securityhub/hub_v2_singular_data_source_gen.go create mode 100644 internal/aws/securityhub/hub_v2_singular_data_source_gen_test.go diff --git a/internal/aws/amplify/app_singular_data_source_gen.go b/internal/aws/amplify/app_singular_data_source_gen.go index 6859f9510f..4e2eab5123 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_singular_data_source_gen.go b/internal/aws/cleanrooms/collaboration_singular_data_source_gen.go index abd71931f8..11dbae1240 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_singular_data_source_gen.go b/internal/aws/dynamodb/table_singular_data_source_gen.go index 4dcb356dce..4ef1263f59 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_singular_data_source_gen.go b/internal/aws/ec2/subnet_singular_data_source_gen.go index d17babf394..84638b6ae7 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 0000000000..b1bc18484a --- /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 0000000000..770769f87c --- /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_singular_data_source_gen.go b/internal/aws/ec2/traffic_mirror_filter_singular_data_source_gen.go new file mode 100644 index 0000000000..6078849ccb --- /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 0000000000..cd0a8128e9 --- /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_singular_data_source_gen.go b/internal/aws/inspectorv2/filter_singular_data_source_gen.go index b978ff3524..02b1ffff49 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_singular_data_source_gen.go b/internal/aws/kms/key_singular_data_source_gen.go index c653c90e3d..6ce3c66691 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_singular_data_source_gen.go b/internal/aws/lambda/event_source_mapping_singular_data_source_gen.go index 77114ad2a1..c1a6b16586 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 0000000000..4da70a6f0f --- /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 0000000000..e1a9de477a --- /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_singular_data_source_gen.go b/internal/aws/mpa/identity_source_singular_data_source_gen.go new file mode 100644 index 0000000000..1cc7e9e572 --- /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 0000000000..037c3b6a56 --- /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/organizations/policy_singular_data_source_gen.go b/internal/aws/organizations/policy_singular_data_source_gen.go index f28f2e6372..949bc36ce7 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_singular_data_source_gen.go b/internal/aws/rds/db_cluster_singular_data_source_gen.go index f5efdc4b38..0d8c81ef58 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_singular_data_source_gen.go b/internal/aws/rds/db_instance_singular_data_source_gen.go index 0943f8f80d..679e5106a8 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_singular_data_source_gen.go b/internal/aws/rum/app_monitor_singular_data_source_gen.go index d966118ec4..f0eae2a5c3 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 0000000000..593685463c --- /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 0000000000..a350952e63 --- /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_singular_data_source_gen.go b/internal/aws/securityhub/aggregator_v2_singular_data_source_gen.go new file mode 100644 index 0000000000..0b24a1c03e --- /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 0000000000..698e52ed9a --- /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 0000000000..9827155d96 --- /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 0000000000..80e4b0d9bb --- /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_singular_data_source_gen.go b/internal/aws/securityhub/automation_rule_v2_singular_data_source_gen.go new file mode 100644 index 0000000000..a46189d8ef --- /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 0000000000..ab0e7186cd --- /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 0000000000..ab34b33e28 --- /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 0000000000..18d6f02b7c --- /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_singular_data_source_gen.go b/internal/aws/securityhub/hub_v2_singular_data_source_gen.go new file mode 100644 index 0000000000..050ee53df4 --- /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 0000000000..f92c823f80 --- /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_singular_data_source_gen.go b/internal/aws/synthetics/canary_singular_data_source_gen.go index 0159fe16b8..96540371be 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", From 1db52d0f693265ec05c05c679e52b437b77ae0e3 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 12:14:14 -0400 Subject: [PATCH 5/7] 2025/06/18 Run 'make docs-all'. --- docs/data-sources/amplify_app.md | 9 + docs/data-sources/dynamodb_table.md | 4 +- docs/data-sources/ec2_subnet.md | 11 +- .../data-sources/ec2_traffic_mirror_filter.md | 35 +++ .../ec2_traffic_mirror_filters.md | 21 ++ docs/data-sources/inspectorv2_filter.md | 131 ++++++++++++ .../lambda_event_source_mapping.md | 28 +-- docs/data-sources/mpa_identity_source.md | 57 +++++ docs/data-sources/mpa_identity_sources.md | 21 ++ docs/data-sources/organizations_policy.md | 2 +- docs/data-sources/rds_db_cluster.md | 4 +- docs/data-sources/rds_db_instance.md | 2 +- .../data-sources/securityhub_aggregator_v2.md | 28 +++ .../securityhub_aggregator_v2s.md | 21 ++ .../securityhub_automation_rule_v2.md | 188 ++++++++++++++++ .../securityhub_automation_rule_v2s.md | 21 ++ docs/data-sources/securityhub_hub_v2.md | 26 +++ docs/data-sources/securityhub_hub_v2s.md | 21 ++ docs/data-sources/synthetics_canary.md | 1 + docs/resources/amplify_app.md | 9 + docs/resources/cleanrooms_collaboration.md | 125 ++++++----- docs/resources/dynamodb_table.md | 4 +- docs/resources/ec2_subnet.md | 11 +- docs/resources/ec2_traffic_mirror_filter.md | 43 ++++ docs/resources/inspectorv2_filter.md | 131 ++++++++++++ docs/resources/lambda_event_source_mapping | 28 +-- docs/resources/lambda_event_source_mapping.md | 28 +-- docs/resources/mpa_identity_source.md | 71 ++++++ docs/resources/opsworkscm_server.md | 2 +- docs/resources/organizations_policy.md | 2 +- docs/resources/rds_db_cluster.md | 4 +- docs/resources/rds_db_instance.md | 2 +- docs/resources/securityhub_aggregator_v2.md | 39 ++++ .../securityhub_automation_rule_v2.md | 202 ++++++++++++++++++ docs/resources/securityhub_hub_v2.md | 34 +++ docs/resources/synthetics_canary.md | 1 + .../awscc_ec2_traffic_mirror_filter/import.sh | 1 + .../awscc_mpa_identity_source/import.sh | 1 + .../awscc_securityhub_aggregator_v2/import.sh | 1 + .../import.sh | 1 + .../awscc_securityhub_hub_v2/import.sh | 1 + 41 files changed, 1251 insertions(+), 121 deletions(-) create mode 100644 docs/data-sources/ec2_traffic_mirror_filter.md create mode 100644 docs/data-sources/ec2_traffic_mirror_filters.md create mode 100644 docs/data-sources/mpa_identity_source.md create mode 100644 docs/data-sources/mpa_identity_sources.md create mode 100644 docs/data-sources/securityhub_aggregator_v2.md create mode 100644 docs/data-sources/securityhub_aggregator_v2s.md create mode 100644 docs/data-sources/securityhub_automation_rule_v2.md create mode 100644 docs/data-sources/securityhub_automation_rule_v2s.md create mode 100644 docs/data-sources/securityhub_hub_v2.md create mode 100644 docs/data-sources/securityhub_hub_v2s.md create mode 100644 docs/resources/ec2_traffic_mirror_filter.md create mode 100644 docs/resources/mpa_identity_source.md create mode 100644 docs/resources/securityhub_aggregator_v2.md create mode 100644 docs/resources/securityhub_automation_rule_v2.md create mode 100644 docs/resources/securityhub_hub_v2.md create mode 100644 examples/resources/awscc_ec2_traffic_mirror_filter/import.sh create mode 100644 examples/resources/awscc_mpa_identity_source/import.sh create mode 100644 examples/resources/awscc_securityhub_aggregator_v2/import.sh create mode 100644 examples/resources/awscc_securityhub_automation_rule_v2/import.sh create mode 100644 examples/resources/awscc_securityhub_hub_v2/import.sh diff --git a/docs/data-sources/amplify_app.md b/docs/data-sources/amplify_app.md index 04ca3db5b8..a111d9bf25 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 0cba153f49..e2258790af 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 9af8cda5dd..d3072d4362 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 0000000000..59a276e534 --- /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 0000000000..d613e397dd --- /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 c87d45f34f..c7209cd308 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 cfd14e7c1d..0797aa0f33 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 0000000000..a063aaca93 --- /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 0000000000..ce1180f4c3 --- /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 00c66ffec7..321ae521ce 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 80e859449b..e8606e4f53 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 3af6c7fc3b..414205cbe0 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 0000000000..94c5480000 --- /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 0000000000..e6e825bfa0 --- /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 0000000000..a60b60e4cd --- /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 0000000000..a0a6f22edf --- /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 0000000000..688a3c5003 --- /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 0000000000..d91e7263dd --- /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 2978ea5037..929d293fc0 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 9441d95964..921d689978 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 c65863a16e..6e58f80a11 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 d7be7232ad..0dd2941212 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 4bff837be1..611c17a4bd 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 0000000000..7269d1d39c --- /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 a7bfb2360d..ecc64b633d 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 12382197c7..50ef9f1ca3 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 0039564cf2..de588c6e39 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 0000000000..0b4c0860a7 --- /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 8517905c32..3b821b7fc7 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 49fc389bb7..5aa834b777 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 a1315804a2..a2c39d4e43 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 3e2832f38b..5c0ac198f8 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 0000000000..9cba581365 --- /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 0000000000..ce11afe69e --- /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 0000000000..8fedd45a53 --- /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 0f22121200..e7f26fc025 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 0000000000..e3e70e2ea7 --- /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 0000000000..48e65b6b17 --- /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 0000000000..195287b78b --- /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 0000000000..2244c66d0d --- /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 0000000000..749a80ce8e --- /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 From dde7d58766a3fd6b5ee6618103701803b1a7dd04 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 12:16:10 -0400 Subject: [PATCH 6/7] Add CHANGELOG entries. --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf1dfe3b6a..c6256f2e14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ ## 1.46.0 (Unreleased) +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) FEATURES: From 44fa88a1e3b2114cbcb3f5248cda9439c845fca6 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 19 Jun 2025 12:17:52 -0400 Subject: [PATCH 7/7] Prepare for v1.46.0 release. --- CHANGELOG.md | 2 +- version/VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6256f2e14..0d945f15fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.46.0 (Unreleased) +## 1.46.0 (June 19, 2025) FEATURES: diff --git a/version/VERSION b/version/VERSION index 34d29b8fee..241e887d6f 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