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 |
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 |
Xoá 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)với bất kỳ giai đoạn nào sau đây: - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
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 |
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.createNếu yêu cầu
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:
|
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.cloneNếu yêu cầu
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:
|
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.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Toàn quyền truy cập vào 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 |
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.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 |
Quyền đọc đối với tất cả tài nguyên Cloud Firestore. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
Toàn quyền quản lý hoạt động nhập và xuất. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.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.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Toàn quyền quản lý các định nghĩa chỉ mục. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.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.getdatastore.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.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.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.getdatastore.backups.list |
Quyền đọc thông tin sao lưu ở một vị trí Cloud Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.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.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.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.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.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.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.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.listTagBindingsdatastore.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
- Tìm hiểu thêm về IAM.
- Cấp vai trò IAM.
- Tìm hiểu về phương thức xác thực.