Облачное хранилище Firebase: зачем при создании подписанного URL-адреса используется служебная учетная запись для движка приложения?

У меня есть экспресс-сервер, который генерирует подписанный URL-адрес для загрузки файла:

app.get("/signedurl/:filename", async (req, res, next) => {
  const { filename } = req.params;
  // These options will allow temporary uploading of the file with outgoing
  // Content-Type: application/octet-stream header.
  const options = {
    version: "v4",
    action: "write",
    expires: Date.now() + 15 * 60 * 1000, // 15 minutes
    contentType: "application/octet-stream",
  } as GetSignedUrlConfig;

  // Get a v4 signed URL for uploading file
  const [url] = await admin
    .storage()
    .bucket()
    .file(filename)
    .getSignedUrl(options);
  res.json({ url });
});

Сервер работает на функции firebase.

Поскольку при тестировании в локальной среде ему нужен файл учетных данных, я развернул его и обратился к "/signedurl/test", чтобы сгенерировать подписанный URL-адрес для тестового файла.

Сначала журнал показал ошибку: Identity and Access Management (IAM) API has not been used in project 794261759992 before or it is disabled., поэтому я включил API.

Затем журнал показал ошибку: Error: Permission iam.serviceAccounts.signBlob is required to perform this operation on service account projects/[$my_project_id]/serviceAccounts/[$my_project_id]@appspot.gserviceaccount.com.

Я знаю, как добавить разрешение, но эта учетная запись службы сбила меня с толку.

В консоли Firebase я вижу, что учетная запись службы для firebase похожа на "firebase-adminsdk-xxxx@[$my_project_id].iam.gserviceaccount.com".

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

Итак, почему эта учетная запись службы используется для подписи большого двоичного объекта?

0 ответов

Другие вопросы по тегам