В настоящее время я работаю над проектом, который автоматически настроит новый проект Firebase / Gcloud. Он сильно зависит от Firebase CLI и gcloud SDK с учетными данными пользователя для нескольких обязательных шагов.
Сейчас я пытаюсь переместить этот проект в Docker контейнер на облачном беге. Мне удалось аутентифицировать интерфейс командной строки Firebase с учетными данными пользователя, используя их встроенную команду CI на основе токенов .
Я хотел бы спросить, можно ли аутентифицировать gcloud SDK с помощью аналогичный метод.
Почему учетные записи служб, вероятно, не будут работать
Я понимаю, что подобные сервисные программы должны проходить аутентификацию с учетными записями служб. В моем случае, однако, поток программы выглядит следующим образом:
- Используйте Firebase CLI для создания нового проекта gcloud / firebase
- Используйте gcloud SDK для добавления IAM-привязок, включить API, биллинг и т. д. c. для нового проекта
Я не могу использовать учетную запись службы для проверки подлинности запросов на шаге 2, так как проект только что был создан, и поэтому у меня еще не было возможности предоставить какую-либо услугу учетные записи разрешают редактировать или скачивать файлы ключей. Вот почему я хотел бы пройти проверку подлинности с помощью токена, представляющего учетные данные пользователя.
По умолчанию среда Cloud Run фактически имеет доступ к учетной записи службы для проекта, в котором размещен контейнер. Поскольку эта учетная запись службы не имеет разрешения на редактирование вновь созданного проекта, использовать ее для аутентификации бессмысленно.
Пока что идей нет
gcloud auth login --no-launch-browser
- Требуется взаимодействие с пользователем, и ключ, который предоставляется, кажется уникальным для сеанса входа в систему - Поскольку интерфейс командной строки Firebase аутентифицируется с использованием учетных данных пользователя, может быть, есть способ использовать его для аутентификации gcloud SDK?
- Можно ли позволить учетной записи службы наследовать все разрешения от пользователя? Я видел несколько примеров этого, но они работают только на уровне проекта. Я понимаю, насколько неприличным было бы это решение.
- Кажется, SDK gcloud сохраняет учетные данные пользователя в папке /root/.config/gcloud. Я пошел против всех разумных логи c и скопировал эту папку при настройке моего Docker -контейнера. Это на самом деле работает, когда я запускаю его в локальном Docker контейнере, но когда я запускаю его в Cloud Run, учетная запись службы по умолчанию переопределяет все остальные учетные данные. Локальный контейнер Docker может получить доступ к скопированным конфигурациям, но, хотя файлы успешно скопированы, SDK gcloud, похоже, не распознает их.
РЕДАКТИРОВАТЬ: My намерения состоят в том, чтобы позволить менее технически грамотным колледжам создавать новый проект Firebase с большим набором предопределенных настроек одним нажатием кнопки. Это включает следующие шаги:
- Настройка нового проекта Firebase (который автоматически настраивает новый проект Google Cloud)
- Включение биллинга
- Установка пользовательских ролей IAM и обновить / загрузить учетные записи служб
- Добавить Google Analytics
- Добавить облачное хранилище
- Создать новое хранилище облачного хранилища
- Добавить собственный режим Firestore
- Скопируйте предопределенные облачные функции и роли безопасности и разверните их в облаке
Созданный проект Google Cloud должен быть частью нашей организации Google Cloud. Владелец проекта не важен, так как я вручную устанавливаю роли IAM после создания.
Все вышеперечисленные шаги работают в моей локальной системе, и когда я использую идею # 4, они также работают и в общем c Контейнер docker вне Cloud Run. Проблемы, с которыми я сталкиваюсь, это проверка подлинности запроса для step # 2 и step # 3 . Поскольку оба эти запроса относятся к недавно созданному проекту, удостоверение службы по умолчанию для Cloud Run не может иметь роли, необходимые для проверки подлинности этих запросов в настоящее время. Вот почему я ищу способ аутентификации с использованием тех же учетных данных, которые использовались на шаге 1 интерфейсом Firebase CLI, поскольку эти учетные данные по умолчанию будут иметь права владельца.