pre-signed-url · L5

時鐘偏移

時鐘偏移:機器時間不準,URL 會出事

一句話:SigV4 用 X-Amz-Date 判斷時間,而 S3 會拒絕「時間戳跟 server 現在時間差太多」的請求(約 ±15 分鐘)——差太多就回 RequestTimeTooSkewed

為什麼時鐘這麼重要

pre-signed URL 的有效性靠 X-Amz-Date(簽的時間)+ X-Amz-Expires(有效多久)算出來。如果產 URL 的機器時鐘不準,簽出來的 X-Amz-Date 就偏了,可能:

此外,AWS S3 為了防重放攻擊,會拒絕「時間戳跟 server 時間相差太多」的請求——常見說法是約 ±15 分鐘這個容忍值各服務略有不同),超過就回 RequestTimeTooSkewed

最常見的兇手:容器

Docker 容器沒有硬體時鐘、又常沒跑 NTP,時間最容易漂。跑在裡面的服務簽出的 URL 就會莫名 RequestTimeTooSkewed——而你 code 一個字沒錯。

解法(照做就好)

參考來源