Để một tiện ích thực hiện các thao tác đã chỉ định, Firebase cấp cho mỗi phiên bản của một tiện ích đã cài đặt quyền truy cập có giới hạn vào dự án và dữ liệu của dự án thông qua một tài khoản dịch vụ.
Tài khoản dịch vụ là gì?
Tài khoản dịch vụ là một loại tài khoản người dùng Google đặc biệt. Đây là một người dùng không phải con người có thể thực hiện các lệnh gọi API được uỷ quyền đến các dịch vụ của Google.
Trong quá trình cài đặt một tiện ích, Firebase sẽ tạo một tài khoản dịch vụ cho tiện ích đó trong dự án. Mỗi phiên bản đã cài đặt của một tiện ích đều có tài khoản dịch vụ riêng. Nếu một phiên bản tiện ích bị gỡ cài đặt, Firebase sẽ xoá tài khoản dịch vụ của tiện ích đó.
Tài khoản dịch vụ được tạo cho các tiện ích có định dạng:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase giới hạn quyền truy cập của tiện ích vào một dự án và dữ liệu của dự án đó bằng cách chỉ định các vai trò cụ thể (gói quyền) cho tài khoản dịch vụ của tiện ích. Khi tạo một tiện ích, bạn sẽ xác định những vai trò mà tiện ích của bạn cần để hoạt động, sau đó liệt kê những vai trò này và lý do tiện ích của bạn cần những vai trò này trong tệp extension.yaml
(xem ví dụ ở cuối trang này).
Xác định những vai trò mà tiện ích của bạn yêu cầu
Khi tạo tiện ích, bạn sẽ xác định cấp độ truy cập mà tiện ích cần để hoạt động.
Trong quá trình cài đặt, CLI Firebase sẽ nhắc người dùng chấp nhận cấp truy cập do từng vai trò cấp. Nếu tiện ích của bạn yêu cầu nhiều vai trò hơn mức cần thiết, thì người dùng có thể ít có khả năng cài đặt tiện ích đó.
Xác định xem tiện ích của bạn có tương tác với một sản phẩm hay không:
Nếu tiện ích của bạn tương tác với một sản phẩm, thì bạn cần cấp cho tiện ích của mình quyền truy cập vào sản phẩm đó.
Ví dụ: nếu tiện ích của bạn ghi dữ liệu vào một phiên bản Realtime Database, thì tiện ích của bạn cần có vai trò Realtime Database (cụ thể là
firebasedatabase.admin
).Nếu tiện ích của bạn chỉ theo dõi một sự kiện kích hoạt từ một sản phẩm, thì tiện ích của bạn không cần có vai trò được liên kết với sản phẩm đó.
Ví dụ: nếu tiện ích của bạn kích hoạt khi ghi vào một thực thể Realtime Database (nhưng không ghi bất cứ nội dung nào vào cơ sở dữ liệu), thì tiện ích của bạn không cần vai trò Realtime Database.
Sau khi xác định những sản phẩm mà tiện ích của bạn tương tác, bạn cần quyết định vai trò nào là cần thiết cho hoạt động tương tác cụ thể đó. Một số sản phẩm cung cấp nhiều vai trò tuỳ thuộc vào hành động hoặc nhóm hành động được thực hiện.
Ví dụ: giả sử tiện ích của bạn tương tác với một vùng chứa Cloud Storage. Vai trò
storage.objectCreator
sẽ cho phép tiện ích tạo một đối tượng trong vùng chứa Cloud Storage, nhưng vai trò đó sẽ không cho phép tiện ích xem, xoá hoặc ghi đè các đối tượng. Để cho phép tiện ích thực hiện những thao tác bổ sung đó, bạn cần chỉ định vai tròstorage.objectAdmin
.
Hãy tham khảo phần ở cuối trang này để xem tất cả các vai trò được hỗ trợ mà bạn có thể chỉ định cho tài khoản dịch vụ của tiện ích. Để tìm hiểu về nội dung mô tả và các quyền được cấp cho từng vai trò, hãy truy cập vào tài liệu về Firebase hoặc tài liệu về Google Cloud. Bạn cũng có thể tra cứu các vai trò trong bảng điều khiển IAM và Quản trị của Google Cloud Console.
Cách chỉ định vai trò cho một tiện ích
Liệt kê các vai trò IAM cần thiết để tiện ích của bạn hoạt động trong phần roles
của tệp extension.yaml
.
Dưới đây là ví dụ về một tiện ích nghe theo đường dẫn Firebase Realtime Database được chỉ định. Khi được kích hoạt, tiện ích sẽ cập nhật email tài khoản người dùng (tương tác với Firebase Authentication) và gửi thông báo (tương tác với Firebase Cloud Messaging). Xin lưu ý những điều sau:
- Mặc dù tiện ích kích hoạt từ sự kiện Realtime Database, nhưng vai trò
firebasedatabase.admin
không được liệt kê (việc nghe không được coi là một tương tác). - Vì tiện ích này tương tác với Authentication và Cloud Messaging, nên tiện ích này cần có các vai trò để truy cập vào những sản phẩm đó (tương ứng là
firebaseauth.admin
vàfirebasenotifications.admin
).
# extension.yaml
...
# Roles assigned to the extension's service account by Firebase during installation
roles:
- role: firebaseauth.admin
reason: Required to update the email address of the user account
- role: firebasenotifications.admin
reason: Required to send a notification that the email address has been updated
...
Trong tệp extension.yaml
, hãy sử dụng các trường sau để chỉ định vai trò cho tài khoản dịch vụ của một tiện ích:
Trường | Loại | Nội dung mô tả |
---|---|---|
role (bắt buộc) |
chuỗi | Tên của vai trò IAM mà tiện ích cần để hoạt động |
reason (bắt buộc) |
chuỗi |
Nội dung mô tả ngắn gọn về lý do tiện ích cần quyền truy cập do vai trò cấp Đảm bảo bạn cung cấp đủ thông tin chi tiết để người dùng có thể hiểu cách tiện ích sử dụng vai trò này. |
resource (không bắt buộc) |
chuỗi |
Chính sách IAM của tài nguyên nào mà vai trò này sẽ được thêm vào. Nếu bạn bỏ qua thuộc tính này, giá trị mặc định sẽ là
Giá trị được hỗ trợ là |
Giảm phạm vi của các vai trò
Các tiện ích phải tuân theo nguyên tắc về đặc quyền tối thiểu và chỉ yêu cầu quyền truy cập vào những tài nguyên mà chúng cần.
Bạn có thể giới hạn phạm vi truy cập của một tiện ích bằng cách sử dụng trường role.resource
.
Ví dụ: nếu tiện ích của bạn cần ghi các đối tượng vào một vùng chứa Cloud Storage, bạn có thể sử dụng vai trò sau:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
Điều này cho phép tiện ích chỉ truy cập vào nhóm mà tiện ích cần, chứ không truy cập vào các nhóm khác trong cùng một dự án.
Trường này hỗ trợ các dự án (projects/{project_id}
) và các vùng lưu trữ (projects/{project_id}/buckets/{bucket_id}
).
Các vai trò được hỗ trợ cho tiện ích
Bảng sau đây liệt kê các vai trò IAM được hỗ trợ để tương tác với các sản phẩm của Firebase. Hầu hết các vai trò trong bảng này đều là vai trò ở cấp sản phẩm của Firebase, nhưng một số vai trò do Google Cloud quản lý trực tiếp (cụ thể là Cloud Firestore và Cloud Storage).
Các sản phẩm của Firebase
Nếu tiện ích của bạn tương tác với... | Chỉ định một trong các vai trò sau... |
---|---|
Cloud Firestore |
datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud Storage for Firebase |
storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase App Distribution |
firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication |
firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testing |
firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging |
firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics |
firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Hosting |
firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging |
firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML |
firebaseml.admin firebaseml.viewer |
Firebase Performance Monitoring |
firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Firebase Realtime Database |
firebasedatabase.admin firebasedatabase.viewer |
Quy tắc bảo mật |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Các sản phẩm của Google Cloud
Tìm hiểu về các vai trò này trong tài liệu của Google Cloud.
Nếu tiện ích của bạn tương tác với... | Chỉ định một trong các vai trò sau... |
---|---|
Hành động |
actions.Admin actions.Viewer |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
App Engine |
appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
AutoML |
automl.editor automl.predictor automl.viewer |
BigQuery |
bigquery.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Cloud Bigtable |
bigtable.reader bigtable.user bigtable.viewer |
Thanh toán | billing.viewer |
Hangouts Chat |
chat.owner chat.reader |
Cloud Asset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
Trình gỡ lỗi đám mây |
clouddebugger.agent clouddebugger.user |
Cloud Functions |
cloudfunctions.invoker cloudfunctions.viewer |
Cloud IAP |
iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Cloud IoT |
cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler |
cloudprofiler.agent cloudprofiler.user |
Cloud Scheduler |
cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Trình quét bảo mật trên Cloud |
cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL |
cloudsql.client cloudsql.editor cloudsql.viewer |
Cloud Trace |
cloudtrace.admin cloudtrace.agent cloudtrace.user |
Dataflow |
dataflow.developer dataflow.viewer dataflow.worker |
Dialogflow |
dialogflow.admin dialogflow.client dialogflow.reader |
Cloud Data Loss Prevention |
dlp.reader dlp.user |
Error Reporting |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
Ghi nhật ký |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Giám sát |
monitoring.editor monitoring.metricWriter monitoring.viewer |
Sổ tay AI |
notebooks.admin notebooks.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor redis.viewer |
Cloud Run | run.invoker |
Nguồn |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
Service Usage | serviceusage.apiKeysMetadataViewer |
Dịch vụ chuyển dữ liệu trên Cloud Storage |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
Khác |
identitytoolkit.admin identitytoolkit.viewer |