При использовании серверных клиентских библиотек для Cloud Firestore вы можете управлять доступом к своим ресурсам с помощью Identity and Access Management (IAM). IAM позволяет предоставлять более детализированный доступ к определенным ресурсам Google Cloud и предотвращает нежелательный доступ к другим ресурсам. На этой странице описаны разрешения и роли IAM для Cloud Firestore. Подробное описание IAM приведено в документации IAM.
IAM позволяет применять принцип минимальных привилегий, то есть предоставлять только необходимый доступ к ресурсам.
IAM позволяет контролировать, кто (пользователь) имеет какое (роль) разрешение для каких ресурсов, путем настройки политик IAM.
Правила IAM предоставляют пользователю одну или несколько ролей, давая ему определенные разрешения. Например, вы можете назначить пользователю роль datastore.indexAdmin, которая позволяет создавать, изменять, удалять, перечислять и просматривать индексы.
Разрешения и роли
В этом разделе перечислены разрешения и роли, которые поддерживаются в Cloud Firestore.
Необходимые разрешения для методов API
В таблице ниже перечислены разрешения, которые вызывающая сторона должна иметь для выполнения каждого действия.
| Метод | Требуемые права доступа |
|---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
batchWrite update или transform с предварительным условием exists, для которого задано значение false; |
datastore.entities.create |
batchWrite update или transform с предварительным условием exists, для которого задано значение true |
datastore.entities.create |
batchWrite – обновление или преобразование без предварительного условия. |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
commit update или transform с предварительным условием exists, для которого задано значение false |
datastore.entities.create |
commit update или transform с предварительным условием exists, для которого задано значение true; |
datastore.entities.update |
commit – обновление или преобразование без предварительного условия. |
datastore.entities.create |
Удалить: commit |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.getdatastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
executePipeline (RPC)с любым из следующих этапов: - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
executePipeline (RPC)с любым из следующих этапов: - documents(...) |
datastore.entities.get
|
executePipeline (RPC)с любым из следующих этапов: - update(...) |
datastore.entities.update
|
executePipeline (RPC)с любым из следующих этапов: - delete(...) |
datastore.entities.delete
|
write (RPC) update или transform с предварительным условием exists, для которого задано значение false; |
datastore.entities.create |
write (RPC) update или transform с предварительным условием exists, для которого задано значение true; |
datastore.entities.update |
write (RPC) – обновление или преобразование без предварительного условия. |
datastore.entities.create |
Удалить: write (RPC) |
datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.schemas.create |
delete |
datastore.schemas.delete |
get |
datastore.schemas.get |
list |
datastore.schemas.list |
projects.databases |
|
create |
datastore.databases.createЕсли запрос
Если вы хотите проверить, успешно ли настроены привязки тегов, просмотрев их список, вам потребуются следующие дополнительные разрешения:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| восстановление | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneЕсли запрос
Если вы хотите проверить, успешно ли настроены привязки тегов, просмотрев их список, вам потребуются следующие дополнительные разрешения:
|
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
| get | datastore.backupSchedules.get |
| list | datastore.backupSchedules.list |
| create | datastore.backupSchedules.create |
| update | datastore.backupSchedules.update |
| delete | datastore.backupSchedules.delete |
projects.locations.backups |
|
| get | datastore.backups.get |
| list | datastore.backups.list |
| delete | datastore.backups.delete |
Стандартные роли
При использовании IAM каждый метод API в Cloud Firestore требует, чтобы у аккаунта, отправляющего запрос к API, были необходимые разрешения на использование ресурса. Разрешения предоставляются путем настройки правил, которые назначают роли пользователю, группе или сервисному аккаунту. Помимо базовых ролей, владельца, редактора и зрителя, вы можете предоставить пользователям вашего проекта роли Cloud Firestore.
В таблице ниже перечислены роли IAM для Cloud Firestore. Пользователю, группе или сервисному аккаунту можно назначить несколько ролей.
| Роль | Разрешения | Описание |
|---|---|---|
roles/datastore.owner |
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Полный доступ к Cloud Firestore. |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
Доступ для чтения и записи данных в базе данных Cloud Firestore. Предназначен для разработчиков приложений и сервисных аккаунтов. |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
Доступ для чтения ко всем ресурсам Cloud Firestore. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
Полный доступ для управления импортом и экспортом. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
Полный доступ к управлению массовыми операциями. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Полный доступ к управлению определениями индексов. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
Полный доступ к сканированиям Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
Доступ для чтения к расписаниям резервного копирования в базе данных Cloud Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
Полный доступ к расписаниям резервного копирования в базе данных Cloud Firestore. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
Доступ для чтения к информации о резервном копировании в местоположении Cloud Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
Полный доступ к резервным копиям в местоположении Cloud Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Возможность восстановить резервную копию Cloud Firestore в новой базе данных. Эта роль также позволяет создавать новые базы данных, не обязательно путем восстановления из резервной копии. |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Возможность клонировать базу данных Cloud Firestore в новую базу данных. Эта роль также позволяет создавать новые базы данных, не обязательно путем клонирования. |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
Доступ для чтения к подсказкам, статистике и сканированиям Key Visualizer. |
Специальные роли
Если стандартные роли не соответствуют вашим требованиям, вы можете создать собственные роли с нужными разрешениями.
Роли, необходимые для создания тегов и управления ими
Если в действиях по созданию или восстановлению представлен какой-либо тег, требуются определенные роли. Подробнее о том, как создавать пары "ключ-значение" для тегов, прежде чем связывать их с ресурсами базы данных…
Требуются перечисленные ниже разрешения.
Посмотреть теги
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
Управление тегами ресурсов
Для ресурса базы данных, к которому вы прикрепляете значение тега, требуется следующее разрешение:
datastore.databases.createTagBinding
Разрешения
В таблице ниже перечислены разрешения, которые поддерживает Cloud Firestore.
| Название разрешения базы данных | Описание | |
|---|---|---|
datastore.databases.get |
Начать или отменить транзакцию. | |
datastore.databases.import |
Импортировать объекты в базу данных. | |
datastore.databases.export |
Экспорт объектов из базы данных. | |
datastore.databases.bulkDelete |
Массовое удаление объектов из базы данных. | |
datastore.databases.getMetadata |
Чтение метаданных из базы данных. | |
datastore.databases.list |
Получить список баз данных в проекте. | |
datastore.databases.create |
Создайте базу данных. | |
datastore.databases.update |
Обновить базу данных. | |
datastore.databases.delete |
Удалить базу данных. | |
datastore.databases.clone |
Клонирование базы данных. | |
datastore.databases.createTagBinding |
Создайте привязку тега для базы данных. | |
datastore.databases.deleteTagBinding |
Удалите привязку тега для базы данных. | |
datastore.databases.listTagBindings |
Получить список всех привязок тегов для базы данных. | |
datastore.databases.listEffectiveTagBindings |
Получение списка действующих связей тегов для базы данных. | |
| Название разрешения для объекта | Описание | |
datastore.entities.create |
Создайте документ. | |
datastore.entities.delete |
Удалить документ. | |
datastore.entities.get |
Прочитать документ. | |
datastore.entities.list |
Перечислить названия документов в проекте. (Для доступа к данным документа требуется datastore.entities.get.) |
|
datastore.entities.update |
Обновить документ. | |
| Название разрешения на индексирование | Описание | |
datastore.schemas.create |
Создайте индекс. | |
datastore.schemas.delete |
Удалить индекс. | |
datastore.schemas.get |
Чтение метаданных из индекса. | |
datastore.schemas.list |
Получить список индексов в проекте. | |
datastore.schemas.update |
Обновление индекса. | |
| Название разрешения на операцию | Описание | |
datastore.operations.cancel |
Отменяет продолжительную операцию. | |
datastore.operations.delete |
Удаляет продолжительную операцию. | |
datastore.operations.get |
Получает последнее состояние продолжительной операции. | |
datastore.operations.list |
Получить список продолжительных операций. | |
| Название разрешения проекта | Описание | |
resourcemanager.projects.get |
Просмотр ресурсов в проекте. | |
resourcemanager.projects.list |
Посмотреть список проектов, которыми вы владеете. | |
| Название разрешения на доступ к данным о местоположении | Описание | |
datastore.locations.get |
Получение сведений о местоположении базы данных. Требуется для создания новой базы данных. | |
datastore.locations.list |
Список доступных местоположений баз данных. Требуется для создания новой базы данных. | |
| Название разрешения Key Visualizer | Описание | |
datastore.keyVisualizerScans.get |
Получите подробную информацию о сканировании Key Visualizer. | |
datastore.keyVisualizerScans.list |
Список доступных сканирований Key Visualizer. | |
| Название разрешения на резервное копирование по расписанию | Описание | |
datastore.backupSchedules.get |
Получить сведения о расписании резервного копирования. | |
datastore.backupSchedules.list |
Получить список доступных расписаний резервного копирования. | |
datastore.backupSchedules.create |
Создайте расписание резервного копирования. | |
datastore.backupSchedules.update |
Изменить расписание резервного копирования. | |
datastore.backupSchedules.delete |
Удалить расписание резервного копирования. | |
| Название разрешения на резервное копирование | Описание | |
datastore.backups.get |
Получить сведения о резервной копии. | |
datastore.backups.list |
Посмотреть список доступных резервных копий. | |
datastore.backups.delete |
Удалить резервную копию. | |
datastore.backups.restoreDatabase |
Восстановите базу данных из резервной копии. | |
| Название разрешения для Insights | Описание | |
datastore.insights.get |
Получение статистики по ресурсу |
Задержка при изменении роли
Cloud Firestore кеширует разрешения IAM на 5 минут, поэтому изменения вступают в силу в течение этого времени.
Управление IAM в Cloud Firestore
Вы можете получать и настраивать правила IAM с помощью консоли Google Cloud, IAM API или инструмента командной строки gcloud. Подробнее о том, как предоставлять, изменять и отменять доступ для участников проекта…
Как настроить разрешения условного доступа
Вы можете использовать условия IAM, чтобы определять и применять условный контроль доступа.
Например, следующее условие назначает субъекту роль datastore.user до указанной даты:
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
Подробнее о том, как определить условия IAM для временного доступа, см. Настройка временного доступа.
Чтобы узнать, как настроить условия IAM для доступа к одной или нескольким базам данных, ознакомьтесь со статьей Как настроить условия доступа к базе данных.
Зависимость правил безопасности от IAM
Для работы Cloud Firestore Security Rules на мобильных и веб-клиентах требуется следующий сервисный аккаунт и привязка IAM:
| Сервисный аккаунт | Роль IAM |
|---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase автоматически настраивает этот сервисный аккаунт. Если вы удалите роль firebaserules.system из этого сервисного аккаунта, правила безопасности будут отклонять все запросы. Чтобы восстановить эту привязку IAM, используйте следующую команду gcloud CLI:
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
Чтобы определить значения project_id и project_number, ознакомьтесь с разделом Идентификация проектов.
Используйте Google Cloud CLI вместо консоли Google Cloud, потому что роль firebaserules.system по умолчанию скрыта в консоли.
Дальнейшие действия
- Подробнее об IAM…
- Предоставьте роли IAM.
- Подробнее об аутентификации…