You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang访问GCS本地正常GKE Pod报403权限错误求助

GKE Pod访问GCS报403 Forbidden权限问题排查方案

问题重现

本地通过JSON凭证读取GCS存储桶文件正常,但GKE Pod中执行时触发权限错误:

googleapi: Error 403: Caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., forbidden

核心代码片段:

bkt := configs.GCPClient.Bucket(bucketName)
it := bkt.Objects(ctx, nil)

for {
    attrs, err := it.Next()
    if err == iterator.Done {
        break
    }

    if err != nil {
        return files
    }
    fmt.Println(attrs.Name)
}

排查步骤

  • 确认Pod使用的服务账号
    执行命令查看Pod关联的K8s服务账号:

    kubectl describe pod <你的Pod名称> | grep ServiceAccount
    

    若未手动指定,Pod会默认使用所在命名空间的default服务账号。

  • 检查GCP服务账号的IAM权限
    如果使用Workload Identity,先确认K8s服务账号已绑定对应的GCP服务账号,再检查该GCP服务账号是否拥有storage.objects.list权限(可通过roles/storage.objectViewer等预设角色或自定义角色赋予):

    # 查看GCP服务账号的IAM绑定关系
    gcloud iam service-accounts get-iam-policy <GCP服务账号邮箱>
    # 直接查看存储桶的IAM权限配置
    gsutil iam get gs://<你的存储桶名称>
    

    确保输出结果中包含目标服务账号,且关联的角色覆盖所需权限。

  • 排查凭证加载逻辑
    本地运行依赖本地JSON凭证文件,但GKE环境下应通过元数据服务自动获取凭证。检查代码是否硬编码了本地JSON凭证路径或强制指定GOOGLE_APPLICATION_CREDENTIALS环境变量:

    • 若存在这类硬编码配置,需删除相关代码,让GCP SDK自动使用Pod所属服务账号的凭证。
  • 验证权限生效状态
    IAM权限变更通常需要1-5分钟才能完全生效,若刚完成权限配置,等待片刻后重新测试Pod。

  • 检查节点服务账号权限(未启用Workload Identity时)
    若未启用Workload Identity,Pod会默认使用GKE节点的服务账号。检查该节点服务账号是否拥有存储桶的访问权限:

    gcloud compute service-accounts describe <节点服务账号邮箱>
    

内容的提问来源于stack exchange,提问作者Krushna Bate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:20:32