Amazon web services 为什么X-Amz-Signature在每次请求时都会更改?

Amazon web services 为什么X-Amz-Signature在每次请求时都会更改?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我正在使用基于AmazonS3AWS的服务。所有内容都在浏览器中运行,因此当我请求下载某个文件时,控制台网络输出(复制为获取)如下所示: await fetch("https://i90downloadv2.s3.amazonaws.com/1401b1b7-59fe-40d0-9bd0-3749825b42eb/terms.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20201020T152912Z&X-Amz-Si

我正在使用基于AmazonS3AWS的服务。所有内容都在浏览器中运行,因此当我请求下载某个文件时,控制台网络输出(复制为获取)如下所示:

await fetch("https://i90downloadv2.s3.amazonaws.com/1401b1b7-59fe-40d0-9bd0-3749825b42eb/terms.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20201020T152912Z&X-Amz-SignedHeaders=host&X-Amz-Expires=60&X-Amz-Credential=SECRETEKEY%2F20201020%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=846ae16634fae2a2c16434875d2920288921ec4b430c178460be835cc3b34f92", {
    "credentials": "omit",
    "headers": {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.5",
        "Upgrade-Insecure-Requests": "1"
    },
    "method": "GET",
    "mode": "cors"
});
正如我在docs.aws.amazon中所读到的,签名的方式如下(基于上述参数):

但是,当我试图在单独的NodeJs脚本中使用相同的参数重新创建相同的签名密钥时,最终的密钥不匹配

此外,当我在浏览器中对同一资源在同一天发出第二个请求时,签名密钥与前一个不同

我的问题是:

  • 如果使用相同的参数(“AWS4”+“SECRETKEY”、“20201020”、“us-east-1”、“s3”、“AWS4_请求”)构造同一天的密钥,为什么会有所不同

  • 我在浏览器中使用的服务是否正在构造文档中指定以外的签名密钥?例如,使用“20201020T152912Z”而不是“20201020”

  • signing_key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "SECRETKEY","20201020"),"us-east-1"),"s3"),"aws4_request")