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

AWS Cloudfront-Signer V3自定义策略引发格式错误问题

解决AWS CloudFront Signer V3自定义策略的Malformed Policy错误

针对@aws-sdk/cloudfront-signer v3.254.0使用自定义策略时出现的Malformed Policy错误,核心问题出在策略结构不完整和参数传递错误,以下是修正后的实现方案:

关键错误点修正

  • 必须添加固定策略版本:AWS自定义策略要求强制包含Version: "2012-10-17"(固定值),缺失会直接触发格式错误。
  • 自定义策略模式下禁用url参数:getSignedCookies在传入policy参数时,不能同时传url,否则会导致参数冲突。
  • 确保AWS:EpochTime为整数:需用Unix时间戳(秒级)的数值类型,避免转为字符串。

完整工作代码示例

// 计算过期时间:5小时后的Unix时间戳(秒级整数)
const expTime = Math.floor(Date.now() / 1000) + 5 * 60 * 60;

// 构造符合AWS规范的自定义策略
const policyString = JSON.stringify({
  Version: "2012-10-17", // 固定必填版本号
  Statement: [
    {
      Effect: "Allow", // 显式指定权限效果
      Resource: "https://cloudfront.example.com/path-to-file/*", // 通配符路径授权
      Condition: {
        DateLessThan: { "AWS:EpochTime": expTime }
      }
    }
  ]
});

// 生成签名Cookie(无需传入url参数)
const signedCookie = getSignedCookies({
  keyPairId: "MY-KEYPAIR-ID",
  privateKey: "MY-PRIVATE-KEY", // 确保为完整PEM格式,包含首尾标识行
  policy: policyString
});

// 构造响应(Cookie配置强化安全属性)
const response = {
  statusCode: 200,
  isBase64Encoded: false,
  body: JSON.stringify({ url: url, bucket: bucket, key: key }),
  headers: {
    "Content-Type": "application/json",
    "Access-Control-Allow-Origin": "https://example.com",
    "Access-Control-Allow-Credentials": true,
    "Access-Control-Allow-Methods": "OPTIONS,POST,GET",
  },
  multiValueHeaders: {
    "Set-Cookie": [
      `CloudFront-Policy=${signedCookie["CloudFront-Policy"]}; Domain=example.com; Path=/${path}/; Secure; HttpOnly`,
      `CloudFront-Signature=${signedCookie["CloudFront-Signature"]}; Domain=example.com; Path=/${path}/; Secure; HttpOnly`,
      `CloudFront-Key-Pair-Id=${signedCookie["CloudFront-Key-Pair-Id"]}; Domain=example.com; Path=/${path}/; Secure; HttpOnly`,
    ],
  },
};

额外注意事项

  • 私钥格式验证:私钥必须是未格式化的完整PEM字符串,建议从环境变量读取,避免硬编码。
  • Cookie安全属性:添加Secure(HTTPS场景必填)和HttpOnly属性,防范XSS风险。
  • 路径匹配一致性:Cookie的Path需与策略中Resource的路径前缀完全匹配,确保Cookie能正确附加到目标请求。
  • CloudFront行为配置:确认CloudFront对应行为已启用“限制查看器访问”,并关联正确的密钥组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:51:31