核心思路是:Google Cloud CDN 最近增加了对私有源认证(Private Origin Authentication)的支持,可以用来配置对私有 GCS Bucket 的访问 。关键在于使用 Internet NEG(网络端点组) + HMAC 密钥 来让 CDN 安全地访问私有 Bucket,用户无需直接访问 GCS。
整体架构如下:
用户请求 → 自定义域名(DNS A 记录)→ HTTPS 负载均衡器 → Cloud CDN(缓存命中/未命中)→ Backend Service(HMAC 认证)→ Internet NEG → 私有 GCS Bucket
导航到Cloud Storage
左侧菜单 → Storage → Cloud Storage
创建存储桶(选好区域后一直保持默认设置就可以)
[创建] → [创建存储桶]
名称: your-cdn-bucket(全局唯一)
位置类型: 区域(如: asia)
存储类别: 标准
访问控制: 统一
保护工具: 按需启用
上传文件
点击存储桶名称进入
上传文件或上传文件夹
或使用拖放上传

创建一个服务账号,赋予最小权限(例如自定义角色,仅包含 storage.objects.get 权限) Substack。然后去 Cloud Storage 的设置页面,切换到"互操作性(Interoperability)"标签,在"服务账号的 HMAC 密钥"部分为这个服务账号创建 HMAC 密钥。务必记录好 Access Key 和 Secret。

创建密钥时只展示一次,保存好。
、
回到存储桶界面, 在 Bucket 的权限(Permissions)标签页中,点击"授予访问权限",添加刚才创建的服务账号,并赋予 "Storage Legacy Object Reader" 角色 Blogdoang

导航到 Compute Engine → 网络端点组,创建一个 Internet NEG,默认端口设为 443,选择"通过完全限定域名和端口添加",域名填写 你的bucket名.storage.googleapis.com Blogdoang

进入 Network Services → Load Balancing,创建负载均衡器,选择 Application Load Balancer (HTTP/HTTPS),选择面向公众(external)和全局工作负载 Medium。
配置要点:
Frontend 配置:预留一个静态外部 IP 地址,协议选 HTTPS,并创建 Google 托管的 SSL 证书(填入你的自定义域名,如 cdn.yourdomain.com)。
Backend 配置:后端类型选择 "Internet network endpoint group",选择第四步创建的 Internet NEG,协议选 HTTPS。启用 Cloud CDN Blogdoang。
自定义请求头(关键!):在后端的高级配置中,添加自定义请求头,Header 名为 Host,值为 你的bucket名.storage.googleapis.com Substack。如果不设置这个,负载均衡器会把客户端的 Host 头(你的自定义域名)转发给 GCS,导致找不到 Bucket。
注意: GCP的CDN需通过负载均衡器配置
导航到负载均衡
左侧菜单 → [网络服务] → [负载均衡]
创建 全部保持默认设置即可,直到前端配置
[创建负载均衡器] → [开始配置]
选择 HTTP(S) 负载均衡 → [继续]

前端配置
名字写你方便记住是哪个项目的,选https,IP地址那里创建一个,创建这个IP也要自定义名字 写你方便记住是哪个项目的


https就必须要选择证书,如果你已经有自己的域名证书了就上传没有就用谷歌的
✅ 勾选启用从 HTTP 到 HTTPS 的重定向
选择创建后端服务,名字记住了稍后还要用

往下滑动是CDN配置,找到自定义请求头

主机和路径规则
简单宿主机和路径规则 保持默认即可,看下后端是你设置的名字就行

完成配置
[创建] → 等待负载均衡器创建完成(约2-5分钟)
这一步目前只能通过 CLI 完成 Medium。在 Cloud Shell 中执行:
谷歌云右上角打开shell界面

gcloud compute backend-services describe YOUR_BACKEND_SERVICE_NAME \ --global > backend-config.yaml 比如在负载均衡中我的后端服务名是 testhou。YOUR_BACKEND_SERVICE_NAME 就是指定你刚才创建的后端服务名 导出后端服务配置gcloud compute backend-services describe testhou \ --global > backend-config.yaml
# 编辑 backend-config.yaml,添加 securitySettings部分 securitySettings: awsV4Authentication: accessKeyId: "你的HMAC_ACCESS_KEY" accessKey: "你的HMAC_SECRET" accessKeyVersion: "v1" originRegion: "auto"
有一点要注意:导出的 YAML 文件里会包含一些自动生成的字段,在导入之前需要先删掉这几行(如果有的话):
creationTimestamp
fingerprint
id
selfLink
kind
这些是只读字段,不删的话导入会报错
删掉这些行:creationTimestamp、fingerprint、id、kind、selfLink、securityPolicy、usedBy。末尾加上了 securitySettings。

把 accessKeyId 和 accessKey 替换成你的 HMAC 密钥后,执行导入:
gcloud compute backend-services import testhou --source=backend-config.yaml --global
导航到Cloud DNS或是你自己域名所在的解析商添加解析
打开负载均衡器,选择htpps那条,打开能看到一个IP地址:443
指定解析


记录类型:A 记录 主机记录:oss 记录值:填写您在 GCP 上创建的 负载均衡器(Frontend)的静态 IP 地址
等待10-30分钟左右 SSL证书那里显示生效了,就可以访问你的自定义域名了,比如原来默认存储桶地址是https://storage.googleapis.com/txxxxxx/GCP.png
现在访问https://oss.abc.com/GCP.png
直接在搜索栏搜 "Cloud Armor"
点击 "创建策略",填写:
名称:比如 my-cdn-policy
策略类型:如果是给 Backend Bucket 用,选 "边缘安全策略(Edge security policy)";如果是给 Backend Service(HMAC 方案)用,选 "后端安全策略(Backend security policy)"
默认规则操作:选"允许"(先放行所有,然后加规则去拦截)

添加速率限制规则

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

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

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