Аутентификация gcloud SDK в Cloud Run с учетными данными пользователя - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я работаю над проектом, который автоматически настроит новый проект Firebase / Gcloud. Он сильно зависит от Firebase CLI и gcloud SDK с учетными данными пользователя для нескольких обязательных шагов.

Сейчас я пытаюсь переместить этот проект в Docker контейнер на облачном беге. Мне удалось аутентифицировать интерфейс командной строки Firebase с учетными данными пользователя, используя их встроенную команду CI на основе токенов .

Я хотел бы спросить, можно ли аутентифицировать gcloud SDK с помощью аналогичный метод.

Почему учетные записи служб, вероятно, не будут работать

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

  1. Используйте Firebase CLI для создания нового проекта gcloud / firebase
  2. Используйте gcloud SDK для добавления IAM-привязок, включить API, биллинг и т. д. c. для нового проекта

Я не могу использовать учетную запись службы для проверки подлинности запросов на шаге 2, так как проект только что был создан, и поэтому у меня еще не было возможности предоставить какую-либо услугу учетные записи разрешают редактировать или скачивать файлы ключей. Вот почему я хотел бы пройти проверку подлинности с помощью токена, представляющего учетные данные пользователя.

По умолчанию среда Cloud Run фактически имеет доступ к учетной записи службы для проекта, в котором размещен контейнер. Поскольку эта учетная запись службы не имеет разрешения на редактирование вновь созданного проекта, использовать ее для аутентификации бессмысленно.

Пока что идей нет

  1. gcloud auth login --no-launch-browser - Требуется взаимодействие с пользователем, и ключ, который предоставляется, кажется уникальным для сеанса входа в систему
  2. Поскольку интерфейс командной строки Firebase аутентифицируется с использованием учетных данных пользователя, может быть, есть способ использовать его для аутентификации gcloud SDK?
  3. Можно ли позволить учетной записи службы наследовать все разрешения от пользователя? Я видел несколько примеров этого, но они работают только на уровне проекта. Я понимаю, насколько неприличным было бы это решение.
  4. Кажется, SDK gcloud сохраняет учетные данные пользователя в папке /root/.config/gcloud. Я пошел против всех разумных логи c и скопировал эту папку при настройке моего Docker -контейнера. Это на самом деле работает, когда я запускаю его в локальном Docker контейнере, но когда я запускаю его в Cloud Run, учетная запись службы по умолчанию переопределяет все остальные учетные данные. Локальный контейнер Docker может получить доступ к скопированным конфигурациям, но, хотя файлы успешно скопированы, SDK gcloud, похоже, не распознает их.

РЕДАКТИРОВАТЬ: My намерения состоят в том, чтобы позволить менее технически грамотным колледжам создавать новый проект Firebase с большим набором предопределенных настроек одним нажатием кнопки. Это включает следующие шаги:

  1. Настройка нового проекта Firebase (который автоматически настраивает новый проект Google Cloud)
  2. Включение биллинга
  3. Установка пользовательских ролей IAM и обновить / загрузить учетные записи служб
  4. Добавить Google Analytics
  5. Добавить облачное хранилище
  6. Создать новое хранилище облачного хранилища
  7. Добавить собственный режим Firestore
  8. Скопируйте предопределенные облачные функции и роли безопасности и разверните их в облаке

Созданный проект Google Cloud должен быть частью нашей организации Google Cloud. Владелец проекта не важен, так как я вручную устанавливаю роли IAM после создания.

Все вышеперечисленные шаги работают в моей локальной системе, и когда я использую идею # 4, они также работают и в общем c Контейнер docker вне Cloud Run. Проблемы, с которыми я сталкиваюсь, это проверка подлинности запроса для step # 2 и step # 3 . Поскольку оба эти запроса относятся к недавно созданному проекту, удостоверение службы по умолчанию для Cloud Run не может иметь роли, необходимые для проверки подлинности этих запросов в настоящее время. Вот почему я ищу способ аутентификации с использованием тех же учетных данных, которые использовались на шаге 1 интерфейсом Firebase CLI, поскольку эти учетные данные по умолчанию будут иметь права владельца.

1 Ответ

1 голос
/ 01 апреля 2020

Я не уверен, что то, чего вы хотите достичь, возможно. И даже если взлом возможен, вы не знаете, будет ли он когда-нибудь сломан из-за обновления версии или изменения API.

Кроме того, использование личной учетной записи в приложении, работающем на ВМ, не хорошая идея. Журнал будет отслеживать вас как пользователя, а не идентификатор приложения (учетная запись службы). Каковы ваши личные действия (на вашем компьютере и ваш доступ к облаку) и действия приложения (те, которые выполняются от вашего имени)?

Если вы беспокоитесь о развертывании, вы можете взглянуть на terraform или вы можете даже написать собственный сценарий развертывания.

Я не уверен, что обнаружил все ваши блокировщики и проблемы, расскажите нам больше, возможно, есть хороший обходной путь !!

...