Quản lý danh tính và quyền truy cập (IAM)

Khi sử dụng thư viện ứng dụng máy chủ cho Cloud Firestore, bạn có thể quản lý quyền truy cập vào tài nguyên của mình bằng dịch vụ Quản lý danh tính và quyền truy cập (IAM). IAM cho phép bạn cấp quyền truy cập chi tiết hơn vào các tài nguyên Google Cloud cụ thể và ngăn chặn quyền truy cập không mong muốn vào các tài nguyên khác. Trang này mô tả các quyền và vai trò của IAM cho Cloud Firestore. Để biết thông tin mô tả chi tiết về IAM, hãy đọc tài liệu về IAM.

IAM cho phép bạn áp dụng nguyên tắc bảo mật về đặc quyền tối thiểu, nhờ đó bạn chỉ cấp quyền truy cập cần thiết vào tài nguyên của mình.

IAM cho phép bạn kiểm soát ai (người dùng) có quyền gì (vai trò) đối với tài nguyên nào bằng cách thiết lập chính sách IAM. Chính sách IAM cấp một hoặc nhiều vai trò cho người dùng, cấp cho người dùng một số quyền nhất định. Ví dụ: bạn có thể cấp vai trò datastore.indexAdmin cho một người dùng, cho phép người dùng đó tạo, sửa đổi, xoá, liệt kê hoặc xem chỉ mục.

Quyền và vai trò

Phần này tóm tắt các quyền và vai trò mà Cloud Firestore hỗ trợ.

Các quyền cần thiết cho phương thức API

Bảng sau đây liệt kê các quyền mà phương thức gọi phải có để thực hiện mỗi hành động:

Phương thức Các quyền bắt buộc
projects.databases.documents
batchGet datastore.entities.get
batchWrite cập nhật hoặc chuyển đổi với điều kiện tiên quyết tồn tại được đặt thành false datastore.entities.create
batchWrite cập nhật hoặc chuyển đổi với điều kiện tiên quyết tồn tại được đặt thành true datastore.entities.create
batchWrite cập nhật hoặc chuyển đổi mà không có điều kiện tiên quyết datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
commit cập nhật hoặc chuyển đổi với điều kiện tiên quyết tồn tại được đặt thành false datastore.entities.create
commit cập nhật hoặc chuyển đổi với điều kiện tiên quyết tồn tại được đặt thành true datastore.entities.update
commit cập nhật hoặc chuyển đổi mà không có điều kiện tiên quyết datastore.entities.create
datastore.entities.update
Xoá 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)

với bất kỳ giai đoạn nào sau đây:
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

với bất kỳ giai đoạn nào sau đây:
- documents(...)
datastore.entities.get
executePipeline (RPC)

với bất kỳ giai đoạn nào sau đây:
- update(...)
datastore.entities.update
executePipeline (RPC)

với bất kỳ giai đoạn nào sau đây:
- delete(...)
datastore.entities.delete
write (RPC) cập nhật hoặc chuyển đổi với điều kiện tiên quyết tồn tại được đặt thành false datastore.entities.create
write (RPC) cập nhật hoặc chuyển đổi với điều kiện tiên quyết tồn tại được đặt thành true datastore.entities.update
write (RPC) cập nhật hoặc chuyển đổi mà không có điều kiện tiên quyết datastore.entities.create
datastore.entities.update
Xoá 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

Nếu yêu cầu create của bạn chứa giá trị tags, thì bạn cần có thêm các quyền sau:

  • datastore.databases.createTagBinding

Nếu bạn muốn xác minh xem các mối liên kết thẻ có được thiết lập thành công hay không bằng cách liệt kê các mối liên kết, thì bạn cần có thêm các quyền sau:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
khôi phục datastore.backups.restoreDatabase
clone datastore.databases.clone

Nếu yêu cầu clone của bạn chứa giá trị tags, thì bạn cần có thêm các quyền sau:

  • datastore.databases.createTagBinding

Nếu bạn muốn xác minh xem các mối liên kết thẻ có được thiết lập thành công hay không bằng cách liệt kê các mối liên kết, thì bạn cần có thêm các quyền sau:

  • 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
tạo datastore.backupSchedules.create
cập nhật datastore.backupSchedules.update
xóa datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
xóa datastore.backups.delete

Vai trò được xác định trước

Với IAM, mọi phương thức API trong Cloud Firestore đều yêu cầu tài khoản đưa ra yêu cầu API phải có quyền thích hợp để sử dụng tài nguyên. Quyền được cấp bằng cách đặt các chính sách cấp vai trò cho người dùng, nhóm hoặc tài khoản dịch vụ. Ngoài các vai trò cơ bản là chủ sở hữu, người chỉnh sửa và người xem, bạn có thể cấp vai trò Cloud Firestore cho người dùng trong dự án của mình.

