Чтобы расширение могло выполнять указанные действия, Firebase предоставляет каждому экземпляру установленного расширения ограниченный доступ к проекту и его данным через учетную запись службы .
Что такое учетная запись службы?
Учётная запись сервиса — это особый тип учётной записи пользователя Google. Она представляет собой пользователя, не являющегося человеком, который может выполнять авторизованные вызовы API к сервисам Google.
При установке расширения Firebase создаёт для него учётную запись службы в проекте. Каждый установленный экземпляр расширения имеет собственную учётную запись службы. При удалении экземпляра расширения Firebase удаляет учётную запись службы расширения.
Учетные записи служб, созданные для расширений, имеют следующий формат:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
Firebase ограничивает доступ расширения к проекту и его данным, назначая определённые роли (пакеты разрешений) учётной записи службы расширения. При создании расширения вы определяете, какие роли требуются для его работы, а затем перечисляете эти роли и причины их необходимости в файле extension.yaml
(см. пример внизу этой страницы).
Определите, какие роли требуются вашему расширению
При создании расширения вы определяете уровень доступа, необходимый для его работы.
Во время установки Firebase CLI предлагает пользователю принять уровень доступа, предоставляемый каждой ролью. Если ваше расширение запрашивает больше ролей, чем ему фактически необходимо, пользователи могут с меньшей вероятностью установить его.
Определите, взаимодействует ли ваше расширение с продуктом:
Если ваше расширение взаимодействует с продуктом , вам необходимо предоставить расширению доступ к этому продукту.
Например, если ваше расширение записывает данные в экземпляр Realtime Database , то вашему расширению необходима роль Realtime Database (в частности,
firebasedatabase.admin
).Если ваше расширение просто прослушивает событие-триггер от продукта , то вашему расширению не нужна роль, связанная с этим продуктом.
Например, если ваше расширение срабатывает при записи в экземпляр Realtime Database (но ничего не записывает в базу данных), то вашему расширению не нужна роль Realtime Database .
Определив, с какими продуктами взаимодействует ваше расширение, вам необходимо решить, какая роль требуется для этого взаимодействия. Некоторые продукты предлагают разные роли в зависимости от выполняемого действия или набора действий.
Например, ваше расширение взаимодействует с контейнером Cloud Storage . Роль
storage.objectCreator
позволяет расширению создавать объекты в контейнере Cloud Storage , но не позволяет просматривать, удалять или перезаписывать объекты. Чтобы разрешить расширению выполнять эти дополнительные действия, необходимо назначить рольstorage.objectAdmin
.
Чтобы узнать обо всех поддерживаемых ролях , которые вы можете назначить сервисному аккаунту вашего расширения, обратитесь к разделу внизу этой страницы. Описание каждой роли и предоставляемые разрешения см. в документации Firebase или документации Google Cloud . Вы также можете найти роли на панели IAM и администрирования консоли Google Cloud.
Как назначить роли расширению
Перечислите роли IAM, необходимые для работы вашего расширения, в разделе roles
файла extension.yaml
.
Вот пример расширения, которое прослушивает указанный путь к 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-политику какого ресурса следует добавить эту роль? Если не указано иное, по умолчанию используется Поддерживаемые значения: |
Сократить объем ролей
Расширения должны следовать принципу наименьших привилегий и запрашивать доступ только к тем ресурсам, которые им необходимы. Вы можете ограничить область доступа расширения с помощью поля 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.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 |
Облако Bigtable | bigtable.reader bigtable.user bigtable.viewer |
Биллинг | billing.viewer |
Hangouts Chats | владелец чата чат.ридер |
Облачный актив | 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 Profiler | 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 | dialogflow.admin dialogflow.клиент dialogflow.reader |
Предотвращение потерь данных в облаке | dlp.reader dlp.user |
Сообщение об ошибках | errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc | eventarc.publisher eventarc.eventReceiver |
Облачное хранилище файлов | файл.редактор файл.viewer |
Ведение журнала | logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Двигатель машинного обучения | мл.разработчик ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Мониторинг | мониторинг.редактор мониторинг.metricWriter monitoring.viewer |
Записные книжки с искусственным интеллектом | блокноты.админ блокноты.просмотрщик |
Pub/Sub | pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Память Redis | redis.editor redis.viewer |
Cloud Run | run.invoker |
Источник | источник.читатель источник.писатель |
Облачный гаечный ключ | spanner.databaseAdmin spanner.databaseReader spanner.databaseUser гаечный ключ.viewer |
Использование услуг | serviceusage.apiKeysMetadataViewer |
Служба передачи облачного хранилища | storagetransfer.user storagetransfer.viewer |
Облачный транскодер | transcoder.admin transcoder.viewer |
Вершинный ИИ | aiplatform.user |
Другой | identitytoolkit.admin identitytoolkit.viewer |