我最近在.env
文件中更改了我的 aws 凭证
AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=
但是,在每个s3.getSignedUrl
请求中,SDK 都会使用以前的(根(凭据。
s3.getSignedUrl('putObject', s3Params, (err, data) => {
if (err) {
return res.end();
}
console.log(data) <---------------
const returnData = {
signedRequest: data,
awsImageUrl: `https://${S3_BUCKET}.s3.amazonaws.com/${imageName}`
};
res.json(returnData);
res.end();
});
此日志
https://my-bucket.s3.amazonaws.com/my-pic.png?AWSAccessKeyId=YYYYYYYYYYYYYYYContent-Type=image%2Fpng&Expires=SOMEDATE&Signature=SOMESIGNATURE&x-amz-acl=public-read
YYYYYYYYYYYYYYY
是以前的根凭据
SDK 是否有可能缓存此数据?
如果是这样,我该如何使其无效?
还是我忽略了代码中的某些内容?
AWS 文档
过期和刷新凭据
有时,凭据可能会在长时间运行的过程中过期 应用。在这种情况下,SDK 将自动尝试 如果凭据 类实现 refresh(( 方法。
如果要实现凭据存储位置,则需要 创建凭据类的子类并重写 刷新(( 方法。此方法允许从中检索凭据 后备存储,无论是文件系统、数据库还是某些网络 存储。该方法应重置 对象。
在查找凭据时,JavaScript 和 Node SDK 使用 AWS.CredentialProviderChain
。
默认凭据提供程序包括:
AWS.CredentialProviderChain.defaultProviders = [function () {
return new AWS.EnvironmentCredentials('AWS');
}, function () {
return new AWS.EnvironmentCredentials('AMAZON');
}, function () {
return new AWS.SharedIniFileCredentials();
}, function () {
if (AWS.ECSCredentials.prototype.getECSRelativeUri() !== undefined) {
return new AWS.ECSCredentials();
}
return new AWS.EC2MetadataCredentials();
}]
因此,它会在以下位置查找:
- 环境凭据
-
~/.aws/credentials
文件 -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
- 实例元数据