Thiết lập quyền truy cập thích hợp cho một tiện ích

Để một tiện ích thực hiện các hành động đã chỉ định, Firebase cấp cho mỗi thực thể 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 thực thể 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 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 một 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ò (gói quyền) cụ thể 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ần có để hoạt động, sau đó liệt kê các vai trò này và lý do tiện ích cần có các 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 có để 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 thực sự cần thiết, thì người dùng có thể ít có khả năng cài đặt tiện ích đó.

  1. 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 quyền truy cập vào sản phẩm đó cho tiện ích.

      Ví dụ: nếu tiện ích ghi dữ liệu vào một thực thể Realtime Database, thì tiện ích đó 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 một vai trò 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 kỳ 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.

  2. Sau khi xác định những sản phẩm mà tiện ích tương tác, bạn cần quyết định vai trò cần thiết cho lượt tương tác cụ thể đó. Một số sản phẩm cung cấp các vai trò khác nhau tuỳ thuộc vào hành động hoặc tập hợp 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 bộ chứa Cloud Storage. Vai trò storage.objectCreator sẽ cho phép tiện ích tạo một đối tượng trong bộ 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 các 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ả 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à 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 một đường dẫn Firebase Realtime Database được chỉ định. Khi được kích hoạt, tiện ích sẽ cập nhật email của 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). Hãy lưu ý những điều sau:

  • Mặc dù tiện ích kích hoạt từ mộ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 tương tác với AuthenticationCloud Messaging, nên tiện ích này yêu cầu các vai trò để truy cập vào các sản phẩm đó (tương ứng là firebaseauth.adminfirebasenotifications.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 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 có để hoạt động
reason
(bắt buộc)
chuỗi

Nội dung mô tả ngắn gọn lý do tiện ích cần quyền truy cập do vai trò cấp

Hãy nhớ cung cấp đủ thông tin chi tiết để người dùng có thể hiểu cách trình bổ trợ sử dụng vai trò.

resource
(không bắt buộc)
chuỗi

Chính sách IAM của tài nguyên 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à projects/${project_id}.

Giá trị được hỗ trợ là projects/*projects/*/buckets/*.

Giảm phạm vi của vai trò

Tiện ích phải tuân theo nguyên tắc đặc quyền tối thiểu và chỉ yêu cầu quyền truy cập vào các 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 bộ 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 bộ chứa mà nó cần, chứ không phải các bộ chứa khác trên cùng một dự án.

Trường này hỗ trợ dự án (projects/{project_id}) và bộ chứa bộ nhớ (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 Firebase. Hầu hết các vai trò trong bảng này là vai trò cấp sản phẩm Firebase, nhưng một số vai trò do Google Cloud trực tiếp quản lý (cụ thể là Cloud FirestoreCloud 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

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
Hangout Chat chat.owner
chat.reader
Tài sản trên đám mây 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
Trình phân tích tài nguyên Stackdriver 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
Công cụ học máy 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
Bộ chuyển mã trên đám mây transcoder.admin
transcoder.viewer
Vertex AI aiplatform.user
Khác identitytoolkit.admin
identitytoolkit.viewer