Я сталкиваюсь с SignNotMatch
, когда генерирую предопределенный URL с помощью boto3 с кодом ниже:
session = Session(access_key, secret_key)
s3 = session.client('s3', endpoint_url=OSS_ENDPOINT, config=Config(signature_version='s3v4'))
url = s3.generate_presigned_url(
ClientMethod='get_object',
Params={
'Bucket': bucket,
'Key': key
}
)
, а затем анализирую запрос и отклоняю его (используйте AWS Go SDK signer.Presign
) в нашемпрокси, и я всегда получаю ошибку несоответствия.
Затем я открываю режим отладки в boto3 и добавляю журнал в AWS Go SDK, и обнаружил, что когда они вычисляют Canonical Request
, они используют другой способ:
Canonical Request:
HTTP Verb + '\n' +
Canonical URI + '\n' +
Canonical Query String + '\n' +
Signed Headers + '\n' +
"UNSIGNED-PAYLOAD"
В Go AWS SDK по умолчанию будет X-Amz-Content-Sha256=UNSIGNED-PAYLOAD
в Canonical Query String
, в то время как boto3 - нет.
Предполагается, или я использую его неправильно?