如何限制GCS存储桶访问权限,同时保持Cloud CDN对所有人开放
如何将GCS存储桶设为私有,仅允许Cloud CDN访问并禁止直接路径访问
完全可以实现,具体操作步骤如下:
1. 确保GCS存储桶默认私有,关闭所有公共访问
- 登录GCP控制台,进入Cloud Storage找到目标桶。
- 切换到「权限」标签,删除所有包含
allUsers或allAuthenticatedUsers的权限条目,彻底移除公共访问权限。 - 启用Bucket Policy Only:在权限页面的「设置」选项中,勾选「启用Bucket Policy Only」,确保仅通过IAM权限控制桶的访问(ACL规则不再生效,避免遗留权限漏洞)。
2. 授权Cloud CDN关联的负载均衡服务账号访问桶
Cloud CDN必须配合HTTP(S)负载均衡使用,需要给负载均衡的服务账号授予GCS对象访问权限:
- 进入「网络服务」→「负载均衡」,找到关联Cloud CDN的负载均衡实例,查看其对应的后端服务。
- 复制后端服务使用的服务账号邮箱(若未自定义,默认格式为
service-PROJECT_NUMBER@cloud-lb-sa.iam.gserviceaccount.com,其中PROJECT_NUMBER是你的GCP项目编号)。 - 回到GCS桶的「权限」页面,点击「添加」,粘贴该服务账号邮箱,为其分配
roles/storage.objectViewer角色(仅需读取权限,满足CDN源站需求)。
3. (可选)通过IAM条件进一步限制访问范围
为了避免服务账号被其他场景滥用,可添加IAM条件,确保该账号仅能访问目标桶的对象:
在添加权限时,点击「添加条件」,输入以下规则(替换YOUR_BUCKET_NAME和YOUR_LB_SERVICE_ACCOUNT为实际值):
resource.name.startsWith("projects/_/buckets/YOUR_BUCKET_NAME/objects/") AND request.serviceAccountEmail == "YOUR_LB_SERVICE_ACCOUNT"
验证效果
完成配置后:
- 直接访问
storage.googleapis.com/your-bucket/your-file会返回403 Forbidden,说明直接路径访问已被禁止。 - 通过Cloud CDN配置的域名访问对应资源,能正常加载内容,说明CDN访问权限生效。
内容的提问来源于stack exchange,提问作者rafaelHTML
相关产品推荐
相关产品推荐

