Repository: getmoto/moto
Pull request #8235 (2024-10-17 08:37:09)

Add SHA1 and SHA256 algorithms for EC2 fingerprint calculation
Resolves [localstack issue](https://github.com/localstack/localstack/issues/9337)

@viren-nadkarni is recommended to make changes in `moto` in [this](https://github.com/localstack/localstack/pull/11567#pullrequestreview-2324592555) comment

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/getmoto/moto/pull/8235?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 94.55%. Comparing base [(`77fbf51`)](https://app.codecov.io/gh/getmoto/moto/commit/77fbf518edbd78a427823380cc530bda079799c1?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) to head [(`b20489d`)](https://app.codecov.io/gh/getmoto/moto/commit/b20489d52376d7ff3665309c8c19290c841bf6da?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto).

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##           master    #8235   +/-   ##
=======================================
  Coverage   94.54%   94.55%           
=======================================
  Files        1158     1158           
  Lines      100124   100129    +5     
=======================================
+ Hits        94667    94672    +5     
  Misses       5457     5457           
```

| [Flag](https://app.codecov.io/gh/getmoto/moto/pull/8235/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | Coverage Δ | |
|---|---|---|
| [servertests](https://app.codecov.io/gh/getmoto/moto/pull/8235/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `28.88% <100.00%> (+<0.01%)` | :arrow_up: |
| [unittests](https://app.codecov.io/gh/getmoto/moto/pull/8235/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `94.52% <100.00%> (+<0.01%)` | :arrow_up: |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto#carryforward-flags-in-the-pull-request-comment) to find out more.

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/getmoto/moto/pull/8235?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto).


Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5836554ad..40f1b78fc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,26 @@
 Moto Changelog
 ==============
 
+5.0.18
+-----
+Docker Digest for 5.0.18: _sha256:62423941446f8863f499ebdfd04c1d1743b5afd84c3837799df7ce08ce3bb750_
+
+    New Methods:
+        * RDS:
+            * delete_db_proxy()
+            * deregister_db_proxy_targets()
+            * describe_db_proxy_target_groups()
+            * describe_db_proxy_targets()
+            * modify_db_proxy_target_group()
+            * register_db_proxy_targets()
+
+    Miscellaneous:
+        * CloudFormation: create_change_set() now supports the UsePreviousTemplate-parameter
+        * CognitoIDP: MFA-related features (like AssociateSoftwareToken) now also work with non-Python SDK's
+        * ECS: update_service() now correctly sets the createdAt/updatedAt values when forceNewDeployment=True
+        * ELBv2: remove_tags() now throws a ResourceNotFound Exception
+
+
 5.0.17
 -----
 Docker Digest for 5.0.17: _sha256:39372432cb24ab46211ca45648ca787e104589070b0d0a13ea0d73c6eb550079_
diff --git a/IMPLEMENTATION_COVERAGE.md b/IMPLEMENTATION_COVERAGE.md
index ffdc5862e..9a028d6bd 100644
--- a/IMPLEMENTATION_COVERAGE.md
+++ b/IMPLEMENTATION_COVERAGE.md
@@ -6379,6 +6379,7 @@
 - [ ] start_asset_bundle_export_job
 - [ ] start_asset_bundle_import_job
 - [ ] start_dashboard_snapshot_job
+- [ ] start_dashboard_snapshot_job_schedule
 - [ ] tag_resource
 - [ ] untag_resource
 - [ ] update_account_customization
@@ -6460,7 +6461,7 @@
 
 ## rds
 <details>
-<summary>38% implemented</summary>
+<summary>42% implemented</summary>
 
 - [ ] add_role_to_db_cluster
 - [ ] add_role_to_db_instance
@@ -6505,7 +6506,7 @@
 - [X] delete_db_instance
 - [ ] delete_db_instance_automated_backup
 - [X] delete_db_parameter_group
-- [ ] delete_db_proxy
+- [X] delete_db_proxy
 - [ ] delete_db_proxy_endpoint
 - [ ] delete_db_security_group
 - [ ] delete_db_shard_group
@@ -6516,7 +6517,7 @@
 - [ ] delete_integration
 - [X] delete_option_group
 - [ ] delete_tenant_database
-- [ ] deregister_db_proxy_targets
+- [X] deregister_db_proxy_targets
 - [ ] describe_account_attributes
 - [ ] describe_blue_green_deployments
 - [ ] describe_certificates
@@ -6536,8 +6537,8 @@
 - [ ] describe_db_parameters
 - [X] describe_db_proxies
 - [ ] describe_db_proxy_endpoints
-- [ ] describe_db_proxy_target_groups
-- [ ] describe_db_proxy_targets
+- [X] describe_db_proxy_target_groups
+- [X] describe_db_proxy_targets
 - [ ] describe_db_recommendations
 - [ ] describe_db_security_groups
 - [ ] describe_db_shard_groups
@@ -6580,7 +6581,7 @@
 - [X] modify_db_parameter_group
 - [ ] modify_db_proxy
 - [ ] modify_db_proxy_endpoint
-- [ ] modify_db_proxy_target_group
+- [X] modify_db_proxy_target_group
 - [ ] modify_db_recommendation
 - [ ] modify_db_shard_group
 - [ ] modify_db_snapshot
@@ -6597,7 +6598,7 @@
 - [ ] reboot_db_cluster
 - [X] reboot_db_instance
 - [ ] reboot_db_shard_group
-- [ ] register_db_proxy_targets
+- [X] register_db_proxy_targets
 - [X] remove_from_global_cluster
 - [ ] remove_role_from_db_cluster
 - [ ] remove_role_from_db_instance
@@ -6640,7 +6641,7 @@
 
 ## redshift
 <details>
-<summary>22% implemented</summary>
+<summary>21% implemented</summary>
 
 - [ ] accept_reserved_node_exchange
 - [ ] add_partner
@@ -6664,6 +6665,7 @@
 - [ ] create_event_subscription
 - [ ] create_hsm_client_certificate
 - [ ] create_hsm_configuration
+- [ ] create_integration
 - [ ] create_redshift_idc_application
 - [ ] create_scheduled_action
 - [X] create_snapshot_copy_grant
@@ -6682,6 +6684,7 @@
 - [ ] delete_event_subscription
 - [ ] delete_hsm_client_certificate
 - [ ] delete_hsm_configuration
+- [ ] delete_integration
 - [ ] delete_partner
 - [ ] delete_redshift_idc_application
 - [ ] delete_resource_policy
@@ -6714,6 +6717,7 @@
 - [ ] describe_hsm_client_certificates
 - [ ] describe_hsm_configurations
 - [ ] describe_inbound_integrations
+- [ ] describe_integrations
 - [ ] describe_logging_status
 - [ ] describe_node_configuration_options
 - [ ] describe_orderable_cluster_options
@@ -6755,6 +6759,7 @@
 - [ ] modify_custom_domain_association
 - [ ] modify_endpoint_access
 - [ ] modify_event_subscription
+- [ ] modify_integration
 - [ ] modify_redshift_idc_application
 - [ ] modify_scheduled_action
 - [X] modify_snapshot_copy_retention_period
@@ -8755,6 +8760,7 @@
 - [ ] list_certificates
 - [ ] list_connectors
 - [ ] list_executions
+- [ ] list_file_transfer_results
 - [ ] list_host_keys
 - [ ] list_profiles
 - [ ] list_security_policies
diff --git a/docs/docs/services/quicksight.rst b/docs/docs/services/quicksight.rst
index 90d4b7b1a..f97f959b3 100644
--- a/docs/docs/services/quicksight.rst
+++ b/docs/docs/services/quicksight.rst
@@ -164,6 +164,7 @@ quicksight
 - [ ] start_asset_bundle_export_job
 - [ ] start_asset_bundle_import_job
 - [ ] start_dashboard_snapshot_job
+- [ ] start_dashboard_snapshot_job_schedule
 - [ ] tag_resource
 - [ ] untag_resource
 - [ ] update_account_customization
diff --git a/docs/docs/services/rds.rst b/docs/docs/services/rds.rst
index bc0f6ecc4..f2a8bab77 100644
--- a/docs/docs/services/rds.rst
+++ b/docs/docs/services/rds.rst
@@ -57,7 +57,7 @@ rds
 - [X] delete_db_instance
 - [ ] delete_db_instance_automated_backup
 - [X] delete_db_parameter_group
-- [ ] delete_db_proxy
+- [X] delete_db_proxy
 - [ ] delete_db_proxy_endpoint
 - [ ] delete_db_security_group
 - [ ] delete_db_shard_group
@@ -68,7 +68,7 @@ rds
 - [ ] delete_integration
 - [X] delete_option_group
 - [ ] delete_tenant_database
-- [ ] deregister_db_proxy_targets
+- [X] deregister_db_proxy_targets
 - [ ] describe_account_attributes
 - [ ] describe_blue_green_deployments
 - [ ] describe_certificates
@@ -92,8 +92,8 @@ rds
         
 
 - [ ] describe_db_proxy_endpoints
-- [ ] describe_db_proxy_target_groups
-- [ ] describe_db_proxy_targets
+- [X] describe_db_proxy_target_groups
+- [X] describe_db_proxy_targets
 - [ ] describe_db_recommendations
 - [ ] describe_db_security_groups
 - [ ] describe_db_shard_groups
@@ -140,7 +140,7 @@ rds
 - [X] modify_db_parameter_group
 - [ ] modify_db_proxy
 - [ ] modify_db_proxy_endpoint
-- [ ] modify_db_proxy_target_group
+- [X] modify_db_proxy_target_group
 - [ ] modify_db_recommendation
 - [ ] modify_db_shard_group
 - [ ] modify_db_snapshot
@@ -157,7 +157,7 @@ rds
 - [ ] reboot_db_cluster
 - [X] reboot_db_instance
 - [ ] reboot_db_shard_group
-- [ ] register_db_proxy_targets
+- [X] register_db_proxy_targets
 - [X] remove_from_global_cluster
 - [ ] remove_role_from_db_cluster
 - [ ] remove_role_from_db_instance
diff --git a/docs/docs/services/redshift.rst b/docs/docs/services/redshift.rst
index 840e7fb45..09ce63485 100644
--- a/docs/docs/services/redshift.rst
+++ b/docs/docs/services/redshift.rst
@@ -36,6 +36,7 @@ redshift
 - [ ] create_event_subscription
 - [ ] create_hsm_client_certificate
 - [ ] create_hsm_configuration
+- [ ] create_integration
 - [ ] create_redshift_idc_application
 - [ ] create_scheduled_action
 - [X] create_snapshot_copy_grant
@@ -54,6 +55,7 @@ redshift
 - [ ] delete_event_subscription
 - [ ] delete_hsm_client_certificate
 - [ ] delete_hsm_configuration
+- [ ] delete_integration
 - [ ] delete_partner
 - [ ] delete_redshift_idc_application
 - [ ] delete_resource_policy
@@ -86,6 +88,7 @@ redshift
 - [ ] describe_hsm_client_certificates
 - [ ] describe_hsm_configurations
 - [ ] describe_inbound_integrations
+- [ ] describe_integrations
 - [ ] describe_logging_status
 - [ ] describe_node_configuration_options
 - [ ] describe_orderable_cluster_options
@@ -127,6 +130,7 @@ redshift
 - [ ] modify_custom_domain_association
 - [ ] modify_endpoint_access
 - [ ] modify_event_subscription
+- [ ] modify_integration
 - [ ] modify_redshift_idc_application
 - [ ] modify_scheduled_action
 - [X] modify_snapshot_copy_retention_period
diff --git a/docs/docs/services/transfer.rst b/docs/docs/services/transfer.rst
index 2d1a3d6a4..63cb525d8 100644
--- a/docs/docs/services/transfer.rst
+++ b/docs/docs/services/transfer.rst
@@ -52,6 +52,7 @@ transfer
 - [ ] list_certificates
 - [ ] list_connectors
 - [ ] list_executions
+- [ ] list_file_transfer_results
 - [ ] list_host_keys
 - [ ] list_profiles
 - [ ] list_security_policies
diff --git a/moto/__init__.py b/moto/__init__.py
index fe08f4575..d2787e75d 100644
--- a/moto/__init__.py
+++ b/moto/__init__.py
@@ -1,4 +1,4 @@
 from moto.core.decorator import mock_aws as mock_aws
 
 __title__ = "moto"
-__version__ = "5.0.18.dev"
+__version__ = "5.0.19.dev"
diff --git a/moto/backend_index.py b/moto/backend_index.py
index 35b88973d..781aeeb2a 100644
--- a/moto/backend_index.py
+++ b/moto/backend_index.py
@@ -8,9 +8,7 @@ backend_url_patterns = [
     ("apigateway", re.compile("https?://apigateway\\.(.+)\\.amazonaws.com")),
     (
         "apigatewaymanagementapi",
-        re.compile(
-            "https?://([^.]+\\.)*execute-api\\.[a-z]{2}-[-a-z]+-\\d+\\.amazonaws\\.com"
-        ),
+        re.compile("https?://([^.]+\\.)*execute-api\\.[^.]+\\.amazonaws\\.com"),
     ),
     ("appconfig", re.compile("https?://appconfig\\.(.+)\\.amazonaws\\.com")),
     (
@@ -121,10 +119,13 @@ backend_url_patterns = [
     ("memorydb", re.compile("https?://memory-db\\.(.+)\\.amazonaws\\.com")),
     (
         "meteringmarketplace",
-        re.compile("https?://metering.marketplace.(.+).amazonaws.com"),
+        re.compile("https?://metering\\.marketplace\\.(.+)\\.amazonaws\\.com"),
+    ),
+    (
+        "meteringmarketplace",
+        re.compile("https?://aws-marketplace\\.(.+)\\.amazonaws\\.com"),
     ),
-    ("meteringmarketplace", re.compile("https?://aws-marketplace.(.+).amazonaws.com")),
-    ("moto_api._internal", re.compile("https?://motoapi.amazonaws.com")),
+    ("moto_api._internal", re.compile("https?://motoapi\\.amazonaws\\.com")),
     ("mq", re.compile("https?://mq\\.(.+)\\.amazonaws\\.com")),
     ("networkmanager", re.compile("https?://networkmanager\\.(.+)\\.amazonaws\\.com")),
     ("opensearchserverless", re.compile("https?://aoss\\.(.+)\\.amazonaws\\.com")),
@@ -171,7 +172,7 @@ backend_url_patterns = [
     ("sagemaker", re.compile("https?://api\\.sagemaker\\.(.+)\\.amazonaws.com")),
     (
         "sagemakermetrics",
-        re.compile("https?://metrics.sagemaker\\.(.+)\\.amazonaws\\.com"),
+        re.compile("https?://metrics\\.sagemaker\\.(.+)\\.amazonaws\\.com"),
     ),
     (
         "sagemakerruntime",
@@ -202,7 +203,7 @@ backend_url_patterns = [
     ("textract", re.compile("https?://textract\\.(.+)\\.amazonaws\\.com")),
     (
         "timestreamquery",
-        re.compile("https?://query.timestream\\.(.+)\\.amazonaws\\.com"),
+        re.compile("https?://query\\.timestream\\.(.+)\\.amazonaws\\.com"),
     ),
     (
         "timestreamwrite",
diff --git a/moto/cognitoidp/models.py b/moto/cognitoidp/models.py
index 81a639d8d..dd750542c 100644
--- a/moto/cognitoidp/models.py
+++ b/moto/cognitoidp/models.py
@@ -2298,6 +2298,20 @@ class RegionAgnosticBackend:
                         return backend
         return cognitoidp_backends[self.account_id][self.region_name]
 
+    def _find_backend_by_access_token_or_session(
+        self, access_token: str, session: str
+    ) -> CognitoIdpBackend:
+        for account_specific_backends in cognitoidp_backends.values():
+            for region, backend in account_specific_backends.items():
+                if region == "global":
+                    continue
+                if session and session in backend.sessions:
+                    return backend
+                for p in backend.user_pools.values():
+                    if access_token and access_token in p.access_tokens:
+                        return backend
+        return cognitoidp_backends[self.account_id][self.region_name]
+
     def _find_backend_for_clientid(self, client_id: str) -> CognitoIdpBackend:
         for account_specific_backends in cognitoidp_backends.values():
             for region, backend in account_specific_backends.items():
@@ -2356,6 +2370,33 @@ class RegionAgnosticBackend:
             session, client_id, challenge_name, challenge_responses
         )
 
+    def associate_software_token(
+        self, access_token: str, session: str
+    ) -> Dict[str, str]:
+        backend = self._find_backend_by_access_token_or_session(access_token, session)
+        return backend.associate_software_token(access_token, session)
+
+    def verify_software_token(self, access_token: str, session: str) -> Dict[str, str]:
+        backend = self._find_backend_by_access_token_or_session(access_token, session)
+        return backend.verify_software_token(access_token, session)
+
+    def set_user_mfa_preference(
+        self,
+        access_token: str,
+        software_token_mfa_settings: Dict[str, bool],
+        sms_mfa_settings: Dict[str, bool],
+    ) -> None:
+        backend = self._find_backend_by_access_token(access_token)
+        return backend.set_user_mfa_preference(
+            access_token, software_token_mfa_settings, sms_mfa_settings
+        )
+
+    def update_user_attributes(
+        self, access_token: str, attributes: List[Dict[str, str]]
+    ) -> None:
+        backend = self._find_backend_by_access_token(access_token)
+        return backend.update_user_attributes(access_token, attributes)
+
 
 cognitoidp_backends = BackendDict(CognitoIdpBackend, "cognito-idp")
 
diff --git a/moto/cognitoidp/responses.py b/moto/cognitoidp/responses.py
index 2482b7b3f..33245817a 100644
--- a/moto/cognitoidp/responses.py
+++ b/moto/cognitoidp/responses.py
@@ -624,20 +624,24 @@ class CognitoIdpResponse(BaseResponse):
     def associate_software_token(self) -> str:
         access_token = self._get_param("AccessToken")
         session = self._get_param("Session")
-        result = self.backend.associate_software_token(access_token, session)
+        result = self._get_region_agnostic_backend().associate_software_token(
+            access_token, session
+        )
         return json.dumps(result)
 
     def verify_software_token(self) -> str:
         access_token = self._get_param("AccessToken")
         session = self._get_param("Session")
-        result = self.backend.verify_software_token(access_token, session)
+        result = self._get_region_agnostic_backend().verify_software_token(
+            access_token, session
+        )
         return json.dumps(result)
 
     def set_user_mfa_preference(self) -> str:
         access_token = self._get_param("AccessToken")
         software_token_mfa_settings = self._get_param("SoftwareTokenMfaSettings")
         sms_mfa_settings = self._get_param("SMSMfaSettings")
-        self.backend.set_user_mfa_preference(
+        self._get_region_agnostic_backend().set_user_mfa_preference(
             access_token, software_token_mfa_settings, sms_mfa_settings
         )
         return ""
@@ -671,7 +675,9 @@ class CognitoIdpResponse(BaseResponse):
     def update_user_attributes(self) -> str:
         access_token = self._get_param("AccessToken")
         attributes = self._get_param("UserAttributes")
-        self.backend.update_user_attributes(access_token, attributes)
+        self._get_region_agnostic_backend().update_user_attributes(
+            access_token, attributes
+        )
         return json.dumps({})
 
 
diff --git a/moto/ec2/models/key_pairs.py b/moto/ec2/models/key_pairs.py
index 55cc3dc12..146c61bab 100644
--- a/moto/ec2/models/key_pairs.py
+++ b/moto/ec2/models/key_pairs.py
@@ -14,6 +14,7 @@ from ..utils import (
     random_ed25519_key_pair,
     random_key_pair_id,
     random_rsa_key_pair,
+    select_hash_algorithm,
 )
 from .core import TaggedEC2Resource
 
@@ -107,7 +108,8 @@ class KeyPairBackend:
         except ValueError:
             raise InvalidKeyPairFormatError()
 
-        fingerprint = public_key_fingerprint(public_key)
+        hash_constructor = select_hash_algorithm(public_key)
+        fingerprint = public_key_fingerprint(public_key, hash_constructor)
         keypair = KeyPair(
             key_name,
             material_public=public_key_material,
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json
index 391448067..43f9c2648 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json
@@ -827,6 +827,14 @@
   "InstanceType": "u-12tb1.112xlarge",
   "Location": "afs1-az1"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "afs1-az1"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "afs1-az1"
+ },
  {
   "InstanceType": "x1.16xlarge",
   "Location": "afs1-az1"
@@ -2731,6 +2739,14 @@
   "InstanceType": "t4g.xlarge",
   "Location": "afs1-az3"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "afs1-az3"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "afs1-az3"
+ },
  {
   "InstanceType": "x2idn.16xlarge",
   "Location": "afs1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json
index 37cf61aac..d4635928c 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json
@@ -2327,6 +2327,26 @@
   "InstanceType": "c7g.xlarge",
   "Location": "apne2-az2"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "apne2-az2"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "apne2-az2"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "apne2-az2"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "apne2-az2"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "apne2-az2"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "apne2-az2"
@@ -5287,6 +5307,26 @@
   "InstanceType": "c6i.xlarge",
   "Location": "apne2-az4"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "apne2-az4"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "apne2-az4"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json
index 1a4359858..36c9ffedd 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json
@@ -607,6 +607,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "aps1-az1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "aps1-az1"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "aps1-az1"
@@ -4631,6 +4671,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "aps1-az3"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "aps1-az3"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "aps1-az3"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "aps1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json
index 242390509..8611e7960 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json
@@ -783,6 +783,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "apse2-az1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "apse2-az1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "apse2-az1"
+ },
  {
   "InstanceType": "hpc6a.48xlarge",
   "Location": "apse2-az1"
@@ -3335,6 +3375,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "apse2-az2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "apse2-az2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "apse2-az2"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "apse2-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json
index 22d006b5f..dbc1c5afc 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json
@@ -571,6 +571,26 @@
   "InstanceType": "c7gd.xlarge",
   "Location": "euc1-az1"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "euc1-az1"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "euc1-az1"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "euc1-az1"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "euc1-az1"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "euc1-az1"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "euc1-az1"
@@ -6079,6 +6099,26 @@
   "InstanceType": "c7gd.xlarge",
   "Location": "euc1-az3"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "euc1-az3"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "euc1-az3"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "euc1-az3"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "euc1-az3"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "euc1-az3"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "euc1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-2.json
index d5c9e659b..1ff7e1c67 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-2.json
@@ -983,6 +983,46 @@
   "InstanceType": "d3.xlarge",
   "Location": "euc2-az2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "euc2-az2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "euc2-az2"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "euc2-az2"
@@ -1715,6 +1755,46 @@
   "InstanceType": "c6in.xlarge",
   "Location": "euc2-az3"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "euc2-az3"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "euc2-az3"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "euc2-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json
index 12493e70a..e470dbc9f 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json
@@ -543,6 +543,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "eun1-az1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eun1-az1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eun1-az1"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eun1-az1"
@@ -2283,6 +2323,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "eun1-az2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eun1-az2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eun1-az2"
+ },
  {
   "InstanceType": "hpc6a.48xlarge",
   "Location": "eun1-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json
index 3062b879e..111c08172 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json
@@ -639,6 +639,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "sae1-az1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "sae1-az1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "sae1-az1"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "sae1-az1"
@@ -2535,6 +2575,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "sae1-az2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "sae1-az2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "sae1-az2"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "sae1-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json
index 713ea6cf6..8569b048f 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json
@@ -827,6 +827,14 @@
   "InstanceType": "u-12tb1.112xlarge",
   "Location": "af-south-1a"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "af-south-1a"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "af-south-1a"
+ },
  {
   "InstanceType": "x1.16xlarge",
   "Location": "af-south-1a"
@@ -2731,6 +2739,14 @@
   "InstanceType": "t4g.xlarge",
   "Location": "af-south-1c"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "af-south-1c"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "af-south-1c"
+ },
  {
   "InstanceType": "x2idn.16xlarge",
   "Location": "af-south-1c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json
index 8c313085b..27fa12e07 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json
@@ -2327,6 +2327,26 @@
   "InstanceType": "c7g.xlarge",
   "Location": "ap-northeast-2b"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "ap-northeast-2b"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "ap-northeast-2b"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "ap-northeast-2b"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "ap-northeast-2b"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "ap-northeast-2b"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "ap-northeast-2b"
@@ -5287,6 +5307,26 @@
   "InstanceType": "c6i.xlarge",
   "Location": "ap-northeast-2d"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "ap-northeast-2d"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "ap-northeast-2d"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json
index a2b4be4c7..641419d02 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json
@@ -607,6 +607,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-south-1a"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-south-1a"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "ap-south-1a"
@@ -2755,6 +2795,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-south-1b"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-south-1b"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-south-1b"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "ap-south-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json
index 4e050e8e2..ea4d84bdf 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json
@@ -3215,6 +3215,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-southeast-2b"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-southeast-2b"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-southeast-2b"
+ },
  {
   "InstanceType": "hpc6a.48xlarge",
   "Location": "ap-southeast-2b"
@@ -5767,6 +5807,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-southeast-2c"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-southeast-2c"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-southeast-2c"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "ap-southeast-2c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json
index b97fba8fb..b955b9ef0 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json
@@ -3299,6 +3299,26 @@
   "InstanceType": "c7gd.xlarge",
   "Location": "eu-central-1b"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "eu-central-1b"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "eu-central-1b"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "eu-central-1b"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "eu-central-1b"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "eu-central-1b"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "eu-central-1b"
@@ -6275,6 +6295,26 @@
   "InstanceType": "c7gd.xlarge",
   "Location": "eu-central-1c"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "eu-central-1c"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "eu-central-1c"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "eu-central-1c"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "eu-central-1c"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "eu-central-1c"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "eu-central-1c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-2.json
index 9ce7dab36..eb71f2a91 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-2.json
@@ -983,6 +983,46 @@
   "InstanceType": "d3.xlarge",
   "Location": "eu-central-2b"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-central-2b"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-central-2b"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eu-central-2b"
@@ -1715,6 +1755,46 @@
   "InstanceType": "c6in.xlarge",
   "Location": "eu-central-2c"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-central-2c"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-central-2c"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eu-central-2c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json
index a2385e043..27ae154a5 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json
@@ -543,6 +543,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "eu-north-1a"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-north-1a"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-north-1a"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eu-north-1a"
@@ -2283,6 +2323,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "eu-north-1b"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-north-1b"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-north-1b"
+ },
  {
   "InstanceType": "hpc6a.48xlarge",
   "Location": "eu-north-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json
index 8dc7549d1..1dd1ee63c 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json
@@ -639,6 +639,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "sa-east-1a"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "sa-east-1a"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "sa-east-1a"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "sa-east-1a"
@@ -2535,6 +2575,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "sa-east-1b"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "sa-east-1b"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "sa-east-1b"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "sa-east-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/region/af-south-1.json b/moto/ec2/resources/instance_type_offerings/region/af-south-1.json
index ead4f9037..d5e447e31 100644
--- a/moto/ec2/resources/instance_type_offerings/region/af-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/af-south-1.json
@@ -891,6 +891,14 @@
   "InstanceType": "u-12tb1.112xlarge",
   "Location": "af-south-1"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "af-south-1"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "af-south-1"
+ },
  {
   "InstanceType": "x1.16xlarge",
   "Location": "af-south-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json b/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json
index e5c25d315..ad90647b3 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json
@@ -411,6 +411,26 @@
   "InstanceType": "c7g.xlarge",
   "Location": "ap-northeast-2"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "ap-northeast-2"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "ap-northeast-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json
index a772e4c64..2b18f01bf 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json
@@ -631,6 +631,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-south-1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-south-1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-south-1"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "ap-south-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json b/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json
index 4f4c3ade8..69ca74343 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json
@@ -783,6 +783,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-southeast-2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-southeast-2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-southeast-2"
+ },
  {
   "InstanceType": "hpc6a.48xlarge",
   "Location": "ap-southeast-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-central-1.json b/moto/ec2/resources/instance_type_offerings/region/eu-central-1.json
index 9189e5226..7eb2a4358 100644
--- a/moto/ec2/resources/instance_type_offerings/region/eu-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/eu-central-1.json
@@ -615,6 +615,26 @@
   "InstanceType": "c7gd.xlarge",
   "Location": "eu-central-1"
  },
+ {
+  "InstanceType": "c7i-flex.2xlarge",
+  "Location": "eu-central-1"
+ },
+ {
+  "InstanceType": "c7i-flex.4xlarge",
+  "Location": "eu-central-1"
+ },
+ {
+  "InstanceType": "c7i-flex.8xlarge",
+  "Location": "eu-central-1"
+ },
+ {
+  "InstanceType": "c7i-flex.large",
+  "Location": "eu-central-1"
+ },
+ {
+  "InstanceType": "c7i-flex.xlarge",
+  "Location": "eu-central-1"
+ },
  {
   "InstanceType": "c7i.12xlarge",
   "Location": "eu-central-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-central-2.json b/moto/ec2/resources/instance_type_offerings/region/eu-central-2.json
index a1a041b21..5aef88101 100644
--- a/moto/ec2/resources/instance_type_offerings/region/eu-central-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/eu-central-2.json
@@ -199,6 +199,46 @@
   "InstanceType": "d3.xlarge",
   "Location": "eu-central-2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-central-2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-central-2"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eu-central-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json
index fbd5d4d13..0f7c08bcc 100644
--- a/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json
@@ -575,6 +575,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "eu-north-1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-north-1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-north-1"
+ },
  {
   "InstanceType": "hpc6a.48xlarge",
   "Location": "eu-north-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json
index 121584c1d..42492883a 100644
--- a/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json
@@ -639,6 +639,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "sa-east-1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "sa-east-1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "sa-east-1"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "sa-east-1"
diff --git a/moto/ec2/utils.py b/moto/ec2/utils.py
index e3beeb1fd..23fe0677b 100644
--- a/moto/ec2/utils.py
+++ b/moto/ec2/utils.py
@@ -1,8 +1,20 @@
 import base64
 import fnmatch
+import hashlib
 import ipaddress
 import re
-from typing import Any, Dict, List, Optional, Set, Tuple, TypeVar, Union
+from typing import (
+    TYPE_CHECKING,
+    Any,
+    Callable,
+    Dict,
+    List,
+    Optional,
+    Set,
+    Tuple,
+    TypeVar,
+    Union,
+)
 
 from cryptography.hazmat.backends import default_backend
 from cryptography.hazmat.primitives import serialization
@@ -12,12 +24,16 @@ from cryptography.hazmat.primitives.asymmetric.ed25519 import (
     Ed25519PublicKey,
 )
 from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey
+from typing_extensions import TypeAlias
 
 from moto.core.utils import utcnow
 from moto.iam import iam_backends
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.utils import md5_hash
 
+if TYPE_CHECKING:
+    HashType: TypeAlias = hashlib._Hash
+
 EC2_RESOURCE_TO_PREFIX = {
     "customer-gateway": "cgw",
     "transit-gateway": "tgw",
@@ -577,7 +593,8 @@ def random_ed25519_key_pair() -> Dict[str, str]:
         encoding=serialization.Encoding.OpenSSH,
         format=serialization.PublicFormat.OpenSSH,
     )
-    fingerprint = public_key_fingerprint(public_key)
+    hash_constructor = select_hash_algorithm(public_key)
+    fingerprint = public_key_fingerprint(public_key, hash_constructor)
 
     return {
         "fingerprint": fingerprint,
@@ -600,7 +617,8 @@ def random_rsa_key_pair() -> Dict[str, str]:
         encoding=serialization.Encoding.OpenSSH,
         format=serialization.PublicFormat.OpenSSH,
     )
-    fingerprint = public_key_fingerprint(public_key)
+    hash_constructor = select_hash_algorithm(public_key, is_imported=False)
+    fingerprint = public_key_fingerprint(public_key, hash_constructor)
 
     return {
         "fingerprint": fingerprint,
@@ -753,18 +771,30 @@ def public_key_parse(
     return public_key
 
 
-def public_key_fingerprint(public_key: Union[RSAPublicKey, Ed25519PublicKey]) -> str:
-    # TODO: Use different fingerprint calculation methods based on key type and source
-    # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/verify-keys.html#how-ec2-key-fingerprints-are-calculated
+def public_key_fingerprint(
+    public_key: Union[RSAPublicKey, Ed25519PublicKey],
+    hash_constructor: Callable[[bytes], "HashType"],
+) -> str:
     key_data = public_key.public_bytes(
         encoding=serialization.Encoding.DER,
         format=serialization.PublicFormat.SubjectPublicKeyInfo,
     )
-    fingerprint_hex = md5_hash(key_data).hexdigest()
+    fingerprint_hex = hash_constructor(key_data).hexdigest()
     fingerprint = re.sub(r"([a-f0-9]{2})(?!$)", r"\1:", fingerprint_hex)
     return fingerprint
 
 
+def select_hash_algorithm(
+    public_key: Union[RSAPublicKey, Ed25519PublicKey], is_imported: bool = True
+) -> Callable[[bytes], "HashType"]:
+    if isinstance(public_key, Ed25519PublicKey):
+        return hashlib.sha256
+    elif is_imported:
+        return md5_hash
+
+    return hashlib.sha1
+
+
 def filter_iam_instance_profile_associations(
     iam_instance_associations: List[FILTER_TYPE], filter_dict: Any
 ) -> List[FILTER_TYPE]:
diff --git a/moto/meteringmarketplace/urls.py b/moto/meteringmarketplace/urls.py
index 64abc56b5..5d9db9c39 100644
--- a/moto/meteringmarketplace/urls.py
+++ b/moto/meteringmarketplace/urls.py
@@ -1,8 +1,8 @@
 from .responses import MarketplaceMeteringResponse
 
 url_bases = [
-    "https?://metering.marketplace.(.+).amazonaws.com",
-    "https?://aws-marketplace.(.+).amazonaws.com",
+    r"https?://metering\.marketplace\.(.+)\.amazonaws\.com",
+    r"https?://aws-marketplace\.(.+)\.amazonaws\.com",
 ]
 
 url_paths = {"{0}/$": MarketplaceMeteringResponse.dispatch}
diff --git a/moto/moto_api/_internal/urls.py b/moto/moto_api/_internal/urls.py
index 9f3e66f18..7f814c9e1 100644
--- a/moto/moto_api/_internal/urls.py
+++ b/moto/moto_api/_internal/urls.py
@@ -1,7 +1,7 @@
 from .recorder.responses import RecorderResponse
 from .responses import MotoAPIResponse
 
-url_bases = ["https?://motoapi.amazonaws.com"]
+url_bases = [r"https?://motoapi\.amazonaws\.com"]
 
 response_instance = MotoAPIResponse()
 recorder_response = RecorderResponse()
diff --git a/moto/rds/models.py b/moto/rds/models.py
index 2a768a91a..51229c102 100644
--- a/moto/rds/models.py
+++ b/moto/rds/models.py
@@ -1,4 +1,5 @@
 import copy
+import math
 import os
 import re
 import string
@@ -121,6 +122,71 @@ class RDSBaseModel(TaggingMixin, BaseModel):
         return f"arn:{self.partition}:rds:{self.region}:{self.account_id}:{self.resource_type}:{self.name}"
 
 
+class ProxyTarget(RDSBaseModel):
+    resource_type = "proxy-target"
+
+    def __init__(
+        self,
+        backend: "RDSBackend",
+        resource_id: str,
+        endpoint: Optional[str],
+        type: str,
+    ):
+        super().__init__(backend)
+        self.endpoint = endpoint
+        self.rds_resource_id = resource_id
+        self.type = type
+        self.role = ""
+
+
+class ProxyTargetGroup(RDSBaseModel):
+    resource_type = "target-group"
+
+    def __init__(
+        self,
+        backend: "RDSBackend",
+        name: str,
+        proxy_name: str,
+    ):
+        super().__init__(backend)
+        self._name = f"prx-tg-{random.get_random_string(length=17, lower_case=True)}"
+        self.group_name = name
+        self.proxy_name = proxy_name
+        self.targets: List[ProxyTarget] = []
+
+        self.max_connections = 100
+        self.max_idle_connections = 50
+        self.borrow_timeout = 120
+        self.session_pinning_filters: List[str] = []
+
+        self.created_date = iso_8601_datetime_with_milliseconds()
+        self.updated_date = iso_8601_datetime_with_milliseconds()
+
+    @property
+    def name(self) -> str:
+        return self._name
+
+    def to_xml(self) -> str:
+        template = Template("""<DBProxyName>{{ group.proxy_name }}</DBProxyName>
+      <TargetGroupName>{{ group.group_name }}</TargetGroupName>
+      <TargetGroupArn>{{ group.arn }}</TargetGroupArn>
+      <IsDefault>true</IsDefault>
+      <Status>available</Status>
+      <ConnectionPoolConfig>
+        <MaxConnectionsPercent>{{ group.max_connections }}</MaxConnectionsPercent>
+        <MaxIdleConnectionsPercent>{{ group.max_idle_connections }}</MaxIdleConnectionsPercent>
+        <ConnectionBorrowTimeout>{{ group.borrow_timeout }}</ConnectionBorrowTimeout>
+        <SessionPinningFilters>
+        {% for filter in group.session_pinning_filters %}
+        <member>{{ filter }}</member>
+        {% endfor %}
+        </SessionPinningFilters>
+      </ConnectionPoolConfig>
+      <CreatedDate>{{ group.created_date }}</CreatedDate>
+      <UpdatedDate>{{ group.updated_date }}</UpdatedDate>""")
+        return template.render(group=self)
+
+
 class GlobalCluster(RDSBaseModel):
     resource_type = "global-cluster"
 
@@ -729,7 +795,7 @@ class DBInstance(CloudFormationModel, RDSBaseModel):
         self.instance_create_time = iso_8601_datetime_with_milliseconds()
         self.publicly_accessible = kwargs.get("publicly_accessible")
         if self.publicly_accessible is None:
-            self.publicly_accessible = True
+            self.publicly_accessible = False
         self.copy_tags_to_snapshot = kwargs.get("copy_tags_to_snapshot")
         if self.copy_tags_to_snapshot is None:
             self.copy_tags_to_snapshot = False
@@ -750,6 +816,11 @@ class DBInstance(CloudFormationModel, RDSBaseModel):
             ].describe_db_subnet_groups(self.db_subnet_group_name)[0]
         self.security_groups = kwargs.get("security_groups", [])
         self.vpc_security_group_ids = kwargs.get("vpc_security_group_ids", [])
+        if not self.vpc_security_group_ids:
+            ec2_backend = ec2_backends[self.account_id][self.region]
+            default_vpc = ec2_backend.default_vpc
+            default_sg = ec2_backend.get_default_security_group(default_vpc.id)
+            self.vpc_security_group_ids.append(default_sg.id)  # type: ignore
         self.preferred_maintenance_window = kwargs.get("preferred_maintenance_window")
         self.preferred_backup_window = kwargs.get("preferred_backup_window")
         msg = valid_preferred_maintenance_window(
@@ -1550,7 +1621,7 @@ class DBProxy(RDSBaseModel):
         self.auth = auth
         self.role_arn = role_arn
         self.vpc_subnet_ids = vpc_subnet_ids
-        self.vpc_security_group_ids = vpc_security_group_ids
+        self.vpc_security_group_ids = vpc_security_group_ids or []
         self.require_tls = require_tls
         if idle_client_timeout is None:
             self.idle_client_timeout = 1800
@@ -1577,6 +1648,9 @@ class DBProxy(RDSBaseModel):
             vpcs.append(subnet.vpc_id)
             if subnet.vpc_id != vpcs[0]:
                 raise InvalidSubnet(subnet_identifier=subnet.id)
+        if not self.vpc_security_group_ids:
+            default_sg = ec2_backend.get_default_security_group(vpcs[0])
+            self.vpc_security_group_ids.append(default_sg.id)  # type: ignore
 
         self.vpc_id = ec2_backend.describe_subnets(subnet_ids=[self.vpc_subnet_ids[0]])[
             0
@@ -1587,18 +1661,30 @@ class DBProxy(RDSBaseModel):
         )
         self.endpoint = f"{self.db_proxy_name}.db-proxy-{self.url_identifier}.{self.region}.rds.amazonaws.com"
 
+        self.proxy_target_groups = {
+            "default": ProxyTargetGroup(
+                backend=self.backend, name="default", proxy_name=db_proxy_name
+            )
+        }
+
+        self.unique_id = f"prx-{random.get_random_string(17, lower_case=True)}"
+
     @property
     def name(self) -> str:
         return self.db_proxy_name
 
+    @property
+    def arn(self) -> str:
+        return f"arn:{self.partition}:rds:{self.region}:{self.account_id}:{self.resource_type}:{self.unique_id}"
+
     def to_xml(self) -> str:
         template = Template(
             """
                 <RequireTLS>{{ dbproxy.require_tls }}</RequireTLS>
                 <VpcSecurityGroupIds>
-                {% if dbproxy.VpcSecurityGroupIds %}
-                  {% for vpcsecuritygroupid in dbproxy.VpcSecurityGroupIds %}
-                    <member>{{ vpcsecuritygroupid }}</member>
+                {% if dbproxy.vpc_security_group_ids %}
+                  {% for sg in dbproxy.vpc_security_group_ids %}
+                    <member>{{ sg }}</member>
                   {% endfor %}
                 {% endif %}
                 </VpcSecurityGroupIds>
@@ -2558,6 +2644,13 @@ class RDSBackend(BaseBackend):
             if resource_type == getattr(resource_class, "resource_type", ""):
                 if resource_name in resources:  # type: ignore
                     return resources[resource_name]  # type: ignore
+        # The resource_name is the last part of the ARN
+        # Usually that's the name - but for DBProxies, the last part of the ARN is a random identifier
+        # So we can't just use the dict-keys - we have to manually check the ARN
+        if resource_type == "db-proxy":
+            for resource in self.db_proxies.values():
+                if resource.arn.endswith(resource_name):
+                    return resource
 
     def list_tags_for_resource(self, arn: str) -> List[Dict[str, str]]:
         if self.arn_regex.match(arn):
@@ -2869,6 +2962,86 @@ class RDSBackend(BaseBackend):
             raise DBProxyNotFoundFault(db_proxy_name)
         return db_proxies
 
+    def deregister_db_proxy_targets(
+        self,
+        db_proxy_name: str,
+        target_group_name: str,
+        db_cluster_identifiers: List[str],
+        db_instance_identifiers: List[str],
+    ) -> None:
+        db_proxy = self.db_proxies[db_proxy_name]
+        target_group = db_proxy.proxy_target_groups[target_group_name or "default"]
+        target_group.targets = [
+            t
+            for t in target_group.targets
+            if t.rds_resource_id not in db_cluster_identifiers
+            and t.rds_resource_id not in db_instance_identifiers
+        ]
+
+    def register_db_proxy_targets(
+        self,
+        db_proxy_name: str,
+        target_group_name: str,
+        db_cluster_identifiers: List[str],
+        db_instance_identifiers: List[str],
+    ) -> List[ProxyTarget]:
+        db_proxy = self.db_proxies[db_proxy_name]
+        target_group = db_proxy.proxy_target_groups[target_group_name or "default"]
+        new_targets = []
+        for cluster_id in db_cluster_identifiers:
+            cluster = self.clusters[cluster_id]
+            target = ProxyTarget(
+                backend=self,
+                resource_id=cluster_id,
+                endpoint=cluster.endpoint,
+                type="TRACKED_CLUSTER",
+            )
+            new_targets.append(target)
+        for instance_id in db_instance_identifiers:
+            target = ProxyTarget(
+                backend=self,
+                resource_id=instance_id,
+                endpoint=None,
+                type="RDS_INSTANCE",
+            )
+            new_targets.append(target)
+        target_group.targets.extend(new_targets)
+        return new_targets
+
+    def delete_db_proxy(self, proxy_name: str) -> DBProxy:
+        return self.db_proxies.pop(proxy_name)
+
+    def describe_db_proxy_targets(self, proxy_name: str) -> List[ProxyTarget]:
+        proxy = self.db_proxies[proxy_name]
+        target_group = proxy.proxy_target_groups["default"]
+        return target_group.targets
+
+    def describe_db_proxy_target_groups(
+        self, proxy_name: str
+    ) -> List[ProxyTargetGroup]:
+        proxy = self.db_proxies[proxy_name]
+        return list(proxy.proxy_target_groups.values())
+
+    def modify_db_proxy_target_group(
+        self, proxy_name: str, config: Dict[str, Any]
+    ) -> ProxyTargetGroup:
+        proxy = self.db_proxies[proxy_name]
+        target_group = proxy.proxy_target_groups["default"]
+        if max_connections := config.get("MaxConnectionsPercent"):
+            target_group.max_connections = max_connections
+        if max_idle := config.get("MaxIdleConnectionsPercent"):
+            target_group.max_idle_connections = max_idle
+        else:
+            target_group.max_idle_connections = math.floor(
+                int(target_group.max_connections) / 2
+            )
+        target_group.borrow_timeout = config.get(
+            "ConnectionBorrowTimeout", target_group.borrow_timeout
+        )
+        if "SessionPinningFilters" in config:
+            target_group.session_pinning_filters = config["SessionPinningFilters"]
+        return target_group
+
 
 class OptionGroup(RDSBaseModel):
     resource_type = "og"
diff --git a/moto/rds/responses.py b/moto/rds/responses.py
index 8be586ff0..7b8911369 100644
--- a/moto/rds/responses.py
+++ b/moto/rds/responses.py
@@ -24,7 +24,7 @@ class RDSResponse(BaseResponse):
             "allocated_storage": self._get_int_param("AllocatedStorage"),
             "availability_zone": self._get_param("AvailabilityZone"),
             "backup_retention_period": self._get_param("BackupRetentionPeriod"),
-            "copy_tags_to_snapshot": self._get_param("CopyTagsToSnapshot"),
+            "copy_tags_to_snapshot": self._get_bool_param("CopyTagsToSnapshot"),
             "db_instance_class": self._get_param("DBInstanceClass"),
             "db_cluster_identifier": self._get_param("DBClusterIdentifier"),
             "db_instance_identifier": self._get_param("DBInstanceIdentifier"),
@@ -57,7 +57,7 @@ class RDSResponse(BaseResponse):
             "preferred_maintenance_window": self._get_param(
                 "PreferredMaintenanceWindow", "wed:06:38-wed:07:08"
             ).lower(),
-            "publicly_accessible": self._get_param("PubliclyAccessible"),
+            "publicly_accessible": self._get_bool_param("PubliclyAccessible"),
             "security_groups": self._get_multi_param(
                 "DBSecurityGroups.DBSecurityGroupName"
             ),
@@ -79,7 +79,7 @@ class RDSResponse(BaseResponse):
             "availability_zone": self._get_param("AvailabilityZone"),
             "backup_retention_period": self._get_param("BackupRetentionPeriod"),
             "backtrack_window": self._get_param("BacktrackWindow"),
-            "copy_tags_to_snapshot": self._get_param("CopyTagsToSnapshot"),
+            "copy_tags_to_snapshot": self._get_bool_param("CopyTagsToSnapshot"),
             "db_instance_class": self._get_param("DBInstanceClass"),
             "db_cluster_identifier": self._get_param("DBClusterIdentifier"),
             "new_db_cluster_identifier": self._get_param("NewDBClusterIdentifier"),
@@ -112,7 +112,7 @@ class RDSResponse(BaseResponse):
             "preferred_maintenance_window": self._get_param(
                 "PreferredMaintenanceWindow"
             ),
-            "publicly_accessible": self._get_param("PubliclyAccessible"),
+            "publicly_accessible": self._get_bool_param("PubliclyAccessible"),
             "security_groups": self._get_multi_param(
                 "DBSecurityGroups.DBSecurityGroupName"
             ),
@@ -137,7 +137,7 @@ class RDSResponse(BaseResponse):
             "iops": self._get_int_param("Iops"),
             # OptionGroupName
             "port": self._get_param("Port"),
-            "publicly_accessible": self._get_param("PubliclyAccessible"),
+            "publicly_accessible": self._get_bool_param("PubliclyAccessible"),
             "source_db_identifier": self._get_param("SourceDBInstanceIdentifier"),
             "storage_type": self._get_param("StorageType"),
         }
@@ -869,6 +869,63 @@ class RDSResponse(BaseResponse):
         template = self.response_template(CREATE_DB_PROXY_TEMPLATE)
         return template.render(dbproxy=db_proxy)
 
+    def register_db_proxy_targets(self) -> str:
+        db_proxy_name = self._get_param("DBProxyName")
+        target_group_name = self._get_param("TargetGroupName")
+        db_cluster_identifiers = self._get_params().get("DBClusterIdentifiers", [])
+        db_instance_identifiers = self._get_params().get("DBInstanceIdentifiers", [])
+        targets = self.backend.register_db_proxy_targets(
+            db_proxy_name=db_proxy_name,
+            target_group_name=target_group_name,
+            db_cluster_identifiers=db_cluster_identifiers,
+            db_instance_identifiers=db_instance_identifiers,
+        )
+
+        template = self.response_template(REGISTER_DB_PROXY_TARGET)
+        return template.render(targets=targets)
+
+    def deregister_db_proxy_targets(self) -> str:
+        db_proxy_name = self._get_param("DBProxyName")
+        target_group_name = self._get_param("TargetGroupName")
+        db_cluster_identifiers = self._get_params().get("DBClusterIdentifiers", [])
+        db_instance_identifiers = self._get_params().get("DBInstanceIdentifiers", [])
+        self.backend.deregister_db_proxy_targets(
+            db_proxy_name=db_proxy_name,
+            target_group_name=target_group_name,
+            db_cluster_identifiers=db_cluster_identifiers,
+            db_instance_identifiers=db_instance_identifiers,
+        )
+
+        template = self.response_template(DEREGISTER_DB_PROXY_TARGET)
+        return template.render()
+
+    def describe_db_proxy_targets(self) -> str:
+        proxy_name = self._get_param("DBProxyName")
+        targets = self.backend.describe_db_proxy_targets(proxy_name=proxy_name)
+        template = self.response_template(DESCRIBE_DB_PROXY_TARGETS)
+        return template.render(targets=targets)
+
+    def delete_db_proxy(self) -> str:
+        proxy_name = self._get_param("DBProxyName")
+        proxy = self.backend.delete_db_proxy(proxy_name=proxy_name)
+        template = self.response_template(DELETE_DB_PROXY_TEMPLATE)
+        return template.render(dbproxy=proxy)
+
+    def describe_db_proxy_target_groups(self) -> str:
+        proxy_name = self._get_param("DBProxyName")
+        groups = self.backend.describe_db_proxy_target_groups(proxy_name=proxy_name)
+        template = self.response_template(DESCRIBE_DB_PROXY_TARGET_GROUPS)
+        return template.render(groups=groups)
+
+    def modify_db_proxy_target_group(self) -> str:
+        proxy_name = self._get_param("DBProxyName")
+        config = self._get_params().get("ConnectionPoolConfig", {})
+        group = self.backend.modify_db_proxy_target_group(
+            proxy_name=proxy_name, config=config
+        )
+        template = self.response_template(MODIFY_DB_PROXY_TARGET_GROUP)
+        return template.render(group=group)
+
     def _paginate(self, resources: List[Any]) -> Tuple[List[Any], Optional[str]]:
         from moto.rds.exceptions import InvalidParameterValue
 
@@ -1717,3 +1774,79 @@ REMOVE_FROM_GLOBAL_CLUSTER_TEMPLATE = """<RemoveFromGlobalClusterResponse xmlns=
   {% endif %}
   </RemoveFromGlobalClusterResult>
 </RemoveFromGlobalClusterResponse>"""
+
+
+DEREGISTER_DB_PROXY_TARGET = """<DeregisterDBProxyTargetsResponse xmlns="http://rds.amazonaws.com/doc/2014-10-31/">
+<DeregisterDBProxyTargetsResult>
+</DeregisterDBProxyTargetsResult>
+</DeregisterDBProxyTargetsResponse>"""
+
+
+REGISTER_DB_PROXY_TARGET = """<RegisterDBProxyTargetsResponse xmlns="http://rds.amazonaws.com/doc/2014-10-31/">
+<RegisterDBProxyTargetsResult>
+<DBProxyTargets>
+  {% for target in targets %}
+  <member>
+    <RdsResourceId>{{ target.rds_resource_id }}</RdsResourceId>
+    <Port>5432</Port>
+    <Type>{{ target.type }}</Type>
+    <TargetHealth>
+        <State>REGISTERING</State>
+    </TargetHealth>
+    {% if target.endpoint %}<Endpoint>{{ target.endpoint }}</Endpoint>{% endif %}
+  </member>
+  {% endfor %}
+</DBProxyTargets>
+</RegisterDBProxyTargetsResult>
+</RegisterDBProxyTargetsResponse>"""
+
+
+DESCRIBE_DB_PROXY_TARGETS = """<DescribeDBProxyTargetsResponse xmlns="http://rds.amazonaws.com/doc/2014-10-31/">
+<DescribeDBProxyTargetsResult>
+  <Targets>
+    {% for target in targets %}
+      <member>
+        <RdsResourceId>{{ target.rds_resource_id }}</RdsResourceId>
+        <Port>5432</Port>
+        <Type>{{ target.type }}</Type>
+        <TargetHealth>
+            <State>AVAILABLE</State>
+        </TargetHealth>
+        {% if target.endpoint %}<Endpoint>{{ target.endpoint }}</Endpoint>{% endif %}
+      </member>
+    {% endfor %}
+  </Targets>
+</DescribeDBProxyTargetsResult>
+</DescribeDBProxyTargetsResponse>
+"""
+
+
+DELETE_DB_PROXY_TEMPLATE = """<DeleteDBProxyResponse>
+<DeleteDBProxyResult>
+  <DBProxy>
+    {{ dbproxy.to_xml() }}
+  </DBProxy>
+</DeleteDBProxyResult>
+</DeleteDBProxyResponse>"""
+
+
+DESCRIBE_DB_PROXY_TARGET_GROUPS = """<DescribeDBProxyTargetGroupsResponse>
+<DescribeDBProxyTargetGroupsResult>
+  <TargetGroups>
+  {% for group in groups %}
+    <member>
+      {{ group.to_xml() }}
+    </member>
+  {% endfor %}
+  </TargetGroups>
+</DescribeDBProxyTargetGroupsResult>
+</DescribeDBProxyTargetGroupsResponse>"""
+
+
+MODIFY_DB_PROXY_TARGET_GROUP = """<ModifyDBProxyTargetGroupResponse>
+<ModifyDBProxyTargetGroupResult>
+  <DBProxyTargetGroup>
+    {{ group.to_xml() }}
+  </DBProxyTargetGroup>
+</ModifyDBProxyTargetGroupResult>
+</ModifyDBProxyTargetGroupResponse>"""
diff --git a/moto/resourcegroupstaggingapi/models.py b/moto/resourcegroupstaggingapi/models.py
index b384042f6..19dc9339a 100644
--- a/moto/resourcegroupstaggingapi/models.py
+++ b/moto/resourcegroupstaggingapi/models.py
@@ -591,7 +591,9 @@ class ResourceGroupsTaggingAPIBackend(BaseBackend):
             not resource_type_filters or "workspaces-web" in resource_type_filters
         ):
             for portal in self.workspacesweb_backends.portals.values():
-                tags = format_tag_keys(portal.tags, ["Key", "Value"])  # type: ignore
+                tags = self.workspacesweb_backends.tagger.list_tags_for_resource(
+                    portal.arn
+                )["Tags"]
                 if not tags or not tag_filter(tags):
                     continue
                 yield {
diff --git a/moto/sagemakermetrics/urls.py b/moto/sagemakermetrics/urls.py
index ff4297327..46e1eebd5 100644
--- a/moto/sagemakermetrics/urls.py
+++ b/moto/sagemakermetrics/urls.py
@@ -3,7 +3,7 @@
 from .responses import SageMakerMetricsResponse
 
 url_bases = [
-    r"https?://metrics.sagemaker\.(.+)\.amazonaws\.com",
+    r"https?://metrics\.sagemaker\.(.+)\.amazonaws\.com",
 ]
 
 url_paths = {
diff --git a/moto/sns/models.py b/moto/sns/models.py
index db60167ac..f86c08664 100644
--- a/moto/sns/models.py
+++ b/moto/sns/models.py
@@ -385,7 +385,7 @@ Notification
 
     @lru_cache()
     def private_key(self) -> rsa.RSAPrivateKey:
-        return rsa.generate_private_key(public_exponent=65537, key_size=2028)
+        return rsa.generate_private_key(public_exponent=65537, key_size=2048)
 
     def _parse_message_structure(self, message: str, protocol: str) -> str:
         try:
diff --git a/moto/ssm/resources/regions.json b/moto/ssm/resources/regions.json
index 8e7447e60..bb3aa740a 100644
--- a/moto/ssm/resources/regions.json
+++ b/moto/ssm/resources/regions.json
@@ -1153,6 +1153,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.af-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -2840,6 +2849,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -5363,6 +5381,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -5888,6 +5915,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -6455,6 +6491,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "bedrock-runtime": {
+                "Value": "bedrock-runtime",
+                "endpoint": {
+                  "Value": "bedrock-runtime.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "budgets": {
                 "Value": "budgets",
                 "endpoint": {
@@ -8363,6 +8408,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -9516,13 +9570,7 @@
                 }
               },
               "marketplace": {
-                "Value": "marketplace",
-                "endpoint": {
-                  "Value": "marketplace.ap-northeast-3.amazonaws.com"
-                },
-                "protocols": {
-                  "Value": "HTTPS"
-                }
+                "Value": "marketplace"
               },
               "mediaconnect": {
                 "Value": "mediaconnect",
@@ -9698,6 +9746,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-northeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -11834,6 +11891,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -12341,6 +12407,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -13440,6 +13515,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -15741,6 +15825,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -16272,6 +16365,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -18504,6 +18606,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -19053,6 +19164,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -20284,6 +20404,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -21653,6 +21782,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -22275,6 +22413,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "controlcatalog": {
+                "Value": "controlcatalog",
+                "endpoint": {
+                  "Value": "controlcatalog.ap-southeast-5.amazonaws.com"
+                }
+              },
               "datasync": {
                 "Value": "datasync",
                 "endpoint": {
@@ -24439,6 +24583,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -24943,6 +25096,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -25879,6 +26041,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -31041,6 +31212,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -31608,6 +31788,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -32757,6 +32946,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -34639,6 +34837,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -35080,6 +35287,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -36362,6 +36578,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -37809,6 +38034,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -40867,6 +41101,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -42962,6 +43205,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -43451,6 +43703,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -45101,6 +45362,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-west-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -45545,6 +45815,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-west-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -46632,6 +46911,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.il-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -48091,6 +48379,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -49694,6 +49991,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.me-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -51654,6 +51960,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -52098,6 +52413,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -54624,6 +54948,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -55236,6 +55569,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -55923,6 +56265,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "bedrock-runtime": {
+                "Value": "bedrock-runtime",
+                "endpoint": {
+                  "Value": "bedrock-runtime.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "budgets": {
                 "Value": "budgets",
                 "endpoint": {
@@ -57924,6 +58275,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -62590,13 +62950,7 @@
                 }
               },
               "marketplace": {
-                "Value": "marketplace",
-                "endpoint": {
-                  "Value": "marketplace.us-west-1.amazonaws.com"
-                },
-                "protocols": {
-                  "Value": "HTTPS"
-                }
+                "Value": "marketplace"
               },
               "mcs": {
                 "Value": "mcs",
@@ -62817,6 +63171,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "pi": {
                 "Value": "pi",
                 "endpoint": {
@@ -63270,6 +63633,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
@@ -65598,6 +65970,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "pca-connector-scep": {
+                "Value": "pca-connector-scep",
+                "endpoint": {
+                  "Value": "pca-connector-scep.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "personalize": {
                 "Value": "personalize",
                 "endpoint": {
@@ -66210,6 +66591,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ssm-quicksetup": {
+                "Value": "ssm-quicksetup",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ssm-sap": {
                 "Value": "ssm-sap",
                 "endpoint": {
diff --git a/moto/ssm/resources/services.json b/moto/ssm/resources/services.json
index 7b95a5bbc..fbb75690d 100644
--- a/moto/ssm/resources/services.json
+++ b/moto/ssm/resources/services.json
@@ -8018,6 +8018,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-northeast-2": {
+                "Value": "ap-northeast-2",
+                "endpoint": {
+                  "Value": "bedrock-runtime.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ap-south-1": {
                 "Value": "ap-south-1",
                 "endpoint": {
@@ -8108,6 +8117,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "us-east-2": {
+                "Value": "us-east-2",
+                "endpoint": {
+                  "Value": "bedrock-runtime.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "us-gov-west-1": {
                 "Value": "us-gov-west-1",
                 "endpoint": {
@@ -15819,6 +15837,20 @@
               }
             }
           },
+          "controlcatalog": {
+            "Value": "controlcatalog",
+            "longName": {
+              "Value": "AWS Control Catalog"
+            },
+            "regions": {
+              "ap-southeast-5": {
+                "Value": "ap-southeast-5",
+                "endpoint": {
+                  "Value": "controlcatalog.ap-southeast-5.amazonaws.com"
+                }
+              }
+            }
+          },
           "controltower": {
             "Value": "controltower",
             "longName": {
@@ -40361,13 +40393,7 @@
                 "Value": "ap-northeast-2"
               },
               "ap-northeast-3": {
-                "Value": "ap-northeast-3",
-                "endpoint": {
-                  "Value": "marketplace.ap-northeast-3.amazonaws.com"
-                },
-                "protocols": {
-                  "Value": "HTTPS"
-                }
+                "Value": "ap-northeast-3"
               },
               "ap-south-1": {
                 "Value": "ap-south-1"
@@ -40457,13 +40483,7 @@
                 "Value": "us-gov-west-1"
               },
               "us-west-1": {
-                "Value": "us-west-1",
-                "endpoint": {
-                  "Value": "marketplace.us-west-1.amazonaws.com"
-                },
-                "protocols": {
-                  "Value": "HTTPS"
-                }
+                "Value": "us-west-1"
               },
               "us-west-2": {
                 "Value": "us-west-2",
@@ -47123,6 +47143,33 @@
           },
           "pca-connector-scep": {
             "regions": {
+              "af-south-1": {
+                "Value": "af-south-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.af-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-east-1": {
+                "Value": "ap-east-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-northeast-1": {
+                "Value": "ap-northeast-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ap-northeast-2": {
                 "Value": "ap-northeast-2",
                 "endpoint": {
@@ -47132,6 +47179,132 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-northeast-3": {
+                "Value": "ap-northeast-3",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-northeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-south-1": {
+                "Value": "ap-south-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-south-2": {
+                "Value": "ap-south-2",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-1": {
+                "Value": "ap-southeast-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-2": {
+                "Value": "ap-southeast-2",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-3": {
+                "Value": "ap-southeast-3",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-4": {
+                "Value": "ap-southeast-4",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ca-central-1": {
+                "Value": "ca-central-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-central-1": {
+                "Value": "eu-central-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-central-2": {
+                "Value": "eu-central-2",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-north-1": {
+                "Value": "eu-north-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-south-1": {
+                "Value": "eu-south-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-south-2": {
+                "Value": "eu-south-2",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-west-1": {
                 "Value": "eu-west-1",
                 "endpoint": {
@@ -47141,6 +47314,69 @@
                   "Value": "HTTPS"
                 }
               },
+              "eu-west-2": {
+                "Value": "eu-west-2",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-west-3": {
+                "Value": "eu-west-3",
+                "endpoint": {
+                  "Value": "pca-connector-scep.eu-west-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "il-central-1": {
+                "Value": "il-central-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.il-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "me-central-1": {
+                "Value": "me-central-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "me-south-1": {
+                "Value": "me-south-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.me-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "sa-east-1": {
+                "Value": "sa-east-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-1": {
+                "Value": "us-east-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "us-east-2": {
                 "Value": "us-east-2",
                 "endpoint": {
@@ -47149,6 +47385,24 @@
                 "protocols": {
                   "Value": "HTTPS"
                 }
+              },
+              "us-west-1": {
+                "Value": "us-west-1",
+                "endpoint": {
+                  "Value": "pca-connector-scep.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-west-2": {
+                "Value": "us-west-2",
+                "endpoint": {
+                  "Value": "pca-connector-scep.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               }
             }
           },
@@ -61906,6 +62160,158 @@
               }
             }
           },
+          "ssm-quicksetup": {
+            "Value": "ssm-quicksetup",
+            "longName": {
+              "Value": "AWS Systems Manager QuickSetup"
+            },
+            "regions": {
+              "ap-northeast-1": {
+                "Value": "ap-northeast-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-northeast-2": {
+                "Value": "ap-northeast-2",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-south-1": {
+                "Value": "ap-south-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-1": {
+                "Value": "ap-southeast-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-2": {
+                "Value": "ap-southeast-2",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ca-central-1": {
+                "Value": "ca-central-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-central-1": {
+                "Value": "eu-central-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-north-1": {
+                "Value": "eu-north-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-west-1": {
+                "Value": "eu-west-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-west-2": {
+                "Value": "eu-west-2",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-west-3": {
+                "Value": "eu-west-3",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.eu-west-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "sa-east-1": {
+                "Value": "sa-east-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-1": {
+                "Value": "us-east-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-2": {
+                "Value": "us-east-2",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-west-1": {
+                "Value": "us-west-1",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-west-2": {
+                "Value": "us-west-2",
+                "endpoint": {
+                  "Value": "ssm-quicksetup.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              }
+            }
+          },
           "ssm-sap": {
             "Value": "ssm-sap",
             "longName": {
diff --git a/moto/timestreamquery/urls.py b/moto/timestreamquery/urls.py
index 9053d6c32..35e346db6 100644
--- a/moto/timestreamquery/urls.py
+++ b/moto/timestreamquery/urls.py
@@ -3,7 +3,7 @@
 from moto.timestreamwrite.responses import TimestreamWriteResponse
 
 url_bases = [
-    r"https?://query.timestream\.(.+)\.amazonaws\.com",
+    r"https?://query\.timestream\.(.+)\.amazonaws\.com",
 ]
 
 url_paths = {
diff --git a/other_langs/terraform/rds/providers.tf b/other_langs/terraform/rds/providers.tf
index 2da69969b..228ab7576 100644
--- a/other_langs/terraform/rds/providers.tf
+++ b/other_langs/terraform/rds/providers.tf
@@ -6,7 +6,10 @@ provider "aws" {
   skip_requesting_account_id  = true
 
   endpoints {
-    rds = "http://localhost:5000"
+    ec2            = "http://localhost:5000"
+    iam            = "http://localhost:5000"
+    rds            = "http://localhost:5000"
+    secretsmanager = "http://localhost:5000"
   }
 
   access_key = "my-access-key"
diff --git a/other_langs/terraform/rds/proxy.tf b/other_langs/terraform/rds/proxy.tf
new file mode 100644
index 000000000..22912af70
--- /dev/null
+++ b/other_langs/terraform/rds/proxy.tf
@@ -0,0 +1,94 @@
+data "aws_vpc" "default" {
+  default = true
+}
+
+data "aws_subnets" "all" {
+  filter {
+    name   = "vpc-id"
+    values = [data.aws_vpc.default.id]
+  }
+}
+
+resource "random_string" "this" {
+  length  = 20
+  special = true
+  upper   = true
+}
+
+resource "aws_secretsmanager_secret" "test" {
+  name = "rds/test/test_admin"
+}
+
+resource "aws_secretsmanager_secret_version" "test" {
+  secret_id = aws_secretsmanager_secret.test.id
+  secret_string = jsonencode({
+    username = "test_admin"
+    password = "${random_string.this.result}"
+  })
+}
+
+data "aws_iam_policy_document" "rds_trust_policy" {
+  statement {
+    effect = "Allow"
+
+    principals {
+      type        = "Service"
+      identifiers = ["rds.amazonaws.com"]
+    }
+
+    actions = [
+      "sts:AssumeRole",
+    ]
+  }
+}
+
+resource "aws_iam_role" "proxy" {
+  assume_role_policy = data.aws_iam_policy_document.rds_trust_policy.json
+  name               = "rds-proxy-${aws_db_instance.test.db_name}"
+}
+
+resource "aws_db_instance" "test" {
+  allocated_storage   = 10
+  db_name             = "testdb"
+  engine              = "postgres"
+  engine_version      = "15"
+  instance_class      = "db.t3.micro"
+  username            = "test"
+  password            = random_string.this.result
+  skip_final_snapshot = true
+}
+
+resource "aws_db_proxy" "main" {
+  name                   = aws_db_instance.test.db_name
+  debug_logging          = false
+  engine_family          = "POSTGRESQL"
+  idle_client_timeout    = 1800
+  require_tls            = true
+  role_arn               = aws_iam_role.proxy.arn
+  vpc_security_group_ids = []
+  vpc_subnet_ids         = data.aws_subnets.all.ids
+
+  auth {
+    auth_scheme = "SECRETS"
+    description = "Secrets through IAM Authentication"
+    iam_auth    = "REQUIRED"
+    secret_arn  = aws_secretsmanager_secret.test.arn
+  }
+}
+
+resource "aws_db_proxy_default_target_group" "main" {
+  db_proxy_name = aws_db_proxy.main.name
+
+  connection_pool_config {
+    connection_borrow_timeout    = 120
+    max_connections_percent      = 100
+    max_idle_connections_percent = 50
+    session_pinning_filters      = ["EXCLUDE_VARIABLE_SETS"]
+  }
+}
+
+resource "aws_db_proxy_target" "main" {
+  db_instance_identifier = aws_db_instance.test.identifier
+  db_proxy_name          = aws_db_proxy.main.name
+  target_group_name      = aws_db_proxy_default_target_group.main.name
+}
diff --git a/setup.cfg b/setup.cfg
index a7dae9c51..1f771d8bd 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = moto
-version = 5.0.18.dev
+version = 5.0.19.dev
 long_description = file:README.md
 long_description_content_type = text/markdown
 author = Steve Pulec
@@ -28,7 +28,7 @@ project_urls =
 python_requires = >=3.8
 install_requires =
     boto3>=1.9.201
-    botocore>=1.14.0
+    botocore>=1.14.0,<1.35.45
     cryptography>=3.3.1
     requests>=2.5
     xmltodict


Test patch:
diff --git a/.github/workflows/tests_sdk_ruby.yml b/.github/workflows/tests_sdk_ruby.yml
index a2a3b5d95..3d3936350 100644
--- a/.github/workflows/tests_sdk_ruby.yml
+++ b/.github/workflows/tests_sdk_ruby.yml
@@ -13,7 +13,7 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Set up Ruby ${{ matrix.ruby-version }}
-        uses: ruby/setup-ruby@f26937343756480a8cb3ae1f623b9c8d89ed6984
+        uses: ruby/setup-ruby@7bae1d00b5db9166f4f0fc47985a3a5702cb58f0
         with:
           ruby-version: ${{ matrix.ruby-version }}
       - name: Set up Python 3.8
diff --git a/.github/workflows/tests_terraform_examples.yml b/.github/workflows/tests_terraform_examples.yml
index d83ef22cc..26d59d99b 100644
--- a/.github/workflows/tests_terraform_examples.yml
+++ b/.github/workflows/tests_terraform_examples.yml
@@ -45,6 +45,7 @@ jobs:
         docker run --rm -t --name motoserver -e TEST_SERVER_MODE=true -e AWS_SECRET_ACCESS_KEY=server_secret -e AWS_ACCESS_KEY_ID=server_key -v `pwd`:/moto -p 5000:5000 -v /var/run/docker.sock:/var/run/docker.sock python:3.10-slim /moto/scripts/ci_moto_server.sh &
         python scripts/ci_wait_for_server.py
     - name: Run tests
+      if: ${{ matrix.service != 'rds' }}
       run: |
         mkdir ~/.aws && touch ~/.aws/credentials && echo -e "[default]\naws_access_key_id = test\naws_secret_access_key = test" > ~/.aws/credentials
         cd other_langs/terraform/${{ matrix.service }}
@@ -56,3 +57,11 @@ jobs:
         sleep 30
         terraform plan -detailed-exitcode
         terraform apply -destroy --auto-approve
+    - name: Run tests
+      if: ${{ matrix.service == 'rds' }}
+      run: |
+        mkdir ~/.aws && touch ~/.aws/credentials && echo -e "[default]\naws_access_key_id = test\naws_secret_access_key = test" > ~/.aws/credentials
+        cd other_langs/terraform/${{ matrix.service }}
+        terraform init
+        terraform apply --auto-approve
+        terraform apply -destroy --auto-approve
diff --git a/other_langs/tests_java/pom.xml b/other_langs/tests_java/pom.xml
index c3f62a6ac..a2ff6de94 100644
--- a/other_langs/tests_java/pom.xml
+++ b/other_langs/tests_java/pom.xml
@@ -22,7 +22,7 @@
     <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>bom</artifactId>
-      <version>2.28.13</version>
+      <version>2.28.26</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
@@ -36,6 +36,14 @@
       <version>4.13.2</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>software.amazon.awssdk</groupId>
+      <artifactId>cognitoidentity</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>software.amazon.awssdk</groupId>
+      <artifactId>cognitoidentityprovider</artifactId>
+    </dependency>
     <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>dynamodb</artifactId>
diff --git a/other_langs/tests_java/src/main/java/moto/tests/DependencyFactory.java b/other_langs/tests_java/src/main/java/moto/tests/DependencyFactory.java
index 7cfa0940d..8d5d8bf5b 100644
--- a/other_langs/tests_java/src/main/java/moto/tests/DependencyFactory.java
+++ b/other_langs/tests_java/src/main/java/moto/tests/DependencyFactory.java
@@ -5,6 +5,7 @@ import software.amazon.awssdk.http.SdkHttpConfigurationOption;
 import software.amazon.awssdk.http.apache.ApacheHttpClient;
 import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
 import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.ses.SesClient;
 import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
@@ -22,9 +23,14 @@ public class DependencyFactory {
 
     private DependencyFactory() {}
 
-    /**
-     * @return an instance of S3Client
-     */
+    public static CognitoIdentityProviderClient cognitoIdpClient() {
+        return CognitoIdentityProviderClient.builder()
+                .region(Region.US_EAST_1)
+                .httpClientBuilder(ApacheHttpClient.builder())
+                .endpointOverride(MOTO_URI)
+                .build();
+    }
+
     public static S3Client s3Client() {
         return S3Client.builder()
                 .region(Region.US_EAST_1)
diff --git a/other_langs/tests_java/src/test/java/moto/tests/CognitoIDPTest.java b/other_langs/tests_java/src/test/java/moto/tests/CognitoIDPTest.java
new file mode 100644
index 000000000..c1f884da1
--- /dev/null
+++ b/other_langs/tests_java/src/test/java/moto/tests/CognitoIDPTest.java
@@ -0,0 +1,90 @@
+package moto.tests;
+
+import static moto.tests.DependencyFactory.cognitoIdpClient;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.AssociateSoftwareTokenRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.AssociateSoftwareTokenResponse;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.AttributeType;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.AuthFlowType;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.CreateUserPoolRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.CreateUserPoolClientRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ConfirmSignUpRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.InitiateAuthRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.InitiateAuthResponse;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.SignUpRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+public class CognitoIDPTest {
+
+    @Test
+    public void testAssociateSoftwareToken() {
+        CognitoIdentityProviderClient client = cognitoIdpClient();
+
+        CreateUserPoolRequest up_request = CreateUserPoolRequest.builder()
+                .poolName("myfirstuserpool")
+                .build();
+
+        String userPoolId = client.createUserPool(up_request).userPool().id();
+        System.out.println(userPoolId);
+
+        CreateUserPoolClientRequest upc_request = CreateUserPoolClientRequest.builder()
+                .clientName("myfirstuserpoolclient")
+                .userPoolId(userPoolId)
+                .build();
+
+        String clientId = client.createUserPoolClient(upc_request).userPoolClient().clientId();
+        System.out.println(clientId);
+
+        // Create User
+        AttributeType userAttrs = AttributeType.builder()
+                .name("email")
+                .value("test@test.com")
+                .build();
+        String password = "P@ssw0rdWithTonsOfCharacters";
+
+        List<AttributeType> userAttrsList = new ArrayList<>();
+        userAttrsList.add(userAttrs);
+        SignUpRequest signUpRequest = SignUpRequest.builder()
+                    .userAttributes(userAttrsList)
+                    .username("myuser")
+                    .clientId(clientId)
+                    .password(password)
+                    .build();
+
+        client.signUp(signUpRequest);
+
+        ConfirmSignUpRequest confirmSignUpRequest = ConfirmSignUpRequest.builder()
+                .clientId(clientId)
+                .confirmationCode("code")
+                .username("myuser")
+                .build();
+
+        client.confirmSignUp(confirmSignUpRequest);
+
+        InitiateAuthResponse initiateAuthResponse = client.initiateAuth(
+                InitiateAuthRequest.builder()
+                        .authFlow(AuthFlowType.USER_PASSWORD_AUTH)
+                        .authParameters(Map.of(
+                                "USERNAME", "myuser",
+                                "SECRET_HASH", "n/a",
+                                "PASSWORD", password))
+                        .clientId(clientId)
+                        .build());
+        String accessToken = initiateAuthResponse.authenticationResult().accessToken();
+
+        AssociateSoftwareTokenRequest softwareTokenRequest = AssociateSoftwareTokenRequest.builder()
+                .accessToken(accessToken)
+                .build();
+        AssociateSoftwareTokenResponse tokenResponse = client
+                .associateSoftwareToken(softwareTokenRequest);
+        String secretCode = tokenResponse.secretCode();
+
+        assertNotNull(secretCode);
+    }
+}
diff --git a/tests/test_cognitoidp/test_server.py b/tests/test_cognitoidp/test_server.py
index 1b1f6f100..510f9a723 100644
--- a/tests/test_cognitoidp/test_server.py
+++ b/tests/test_cognitoidp/test_server.py
@@ -181,3 +181,94 @@ def test_admin_create_user_without_authentication():
     assert "AuthenticationResult" in response
     assert "IdToken" in response["AuthenticationResult"]
     assert "AccessToken" in response["AuthenticationResult"]
+
+
+def test_associate_software_token():
+    backend = server.create_backend_app("cognito-idp")
+    test_client = backend.test_client()
+
+    # Create User Pool
+    res = test_client.post(
+        "/",
+        data='{"PoolName": "test-pool"}',
+        headers={
+            "X-Amz-Target": "AWSCognitoIdentityProviderService.CreateUserPool",
+            "Authorization": "AWS4-HMAC-SHA256 Credential=abcd/20010101/us-east-2/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=...",
+        },
+    )
+    user_pool_id = json.loads(res.data)["UserPool"]["Id"]
+
+    # Create User Pool Client
+    data = {
+        "UserPoolId": user_pool_id,
+        "ClientName": "some-client",
+        "GenerateSecret": False,
+        "ExplicitAuthFlows": ["ALLOW_USER_PASSWORD_AUTH"],
+    }
+    res = test_client.post(
+        "/",
+        data=json.dumps(data),
+        headers={
+            "X-Amz-Target": "AWSCognitoIdentityProviderService.CreateUserPoolClient",
+            "Authorization": "AWS4-HMAC-SHA256 Credential=abcd/20010101/us-east-2/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=...",
+        },
+    )
+    client_id = json.loads(res.data)["UserPoolClient"]["ClientId"]
+
+    # Sign Up User
+    data = {
+        "ClientId": client_id,
+        "Username": "user_2_mfa",
+        "Password": "12312sdfasASDFDSF$",
+    }
+    res = test_client.post(
+        "/",
+        data=json.dumps(data),
+        headers={"X-Amz-Target": "AWSCognitoIdentityProviderService.SignUp"},
+    )
+    assert res.status_code == 200
+    assert json.loads(res.data)["UserConfirmed"] is False
+
+    # Confirm Sign Up User
+    data = {"ClientId": client_id, "Username": "user_2_mfa", "ConfirmationCode": "sth"}
+    res = test_client.post(
+        "/",
+        data=json.dumps(data),
+        headers={"X-Amz-Target": "AWSCognitoIdentityProviderService.ConfirmSignUp"},
+    )
+
+    # Initiate Auth
+    data = {
+        "AuthFlow": "USER_PASSWORD_AUTH",
+        "AuthParameters": {
+            "USERNAME": "user_2_mfa",
+            "PASSWORD": "12312sdfasASDFDSF$",
+            "SECRET_HASH": "kIWuIv6ElVe9ahZHJ+gqvZe6CgEkVE/BjQmJcMSgF3E=",
+        },
+        "ClientId": client_id,
+    }
+    res = test_client.post(
+        "/",
+        data=json.dumps(data),
+        headers={"X-Amz-Target": "AWSCognitoIdentityProviderService.InitiateAuth"},
+    )
+    auth_data = json.loads(res.data.decode("utf-8"))["AuthenticationResult"]
+
+    # Get User
+    data = {"AccessToken": auth_data["AccessToken"]}
+    res = test_client.post(
+        "/",
+        data=json.dumps(data),
+        headers={"X-Amz-Target": "AWSCognitoIdentityProviderService.GetUser"},
+    )
+
+    # Associate Software Token
+    data = {"AccessToken": auth_data["AccessToken"]}
+    res = test_client.post(
+        "/",
+        data=json.dumps(data),
+        headers={
+            "X-Amz-Target": "AWSCognitoIdentityProviderService.AssociateSoftwareToken"
+        },
+    )
+    assert json.loads(res.data.decode("utf-8")) == {"SecretCode": "asdfasdfasdf"}
diff --git a/tests/test_ec2/test_key_pairs.py b/tests/test_ec2/test_key_pairs.py
index b5da29204..49347da5c 100644
--- a/tests/test_ec2/test_key_pairs.py
+++ b/tests/test_ec2/test_key_pairs.py
@@ -15,7 +15,10 @@ ssh-ed25519 \
 AAAAC3NzaC1lZDI1NTE5AAAAIEwsSB9HbTeKCdkSlMZeTq9jZggaPJUwAsUi/7wakB+B \
 moto@getmoto"""
 
-ED25519_PUBLIC_KEY_FINGERPRINT = "6c:d9:cf:90:d7:f7:bc:46:83:9e:f5:56:aa:e1:13:38"
+ED25519_PUBLIC_KEY_FINGERPRINT = (
+    "6e:bc:8a:45:e5:fa:ba:e4:c9:a4:a3:f6:7b:da:05:16:fb:cc:88:66:05"
+    ":33:b8:a1:c2:80:9a:6b:06:ac:38:76"
+)
 
 RSA_PUBLIC_KEY_OPENSSH = b"""\
 ssh-rsa \
@@ -122,8 +125,8 @@ def test_key_pairs_create_dryrun_boto3():
 
 
 @mock_aws
-@pytest.mark.parametrize("key_type", ["rsa", "ed25519"])
-def test_key_pairs_create_boto3(key_type):
+@pytest.mark.parametrize("key_type, fingerprint_len", [("rsa", 59), ("ed25519", 95)])
+def test_key_pairs_create_boto3(key_type: str, fingerprint_len: int):
     ec2 = boto3.resource("ec2", "us-west-1")
     client = boto3.client("ec2", "us-west-1")
 
@@ -147,6 +150,10 @@ def test_key_pairs_create_boto3(key_type):
     assert "KeyPairId" in kps[0]
     assert kps[0]["KeyName"] == key_name
     assert "KeyFingerprint" in kps[0]
+    # Naive check for hash type
+    # SHA1 - 40 + 19 `:` symbols
+    # SHA256 - 64 + 31 `:` symbols
+    assert len(kps[0]["KeyFingerprint"]) == fingerprint_len
     assert isinstance(kps[0]["CreateTime"], datetime)
 
 
diff --git a/tests/test_ec2/test_utils.py b/tests/test_ec2/test_utils.py
index 095276655..5752e65f9 100644
--- a/tests/test_ec2/test_utils.py
+++ b/tests/test_ec2/test_utils.py
@@ -1,21 +1,30 @@
+import hashlib
 import ipaddress
 from copy import deepcopy
+from typing import TYPE_CHECKING
 from unittest.mock import patch
 
+import pytest
+from cryptography.hazmat.backends import default_backend
+from cryptography.hazmat.primitives.asymmetric import rsa
+from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
 from pytest import raises
 
 from moto.ec2 import utils
+from moto.utilities.utils import md5_hash
 
 from .helpers import check_private_key
 
+if TYPE_CHECKING:
+    from hashlib import _Hash
+
 
 def test_random_key_pair():
     key_pair = utils.random_rsa_key_pair()
     check_private_key(key_pair["material"], "rsa")
 
-    # AWS uses MD5 fingerprints, which are 47 characters long, *not* SHA1
-    # fingerprints with 59 characters.
-    assert len(key_pair["fingerprint"]) == 47
+    # AWS uses SHA1 for created by Amazon fingerprints, which are 59 characters long
+    assert len(key_pair["fingerprint"]) == 59
 
     key_pair = utils.random_ed25519_key_pair()
     check_private_key(key_pair["material"], "ed25519")
@@ -62,3 +71,41 @@ def test_gen_moto_amis():
     # with drop=False, it should raise KeyError because of the missing key
     with raises(KeyError, match="'Public'"):
         utils.gen_moto_amis(images, drop_images_missing_keys=False)
+
+
+@pytest.mark.parametrize(
+    "is_imported, algorithm", [(True, md5_hash), (False, hashlib.sha1)]
+)
+def test_select_hash_algorithm__rsa(is_imported: bool, algorithm: "_Hash"):
+    private_key = rsa.generate_private_key(
+        public_exponent=65537, key_size=2048, backend=default_backend()
+    )
+    public_key = private_key.public_key()
+
+    selected_algorithm = utils.select_hash_algorithm(public_key, is_imported)
+
+    assert selected_algorithm == algorithm
+
+
+def test_select_hash_algorithm__ed25519():
+    private_key = Ed25519PrivateKey.generate()
+    public_key = private_key.public_key()
+
+    selected_algorithm = utils.select_hash_algorithm(public_key)
+
+    assert selected_algorithm == hashlib.sha256
+
+
+def test_public_key_fingerprint__ed25519():
+    """Checks the function with SHA256.
+
+    Hash algorithm is selected in `select_hash_algorithm`.
+    """
+    private_key = Ed25519PrivateKey.generate()
+    public_key = private_key.public_key()
+
+    fingerprint = utils.public_key_fingerprint(
+        public_key, hash_constructor=hashlib.sha256
+    )
+
+    assert len(fingerprint) == 95
diff --git a/tests/test_iam/test_iam_signing_certificates.py b/tests/test_iam/test_iam_signing_certificates.py
index d3a7f2fb4..6c6834567 100644
--- a/tests/test_iam/test_iam_signing_certificates.py
+++ b/tests/test_iam/test_iam_signing_certificates.py
@@ -191,7 +191,7 @@ def test_update_unknown_certificate(user_name=None):
 
 
 def create_certificate():
-    key = rsa.generate_private_key(public_exponent=65537, key_size=2028)
+    key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
     cert_subject = [NameAttribute(NameOID.COMMON_NAME, "iam.amazonaws.com")]
     issuer = [
         NameAttribute(NameOID.COUNTRY_NAME, "US"),
diff --git a/tests/test_rds/test_rds_proxy.py b/tests/test_rds/test_rds_proxy.py
index 602289a5e..b2fe6aee5 100644
--- a/tests/test_rds/test_rds_proxy.py
+++ b/tests/test_rds/test_rds_proxy.py
@@ -39,14 +39,12 @@ def test_create_db_proxy():
     )
     db_proxy = resp["DBProxy"]
     assert db_proxy["DBProxyName"] == "testrdsproxy"
-    assert (
-        db_proxy["DBProxyArn"]
-        == f"arn:aws:rds:us-west-2:{ACCOUNT_ID}:db-proxy:testrdsproxy"
+    assert db_proxy["DBProxyArn"].startswith(
+        f"arn:aws:rds:us-west-2:{ACCOUNT_ID}:db-proxy:"
     )
     assert db_proxy["Status"] == "available"
     assert db_proxy["EngineFamily"] == "MYSQL"
     assert db_proxy["VpcId"] == vpc_id
-    assert db_proxy["VpcSecurityGroupIds"] == []
     assert db_proxy["VpcSubnetIds"] == [subnet_id, subnet_id_2]
     assert db_proxy["Auth"] == [
         {
@@ -99,14 +97,12 @@ def test_describe_db_proxies():
     response = rds_client.describe_db_proxies(DBProxyName="testrdsproxydescribe")
     db_proxy = response["DBProxies"][0]
     assert db_proxy["DBProxyName"] == "testrdsproxydescribe"
-    assert (
-        db_proxy["DBProxyArn"]
-        == f"arn:aws:rds:us-west-2:{ACCOUNT_ID}:db-proxy:testrdsproxydescribe"
+    assert db_proxy["DBProxyArn"].startswith(
+        f"arn:aws:rds:us-west-2:{ACCOUNT_ID}:db-proxy:prx-"
     )
     assert db_proxy["Status"] == "available"
     assert db_proxy["EngineFamily"] == "MYSQL"
     assert db_proxy["VpcId"] == vpc_id
-    assert db_proxy["VpcSecurityGroupIds"] == []
     assert db_proxy["VpcSubnetIds"] == [subnet_id, subnet_id_2]
     assert db_proxy["Auth"] == [
         {
diff --git a/tests/test_rds/test_rds_proxy_target_groups.py b/tests/test_rds/test_rds_proxy_target_groups.py
new file mode 100644
index 000000000..a38b70617
--- /dev/null
+++ b/tests/test_rds/test_rds_proxy_target_groups.py
@@ -0,0 +1,245 @@
+import json
+from time import sleep
+from uuid import uuid4
+
+import boto3
+import pytest
+from botocore.exceptions import ClientError
+
+from moto import mock_aws
+from tests import allow_aws_request
+
+DEFAULT_REGION = "us-east-1"
+
+ASSUME_ROLE_POLICY = {
+    "Version": "2012-10-17",
+    "Statement": [
+        {
+            "Effect": "Allow",
+            "Principal": {"Service": "rds.amazonaws.com"},
+            "Action": "sts:AssumeRole",
+        }
+    ],
+}
+
+
+@pytest.fixture(scope="module")
+def mockaws():
+    if allow_aws_request():
+        yield
+    else:
+        with mock_aws():
+            yield
+
+
+@pytest.fixture(scope="module")
+def secrets_arn():
+    client = boto3.client("secretsmanager", DEFAULT_REGION)
+    secret_name = f"moto-test-{str(uuid4())[0:6]}"
+
+    try:
+        secret = client.create_secret(Name=secret_name, SecretString="ss")
+        yield secret["ARN"]
+    finally:
+        client.delete_secret(SecretId=secret_name)
+
+
+@pytest.fixture(scope="module")
+def vpc_id(mockaws):  # pylint: disable=redefined-outer-name
+    ec2_client = boto3.client("ec2", region_name=DEFAULT_REGION)
+    _vpc_id = None
+    try:
+        _vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
+        yield _vpc_id
+    finally:
+        ec2_client.delete_vpc(VpcId=_vpc_id)
+
+
+@pytest.fixture(scope="module")
+def subnet_id1(vpc_id):  # pylint: disable=redefined-outer-name
+    ec2_client = boto3.client("ec2", region_name=DEFAULT_REGION)
+    try:
+        subnet = ec2_client.create_subnet(
+            CidrBlock="10.0.1.0/24", VpcId=vpc_id, AvailabilityZone="us-east-1a"
+        )
+        subnet_id = subnet["Subnet"]["SubnetId"]
+        yield subnet_id
+    finally:
+        ec2_client.delete_subnet(SubnetId=subnet_id)
+
+
+@pytest.fixture(scope="module")
+def subnet_id2(vpc_id):  # pylint: disable=redefined-outer-name
+    ec2_client = boto3.client("ec2", region_name=DEFAULT_REGION)
+    try:
+        subnet = ec2_client.create_subnet(
+            CidrBlock="10.0.2.0/24", VpcId=vpc_id, AvailabilityZone="us-east-1b"
+        )
+        subnet_id = subnet["Subnet"]["SubnetId"]
+        yield subnet_id
+    finally:
+        ec2_client.delete_subnet(SubnetId=subnet_id)
+
+
+@pytest.fixture(scope="module")
+def role_arn(mockaws):  # pylint: disable=redefined-outer-name
+    role_name = f"moto-test-{str(uuid4())[0:6]}"
+    iam = boto3.client("iam", region_name=DEFAULT_REGION)
+    try:
+        role = iam.create_role(
+            RoleName=role_name,
+            AssumeRolePolicyDocument=json.dumps(ASSUME_ROLE_POLICY),
+        )["Role"]
+        yield role["Arn"]
+    finally:
+        iam.delete_role(RoleName=role_name)
+
+
+@pytest.fixture(scope="module")
+def proxy_name(subnet_id1, subnet_id2, role_arn, secrets_arn):  # pylint: disable=redefined-outer-name
+    name = f"moto-test-{str(uuid4())[0:6]}"
+    rds_client = boto3.client("rds", region_name=DEFAULT_REGION)
+    proxy_creation_succeeded = False
+    try:
+        resp = rds_client.create_db_proxy(
+            DBProxyName=name,
+            EngineFamily="POSTGRESQL",
+            Auth=[
+                {
+                    # "UserName": "user1",
+                    # "AuthScheme": "SECRETS",
+                    "IAMAuth": "DISABLED",
+                    "SecretArn": secrets_arn,
+                }
+            ],
+            RoleArn=role_arn,
+            VpcSubnetIds=[subnet_id1, subnet_id2],
+        )
+        status = resp["DBProxy"]["Status"]
+        while status.lower() == "creating":
+            sleep(5)
+            status = rds_client.describe_db_proxies(DBProxyName=name)["DBProxies"][0][
+                "Status"
+            ]
+        proxy_creation_succeeded = True
+
+        yield name
+    finally:
+        if proxy_creation_succeeded:
+            rds_client.delete_db_proxy(DBProxyName=name)
+            deleted = False
+            while not deleted:
+                try:
+                    rds_client.describe_db_proxies(DBProxyName=name)
+                    sleep(10)
+                except (ClientError, IndexError):
+                    deleted = True
+
+
+@pytest.fixture(scope="module")
+def db_cluster_id(mockaws):  # pylint: disable=redefined-outer-name
+    cluster_name = f"moto-test-{str(uuid4())[0:6]}"
+    rds_client = boto3.client("rds", region_name=DEFAULT_REGION)
+    cluster_creation_succeeded = False
+    try:
+        cluster_id = rds_client.create_db_cluster(
+            DBClusterIdentifier=cluster_name,
+            Engine="aurora-postgresql",
+            MasterUsername="root",
+            MasterUserPassword="hunter21",
+        )["DBCluster"]["DBClusterIdentifier"]
+        rds_client.get_waiter("db_cluster_available").wait(
+            DBClusterIdentifier=cluster_id
+        )
+        cluster_creation_succeeded = True
+        yield cluster_id
+    finally:
+        if cluster_creation_succeeded:
+            rds_client.delete_db_cluster(
+                DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
+            )
+
+
+def test_default_proxy_targets(account_id, proxy_name):  # pylint: disable=redefined-outer-name
+    rds_client = boto3.client("rds", region_name=DEFAULT_REGION)
+    resp = rds_client.describe_db_proxy_targets(DBProxyName=proxy_name)
+
+    assert resp["Targets"] == []
+
+    groups = rds_client.describe_db_proxy_target_groups(
+        DBProxyName=proxy_name,
+        TargetGroupName="default",
+    )["TargetGroups"]
+    assert len(groups) == 1
+    groups[0].pop("CreatedDate")
+    groups[0].pop("UpdatedDate")
+    target_group_arn = groups[0].pop("TargetGroupArn")
+    assert target_group_arn.startswith(
+        f"arn:aws:rds:us-east-1:{account_id}:target-group:prx-tg-"
+    )  # 17 more chars (lowercase + digits)
+    assert groups[0] == {
+        "DBProxyName": proxy_name,
+        "TargetGroupName": "default",
+        "IsDefault": True,
+        "Status": "available",
+        "ConnectionPoolConfig": {
+            "MaxConnectionsPercent": 100,
+            "MaxIdleConnectionsPercent": 50,
+            "ConnectionBorrowTimeout": 120,
+            "SessionPinningFilters": [],
+        },
+    }
+
+
+def test_register_db_proxy(account_id, proxy_name, db_cluster_id):  # pylint: disable=redefined-outer-name
+    rds_client = boto3.client("rds", region_name=DEFAULT_REGION)
+
+    resp = rds_client.register_db_proxy_targets(
+        DBProxyName=proxy_name,
+        DBClusterIdentifiers=[db_cluster_id],
+    )["DBProxyTargets"]
+    resp[0].pop("Endpoint", None)
+    assert resp == [
+        {
+            "RdsResourceId": db_cluster_id,
+            "Port": 5432,
+            "Type": "TRACKED_CLUSTER",
+            "TargetHealth": {"State": "REGISTERING"},
+        }
+    ]
+
+    resp = rds_client.describe_db_proxy_targets(DBProxyName=proxy_name)["Targets"]
+    resp[0].pop("Endpoint", None)
+    resp[0].pop("TargetHealth", None)
+    assert resp == [
+        {"RdsResourceId": db_cluster_id, "Port": 5432, "Type": "TRACKED_CLUSTER"}
+    ]
+
+    rds_client.deregister_db_proxy_targets(
+        DBProxyName=proxy_name,
+        DBClusterIdentifiers=[db_cluster_id],
+    )
+
+    resp = rds_client.describe_db_proxy_targets(DBProxyName=proxy_name)
+    assert resp["Targets"] == []
+
+
+def test_modify_group(proxy_name):  # pylint: disable=redefined-outer-name
+    rds_client = boto3.client("rds", region_name=DEFAULT_REGION)
+
+    rds_client.modify_db_proxy_target_group(
+        TargetGroupName="default",
+        DBProxyName=proxy_name,
+        ConnectionPoolConfig={
+            "MaxConnectionsPercent": 27,
+            "SessionPinningFilters": ["filter1"],
+        },
+    )
+
+    group = rds_client.describe_db_proxy_target_groups(
+        DBProxyName=proxy_name,
+        TargetGroupName="default",
+    )["TargetGroups"][0]
+    assert group["ConnectionPoolConfig"]["MaxConnectionsPercent"] == 27
+    assert group["ConnectionPoolConfig"]["MaxIdleConnectionsPercent"] == 13
+    assert group["ConnectionPoolConfig"]["SessionPinningFilters"] == ["filter1"]
diff --git a/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py b/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py
index fc73f210d..759c44569 100644
--- a/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py
+++ b/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py
@@ -1203,3 +1203,40 @@ def test_get_resources_stepfunction():
     assert {"Key": "Name", "Value": "Alice"} in resp["ResourceTagMappingList"][0][
         "Tags"
     ]
+
+
+@mock_aws
+def test_get_resources_workspacesweb():
+    ww_client = boto3.client("workspaces-web", region_name="ap-southeast-1")
+    arn = ww_client.create_portal(
+        additionalEncryptionContext={"Key1": "Encryption", "Key2": "Context"},
+        authenticationType="Standard",
+        clientToken="TestClient",
+        customerManagedKey="abcd1234-5678-90ab-cdef-FAKEKEY",
+        displayName="TestDisplayName",
+        instanceType="TestInstanceType",
+        maxConcurrentSessions=5,
+        tags=[
+            {"Key": "TestKey", "Value": "TestValue"},
+            {"Key": "TestKey2", "Value": "TestValue2"},
+        ],
+    )["portalArn"]
+    rtapi = boto3.client("resourcegroupstaggingapi", region_name="ap-southeast-1")
+    resp = rtapi.get_resources(ResourceTypeFilters=["workspaces-web"])
+    assert len(resp["ResourceTagMappingList"]) == 1
+    assert {"Key": "TestKey", "Value": "TestValue"} in resp["ResourceTagMappingList"][
+        0
+    ]["Tags"]
+    resp = rtapi.get_resources(
+        ResourceTypeFilters=["workspaces-web"],
+        TagFilters=[{"Key": "TestKey3", "Values": ["TestValue3"]}],
+    )
+    assert len(resp["ResourceTagMappingList"]) == 0
+    ww_client.tag_resource(
+        resourceArn=arn, tags=[{"Key": "TestKey3", "Value": "TestValue3"}]
+    )
+    resp = rtapi.get_resources(
+        ResourceTypeFilters=["workspaces-web"],
+        TagFilters=[{"Key": "TestKey3", "Values": ["TestValue3"]}],
+    )
+    assert len(resp["ResourceTagMappingList"]) == 1
diff --git a/tests/test_secretsmanager/test_secretsmanager.py b/tests/test_secretsmanager/test_secretsmanager.py
index b98349b4c..fea06fa0a 100644
--- a/tests/test_secretsmanager/test_secretsmanager.py
+++ b/tests/test_secretsmanager/test_secretsmanager.py
@@ -1991,7 +1991,7 @@ def test_create_secret_with_tag_custom_id(set_custom_id):
     secret_suffix = "randomSuffix"
     secret_name = "secret-name"
 
-    client = boto3.client("secretsmanager")
+    client = boto3.client("secretsmanager", "us-east-1")
 
     secret = client.create_secret(
         Name=secret_name,
diff --git a/tests/test_stepfunctions/parser/test_stepfunctions.py b/tests/test_stepfunctions/parser/test_stepfunctions.py
index 91f977765..e0c9adf11 100644
--- a/tests/test_stepfunctions/parser/test_stepfunctions.py
+++ b/tests/test_stepfunctions/parser/test_stepfunctions.py
@@ -110,9 +110,9 @@ def test_version_is_only_available_when_published():
         PolicyName="allowLambdaInvoke",
         RoleName=role_name,
     )
-    kms_key_id = boto3.client("kms", region_name="us-east-1").create_key()[
-        "KeyMetadata"
-    ]["KeyId"]
+
+    kms = boto3.client("kms", region_name="us-east-1")
+    kms_key_id = kms.create_key()["KeyMetadata"]["KeyId"]
     sleep(10 if allow_aws_request() else 0)
 
     client = boto3.client("stepfunctions", region_name="us-east-1")
@@ -122,7 +122,7 @@ def test_version_is_only_available_when_published():
         encryption_config = {
             "kmsDataKeyReusePeriodSeconds": 60,
             "kmsKeyId": kms_key_id,
-            "type": "CUSTOMER_MANAGED_CMK",
+            "type": "CUSTOMER_MANAGED_KMS_KEY",
         }
         response = client.create_state_machine(
             name=name1,
@@ -165,3 +165,4 @@ def test_version_is_only_available_when_published():
         client.delete_state_machine(stateMachineArn=arn2)
         iam.delete_role_policy(RoleName=role_name, PolicyName="allowLambdaInvoke")
         iam.delete_role(RoleName=role_name)
+        kms.schedule_key_deletion(KeyId=kms_key_id, PendingWindowInDays=7)