生成数据密钥错误签名在 AWS KMS 上过期?

generateDataKey error Signature expired on AWS KMS?

我正在与我的客户合作,所以我克隆了 git 存储库并构建了使用 AWS KMS 生成数据密钥的应用程序。

在实时服务器上一切正常,但当我在本地环境中失败时。

这是代码片段和错误结果。

const AWS = require('aws-sdk');
AWS.config.update({region:'eu-central-1'});
const kms = new AWS.KMS({ apiVersion: '2014-11-01' });

kms.generateDataKey({
 KeyId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
 KeySpec: 'AES_256',
}).promise()
.catch(err => {
 console.error('generateDataKey error', err.message, err.stack);
 throw err;
})
.then(data => {
 console.log(data);
});

有没有办法解决这个错误?

"GenerateDataKey 错误签名已过期...."

当您发送使用 AWS SigV4 协议签名的请求(至 KMS 或任何其他 AWS 服务)时,请求包含签名生成时的时间戳。公差为 5 分钟。这种机制的存在是为了使重放攻击更加困难(它们实际上具有更小的 window 来执行)。更多信息 here.

由于同一请求在您的服务器上运行良好,但在本地失败,我认为您本地工作区的时钟已关闭超过五分钟。