Backblaze B2 offers a Native API and an S3-compatible API. Their authentication and request conventions are not interchangeable.
When using the B2 directory page, name the API family beside your SDK and endpoint. Then upload and retrieve one small object through that same path. Mixing a Native API example with S3 request signing can turn a straightforward configuration mismatch into a misleading investigation of bucket permissions.