签名 URL、签名 Cookie 与地理限制
使用签名 URL 和 Cookie 限制高级内容的访问,并通过地理限制阻止特定国家或地区的用户。
签名 URL、签名 Cookie 与地理限制 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
限制 CloudFront 内容访问
默认情况下,CloudFront 会向任何知道 URL 的查看者提供内容。对于高级或私有内容(视频课程、付费软件下载、仅限会员的资源),您需要限制访问,确保只有获得授权的用户才能检索这些内容。
CloudFront 提供两种授权访问机制:签名 URL(一个 URL 授予对某个特定对象的访问权限)和签名 Cookie(一组 Cookie 授予对匹配某个路径模式的多个对象的访问权限)。这两种机制都使用通过 RSA 密钥对生成的加密签名。
CloudFront 签名网址
签名网址是包含加密签名的 CloudFront 网址,其中编码了到期时间以及可选的IP 地址限制。该网址只有在到期时间之前有效,并且只能从允许的 IP 地址访问(如果指定了 IP 限制)。到期后,CloudFront 会返回 403 Forbidden。
签名网址最适合以下场景:向单个用户授予某个特定文件的访问权限(例如生成的 PDF 报告)、提供有时效限制的下载链接,或者客户端无法设置 Cookie 时(例如移动应用或 RTMP 流式传输)。
# Generate a signed URL using AWS CLI (requires a CloudFront key pair)
aws cloudfront sign \
--url https://d1234abcdef.cloudfront.net/premium/video.mp4 \
--key-pair-id APKA1234567890 \
--private-key file://private-key.pem \
--date-less-than 2026-06-21T00:00:00ZCloudFront 签名 Cookie
签名 Cookie的工作方式与签名网址类似,但无需更改每个网址即可授予对多个文件的访问权限。用户通过身份验证后,您的服务器会生成三个 Cookie(CloudFront-Policy、CloudFront-Signature、CloudFront-Key-Pair-Id),并将其设置在浏览器响应中。之后,该浏览器向 CloudFront 发出的请求会包含这些 Cookie,从而获得对所有匹配内容的访问权限。
签名 Cookie 最适合以下场景:向已登录用户授予整个高级内容专区的访问权限(例如 /members/* 中的所有视频),或者您无法控制每个独立资源的网址格式时。
可信密钥组
要生成 CloudFront 签名,您需要一个CloudFront 密钥对。现代方法是使用可信密钥组:创建一个 RSA 密钥对,将公钥上传到 CloudFront,将其添加到密钥组,然后将该密钥组关联到需要签名访问的缓存行为。
私钥会安全地存储在签名服务器上(例如存储在 Secrets Manager 中)。用户通过身份验证后,服务器使用私钥为网址或 Cookie 策略签名。CloudFront 使用可信密钥组中对应的公钥验证签名。
# Upload a public key to CloudFront
aws cloudfront create-public-key \
--public-key-config '{
"Name": "MySigningKey",
"EncodedKey": "-----BEGIN PUBLIC KEY-----\n...<key>...\n-----END PUBLIC KEY-----",
"CallerReference": "2026-06-20-key"
}'简易策略与自定义签名网址策略
签名网址可以使用以下两种策略类型之一:
- 简易策略:最简单的形式,只指定资源网址和到期时间。签名体积小,易于生成。
- 自定义策略:更加灵活,可以指定带有可选通配符的资源网址(
https://d123.cloudfront.net/videos/*)、可选的开始时间(不早于),以及可选的 IP 地址限制。策略 JSON 会在网址中进行 Base64 编码。
对于简单的单文件链接,请使用简易策略;需要匹配通配符资源或基于 IP 的限制时,请使用自定义策略。
CloudFront 地理限制
地理限制(也称为地理区域限制)根据查看者所在的国家/地区,阻止或允许 CloudFront 提供内容。CloudFront 会使用第三方地理位置数据库,根据查看者的 IP 地址确定其所在国家/地区。
您可以针对每个分配配置地理限制,将其设置为允许列表(只有列出的国家/地区可以访问内容)或阻止列表(阻止列出的国家/地区)。受限国家/地区的用户会收到 HTTP 403 响应。地理限制是一种较为粗略的工具——它适用于整个分配,而不是单独的路径。
# Enable geo-restriction: block two countries
aws cloudfront update-distribution \
--id EDFDVBD6EXAMPLE \
--distribution-config '{
...existing config...
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "blacklist",
"Quantity": 2,
"Items": ["CN", "RU"]
}
}
}' \
--if-match ETVPDKIKX0DER地理限制与 Route 53 地理位置路由
CloudFront 地理限制和 Route 53 地理位置路由都使用地理信息,但用途不同:
- CloudFront 地理限制:在 CDN 层阻止或允许内容进行边缘提供,向被阻止的国家/地区返回 403;按分配应用
- Route 53 地理位置路由:根据地理位置将 DNS 查询路由到不同的终端节点(不同的服务器或页面),不会阻止访问,而是将用户重定向到不同的内容或基础设施
如果要进行访问控制(阻止整个国家/地区),请使用 CloudFront 地理限制;如果要将用户路由到适合其所在区域的内容或基础设施,请使用 Route 53 地理位置路由。
结合 S3 和 OAC 使用签名网址
完整的私有内容分发架构如下:
- S3 存储桶为私有(不允许公共访问)
- CloudFront 使用 OAC,因此只有该分配可以从 S3 读取内容
- 私有内容的缓存行为要求使用签名网址或签名 Cookie(已关联可信密钥组)
- 您的应用程序服务器对用户进行身份验证,并签发签名网址或签名 Cookie
- 用户只能通过具有时效限制的 CloudFront 签名网址访问内容
即使用户猜到或分享了 S3 网址,访问仍会被阻止。即使他们分享了 CloudFront 网址,该网址也会在配置的时间后过期。这种分层方法为数字内容提供了纵深防御。
字段级加密
字段级加密是 CloudFront 的一项高级功能,允许在将 HTTP POST 请求转发到源站之前,在边缘位置对其中的敏感数据字段进行加密。即使源站服务器遭到入侵,加密字段(例如信用卡号和 SSN)在没有对应私钥的情况下仍然无法读取。
CloudFront 会在边缘位置使用公钥加密指定字段。只有拥有匹配私钥的目标后端服务才能解密数据。字段级加密在已有 TLS 保护的处理流程中增加了一层防护。
基于令牌的访问控制模式
对于需要超越国家/地区级阻止功能、实现细粒度访问控制的动态应用程序,一种常见模式是使用 Lambda@Edge 进行基于令牌的访问控制:
- 用户通过 Cognito 或您的身份验证服务进行身份验证,并获得 JWT
- 用户在向 CloudFront 发出的请求中,将 JWT 作为查询参数或 Cookie 携带
- Lambda@Edge Viewer-Request 函数验证 JWT 的签名和声明
- 如果有效,Lambda@Edge 会将请求转发到源站;如果无效,则返回 401
这样可以完全在 CloudFront 边缘位置实现针对每个用户和每个资源的细粒度访问控制,无需让未经授权的请求到达源站。
实际应用场景总结
签名网址/签名 Cookie 和地理限制的考试场景模式:
- “购买文件的有时效下载链接” → 带到期时间的签名网址
- “已登录的高级用户访问 /premium/* 中的所有视频” → 带通配符策略的签名 Cookie
- “由于许可限制,阻止特定国家/地区的用户访问” → CloudFront 地理限制阻止列表
- “向不同国家/地区提供不同内容” → Route 53 地理位置路由 + 多个分配或源站
- “即使源站管理员也无法查看信用卡字段” → 字段级加密
快速检查
请测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。
课程回顾
在本课中,您学习了以下内容:签名网址通过到期时间和可选的 IP 限制来限制对单个文件的访问;签名 Cookie 在单次经过身份验证的会话中,授予对匹配路径模式的多个文件的访问权限;地理限制则在 CloudFront 分配级别阻止或允许整个国家/地区。接下来,我们将学习 CloudFront 与 WAF 和 Lambda@Edge 的结合使用。
常见问题解答
「签名 URL、签名 Cookie 与地理限制」课时是免费的吗?
是的 — 「签名 URL、签名 Cookie 与地理限制」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「签名 URL、签名 Cookie 与地理限制」这节课中我会学到什么?
使用签名 URL 和 Cookie 限制高级内容的访问,并通过地理限制阻止特定国家或地区的用户。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「签名 URL、签名 Cookie 与地理限制」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- CloudFront 分配与源站
- 缓存行为与 TTL 设置
- 签名 URL、签名 Cookie 与地理限制
- CloudFront 与 WAF 及 Lambda@Edge