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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Несмотря на то, что расширение срабатывает от события Realtime Database , роль firebasedatabase.admin не отображается в списке (прослушивание не считается взаимодействием ).
  • Поскольку расширение взаимодействует с Authentication и Cloud Messaging , для доступа к этим продуктам требуются роли ( 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

Если ваше расширение взаимодействует с... Назначьте одну из этих ролей...
Cloud Firestore datastore.importExportAdmin
datastore.indexAdmin
datastore.owner
datastore.user
datastore.viewer
Cloud Storage for Firebase storage.admin
storage.objectAdmin
storage.objectCreator
storage.objectViewer
Firebase App Distribution firebaseappdistro.admin
firebaseappdistro.viewer
Firebase Authentication firebaseauth.admin
firebaseauth.viewer
Firebase A/B Testing firebaseabt.admin
firebaseabt.viewer
Firebase Cloud Messaging firebasenotifications.admin
firebasenotifications.viewer
Firebase Crashlytics firebasecrashlytics.admin
firebasecrashlytics.viewer
Firebase Hosting firebasehosting.admin
firebasehosting.viewer
Firebase In-App Messaging firebaseinappmessaging.admin
firebaseinappmessaging.viewer
Firebase ML firebaseml.admin
firebaseml.viewer
Firebase Performance Monitoring firebaseperformance.viewer
firebaseperformance.reader
firebaseperformance.writer
Firebase Realtime Database firebasedatabase.admin
firebasedatabase.viewer
Правила безопасности firebaserules.viewer
firebaserules.developer
firebaserules.deployer
Google Analytics firebaseanalytics.admin
firebaseanalytics.viewer

Продукты Google Cloud

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

Если ваше расширение взаимодействует с... Назначьте одну из этих ролей...
Действия действия.Администратор
действия.Просмотр
Апигее apigee.analyticsAgent
apigee.analyticsEditor
apigee.analyticsViewer
apigee.apiCreator
apigee.deployer
apigee.developerAdmin
apigee.readOnlyAdmin
apigee.synchronizerManager
App Engine appengine.appAdmin
appengine.appViewer
appengine.codeViewer
appengine.deployer
appengine.serviceAdmin
AutoML automl.editor
automl.predictor
automl.viewer
BigQuery bigquery.connectionAdmin
bigquery.connectionUser
bigquery.dataEditor
bigquery.dataOwner
bigquery.dataViewer
bigquery.jobUser
bigquery.metadataViewer
bigquery.readSessionUser
bigquery.user
Cloud Bigtable bigtable.reader
bigtable.user
bigtable.viewer
Выставление счетов billing.viewer
Чаты Hangout chat.owner
чат.читатель
Облачный актив cloudasset.owner
cloudasset.viewer
Облачное слияние данных datafusion.admin
datafusion.viewer
Отладчик облачных приложений clouddebugger.agent
clouddebugger.user
Облачные функции cloudfunctions.invoker
cloudfunctions.viewer
Облачные IAP iap.admin
iap.httpsResourceAccessor
iap.settingsAdmin
iap.tunnelResourceAccessor
Облачный Интернет вещей cloudiot.deviceController
cloudiot.editor
cloudiot.provisioner
cloudiot.viewer
Профилировщик Stackdriver cloudprofiler.agent
cloudprofiler.user
Cloud Scheduler cloudscheduler.admin
cloudscheduler.jobRunner
cloudscheduler.viewer
Сканер облачной безопасности cloudsecurityscanner.editor
cloudsecurityscanner.runner
cloudsecurityscanner.viewer
Облачный SQL cloudsql.client
cloudsql.editor
cloudsql.viewer
Облачная трассировка cloudtrace.admin
cloudtrace.agent
cloudtrace.user
Поток данных dataflow.developer
dataflow.viewer
dataflow.worker
Диалогфлоу dialogflow.admin
dialogflow.client
dialogflow.reader
Предотвращение потери данных в облаке dlp.reader
dlp.user
Сообщение об ошибках errorreporting.user
errorreporting.viewer
errorreporting.writer
Эвентарк eventarc.publisher
eventarc.eventReceiver
Облачное хранилище файлов файл.редактор
файл.просмотрщик
Ведение журнала logging.configWriter
logging.logWriter
logging.privateLogViewer
logging.viewer
Механизм машинного обучения мл.разработчик
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.operationOwner
ml.viewer
Мониторинг мониторинг.редактор
monitoring.metricWriter
monitoring.viewer
Блокноты с искусственным интеллектом notebooks.admin
notebooks.viewer
Pub/Sub pubsub.editor
pubsub.publisher
pubsub.subscriber
pubsub.viewer
Memorystore Redis redis.editor
redis.viewer
Cloud Run run.invoker
Источник источник.читатель
источник.писатель
Облачный гальник spanner.databaseAdmin
spanner.databaseReader
spanner.databaseUser
spanner.viewer
Использование сервиса serviceusage.apiKeysMetadataViewer
Сервис переноса данных в облачное хранилище storagetransfer.user
storagetransfer.viewer
Облачный транскодер transcoder.admin
транскодер.просмотрщик
Vertex AI aiplatform.user
Другой identitytoolkit.admin
identitytoolkit.viewer