Настройте соответствующий доступ для расширения

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

Что такое сервисный аккаунт?

Сервисный аккаунт – это особый тип учетной записи пользователя Google. Он представляет собой пользователя, не являющегося человеком, который может выполнять авторизованные вызовы API к службам Google.

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

Учетные записи служб, созданные для расширений, имеют формат:

ext- extension-instance-id @ project-id .iam.gserviceaccount.com

Firebase ограничивает доступ расширения к проекту и его данным, назначая определенные роли (наборы разрешений) сервисной учетной записи расширения. Когда вы создаете расширение, вы определяете, какие роли требуются для работы вашего расширения, затем вы указываете эти роли и причину, по которой вашему расширению нужны эти роли, в файле extension.yaml (см. пример внизу этой страницы).

Определите, какие роли требуются вашему расширению

При создании расширения вы определяете уровень доступа, необходимый для работы вашего расширения.

Во время установки интерфейс командной строки Firebase предлагает пользователю принять уровень доступа, предоставленный каждой ролью. Если ваше расширение запрашивает больше ролей, чем ему действительно нужно, вероятность того, что пользователи его установят, будет меньше.

  1. Определите, взаимодействует ли ваше расширение с продуктом:

    • Если ваше расширение взаимодействует с продуктом , вам необходимо предоставить расширению доступ к этому продукту.

      Например, если ваше расширение записывает данные в экземпляр базы данных реального времени, тогда вашему расширению потребуется роль базы данных реального времени (в частности, firebasedatabase.admin ).

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

      Например, если ваше расширение срабатывает при записи в экземпляр базы данных реального времени (но ничего не записывает в базу данных), то вашему расширению не требуется роль базы данных реального времени.

  2. После того, как вы определили, с какими продуктами взаимодействует ваше расширение, вам необходимо решить, какая роль необходима для этого конкретного взаимодействия. Некоторые продукты предлагают разные роли в зависимости от выполняемого действия или набора действий.

    Например, предположим, что ваше расширение взаимодействует с сегментом Cloud Storage. Роль storage.objectCreator позволит расширению создавать объекты в сегменте Cloud Storage, но эта роль не позволит расширению просматривать, удалять или перезаписывать объекты. Чтобы расширение могло выполнять эти дополнительные действия, вам необходимо вместо этого назначить роль storage.objectAdmin .

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

Как назначить роли расширению

Перечислите роли IAM, необходимые для работы вашего расширения, в разделе roles вашего файла extension.yaml .

Вот пример расширения, которое прослушивает указанный путь к базе данных Firebase Realtime. При запуске расширение обновляет адрес электронной почты учетной записи пользователя (взаимодействие с Firebase Authentication) и отправляет уведомление (взаимодействие с Firebase Cloud Messaging). Обратите внимание на следующее:

  • Несмотря на то, что расширение срабатывает из-за события базы данных реального времени, роль firebasedatabase.admin не указана (прослушивание не считается взаимодействием ).
  • Поскольку расширение взаимодействует с аутентификацией и облачными сообщениями, для доступа к этим продуктам расширения требуются роли ( firebaseauth.admin и firebasenotifications.admin соответственно).
# extension.yaml
...

# Roles assigned to the extension's service account by Firebase during installation
roles:
  - role: firebaseauth.admin
    reason: Required to update the email address of the user account

  - role: firebasenotifications.admin
    reason: Required to send a notification that the email address has been updated

...

В файле extension.yaml используйте следующие поля, чтобы назначить роль учетной записи службы расширения:

Поле Тип Описание
role
(необходимый)
нить Имя роли IAM , необходимое расширению для работы.
reason
(необходимый)
нить

Краткое описание причины, по которой расширению необходим доступ, предоставленный ролью.

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

resource
(необязательный)
нить

В политику IAM какого ресурса следует добавить эту роль. Если этот параметр опущен, по умолчанию используется projects/${project_id} .

