在不使用环境变量的情况下验证 Google Cloud vision(通过代码设置凭据)

Authenticate Google Cloud vision without using environment variables (set credentials by code)

我正在尝试从 AWS lambda 函数连接到 Google Cloud Vision,唯一的身份验证方法似乎是通过设置某个环境变量,是否有使用代码进行身份验证的方法(我是计划将凭证详细信息存储在 AWS Secrets Manager 中并将它们传递给 Python 中的 Google Vision 客户端)。

vision.ImageAnnotatorClient 的构造函数将 Credentials 作为第一个参数,但令人沮丧的是,我无法为一组服务帐户凭据构造这样一个对象!

希望有人能帮忙!

编辑 在这个 link 中,似乎 Python 以外的语言可以帮助解析凭据,但 Python 示例没有!

https://cloud.google.com/docs/authentication/production#auth-cloud-explicit-python

不容易找到:( 这是执行此操作的代码:

service_account_info_string = R"""{
    "type": "service_account",
    "project_id": "",
    "private_key_id": "",
    "private_key": "-----BEGIN PRIVATE KEY-----\n.......\n-----END PRIVATE KEY-----\n",
    "client_email": "....@.....iam.gserviceaccount.com",
    "client_id": "545................45648",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/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/....%40....iam.gserviceaccount.com"
    }
    """

service_account_info_json = json.loads(service_account_info_string)

service_account_creds = creds.from_service_account_info(service_account_info_json)

client = vision.ImageAnnotatorClient(credentials=service_account_creds)

您可以将您的凭据放入 service_account.json 文件并执行:

from google.cloud import vision

client = vision.Client.from_service_account_json('service_account.json')

我遇到了类似的问题,并通过结合其他答案解决了这个问题。

您需要使用 google.oauth2 中的 service_accountcredentials.json 文件的完整路径创建一个 credentials 对象。

然后在vision.ImageAnnotatorClient中使用这个credentials对象。

from google.cloud import vision
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file('PATH/TO/FILE.json')

client = vision.ImageAnnotatorClient(credentials=credentials)