Google OCR on-prem安装出现PERMISSION_DENIED权限错误如何解决?
这个报错是OCR服务访问GCS存储桶拉取模型文件时触发了权限拒绝,即使配置了高权限服务账号仍报错的常见原因及排查方案如下:
E0820 09:07:22.051148 1 gcs_utils.cc:29] Failed to download: DownloadFileImpl(ReadObjectRangeRequest={bucket_name=vision_onprem_assets, object_name=e2e_line_model/00000785/assets.extra/LabelMap.textproto, disable-md5-hash=1}, /tmp/e2e_line_model/00000785/assets.extra/LabelMap.textproto): cannot open download source object - status.message=Permanent error in Read(): [PERMISSION_DENIED] [PERMISSION_DENIED]
可能的故障原因
- IAM权限传播延迟:刚为服务账号配置的权限存在最长5分钟的生效窗口期,实际未完成全网同步
- Secret配置异常:部署时创建的密钥Secret未正确挂载到OCR服务实例,或密钥文件内容在写入Secret时出现编码错误、内容截断
- 跨项目访问未授权:
vision_onprem_assets存储桶所属的GCP项目与服务账号所属项目不一致,存储桶侧未单独对该服务账号开放读取权限 - 上层策略拦截:GCP组织配置了VPC服务边界、IAM deny策略、资源访问限制类组织策略,即使服务账号本身具备Owner权限也会被上层规则拦截
- 对象级ACL限制:存储桶内的模型文件单独配置了访问控制列表,未继承桶级权限,导致服务账号无法读取指定的LabelMap.textproto文件
- 服务身份配置错误:OCR服务未加载你传入的服务账号密钥,而是使用了集群默认的未授权服务身份发起访问请求
排查步骤
- 首先验证服务账号本身的访问权限:本地安装gcloud命令行工具后,执行
gcloud auth activate-service-account --key-file=<你的本地密钥文件路径>完成身份激活,再执行gsutil cat gs://vision_onprem_assets/e2e_line_model/00000785/assets.extra/LabelMap.textproto,如果返回权限拒绝,说明服务账号本身确实没有该存储桶的读取权限;如果可以正常读取文件内容,说明问题出在集群部署配置环节 - 验证Secret配置正确性:如果是Kubernetes容器化部署,执行
kubectl describe secret <你创建的OCR服务密钥Secret名称>,确认密钥数据的Key名称与部署配置中指定的挂载Key完全一致;进入运行中的OCR服务Pod,查看挂载的密钥文件内容与本地的原始密钥文件是否完全匹配 - 核查存储桶权限配置:登录GCP控制台进入
vision_onprem_assets存储桶的权限管理页,确认你使用的服务账号邮箱在权限列表中,且具备storage.objects.get及以上权限,没有被同层级的Deny策略覆盖 - 排查上层限制规则:在GCP控制台的组织策略页面,核查是否存在
storage.restrictObjectGet、iam.allowedPolicyMemberDomains等限制类策略,确认未拦截该服务账号对GCS资源的访问请求 - 验证服务身份加载配置:查看OCR服务的部署配置文件,确认
GOOGLE_APPLICATION_CREDENTIALS环境变量指向的路径与密钥Secret的挂载路径完全一致,无拼写错误
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