Поддерживаемые значения: projects/* и projects/*/buckets/* .

Уменьшите объем ролей

Расширения должны следовать принципу минимальных привилегий и запрашивать доступ только к тем ресурсам, которые им необходимы. Вы можете ограничить область доступа расширения, используя поле role.resource . Например, если вашему расширению необходимо записывать объекты в корзину Cloud Storage, вы можете использовать следующую роль:

roles:
  - role: storage.objectCreator
    reason: Needed in order to write
    resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}

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

Это поле поддерживает проекты ( projects/{project_id} ) и сегменты хранилища ( projects/{project_id}/buckets/{bucket_id} ).

Поддерживаемые роли для расширений

В следующей таблице перечислены поддерживаемые роли IAM для взаимодействия с продуктами Firebase. Большинство ролей в этой таблице — это роли уровня продукта Firebase , но некоторые из них управляются напрямую Google Cloud (в частности, Cloud Firestore и Cloud Storage ).

Продукты Firebase

Если ваше расширение взаимодействует с... Назначьте одну из этих ролей...
Облачный пожарный магазин datastore.importExportAdmin
datastore.indexAdmin
datastore.owner
datastore.user
datastore.viewer
Облачное хранилище для Firebase Storage.admin
Storage.objectAdmin
Storage.objectCreator
Storage.objectViewer
Распространение приложений Firebase firebaseappdistro.admin
firebaseappdistro.viewer
Аутентификация Firebase firebaseauth.admin
firebaseauth.viewer
A/B-тестирование Firebase firebaseabt.admin
Firebaseabt.viewer
Облачный обмен сообщениями Firebase firebasenotifications.admin
firebasenotifications.viewer
Firebase Крашлитикс firebasecrashlytics.admin
Firebasecrashlytics.viewer
Хостинг Firebase firebasehosting.admin
firebasehosting.viewer
Обмен сообщениями Firebase внутри приложения firebaseinappmessaging.admin
Firebaseinappmessaging.viewer
Firebase ML firebaseml.admin
firebaseml.viewer
Мониторинг производительности Firebase Firebase Performance.viewer
Firebase Performance.reader
Firebase Performance.писатель
База данных Firebase в реальном времени firebasedatabase.admin
firebasedatabase.viewer
Правила безопасности firebaserules.viewer
firebaserules.developer
firebaserules.deployer
Гугл Аналитика firebaseanalytics.admin
Firebaseanalytics.viewer

Продукты Google Cloud

Узнайте об этих ролях в документации Google Cloud .

Если ваше расширение взаимодействует с... Назначьте одну из этих ролей...
Действия действия.Администратор
действия.Просмотрщик
Апигей apigee.analyticsAgent
редактор apigee.analytics
apigee.analyticsViewer
apigee.apiCreator
apigee.deployer
apigee.developerАдминистратор
apigee.readOnlyAdmin
apigee.synchronizerManager
Механизм приложений appengine.appAdmin
appengine.appViewer
appengine.codeViewer
appengine.deployer
appengine.serviceAdmin
АвтоМЛ automl.editor
automl.predictor
automl.viewer
Большой запрос bigquery.connectionАдминистратор
bigquery.connectionUser
bigquery.dataEditor
bigquery.dataOwner
bigquery.dataViewer
bigquery.jobUser
bigquery.metadataViewer
bigquery.readSessionUser
bigquery.user
Облачный большой стол bigtable.reader
bigtable.user
bigtable.viewer
Биллинг Billing.viewer
Чаты видеовстречи чат.владелец
чат.читатель
Облачный актив облакоассет.владелец
Cloudasset.viewer
Объединение облачных данных datafusion.admin
datafusion.viewer
Облачный отладчик Clouddebugger.agent
Clouddebugger.user
Облачные функции Cloudfunctions.invoker
Cloudfunctions.viewer
Облачный IAP iap.admin
iap.httpsResourceAccessor
iap.settingsАдминистратор
iap.tunnelResourceAccessor
Облачный Интернет вещей Cloudiot.deviceController
Cloudiot.editor
Cloudiot.provisioner
Cloudiot.viewer
Профилировщик стека Cloudprofiler.agent
Cloudprofiler.user
Облачный планировщик Cloudscheduler.admin
Cloudscheduler.jobRunner
Cloudscheduler.viewer
Облачный сканер безопасности Cloudsecurityscanner.editor
Cloudsecurityscanner.runner
Cloudsecurityscanner.viewer
Облачный SQL Cloudsql.клиент
Cloudsql.editor
Cloudsql.viewer
Облачный след Cloudtrace.admin
Cloudtrace.agent
Cloudtrace.user
Поток данных dataflow.developer
dataflow.viewer
поток данных.работник
Диалоговый поток диалоговый поток.админ
диалоговый поток.клиент
диалоговый поток.читатель
Предотвращение потери облачных данных dlp.reader
dlp.user
Отчет об ошибках errorreporting.user
errorreporting.viewer
errorreporting.писатель
Эвентарк eventarc.publisher
eventarc.eventReceiver
Облачное хранилище файлов файл.редактор
просмотрщик файлов
Ведение журнала logging.configWriter
журналирование.logWriter
logging.privateLogViewer
logging.viewer
Механизм машинного обучения мл.разработчик
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.operationOwner
мл.просмотрщик
Мониторинг редактор мониторинга
мониторинг.metricWriter
мониторинг.просмотрщик
Ноутбуки с искусственным интеллектом ноутбуки.админ
блокноты.просмотрщик
Паб/Саб pubsub.редактор
pubsub.издатель
pubsub.подписчик
pubsub.viewer
Хранилище памяти Redis Redis.editor
redis.viewer
Облачный бег run.invoker
Источник источник.читатель
источник.писатель
Облачный гаечный ключ спанер.databaseAdmin
спанер.databaseReader
spanner.databaseUser
гаечный ключ.просмотрщик
Использование сервиса serviceusage.apiKeysMetadataViewer
Служба передачи облачного хранилища StorageTransfer.user
StorageTransfer.viewer
Облачный транскодер транскодер.админ
транскодер.просмотрщик
Вертексный ИИ aiplatform.user
Другой идентичностьtoolkit.admin
Identitytoolkit.viewer