Управление учетными данными и доступом (IAM)

При использовании серверных клиентских библиотек для 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
datastore.entities.update
beginTransaction datastore.databases.get
commit update или transform с предварительным условием exists, для которого задано значение false datastore.entities.create
commit update или transform с предварительным условием exists, для которого задано значение true; datastore.entities.update
commit – обновление или преобразование без предварительного условия. datastore.entities.create
datastore.entities.update
Удалить: commit datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
partitionQuery datastore.entities.get
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
executePipeline (RPC)

с любым из следующих этапов:
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
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
datastore.entities.update
Удалить: 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

Если запрос create содержит значение tags, то требуются следующие дополнительные разрешения:

  • datastore.databases.createTagBinding

Если вы хотите проверить, успешно ли настроены привязки тегов, просмотрев их список, вам потребуются следующие дополнительные разрешения:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
восстановление datastore.backups.restoreDatabase
clone datastore.databases.clone

Если запрос clone содержит значение tags, то требуются следующие дополнительные разрешения:

  • datastore.databases.createTagBinding

Если вы хотите проверить, успешно ли настроены привязки тегов, просмотрев их список, вам потребуются следующие дополнительные разрешения:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
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.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Полный доступ к Cloud Firestore.
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
Доступ для чтения и записи данных в базе данных Cloud Firestore. Предназначен для разработчиков приложений и сервисных аккаунтов.
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.schemas.get
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list

datastore.insights.get
Доступ для чтения ко всем ресурсам Cloud Firestore.
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
Полный доступ для управления импортом и экспортом.
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
Полный доступ к управлению массовыми операциями.
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
Полный доступ к управлению определениями индексов.
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
Полный доступ к сканированиям Key Visualizer.
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
Доступ для чтения к расписаниям резервного копирования в базе данных Cloud Firestore.
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
Полный доступ к расписаниям резервного копирования в базе данных Cloud Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Доступ для чтения к информации о резервном копировании в местоположении Cloud Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Полный доступ к резервным копиям в местоположении Cloud Firestore.
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Возможность восстановить резервную копию Cloud Firestore в новой базе данных. Эта роль также позволяет создавать новые базы данных, не обязательно путем восстановления из резервной копии.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Возможность клонировать базу данных Cloud Firestore в новую базу данных. Эта роль также позволяет создавать новые базы данных, не обязательно путем клонирования.
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.statistics.get
Доступ для чтения к подсказкам, статистике и сканированиям Key Visualizer.

Специальные роли

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

Роли, необходимые для создания тегов и управления ими

Если в действиях по созданию или восстановлению представлен какой-либо тег, требуются определенные роли. Подробнее о том, как создавать пары "ключ-значение" для тегов, прежде чем связывать их с ресурсами базы данных…

Требуются перечисленные ниже разрешения.

Посмотреть теги
  • 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 Восстановите базу данных из резервной копии.
Название разрешения для 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 по умолчанию скрыта в консоли.

Дальнейшие действия