Я использую AWS SDK v2.3.44.0 для .NET 4.0 и пытаюсь создать предварительно подписанный URL-адрес, чтобы клиенты могли загружать объекты. Все объекты хранятся в корзине S3 и шифруются с использованием метода шифрования на стороне сервера aws:kms
.
Я использую метод AmazonS3Client
GetPreSignedURL
для создания URL-адреса.
Мой объект AmazonS3Client
создается так:
var client = new AmazonS3Client(new AmazonS3Config
{
RegionEndpoint = RegionEndpoint.USEast1,
SignatureVersion = "4"
});
Мой объект GetPresignedUrlRequest
создается так:
var request = new GetPreSignedUrlRequest
{
BucketName = bucket,
Key = key,
Expires = expires,
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
};
Теперь, когда я запускаю client.GetPreSignedURL(request)
, он генерирует такой URL-адрес (отформатированный для удобства чтения и очищенный):
https://{bucket}.s3.amazonaws.com/{key}?AWSAccessKeyId={access key}
&Expires={timestamp}
&Signature=AWS4-HMAC-SHA256%20Credential%3D{access key}%2F20150626%2Fus-east-1%2Fs3%2Faws4_request%2C%20SignedHeaders%3Dhost%3Bx-amz-content-sha256%3Bx-amz-date%3Bx-amz-server-side-encryption%2C%20Signature%3D{signature}
При переходе по этому URL-адресу я получаю XML-разбивку ошибки: SignatureDoesNotMatch
.
Этот URL отличается от того, который Amazon описывает в их документы. Кроме того, создание URL-адреса из Visual Studio с помощью подключаемого модуля AWS создает рабочий URL-адрес, который выглядит следующим образом (снова отформатированный и очищенный):
https://{bucket}.s3.amazonaws.com/{key}?
X-Amz-Expires=900
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential={access key}/20150626/us-east-1/s3/aws4_request
&X-Amz-Date=20150626T195148Z
&X-Amz-SignedHeaders=host
&X-Amz-Signature={signature}
Что я делаю неправильно, что мои предварительно подписанные URL-адреса не генерируются должным образом для загрузки aws:kms
зашифрованных файлов?