Bảng sau đây liệt kê các vai trò IAM của Cloud Firestore. Bạn có thể cấp nhiều vai trò cho một người dùng, nhóm hoặc tài khoản dịch vụ.

Vai trò Quyền Mô tả
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Toàn quyền truy cập vào 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
Quyền đọc/ghi dữ liệu trong cơ sở dữ liệu Cloud Firestore. Dành cho nhà phát triển ứng dụng và tài khoản dịch vụ.
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
Quyền đọc đối với tất cả tài nguyên 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
Toàn quyền quản lý hoạt động nhập và xuất.
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
Toàn quyền truy cập để quản lý các thao tác hàng loạt.
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
Toàn quyền quản lý các định nghĩa chỉ mục.
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
Có toàn quyền truy cập vào các bản quét của Key Visualizer.
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
Quyền đọc đối với lịch sao lưu trong cơ sở dữ liệu 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
Toàn quyền truy cập vào lịch sao lưu trong cơ sở dữ liệu Cloud Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Quyền đọc thông tin sao lưu ở một vị trí Cloud Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Toàn quyền truy cập vào các bản sao lưu ở một vị trí 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
Khả năng khôi phục bản sao lưu Cloud Firestore vào một cơ sở dữ liệu mới. Vai trò này cũng cho phép tạo cơ sở dữ liệu mới, không nhất thiết phải khôi phục từ bản sao lưu.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Khả năng sao chép cơ sở dữ liệu Cloud Firestore vào một cơ sở dữ liệu mới. Vai trò này cũng cho phép tạo cơ sở dữ liệu mới, không nhất thiết phải bằng cách sao chép.
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
Quyền đọc đối với Thông tin chi tiết, Số liệu thống kê và bản quét Key Visualizer.

Vai trò tuỳ chỉnh

Nếu các vai trò được xác định trước không đáp ứng được yêu cầu của doanh nghiệp, bạn có thể xác định vai trò tuỳ chỉnh của riêng mình bằng các quyền mà bạn chỉ định:

Các vai trò cần thiết để tạo và quản lý thẻ

Nếu bất kỳ thẻ nào được thể hiện trong hành động tạo hoặc khôi phục, thì bạn cần có một số vai trò. Hãy xem bài viết Tạo và quản lý thẻ để biết thêm thông tin về cách tạo cặp khoá-giá trị của thẻ trước khi liên kết các cặp khoá-giá trị đó với tài nguyên cơ sở dữ liệu.

Bạn cần có các quyền được liệt kê sau đây.

Xem thẻ
  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
Quản lý thẻ trên tài nguyên

Bạn cần có quyền sau đây đối với tài nguyên cơ sở dữ liệu mà bạn đang đính kèm giá trị thẻ.

  • datastore.databases.createTagBinding

Quyền

Bảng sau đây liệt kê các quyền mà Cloud Firestore hỗ trợ.

