如何通过TLS客户端认证限制Google Cloud Storage存储桶的读访问权限
实现Google Cloud Storage存储桶的TLS客户端认证访问控制
前提说明
Google Cloud Storage(GCS)本身不直接支持TLS客户端证书认证,需要通过**Cloud Load Balancer(CLB)**作为中转层,由CLB完成客户端证书的校验,再将合法请求转发到GCS存储桶。以下是完整实现步骤:
1. 生成客户端证书及CA根证书
如果没有现成的CA证书,先创建自签CA,再用它签发客户端证书:
- 生成CA私钥和证书:
openssl req -x509 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 365 -nodes -subj "/CN=MyGCS-CA" - 生成客户端私钥和证书签名请求(CSR):
openssl req -newkey rsa:4096 -keyout client.key -out client.csr -days 365 -nodes -subj "/CN=GCS-Client-01" - 用CA签发客户端证书:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
2. 配置Cloud Load Balancer
2.1 创建后端服务
- 进入Cloud Console的负载均衡页面,创建HTTPS负载均衡
- 后端服务选择Cloud Storage bucket,指定你的目标存储桶
- 配置后端服务的权限:确保LB的服务账号(默认是
service-<project-number>@gcp-sa-loadbalancing.iam.gserviceaccount.com)拥有storage.objects.get权限(可通过IAM或Bucket Policy授予)
2.2 配置SSL校验规则
- 在负载均衡的SSL配置中,上传你的**CA根证书(ca.crt)**到客户端CA列表
- 开启强制客户端证书校验,拒绝未提供有效客户端证书的请求
2.3 完成LB配置
- 配置URL映射,将所有请求路径转发到GCS后端服务
- 创建转发规则,分配外部IP地址,绑定LB的SSL服务证书(用于HTTPS连接)
3. 限制GCS存储桶的直接访问
- 修改存储桶权限,移除所有公开访问权限(确保
allUsers和allAuthenticatedUsers没有读权限) - 仅保留LB服务账号的读权限,确保所有访问必须通过LB中转
4. 使用wget测试下载
使用生成的客户端证书和私钥发起请求:
wget --certificate=client.crt --private-key=client.key https://<LB-外部IP>/<存储桶名称>/目标文件路径
- 若客户端证书合法,将成功下载文件
- 若证书无效/未被CA信任,会返回
403 Forbidden或SSL握手失败
关键注意事项
- 客户端证书必须由你上传到LB的CA根证书签发,否则会被拒绝
- 确保LB的服务账号拥有足够的GCS访问权限,避免后端返回403
- 不要将GCS存储桶设置为公开,否则会绕过LB的认证控制
内容的提问来源于stack exchange,提问作者user97576
相关产品推荐
相关产品推荐

