def _get_s3_presigned_put_url(s3_client, bucket, filepath, md5sum, lifetime_sec):
    """
    Creates a pre-signed URL for S3-like backends, e.g. Minio.

    Note that since our production object storage backend is GCS, we do not enforce or require
    any Content-MD5 value.

    :param: s3_client: an initialized S3 client. We will use this to create the presigned PUT url.
    :param: bucket: the bucket where the user can PUT their object.
    :param: filepath: the file path inside the bucket that the user can PUT their object.
    :param: md5sum: the base64-encoded MD5sum of the object the user is planning to PUT.
        This is ignored for this function and added solely to maintain API compatibility with other
        private presigned URL functions.
    :param: lifetime_sec: how long before the presigned URL expires, in seconds.
    """
    # S3's PUT Object parameters:
    # https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html
    method = "put_object"
    fields = {
        "Bucket": bucket,
        "Key": filepath,
    }

    response = s3_client.generate_presigned_url(
        ClientMethod=method,
        Params=fields,
        ExpiresIn=lifetime_sec,
    )

    return response