【问题标题】:Amazon S3 & C# Signature does not match errorAmazon S3 和 C# 签名不匹配错误
【发布时间】:2014-09-23 10:06:33
【问题描述】:

我是 Amazon AWS 的新手,并尝试使用 SDK for .NET 使用如下所示的控制台应用程序将对象(在本例中为图像)放入(上传)到存储桶:

namespace AwsConsoleApp1
{
    class Program
    {
        static string bucketName = "bucketName";
        static string keyName = "keyName";
        static string filePath = "filePath";

        static IAmazonS3 client;
        public static void Main(string[] args)
        {

            NameValueCollection appConfig = ConfigurationManager.AppSettings;
            string accessKeyID = appConfig["AWSAccessKey"];
            string secretAccessKeyID = appConfig["AWSSecretKey"];

            try
            {
                using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKeyID, secretAccessKeyID, Amazon.RegionEndpoint.EUWest1))
                {
                    Console.WriteLine("Uploading an object");
                    WritingAnObject();
                }
            }
            catch (AmazonS3Exception s3Exception)
            {
                Console.WriteLine(s3Exception.Message, s3Exception.InnerException);
            }
            catch (AmazonSecurityTokenServiceException stsException)
            {
                Console.WriteLine(stsException.Message, stsException.InnerException);
            }
        }


        /// <summary>
        /// Put object to AWS bucket
        /// </summary>
        static void WritingAnObject()
        {
            try
            {
                PutObjectRequest putRequest1 = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    FilePath = filePath
                };

                PutObjectResponse response1 = client.PutObject(putRequest1);

            }
            catch (AmazonS3Exception amazonS3Exception)
            {
                if (amazonS3Exception.ErrorCode != null &&
                    (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                    ||
                    amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
                {
                    Console.WriteLine("Check the provided AWS Credentials.");
                    Console.WriteLine(
                        "For service sign up go to http://aws.amazon.com/s3");
                }
                else
                {
                    Console.WriteLine(
                        "Error occurred. Message:'{0}' when writing an object"
                        , amazonS3Exception.Message);
                }
            }
        }        
    }
}

我收到以下错误:

我们计算的请求签名与你提供的签名不匹配。请检查你的密钥和登录方式。

【问题讨论】:

  • 您需要确保您的密钥完全正确——它们之前或之后没有多余的空格,并确保没有多余的引号。
  • 是的,我完全正确地使用了这些键(我刚刚交叉检查了这个)。

标签: c# amazon-web-services amazon-s3


【解决方案1】:

this post得到我的答复。

我将Key 定义为"/folder/file.png",这是不正确的,因为它在Key 的开头有一个正斜杠。

定义Key的正确方法是"folder/file.png"

【讨论】:

    【解决方案2】:

    我遇到了与错误 403 相同的问题,并通过在我的 AWS IAM 控制台中创建新的访问密钥或凭证(访问密钥 ID、秘密访问密钥)来解决它。

    【讨论】: