如何用gsutil生成的boto文件认证GCS Python客户端
操作方案
Google Cloud 官方Python Storage客户端不会原生直接读取gsutil生成的boto配置文件完成认证,你可以通过以下两种适配方式,在未预设gcloud凭证的自动化平台上完成身份校验:
方案1:提取boto文件内的有效凭证,显式传入客户端(官方推荐)
你生成的boto文件一般存储两类GCS认证信息,对应不同的加载逻辑:- 若boto文件内配置了
gs_service_key_file字段,说明使用服务账号JSON密钥认证,直接提取该字段对应的密钥文件本地路径,用服务账号凭证类加载即可:
from google.cloud import storage from google.oauth2 import service_account # 替换为boto文件中gs_service_key_file字段对应的实际路径 KEY_PATH = "/runtime/mounted/path/service-account.json" credentials = service_account.Credentials.from_service_account_file(KEY_PATH) # 初始化客户端,完全跳过环境默认凭证推断逻辑 client = storage.Client(credentials=credentials) # 后续可正常执行Google Play报告下载逻辑,例: # bucket = client.get_bucket("your-play-report-bucket") # blobs = bucket.list_blobs(prefix="stats/installs/")- 若boto文件内配置的是
aws_access_key_id、aws_secret_access_key字段,说明使用GCS HMAC密钥认证,提取两个字段的值后用对应凭证类加载:
from google.cloud import storage from google.auth import aws # 替换为boto文件中提取的HMAC密钥值 ACCESS_ID = "your-hmac-access-id" SECRET_KEY = "your-hmac-secret-key" credentials = aws.Credentials( access_key_id=ACCESS_ID, secret_access_key=SECRET_KEY ) # 注意HMAC认证需要显式传入你的GCP项目ID client = storage.Client( credentials=credentials, project="your-gcp-project-id" )- 若boto文件内配置了
方案2:通过环境变量指定boto文件路径(兼容旧逻辑)
如果你不想手动解析boto文件,可以在Python脚本启动前配置BOTO_CONFIG环境变量,值为boto配置文件的绝对路径,该方式需要提前安装boto依赖包,仅对基于boto实现的GCS访问逻辑生效,不推荐在新写的脚本中使用:# 安装依赖 pip install boto # 配置环境变量后启动脚本 export BOTO_CONFIG=/runtime/mounted/path/.boto python download_play_report.py
注意:自动化平台部署时不要硬编码凭证内容,建议将服务账号密钥、boto配置存入平台的密钥管理服务,运行时动态挂载到本地文件系统后再读取,避免凭证泄露。
内容的提问来源于stack exchange,提问作者Muhamad Iqbal
相关产品推荐
相关产品推荐

