Unable to get Presigned Object URL Using AWS SDK f

2019-08-04 11:37发布

问题:

I am currently working with S3 and need to extract an S3 resource which has a timeout for streaming, so that the client cannot use the URL after a specific amount of time.

  1. I have already used some code provided in the documentation for "Presigned Object URL Using AWS SDK for .NET".
  2. The code will provide a temporary URL which can be used to download an S3 resource by anyone...but within a specific time limit.
  3. I have also used the Amazon S3 Explorer for Visual Studio, but it doesn't support URL generation for resources embedded with AWSKMS key.
  4. Also tried deleting the KMS Key for the S3 folder, but that is throwing an error.

If there is a possible link for deleting KMS keys can you also include it in your answers.

//Code Start

using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;

namespace URLDownload
{
    public class Class1
    {
        private const string bucketName = "some-value";
        private const string objectKey = "some-value";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USEast1;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            string urlString = GeneratePreSignedURL();
            Console.WriteLine(urlString);
            Console.Read();
        }
        static string GeneratePreSignedURL()
        {
            string urlString = "";
            try
            {
                //ServerSideEncryptionMethod ssem = new ServerSideEncryptionMethod("AWSKMS");
                GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
                {
                    BucketName = bucketName,
                    Key = objectKey,
                    Expires = DateTime.Now.AddMinutes(5),
                    Verb = 0,
                    ServerSideEncryptionKeyManagementServiceKeyId = "some-value",
                    ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
                };
                urlString = s3Client.GetPreSignedURL(request1);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            return urlString;
        }
    }
}

SignatureDoesNotMatch The request signature we calculated does not match the signature you provided. Check your key and signing method. AKIA347A6YXQ3XM4JQ7A

This is the error that I am getting when I am trying to access the generated URL and that is probably because the AWSKMS authentication is having some issue.

标签: c# amazon-s3