Bigquery:服务帐户json文件和应用程序默认凭据json文件有什么区别?

时间:2018-12-02 17:47:44

标签: google-cloud-platform google-bigquery

我很想知道服务帐户json文件和应用程序默认凭据json文件(GCP)之间是否有区别?

1 个答案:

答案 0 :(得分:1)

区别在于,一个是凭证,另一种是定位凭证的策略。

服务帐户凭据是授权Google API请求的推荐方法。这些凭据存储在文件(JSON或P12)中。但是,当在某些服务(例如Compute Engine)下运行时,会自动为实例创建凭据,并通过元数据服务器提供该凭据。

应用程序默认凭据(ADC)将搜索credentails。

  1. 如果设置了环境变量GOOGLE_APPLICATION_CREDENTIALS,则ADC将使用该文件作为该变量指向的凭据。
  2. 如果未设置该变量,则在Compute Engine,App Engine,Kubernetes Engine或Cloud Functions上运行时,将使用默认服务帐户。

如果前两个步骤未能找到有效的凭据,则ADC将失败并发生错误。

使用环境变量指定服务帐户凭据:

export GOOGLE_APPLICATION_CREDENTIALS="/mysecretpath/service_account.json"

ADC将自动从GOOGLE_APPLICATION_CREDENTIALS加载凭据

从json加载凭据(Python示例):

client = storage.Client.from_service_account_json(
        '/mysecretpath/service_account.json')

在Compute Engine上加载服务帐户默认凭据:

from google.auth import compute_engine
from google.cloud import storage
credentials = compute_engine.Credentials()
client = storage.Client(credentials=credentials, project=project)

在App Engine上加载服务帐户默认凭据:

from google.auth import app_engine
from google.cloud import storage
credentials = app_engine.Credentials()
client = storage.Client(credentials=credentials, project=project)

Kubernetes,Cloud Functions等的

ADC使用类似的方法通过上述示例创建凭据。

该示例使用ADC策略来定位凭据:

from google.cloud import storage
client = storage.Client()

还有另一种获取凭据的常用方法。这些是End User Credentials派生自OAuth 2.0 Flow。这些凭据要求您设置用于授权用户凭据的客户端密钥凭据。这是一种从用户帐户(例如Google Accounts)获取凭据的方法。

link将提供更多详细信息。