使用Heroku安全使用Google服务帐户

时间:2018-04-05 05:36:43

标签: node.js heroku google-cloud-platform

我尝试将Google Cloud Vision API与Node一起使用,并在Heroku上运行该应用程序。这个例子非常接近:

https://github.com/googleapis/nodejs-vision

但是,Google API希望通过读取包含服务帐户的文件进行身份验证,并使用环境变量读取文件的位置。有没有办法使用Heroku安全地存储此文件,或以某种方式使用Heroku Config Vars?

3 个答案:

答案 0 :(得分:3)

NodeJS Google Auth Library的文档实际上提供了how to load credentials from environment variables的完整示例。具体来说,它说在使用类似Heroku的系统时建议采用这种方法,所以我认为你一定要看看它。

下载服务帐户的凭据后,使用以下格式,您可以按照以下步骤使用它们:

  1. 使用process.env['NAME_OF_YOUR_ENV_VAR'];
  2. 加载环境变量
  3. 使用JSON.parse(keysVar);
  4. 将变量解析为JSON
  5. 使用GoogleAuth.fromJSON()方法使用密钥授权请求。
  6. 凭据格式:

    $ export CREDS='{
      "type": "service_account",
      "project_id": "your-project-id",
      "private_key_id": "your-private-key-id",
      "private_key": "your-private-key",
      "client_email": "your-client-email",
      "client_id": "your-client-id",
      "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": "your-cert-url"
    }'
    

    您可以在我在第二个链接中共享的Google Auth文档(或直接在this example file中)中找到有关如何使用它们的更详细示例,因此请随意根据您的用例进行调整。方便。

答案 1 :(得分:1)

@dsesto的答案效果很好。以前,另一种解决方案是使用buildpack读取环境变量,然后将其写入文件,但是引入Heroku dot-profiles后,您可以在dyno启动时实际读取环境变量并将其写入JSON文件。这样可以使JSON文件脱离版本控制,并且AFAIK应该是安全的(如果我对此有误,请纠正我)。

# .profile
echo ${GOOGLE_CREDENTIALS} > /app/google-credentials.json

答案 2 :(得分:0)

我建议您检查这个SO问题,它可以解决上述问题,而不会给Google带来太多麻烦。 https://stackoverflow.com/a/53732919/5037755