Backend Bucket + Signed URL Key + Cloud CDN 服务账号
这个方案用的是 Backend Bucket(而不是 Internet NEG + Backend Service),不需要 HMAC 密钥,也不需要创建服务账号。核心思路是让 Cloud CDN 自己的内置服务账号来读取私有 Bucket。
签名 URL 适合的场景:
比如付费内容下载、会员专属资源、临时分享链接等。你的后端应用程序在用户通过身份验证后,自动生成签名 URL 返回给用户,链接到期就失效。所以不是手动一个个去签,而是程序批量生成的。
程序使用签名网址文档 https://docs.cloud.google.com/cdn/docs/using-signed-urls?hl=zh-cn
1. 后端选择 "Backend Bucket"(后端存储桶) 而不是 "Backend Service",直接选你的 GCS Bucket,勾选启用 Cloud CDN

选择存储通

2. 给 Backend Bucket 添加一个签名密钥
# 生成密钥 打开控制台shell ,右上角激活cloud shell
head -c 16 /dev/random | base64 | tr +/ -_ > cdn-sign-key.key
# 添加签名密钥到后端存储桶 test04171就是刚创建后端服务的名字
gcloud compute backend-buckets add-signed-url-key test04171hou \
--key-file=cdn-sign-key.key \
--key-name=my-cdn-key
# 授权 Cloud CDN 服务账号读取你的 Bucket 。gs://test0417 是桶的名字
gcloud storage buckets add-iam-policy-binding gs://test0417 \
--member=serviceAccount:service-你的项目编号@cloud-cdn-fill.iam.gserviceaccount.com \
--role=roles/storage.objectViewer
gcloud projects describe $(gcloud config get-value project) --format="value(projectNumber)"
导航到Cloud DNS或是你自己域名所在的解析商添加解析
打开负载均衡器,选择htpps那条,打开能看到一个IP地址:443
指定解析


记录类型:A 记录 主机记录:oss 记录值:填写您在 GCP 上创建的 负载均衡器(Frontend)的静态 IP 地址
通过签名 URL 访问(URL 带有时效性签名参数)
在云shell 控制台 ,
gcloud compute sign-url \
"https://test.你的自定义域名.com/gcp.png" \
--key-name=my-cdn-key \
--key-file=cdn-sign-key.key \
--expires-in=1h
这条命令会输出一个带签名参数的完整 URL,用那个 URL 访问就能通了
用户拿到的链接类似:
https://test.abcd.com/GCP.png?Expires=1713500000&KeyName=my-cdn-key&Signature=xxxxx
直接在搜索栏搜 "Cloud Armor"
点击 "创建策略",填写:
名称:比如 my-cdn-policy
策略类型:如果是给 Backend Bucket 用,选 "边缘安全策略(Edge security policy)";如果是给 Backend Service(HMAC 方案)用,选 "后端安全策略(Backend security policy)"
默认规则操作:选"允许"(先放行所有,然后加规则去拦截)

添加速率限制规则

将策略绑定到指定后端服务,两种方式 1是在创建规则时绑定如下图,

2是负载均衡器 → 编辑 → 后端配置,在后端存储桶或后端服务的设置里,有一个 "Cloud Armor 安全策略" 下拉框,选择你刚创建的策略

缓存策略配置
负载均衡器 → [后端配置] → 点击后端存储桶名称
包含查询参数
排除特定头部
缓存静态内容
强制缓存模式
使用缓存键和缓存策略
缓存模式:
缓存键策略: