Я использую AWS SDK v2.3.44.0 для .NET 4.0 и пытаюсь создать предварительно подписанный URL-адрес для клиентов для загрузки объектов. Все объекты хранятся в ведро S3 и шифруются с использованием метода шифрования на стороне сервера aws:kms
.Создание предварительно подписанного URL-адреса для объекта S3 с шифрованием KMS - что я делаю неправильно?
Я использую метод для создания 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 в their docs. Кроме того, генерации 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}
Что я делаю не так, что мои предварительно подписанные ссылки не быть правильно создан для загрузки зашифрованных файлов aws:kms
?