Как пройти аутентификацию в облачном хранилище из приложения Docker в Cloud Run - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть приложение Node.js в контейнере Docker, которое я пытаюсь развернуть в Google Cloud Run.

Я хочу, чтобы мое приложение могло читать / записывать файлы из мои корзины GCS, которые живут в одном проекте , и я не смог найти много информации вокруг него.

Это то, что я пробовал до сих пор:

1 , Надеюсь, что это работает из коробки

Ака инициализация без учетных данных, как в App Engine.

const { Storage } = require('@google-cloud/storage');

// ...later in an async function

const storage = new Storage();

// This line throws the exception below
const [file] = await storage.bucket('mybucket')
  .file('myfile.txt')
  .download()

Последняя строка выдает это исключение

{ Error: Could not refresh access token: Unsuccessful response status code. Request failed with status code 500"
    at Gaxios._request (/server/node_modules/gaxios/build/src/gaxios.js:85:23)

2. Надеюсь, что это работает сразу после установки роли IAM администратора хранилища для моих учетных записей службы Cloud Run.

Нет. Без разницы с предыдущим.

3. Копирование файла моих учетных данных в виде шага cloudbuild.yaml:

...
- name: 'gcr.io/cloud-builders/gsutil'
    args: ['cp', 'gs://top-secret-bucket/gcloud-prod-credentials.json', '/www/gcloud-prod-credentials.json']
...

Копирует файл просто отлично, но затем файл не виден из моего приложения. Я до сих пор не уверен, куда именно он был скопирован, но перечисление каталога /www из моего приложения не показывает его след.

4. Скопируйте мой файл учетных данных как Docker step

Подождите, но для этого мне нужно аутентифицировать gsutil, и для этого мне нужны учетные данные.

Итак ...

Какие опции у меня есть без загрузки файла учетных данных в систему управления версиями?

1 Ответ

0 голосов
/ 17 февраля 2020

Вот как мне удалось заставить его работать:

  • Код для инициализации клиентской библиотеки был верным. Здесь нет изменений по сравнению с первоначальным вопросом. Вам не нужно загружать какие-либо учетные данные, если корзина GCS принадлежит тому же проекту, что и ваша служба Cloud Run.
  • Я узнал, что учетная запись службы [myprojectid]-compute@developer.gserviceaccount.com (она же «Учетная запись службы Compute Engine по умолчанию») тот, который используется по умолчанию для запуска службы Cloud Run, если вы не укажете другую.
  • Я перешел на страницу Учетные записи службы и убедился, что упомянутая учетная запись службы включена (моя не была это то, чего мне не хватало).
  • Затем я пошел сюда , отредактировал разрешения для указанной учетной записи службы и добавил роль администратора объекта хранения.

Больше информации по этой статье: https://cloud.google.com/run/docs/securing/service-identity

...