Tên quyền truy cập cơ sở dữ liệu Mô tả
datastore.databases.get Bắt đầu hoặc khôi phục một giao dịch.
datastore.databases.import Nhập các thực thể vào cơ sở dữ liệu.
datastore.databases.export Xuất các thực thể từ cơ sở dữ liệu.
datastore.databases.bulkDelete Xoá hàng loạt thực thể khỏi cơ sở dữ liệu.
datastore.databases.getMetadata Đọc siêu dữ liệu từ cơ sở dữ liệu.
datastore.databases.list Liệt kê các cơ sở dữ liệu trong một dự án.
datastore.databases.create Tạo cơ sở dữ liệu.
datastore.databases.update Cập nhật cơ sở dữ liệu.
datastore.databases.delete Xoá cơ sở dữ liệu.
datastore.databases.clone Sao chép cơ sở dữ liệu.
datastore.databases.createTagBinding Tạo mối liên kết thẻ cho cơ sở dữ liệu.
datastore.databases.deleteTagBinding Xoá mối liên kết thẻ cho một cơ sở dữ liệu.
datastore.databases.listTagBindings Liệt kê tất cả các mối liên kết thẻ cho một cơ sở dữ liệu.
datastore.databases.listEffectiveTagBindings Liệt kê các mối liên kết thẻ hiệu quả cho một cơ sở dữ liệu.
Tên quyền của pháp nhân Mô tả
datastore.entities.create Tạo tài liệu.
datastore.entities.delete Xoá tài liệu.
datastore.entities.get Đọc tài liệu.
datastore.entities.list Liệt kê tên của các tài liệu trong một dự án.
(Bạn cần có datastore.entities.get để truy cập vào dữ liệu tài liệu.)
datastore.entities.update Cập nhật tài liệu.
Tên quyền của chỉ mục Mô tả
datastore.schemas.create Tạo chỉ mục.
datastore.schemas.delete Xoá chỉ mục.
datastore.schemas.get Đọc siêu dữ liệu từ một chỉ mục.
datastore.schemas.list Liệt kê các chỉ mục trong một dự án.
datastore.schemas.update Cập nhật chỉ mục.
Tên quyền thao tác Mô tả
datastore.operations.cancel Huỷ một thao tác diễn ra trong thời gian dài.
datastore.operations.delete Xoá một thao tác diễn ra trong thời gian dài.
datastore.operations.get Nhận trạng thái mới nhất của một thao tác diễn ra trong thời gian dài.
datastore.operations.list Liệt kê các thao tác chạy trong thời gian dài.
Tên quyền của dự án Mô tả
resourcemanager.projects.get Duyệt xem tài nguyên trong dự án.
resourcemanager.projects.list Liệt kê các dự án thuộc sở hữu.
Tên quyền truy cập vị trí Mô tả
datastore.locations.get Nhận thông tin chi tiết về vị trí cơ sở dữ liệu. Cần thiết để tạo một cơ sở dữ liệu mới.
datastore.locations.list Liệt kê các vị trí cơ sở dữ liệu hiện có. Cần thiết để tạo một cơ sở dữ liệu mới.
Tên quyền của Key Visualizer Mô tả
datastore.keyVisualizerScans.get Xem thông tin chi tiết về các lần quét của Trình hiển thị khoá.
datastore.keyVisualizerScans.list Liệt kê các bản quét Key Visualizer hiện có.
Tên quyền Lịch biểu sao lưu Mô tả
datastore.backupSchedules.get Xem thông tin chi tiết về lịch sao lưu.
datastore.backupSchedules.list Liệt kê các lịch biểu sao lưu hiện có.
datastore.backupSchedules.create Tạo lịch sao lưu.
datastore.backupSchedules.update Cập nhật lịch sao lưu.
datastore.backupSchedules.delete Xoá lịch sao lưu.
Tên quyền sao lưu Mô tả
datastore.backups.get Xem thông tin chi tiết về một bản sao lưu.
datastore.backups.list Liệt kê các bản sao lưu hiện có.
datastore.backups.delete Xoá bản sao lưu.
datastore.backups.restoreDatabase Khôi phục cơ sở dữ liệu từ bản sao lưu.
Tên quyền truy cập thông tin chi tiết Mô tả
datastore.insights.get Nhận thông tin chi tiết về một tài nguyên

Độ trễ khi thay đổi vai trò

Cloud Firestore lưu quyền IAM vào bộ nhớ đệm trong 5 phút, nên có thể mất đến 5 phút thì thay đổi về vai trò mới có hiệu lực.

Quản lý IAM của Cloud Firestore

Bạn có thể nhận và đặt chính sách IAM bằng Google Cloud Console, API IAM hoặc công cụ dòng lệnh gcloud. Hãy xem phần Cấp, thay đổi và thu hồi quyền truy cập của thành viên dự án để biết thông tin chi tiết.

Định cấu hình quyền truy cập có điều kiện

Bạn có thể sử dụng Điều kiện IAM để xác định và thực thi quyền kiểm soát truy cập có điều kiện.

Ví dụ: điều kiện sau đây chỉ định cho một chủ thể vai trò datastore.user cho đến một ngày cụ thể:

{
  "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')"
  }
}

Để tìm hiểu cách xác định Điều kiện IAM cho quyền truy cập tạm thời, hãy xem bài viết Định cấu hình quyền truy cập tạm thời.

Để tìm hiểu cách định cấu hình Điều kiện IAM cho quyền truy cập vào một hoặc nhiều cơ sở dữ liệu, hãy xem phần Định cấu hình điều kiện truy cập cơ sở dữ liệu.

Sự phụ thuộc của quy tắc bảo mật vào IAM

Cloud Firestore Security Rules cho ứng dụng di động/web phụ thuộc vào tài khoản dịch vụ và liên kết IAM sau:

Tài khoản dịch vụ Vai trò IAM
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

Firebase tự động thiết lập tài khoản dịch vụ này cho bạn. Nếu bạn xoá vai trò firebaserules.system khỏi tài khoản dịch vụ này, thì các quy tắc bảo mật sẽ từ chối tất cả yêu cầu. Để khôi phục mối liên kết IAM này, hãy dùng lệnh gcloud CLI sau:

gcloud projects add-iam-policy-binding project_id \
--member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \
--role=roles/firebaserules.system

Để xác định project_id và project_number, hãy xem phần Xác định dự án.

Sử dụng Google Cloud CLI thay vì Google Cloud Console, vì vai trò firebaserules.system bị ẩn trong bảng điều khiển theo mặc định.

Bước tiếp theo