Генерировать предварительно подписанный url sse-c s3

Как сгенерировать presigned url для получения URL-адреса объекта при использовании SSE-C в python?

Когда я загружаю файл, вот как выглядит мой код

secret = '?D(G+KbPeSgVkYp3s6v9y$B&E)H@McQf' # just pasting here. In general, it's usually derived from .env file 
return client.put_object(
        Bucket=os.environ.get('S3_DOCS_BUCKET'),
        Key='koushik.jpg', # giving a random name for .jpg image file 
        Body=file,
        ContentType=fileobject.content_type,
        SSECustomerAlgorithm='AES256',
        SSECustomerKey=secret,
    )

Теперь, это загружается нормально. Но проблема в том, что я не могу создать URL с предварительной подписью, как это

url = client.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': os.environ.get('S3_DOCS_BUCKET'),
            'Key': 'koushik.jpg',
            'SSECustomerAlgorithm': 'AES256',
            'SSECustomerKey': '?D(G+KbPeSgVkYp3s6v9y$B&E)H@McQf', # just pasting here
        },
        ExpiresIn=3600,
    )

Генерируемый ключ говорит, что подпись не совпадает. Сейчас поискал, в некоторых местах написано, что нужно предоставить и параметры SSECustomerKeyMD5. Я попробовал сделать это, но все равно не работает.

url = client.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': os.environ.get('S3_DOCS_BUCKET'),
            'Key': 'koushik.jpg',
            'SSECustomerAlgorithm': 'AES256',
            'SSECustomerKey': '?D(G+KbPeSgVkYp3s6v9y$B&E)H@McQf', # just pasting here,
            'SSECustomerKeyMD5': hashlib.md5('?D(G+KbPeSgVkYp3s6v9y$B&E)H@McQf'.encode('utf-8')).hexdigest()
        },
        ExpiresIn=3600,
    )

Я потратил несколько дней, но так и не смог найти рабочее решение. Если кто-нибудь может, пожалуйста, покажите рабочий пример file upload(a.k.a put_object), предоставив SSECustomerKeyMD5. Я думаю, это мне очень поможет. Заранее спасибо.

Вернуться на верх