You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFront getSignedCookies自定义策略报错排查求助

解决CloudFront getSignedCookies自定义策略报错问题

问题根源

你遇到的两个错误核心原因:

  • 第一个TypeError:getSignedCookies要求policy参数必须是字符串格式的策略文档,不能直接传入JavaScript对象。
  • 第二个Invalid policy错误:你将字符串化后的策略赋值给了自定义变量stringPoly,但API规定的参数名必须是policy,参数名不匹配导致策略无法被识别。
  • 额外隐藏问题:策略中AWS:EpochTime需要传入秒级Unix时间戳,你当前用getTime()获取的是毫秒值,会导致过期时间远超出预期,甚至可能引发策略验证失败。

修正后的完整代码

import { getSignedCookies } from "@aws-sdk/cloudfront-signer";

let originalString = process.env.S3_PRIVATEKEY_CLOUDFRONT;
let privateKey = originalString.replace(/\\n/g, "\n");
const keyPairId = "XXXXXXXXXX";
const currentDate = new Date();
const oneHourFromNow = new Date(currentDate.getTime() + 60 * 60 * 1000);

const policy = {
  "Statement": [
    {
      "Resource": "https://xxxxxxxxxx.cloudfront.net/harry/*",
      "Condition": {
        "DateLessThan": {
          // 转换为秒级Unix时间戳
          "AWS:EpochTime": Math.floor(oneHourFromNow.getTime() / 1000)
        }
      }
    }
  ]
};

// 将策略对象转为JSON字符串,保持参数名为policy
const signedCookie = getSignedCookies({
  keyPairId,
  policy: JSON.stringify(policy),
  privateKey,
});

return signedCookie;

关键注意事项

  • Resource字段必须与CloudFront域名及资源路径完全匹配,通配符*仅能用于路径末尾。
  • 私钥替换换行符的逻辑要确保正确,保证签名过程能读取到合法的密钥格式。

内容的提问来源于stack exchange,提问作者Emanuele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:35:22