我在这种情况下,我需要有一个预先签署的网址,以生存约一个月。由于signature v4不能提供此功能,因此我决定暂时使用V2。
我将过期时间设置为一个月,但是由于某种原因,它在1天后过期了?(不知道确切的过期时间可能在同一天内)
<Code>ExpiredToken</Code>
<Message>The provided token has expired.</Message>
当我深入研究这个问题时,我发现问题可能出在X-Amz-Security-Token上,它太早到期了。但是我不知道如何为这个头设置一个值?(找不到任何关于它的信息)
Setup:它是一个lambda函数,可以生成一个带签名的url来从S3获取文件。一切都是通过cloudformation完成的。并使用JavaScript SDK完成
const s3 = new AWS.S3({
signatureVersion: 'v2',
region: 'eu-west-1'
});
const bucketParam = {
Bucket: 'test-bucket',
Key: 'testFile-1111-2222',
Expires: 2592000
};
任何帮助都将不胜感激
发布于 2019-12-19 20:06:08
我相信Lambda使用的IAM角色使用的是临时凭据,该凭据在链接之前过期。根据亚马逊网络服务,您需要生成带有IAM用户和signatureVersion =4的预签名URL,该链接将在7天后过期:
要创建有效期长达7天的预签名URL,请首先将IAM用户凭据(访问密钥和秘密访问密钥)指定给您正在使用的SDK。然后,使用AWS Signature Version 4生成预签名URL。
您应该尝试创建一个IAM用户来生成这些URL,并实际使用其凭据并承担其在Lambda函数中的角色(使用STS),以便生成URL。别忘了使用signatureVersion='s3v4'
。
希望这能有所帮助
发布于 2021-01-23 03:48:25
策略过期时间不能超过x-amz-date超过7天。
我没有找到解决这个问题的办法。这似乎是错误的,或者至少没有很好的记录。解决方法似乎是在将来设置"x-amz-date“。虽然不直观,但这似乎是允许的,这使您能够在未来进一步设置到期时间。
https://stackoverflow.com/questions/59405707
复制相似问题