Google Secret Manager API添加密钥版本报错:'ProtoType'无DESCRIPTOR属性
问题解决思路
1. 修正add_secret_version的参数格式
你代码里把parent包装成了字典{"name": "..."},但Secret Manager客户端要求parent直接传入字符串格式的资源路径,不需要额外包装。这是触发ProtoType错误的直接原因。
修正后的代码片段:
### update the secret # 直接传入字符串格式的parent路径,无需字典包装 parent = f"projects/{project_id}/secrets/{SC_secret_name}" updatepayload = creds.to_json().encode("UTF-8") crc32c = google_crc32c.Checksum() crc32c.update(updatepayload) response = SMclient.add_secret_version( request={ "parent": parent, # 改为字符串格式 "payload": {"data": updatepayload, "data_crc32c": int(crc32c.hexdigest(), 16)}, } )
2. 解决Protobuf版本冲突导致的部署卡住问题
GCF环境预装了特定版本的Protobuf依赖,手动在requirements.txt里强制更新版本会引发依赖冲突,导致部署无限期卡住。你需要:
- 移除
requirements.txt中手动指定的protobuf版本,改用GCF兼容的依赖声明 - 若必须指定版本,使用与GCF预装版本兼容的范围,示例
requirements.txt:
这些包会自动拉取兼容的Protobuf版本,避免冲突。google-cloud-secret-manager>=2.0.0,<3.0.0 google-auth>=2.0.0 google-crc32c>=1.0.0
3. 验证GCF权限
确保你的Cloud Function服务账号拥有secretmanager.versions.add权限(可通过绑定Secret Manager Version Adder或Secret Manager Admin角色实现),避免后续出现权限类错误。
内容的提问来源于stack exchange,提问作者Steven Alsheimer
相关产品推荐
相关产品推荐

