Управление идентификацией и доступом (IAM)

При использовании клиентских библиотек сервера для 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
datastore.entities.update
beginTransaction datastore.databases.get
commit обновление или преобразовать с предусловием существования, установленным в значение false datastore.entities.create
commit , обновить или преобразовать с предусловием "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
write (RPC) обновления или преобразования с предусловием существования, установленным в значение false datastore.entities.create
write (RPC) обновления или преобразования с предусловием существования, установленным в 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
получать 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.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
Доступ к аналитическим данным, статистике и ключевым визуализациям можно получить по запросу.

Пользовательские роли

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

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

Если в операциях создания или восстановления используется какой-либо тег, требуются определенные роли. Дополнительные сведения о создании пар «ключ-значение» для тегов перед их связыванием с ресурсами базы данных см. в разделе «Создание и управление тегами» .

Для работы требуются следующие разрешения.

Просмотреть теги
  • 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 по умолчанию скрыта в консоли.

Что дальше?