使用Google Cloud Logging(Python)访问GAE日志文件

Jul*_*ian 5 google-app-engine google-cloud-platform

我们有一个正在运行的Google App Engine(GAE)服务,我们希望在服务器上下载日志以进行存档.

GAE有一个服务帐户,其凭据已作为JSON文件下载到我们的服务器.在我们的服务器上运行的以下代码尝试为日志记录服务创建客户端:

from google.cloud import logging
client = logging.Client.from_service_account_json('credentials.json')
Run Code Online (Sandbox Code Playgroud)

结果:

ValueError: Service account info was not in the expected format, missing fields token_uri, client_email.
Run Code Online (Sandbox Code Playgroud)

错误消息非常清楚,但不清楚的是为什么在为此目的创建的JSON文件中需要字段?我们是否使用了错误类型的服务帐户的凭据?

小智 5

您需要获取包含私钥凭据的服务帐户文件,它基本上与您拥有的文件不同.您可以访问https://console.developers.google.com/iam-admin/iam/获取或获取新的项目,然后选择您的项目,然后选择"服务帐户"并创建一个新的角色"查看器"例如用于项目(或使用已存在的项目并单击"创建新密钥")

"密钥"是一个json或p12文件,将在您创建帐户时使用(或使用"创建新密钥"),其中包含适用于您的代码的正确字段和凭据.

下载的"密钥"文件的示例结构(选择JSON时):

{
  "type": "service_account",
  "project_id": "zeta-handler-9999",
  "private_key_id": "123456789deedbeaf",
  "private_key": "-----BEGIN PRIVATE KEY-----\nREDACTED REDACTED...-----END PRIVATE KEY-----\n",
  "client_email": "projectname-service-account@zeta-handler-9999.iam.gserviceaccount.com",
  "client_id": "12345678909999",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/projectname-service-account%40zeta-handler-9999.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)

使用该"密钥"文件(python)的示例代码:

#!/usr/bin/env python
import google.auth
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file('downloaded_key.json')
scoped_credentials = credentials.with_scopes(['https://www.googleapis.com/auth/drive.metadata.readonly'])
Run Code Online (Sandbox Code Playgroud)