При использовании клиентских библиотек сервера для Cloud Firestore вы можете управлять доступом к своим ресурсам с помощью системы управления идентификацией и доступом (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 обновление или преобразование с предусловием exists, установленным в значение false | datastore.entities.create |
batchWrite обновление или преобразование с предусловием exists, установленным в true | datastore.entities.create |
batchWrite обновления или преобразования без предварительных условий | datastore.entities.create |
beginTransaction | datastore.databases.get |
commit обновление или преобразовать с предусловием существования, установленным в значение false | datastore.entities.create |
commit , обновить или преобразовать с предусловием "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 |
write (RPC) обновления или преобразования с предусловием существования, установленным в значение false | datastore.entities.create |
write (RPC) обновления или преобразования с предусловием существования, установленным в 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 | |
| получать | datastore.backupSchedules.get |
| список | datastore.backupSchedules.list |
| создавать | datastore.backupSchedules.create |
| обновлять | datastore.backupSchedules.update |
| удалить | datastore.backupSchedules.delete |
projects.locations.backups | |
| получать | datastore.backups.get |
| список | datastore.backups.list |
| удалить | datastore.backups.delete |
Предопределенные роли
В системе IAM для каждого метода API в Cloud Firestore требуется, чтобы учетная запись, выполняющая запрос API, имела соответствующие разрешения на использование ресурса. Разрешения предоставляются путем установки политик, которые назначают роли пользователю, группе или учетной записи службы. В дополнение к основным ролям, таким как владелец, редактор и пользователь , вы можете назначать роли Cloud Firestore пользователям вашего проекта.
В таблице ниже перечислены роли Cloud Firestore IAM. Вы можете предоставить пользователю, группе или учетной записи службы несколько ролей.
| Роль | Разрешения | Описание |
|---|---|---|
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 | Доступ к аналитическим данным, статистике и ключевым визуализациям можно получить по запросу. |
Пользовательские роли
Если предопределенные роли не соответствуют вашим бизнес-требованиям, вы можете определить собственные пользовательские роли с указанными вами правами доступа:
Необходимые роли для создания и управления тегами
Если в операциях создания или восстановления используется какой-либо тег, требуются определенные роли. Дополнительные сведения о создании пар «ключ-значение» для тегов перед их связыванием с ресурсами базы данных см. в разделе «Создание и управление тегами» .
Для работы требуются следующие разрешения.
Просмотреть теги
-
datastore.databases.listTagBindings -
datastore.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 | Восстановите базу данных из резервной копии. | |
| Название разрешения для получения аналитических данных | Описание | |
datastore.insights.get | Получите представление о ресурсе. |
Задержка при смене роли
Cloud Firestore кэширует разрешения IAM на 5 минут, поэтому для вступления в силу изменения роли может потребоваться до 5 минут.
Управление Cloud Firestore IAM
Вы можете получать и устанавливать политики IAM с помощью консоли Google Cloud, API IAM или инструмента командной строки 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 .
- Узнайте об аутентификации .