Инициализировать Firebase Admin SDK с использованием секрета, хранящегося в диспетчере секретов - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь инициализировать Firebase Admin SDK в приложении Cloud Run, используя отдельную учетную запись службы (т.е. не учетную запись службы по умолчанию).

В документации предлагается:

import firebase_admin
from firebase_admin import credentials

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

Однако я бы хотел избежать упаковки секретов в контейнер Cloud Run, поэтому я получаю файл json из Secret Manager и пытаюсь создать учетные данные и передать их в: firebase_admin.initialize_app (cred)

import firebase_admin
from google.cloud import secretmanager
from google.oauth2 import service_account

# Create credentials object then initialize the firebase admin client
sec_client = secretmanager.SecretManagerServiceClient()
name = sec_client.secret_version_path(GOOGLE_CLOUD_PROJECT_NUMBER, FIREBASE_SA_SECRET_NAME, "latest")
response = sec_client.access_secret_version(name)
service_account_info = json.loads(response.payload.data.decode('UTF-8'))
creds = service_account.Credentials.from_service_account_info(service_account_info)
firebase_admin.initialize_app(creds)

Получена ошибка:

ValueError: предоставлены недопустимые учетные данные Firebase. Приложение должно быть инициализировано действительным экземпляром учетных данных.

Любые советы приветствуются.

Ответы [ 2 ]

1 голос
/ 21 июня 2020
import firebase_admin
from google.cloud import secretmanager
from google.oauth2 import service_account

# Create credentials object then initialize the firebase admin client
sec_client = secretmanager.SecretManagerServiceClient()
name = sec_client.secret_version_path(GOOGLE_CLOUD_PROJECT_NUMBER, FIREBASE_SA_SECRET_NAME, "latest")
response = sec_client.access_secret_version(name)
service_account_info = json.loads(response.payload.data.decode('utf-8'))

# build credentials with the service account dict
creds = firebase_admin.credentials.Certificate(service_account_info)

# initialize firebase admin
firebase_app = firebase_admin.initialize_app(creds)
0 голосов
/ 06 августа 2020

Я столкнулся с той же проблемой, и есть простой способ ее решить. Если вы не передадите учетные данные, будут использоваться учетные данные приложения Google по умолчанию. Из initialize_app документы:

  credential: A credential object used to initialize the SDK (optional). If none is provided,
      Google Application Default Credentials are used.

https://github.com/firebase/firebase-admin-python/blob/b5f228f68d95a4c24efa39e47e30045047db1a6e/firebase_admin/__init__.py#L48 -L49

Итак, вы можете позвонить по

firebase_admin.initialize_app()

Без каких-либо параметров, и он будет использовать учетные данные учетной записи службы Cloud Run.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...