Чтобы расширение могло выполнять указанные действия, 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 хранилище данных.владелец хранилище данных.пользователь хранилище данных.просмотрщик |
Cloud Storage for Firebase | хранилище.админ storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase App Distribution | firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication | firebaseauth.админ firebaseauth.просмотрщик |
Firebase A/B Testing | firebaseabt.админ firebaseabt.viewer |
Firebase Cloud Messaging | firebasenotifications.админ firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.админ firebasecrashlytics.просмотрщик |
Firebase Hosting | firebasehosting.админ firebasehosting.просмотрщик |
Firebase In-App Messaging | firebaseinappmessaging.админ firebaseinappmessaging.viewer |
Firebase ML | firebaseml.админ firebaseml.просмотрщик |
Firebase Performance Monitoring | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.писатель |
Firebase Realtime Database | firebasedatabase.admin firebasedatabase.viewer |
Правила безопасности | firebaserules.просмотрщик firebaserules.разработчик firebaserules.deployer |
Google Analytics | firebaseanalytics.админ firebaseanalytics.viewer |
Продукты Google Cloud
Подробнее об этих ролях читайте в документации Google Cloud .
Если ваше расширение взаимодействует с... | Назначьте одну из этих ролей... |
---|---|
Действия | действия.Админ действия.Зритель |
Апигей | apigee.analyticsAgent apigee.analyticsРедактор apigee.analyticsViewer apigee.apiCreator apigee.развертыватель apigee.developerАдминистратор apigee.readOnlyАдминистратор apigee.synchronizerManager |
App Engine | appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
АвтоML | automl.редактор автомл.предиктор automl.viewer |
BigQuery | bigquery.connectionАдминистратор bigquery.connectionUser bigquery.dataEditor bigquery.dataВладелец bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.пользователь |
Облако Bigtable | bigtable.читатель bigtable.пользователь bigtable.просмотрщик |
Биллинг | биллинг.просмотрщик |
Чаты Hangouts | чат.владелец чат.читатель |
Облачный актив | cloudasset.владелец cloudasset.viewer |
Объединение облачных данных | datafusion.админ datafusion.просмотрщик |
Облачный отладчик | clouddebugger.агент clouddebugger.пользователь |
Облачные функции | cloudfunctions.invoker cloudfunctions.viewer |
Облачный IAP | iap.админ iap.httpsResourceAccessor iap.settingsАдминистратор iap.tunnelResourceAccessor |
Облачный Интернет вещей | cloudiot.deviceКонтроллер cloudiot.редактор cloudiot.провайдер cloudiot.просмотрщик |
Профайлер Stackdriver | cloudprofiler.агент cloudprofiler.пользователь |
Cloud Scheduler | облакаscheduler.админ облакаscheduler.jobRunner cloudscheduler.просмотрщик |
Сканер безопасности облака | cloudsecurityscanner.редактор cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Облачный SQL | cloudsql.клиент cloudsql.редактор cloudsql.viewer |
Облачный след | cloudtrace.админ cloudtrace.агент cloudtrace.пользователь |
Поток данных | поток данных.разработчик поток данных.просмотрщик поток данных.работник |
Dialogflow | dialogflow.админ dialogflow.клиент dialogflow.читатель |
Предотвращение потери данных в облаке | dlp.reader dlp.пользователь |
Сообщение об ошибках | errorreporting.пользователь errorreporting.viewer errorreporting.писатель |
Eventarc | eventarc.издатель eventarc.приемник событий |
Облачное хранилище файлов | файл.редактор файл.просмотрщик |
Ведение журнала | logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Машинное обучение | мл.разработчик ml.jobOwner ml.modelВладелец ml.modelUser ml.operationВладелец мл.просмотрщик |
Мониторинг | мониторинг.редактор мониторинг.metricWriter мониторинг.просмотрщик |
Блокноты ИИ | блокноты.админ блокноты.просмотрщик |
Pub/Sub | pubsub.редактор pubsub.издатель pubsub.подписчик pubsub.viewer |
Память-хранилище Redis | redis.редактор redis.просмотрщик |
Облачный забег | запустить.invoker |
Источник | источник.читатель источник.писатель |
Облачный гаечный ключ | spanner.databaseAdmin spanner.databaseReader spanner.databaseUser гаечный ключ.просмотрщик |
Использование услуг | serviceusage.apiKeysMetadataViewer |
Служба передачи облачного хранилища | storagetransfer.пользователь storagetransfer.viewer |
Облачный транскодер | транскодер.админ транскодер.просмотрщик |
Вершина ИИ | aiplatform.пользователь |
Другой | identitytoolkit.админ identitytoolkit.viewer |