如何通过GCP GLB从私有GCS桶提供静态资源?
解决方案
一、保持GCS桶私有,通过Cloud CDN提供静态资源
可以通过为负载均衡的服务账号授权GCS访问权限实现,具体操作:
- 定位负载均衡后端服务的关联服务账号:全球外部LB默认使用的服务账号格式为
service-<你的项目数字编号>@gcp-sa-cloud-lb.iam.gserviceaccount.com,可在GCP控制台的负载均衡后端服务详情页查看。 - 为该服务账号授予GCS桶的Storage Object Viewer角色(或更细粒度的
storage.objects.get权限):- 进入GCS桶的IAM权限配置页面
- 添加成员,输入上述服务账号邮箱
- 选择角色
Cloud Storage > Storage Object Viewer - 保存配置
- 确保GCS桶启用Bucket Policy Only:该设置会禁用旧的ACL权限系统,避免IAM与ACL的权限冲突,确保仅IAM规则生效。
- 关联Cloud CDN与负载均衡:用户请求通过LB和CDN访问资源时,LB会使用授权的服务账号读取私有GCS桶内容,用户端无需额外权限,资源URL保持固定。
二、若必须设为公开,配置仅允许Google IP访问GCS桶
可通过IAM条件实现IP范围限制,步骤如下:
- 获取Google的IP范围:执行命令
dig _cloud-netblocks.googleusercontent.com txt,会返回Google所有的IP前缀列表。 - 在GCS桶的IAM页面添加权限规则:
- 添加成员
allUsers - 选择角色
Cloud Storage > Storage Object Viewer - 点击“添加条件”,设置规则:
- 条件类型选“IP地址”
- 运算符选“属于范围”
- 输入第一步获取的所有Google IP前缀(多范围用逗号分隔)
- 保存配置
- 添加成员
- 注意:Google的IP范围会动态更新,需定期检查并更新IAM条件中的IP列表,避免权限失效。
内容的提问来源于stack exchange,提问作者Nagri
相关产品推荐
相关产品推荐

