为Google Cloud SQL创建授权令牌及Stack Driver日志获取技术问询
获取Google Cloud SQL日志查询所需的授权令牌生成方法
我来帮你梳理下怎么生成调用Stackdriver Logging API所需的授权令牌,不管是开发测试还是生产环境都有对应的方案:
一、开发测试阶段:用gcloud CLI快速生成临时令牌
这是最方便的本地调试方式:
- 首先确保你已经安装并初始化了gcloud CLI,登录你的Google Cloud账号:
gcloud auth login - 设置当前工作的项目ID(替换成你的实际项目ID):
gcloud config set project YOUR_PROJECT_ID - 直接生成访问令牌(有效期约1小时):
你还可以把这个命令直接嵌入到curl调用里,省去手动复制的麻烦:gcloud auth print-access-tokencurl --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header 'Content-Type: application/json' \ --header 'x-referer: https://developers.google.com ' \ -X POST \ --data '{"resourceNames":["projects/YOUR_PROJECT_ID"],"filter":"logName=\"projects/YOUR_PROJECT_ID/logs/cloudsql.googleapis.com%2Fmysql-general.log\""}' \ "https://content-logging.googleapis.com/v2/entries:list?fields=entries(jsonPayload)"
二、生产环境:用服务账号生成稳定令牌
如果是应用程序长期调用,建议使用服务账号,无需手动登录维护:
- 先在Google Cloud控制台创建一个服务账号,给它分配Logs Viewer(
roles/logging.viewer)权限,确保它拥有读取Cloud SQL日志的权限 - 下载服务账号的JSON密钥文件(比如命名为
service-account-key.json) - 激活服务账号并生成令牌:
gcloud auth activate-service-account --key-file=service-account-key.json gcloud auth print-access-token - 或者直接用curl调用OAuth 2.0端点生成令牌(不依赖gcloud CLI):
这个命令会返回包含curl -X POST "https://oauth2.googleapis.com/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=$(python -c 'import jwt, time, json; key = json.load(open("service-account-key.json")); payload = {"iss": key["client_email"], "scope": "https://www.googleapis.com/auth/logging.read", "aud": "https://oauth2.googleapis.com/token", "exp": time.time() + 3600, "iat": time.time()}; print(jwt.encode(payload, key["private_key"], algorithm="RS256"))')"access_token的JSON响应,提取后即可用于你的curl调用。
关键注意事项
resourceNames参数必须写成projects/YOUR_PROJECT_ID格式,不能只用单纯的项目名称- Cloud SQL的日志名称格式要准确,比如MySQL通用查询日志是
projects/YOUR_PROJECT_ID/logs/cloudsql.googleapis.com%2Fmysql-general.log,注意URL编码或者用双引号包裹 - 令牌默认有效期为1小时,生产环境中需要定时刷新令牌以保证服务可用性
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

