Используйте облачный перевод Google с токеном и без ключевого файла - PullRequest
0 голосов
/ 18 июня 2020

При использовании API облачного перевода Google я не хочу использовать сгенерированный ключевой файл (https://cloud.google.com/translate/docs/basic/setup-basic?hl=de#node. js). Мы используем docker контейнеров, развернутых на случайном хосте. Я не могу добавить ключевой файл в свой исходный код для компиляции в контейнер docker по очевидным причинам безопасности, и я не хочу копировать ключевой файл на каждый хост, на котором развернут (или может быть развернут) контейнер!

Обычно API-интерфейсы подходят для токена, который я могу установить с помощью переменных среды управления контейнером, которые я затем могу применить ко всем экземплярам контейнера, когда мне нужно масштабировать его или переключать хосты, и т. Д. c. Предлагает ли Google такую ​​настройку? Я был бы в порядке, используя запросы REST, не нужно никаких SDK.

Мне кажется, что единственная альтернатива - добавить ключевой файл json в качестве переменной окружения в нашем gitlab и затем встроить файл в контейнер.

Или есть другой способ использования Google перевести API только с токеном и без ключевого файла?

1 Ответ

1 голос
/ 18 июня 2020

SDK Google может неявно использовать учетную запись службы по умолчанию (https://cloud.google.com/docs/authentication/production).

РЕДАКТИРОВАТЬ: Это может решить вашу проблему: https://github.com/googleapis/google-api-go-client/issues/185

Также: https://godoc.org/golang.org/x/oauth2/google#CredentialsFromJSON

Вот пример кода :

json := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS_JSON") // `{"type": "service_account", "project_id": "my-project", ...}`
ctx := context.Background()
jwtConfig, err := google.JWTConfigFromJSON([]byte(json), datastore.ScopeDatastore)
if err != nil {
    ...
}
ts := jwtConfig.TokenSource(ctx)
datastoreClient, err := datastore.NewClient(ctx, projectID, option.WithTokenSource(ts))

EDIT2:

Также проверьте https://github.com/googleapis/google-auth-library-nodejs#loading -credentials-from-environment-variables

Loading credentials from environment variables
Instead of loading credentials from a key file, you can also provide them using an environment variable and the GoogleAuth.fromJSON() method. This is particularly convenient for systems that deploy directly from source control (Heroku, App Engine, etc).

Start by exporting your credentials:

$ 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"
}'
Now you can create a new client from the credentials:

const {auth} = require('google-auth-library');

// load the environment variable with our keys
const keysEnvVar = process.env['CREDS'];
if (!keysEnvVar) {
  throw new Error('The $CREDS environment variable was not found!');
}
const keys = JSON.parse(keysEnvVar);

async function main() {
  // load the JWT or UserRefreshClient from the keys
  const client = auth.fromJSON(keys);
  client.scopes = ['https://www.googleapis.com/auth/cloud-platform'];
  const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`;
  const res = await client.request({url});
  console.log(res.data);
}

main().catch(console.error);
...