bisected botocore versions down to good=botocore-1.27.96 bad=botocore-1.28.0
botocore debug log output from good=botocore-1.27.96:
botocore.endpoint [DEBUG] Making request for OperationModel(name=CreateBucket) with params: {'url_path': '/yournamehere-vosguleoy6r2ngj1-1', 'query_string': {}, 'method': 'PUT', 'headers': {'User-Agent': ''}, 'body': b'', 'url': 'http://localhost:8000/yournamehere-vosguleoy6r2ngj1-1', 'context': {'client_region': 'us-east-1', 'client_config': <botocore.config.Config object at 0x7fc207fe6fa0>, 'has_streaming_input': False, 'auth_type': None, 'signing': {'bucket': 'yournamehere-vosguleoy6r2ngj1-1'}}}
botocore.hooks [DEBUG] Event request-created.s3.CreateBucket: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7fc207fe6f10>>
botocore.hooks [DEBUG] Event choose-signer.s3.CreateBucket: calling handler <bound method S3EndpointSetter.set_signer of <botocore.utils.S3EndpointSetter object at 0x7fc207fe6070>>
botocore.hooks [DEBUG] Event choose-signer.s3.CreateBucket: calling handler <function set_operation_specific_signer at 0x7fc2099101f0>
botocore.hooks [DEBUG] Event before-sign.s3.CreateBucket: calling handler <bound method S3EndpointSetter.set_endpoint of <botocore.utils.S3EndpointSetter object at 0x7fc207fe6070>>
botocore.utils [DEBUG] Using S3 path style addressing.
botocore.auth [DEBUG] Calculating signature using hmacv1 auth.
botocore.auth [DEBUG] HTTP request method: PUT
botocore.auth [DEBUG] StringToSign:
PUT
Tue, 22 Nov 2022 16:54:57 GMT
/yournamehere-vosguleoy6r2ngj1-1
same test case output from bad=botocore-1.28.0:
botocore.endpoint: DEBUG: Making request for OperationModel(name=CreateBucket) with params: {'url_path': '', 'query_string': {}, 'method': 'PUT', 'headers': {'User-Agent': ''}, 'body': b'', 'auth_path': '/yournamehere-cn8gsp4kpyz4mhoo-1/', 'url': 'http://localhost:8000/yournamehere-cn8gsp4kpyz4mhoo-1', 'context': {'client_region': 'us-east-1', 'client_config': <botocore.config.Config object at 0x7f24a7ccb370>, 'has_streaming_input': False, 'auth_type': None, 'signing': {}, 's3_redirect': {'redirected': False, 'bucket': 'yournamehere-cn8gsp4kpyz4mhoo-1', 'params': {'Bucket': 'yournamehere-cn8gsp4kpyz4mhoo-1'}}}}
botocore.hooks: DEBUG: Event request-created.s3.CreateBucket: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7f24a7ccb2e0>>
botocore.hooks: DEBUG: Event choose-signer.s3.CreateBucket: calling handler <function set_operation_specific_signer at 0x7f24a9741550>
botocore.hooks: DEBUG: Event before-sign.s3.CreateBucket: calling handler <function remove_arn_from_signing_path at 0x7f24a9746790>
botocore.auth: DEBUG: Calculating signature using hmacv1 auth.
botocore.auth: DEBUG: HTTP request method: PUT
botocore.auth: DEBUG: StringToSign:
PUT
Tue, 22 Nov 2022 16:51:20 GMT
/yournamehere-cn8gsp4kpyz4mhoo-1/
the bad version adds a trailing slash to the request path in the StringToSign, which corresponds to the new 'auth_path' parameter in the OperationModel