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

FastAPI读取Google Secret Manager挂载密钥报文件不存在如何解决

问题描述

将serviceAccount.json存储至Google Secret Manager,使用Python FastAPI框架构建API服务,将密钥以磁盘形式挂载后,通过文件路径读取该密钥文件时,系统返回no such file(无对应文件)报错,相关代码、配置材料如下:

  • app.py代码截图:app.py代码截图
  • Dockerfile配置截图:Dockerfile配置截图
  • 密钥挂载配置截图:密钥挂载配置截图
排查解决步骤
  • 核对路径匹配性
    Google云服务(Cloud Run/Cloud Run Jobs/GKE等)挂载Secret Manager磁盘文件时,路径大小写完全敏感。需确认代码中写的读取路径和挂载配置里声明的路径完全一致:如果挂载路径填/secrets,密钥挂载后的文件名设为serviceAccount.json,则文件绝对路径为/secrets/serviceAccount.json,不要多写层级、不要拼错文件名大小写。
    禁止使用相对路径读取密钥,比如直接写open("serviceAccount.json")会默认从FastAPI进程的当前工作目录查找文件,一旦工作目录和预期不符就会触发找不到文件的报错,统一使用绝对路径读取。读取示例代码:
    from google.oauth2 import service_account
    # 替换为你实际配置的挂载绝对路径
    SERVICE_ACCOUNT_PATH = "/secrets/serviceAccount.json"
    creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_PATH)
    
  • 检查Dockerfile配置冲突
    不要在Dockerfile中提前创建挂载点同名目录、更不要将本地测试用的serviceAccount.json打包进镜像。云平台在挂载Secret时会自动创建对应挂载路径,如果镜像内提前存在同名路径,会导致Secret挂载失效,对应路径下找不到密钥文件。
  • 核对挂载配置项
    确认挂载时选择的是「以文件/磁盘形式挂载」,而非仅作为环境变量注入;同时确认服务运行时使用的服务账号,已被授予对应Secret的Secret Manager Secret Accessor权限,无权限时也会出现挂载异常。
    注意:Google Secret挂载到容器内默认是软链接形式,代码中不需要额外做硬文件类型校验,直接按普通文件流读取即可。
  • 快速定位路径方法
    若以上步骤排查后仍报错,可在FastAPI启动逻辑中加临时调试代码,打印挂载目录下的实际文件列表,对照日志输出的文件名调整读取路径即可,调试代码示例:
    import os
    # 替换为你配置的挂载根路径
    print("挂载目录下文件列表:", os.listdir("/secrets"))
    
    部署后查看服务启动日志,就能看到目录下实际存在的文件名,避免路径拼写错误。

内容的提问来源于stack exchange,提问作者Huang Kuan Wei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:39:21