绑定服务账号的GCP计算实例使用ADC认证Bucket遇权限拒绝
GCP Compute Instance 中ADC 无法正常工作的排查点
检查实例的访问范围(Scopes)配置
只指定服务账号还不够,必须给实例配置对应的云存储访问范围,否则ADC会被限制权限。默认实例的API访问权限有限,要确保添加storage-full或storage-object-admin这类合适的范围。创建模板时需加上--scopes参数:gcloud beta compute instance-templates create-with-container \ --service-account my-service-account@my-project.iam.gserviceaccount.com \ --scopes https://www.googleapis.com/auth/devstorage.full_control也可以在实例模板编辑页的“云API访问范围”选项中,确认存储服务权限已开启。
验证容器是否继承实例服务账号权限
如果用容器部署,要确认容器没覆盖实例的服务账号环境变量。部分容器镜像可能自带GCP认证环境变量或启动脚本设置了其他凭证,导致ADC优先读取错误凭证。可在容器内执行命令检查:echo $GOOGLE_APPLICATION_CREDENTIALS若该变量有值,说明容器加载了其他凭证文件,需移除这个环境变量配置,让ADC自动通过实例元数据服务获取凭证。
确认元数据服务的访问权限
检查实例能否正常访问元数据服务,在实例命令行执行:curl http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token -H "Metadata-Flavor: Google"若无法获取令牌,可能是实例网络配置(如防火墙规则)阻止了对
169.254.169.254元数据服务地址的访问,需调整VPC规则允许该访问。检查Node.js客户端库版本
旧版GCP Node.js客户端库对ADC的支持可能存在问题,建议升级到最新稳定版。比如针对@google-cloud/storage库:npm install @google-cloud/storage@latest同时确保代码中没有手动指定其他凭证——不要设置
GOOGLE_APPLICATION_CREDENTIALS环境变量,也不要在初始化存储客户端时传入凭证参数,让ADC自动发现实例的服务账号凭证。
内容的提问来源于stack exchange,提问作者cis
相关产品推荐
相关产品推荐

