Để tiện ích mở rộng thực hiện các hành động được chỉ định, Firebase cấp cho mỗi phiên bản của tiện ích mở rộng đã 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 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. Nó đại diện cho một người dùng không phải con người có thể thực hiện lệnh gọi API được ủy quyền tới các dịch vụ của Google.
Trong quá trình cài đặt tiện ích mở rộng, Firebase tạo tài khoản dịch vụ cho tiện ích mở rộng trong dự án. Mỗi phiên bản tiện ích mở rộng được cài đặt đều có tài khoản dịch vụ riêng. Nếu phiên bản tiện ích mở rộng bị gỡ cài đặt, Firebase sẽ xóa tài khoản dịch vụ của tiện ích mở rộng đó.
Tài khoản dịch vụ được tạo cho tiện ích mở rộng 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 mở rộng vào 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 mở rộng. Khi tạo tiện ích mở rộng, bạn xác định vai trò nào tiện ích mở rộng của bạn yêu cầu hoạt động, sau đó bạn liệt kê các vai trò này và lý do tiện ích mở rộng của bạn cần những vai trò này trong tệp tiện ích extension.yaml
của bạn (xem ví dụ ở cuối trang này).
Xác định vai trò mà tiện ích mở rộng của bạn yêu cầu
Khi tạo tiện ích mở rộng, bạn xác định cấp độ truy cập mà tiện ích mở rộng yêu cầu để hoạt động.
Trong quá trình cài đặt, Firebase CLI 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 mở rộng của bạn yêu cầu nhiều vai trò hơn nhu cầu thực sự thì người dùng có thể ít cài đặt tiện ích mở rộng đó hơn.
Xác định xem tiện ích mở rộng của bạn có tương tác với sản phẩm hay không:
Nếu tiện ích mở rộng 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 mở rộng của mình quyền truy cập vào sản phẩm đó.
Ví dụ: nếu tiện ích mở rộng của bạn ghi dữ liệu vào phiên bản Cơ sở dữ liệu thời gian thực thì tiện ích mở rộng của bạn cần có vai trò Cơ sở dữ liệu thời gian thực (cụ thể là
firebasedatabase.admin
).Nếu tiện ích mở rộng của bạn chỉ lắng nghe sự kiện kích hoạt từ một sản phẩm thì tiện ích mở rộng của bạn không cần vai trò được liên kết với sản phẩm đó.
Ví dụ: nếu tiện ích mở rộng của bạn kích hoạt ghi vào phiên bản Cơ sở dữ liệu thời gian thực (nhưng không ghi bất kỳ nội dung nào vào cơ sở dữ liệu) thì tiện ích mở rộng của bạn không cần vai trò Cơ sở dữ liệu thời gian thực.
Sau khi bạn đã xác định những sản phẩm nào tiện ích mở rộng của bạn tương tác , bạn cần quyết định vai trò nào được yêu cầu cho tương tác cụ thể đó. Một số sản phẩm cung cấp các vai trò khác nhau tùy 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 mở rộng của bạn tương tác với nhóm Lưu trữ đám mây. Vai trò
storage.objectCreator
sẽ cho phép tiện ích mở rộng 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 mở rộng xem, xóa hoặc ghi đè đối tượng. Để cho phép tiện ích mở rộng thực hiện các hành động bổ sung đó, thay vào đó, bạn cần chỉ định vai tròstorage.objectAdmin
.
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 tài khoản dịch vụ của tiện ích mở rộng của mình. Để tìm hiểu về mô tả và quyền được cấp của từng vai trò, hãy truy cập tài liệu Firebase hoặc tài liệu Google Cloud . Bạn cũng có thể tra cứu vai trò trong bảng điều khiển IAM & Admin của bảng điều khiển Google Cloud.
Cách chỉ định vai trò cho tiện ích mở rộng
Liệt kê các vai trò IAM cần thiết để tiện ích mở rộng của bạn hoạt động trong phần roles
của tệp extension.yaml
.
Dưới đây là ví dụ về tiện ích mở rộng lắng nghe đường dẫn Cơ sở dữ liệu thời gian thực Firebase được chỉ định. Khi được kích hoạt, tiện ích mở rộng sẽ cập nhật email tài khoản người dùng (tương tác với Xác thực Firebase) và gửi thông báo (tương tác với Nhắn tin qua đám mây của Firebase). Lưu ý những điều sau:
- Mặc dù tiện ích mở rộng kích hoạt từ sự kiện Cơ sở dữ liệu thời gian thực, vai trò
firebasedatabase.admin
không được liệt kê (nghe không được coi là tương tác ). - Vì tiện ích mở rộng tương tác với Xác thực và Nhắn tin qua đám mây nên tiện ích mở rộng yêu cầu các vai trò để truy cập vào các sản phẩm đó (
firebaseauth.admin
vàfirebasenotifications.admin
, tương ứng).
# 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
của bạn, 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 mở rộng:
Cánh đồng | Kiểu | Sự miêu tả |
---|---|---|
role (yêu cầu) | sợi dây | Tên của vai trò IAM mà tiện ích mở rộng cần có để hoạt động |
reason (yêu cầu) | sợi dây | Mô tả ngắn gọn lý do tại sao tiện ích mở rộng cần quyền truy cập do vai trò cấp Đảm bảo cung cấp đủ chi tiết để người dùng có thể hiểu cách tiện ích sử dụng vai trò. |
resource (không bắt buộc) | sợi dây | Vai trò này sẽ được thêm vào chính sách IAM của tài nguyên nào. Nếu bị bỏ qua, mặc định là Các giá trị được hỗ trợ là |
Giảm phạm vi vai trò
Các tiện ích mở rộng 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 tiện ích mở rộng bằng cách sử dụng trường role.resource
. Ví dụ: nếu tiện ích mở rộng của bạn cần ghi đối tượng vào nhóm 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 mở rộng chỉ truy cập vào nhóm mà nó cần chứ không phải 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à nhóm lưu trữ ( projects/{project_id}/buckets/{bucket_id}
).
Vai trò được hỗ trợ cho tiện ích mở rộng
Bảng sau 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ò được quản lý trực tiếp bởi Google Cloud (cụ thể là Cloud Firestore và Cloud Storage ).
Sản phẩm căn cứ hỏa lực
Nếu tiện ích mở rộng của bạn tương tác với... | Chỉ định một trong những vai trò này... |
---|---|
Cửa hàng đám mây | datastore.importExportAdmin datastore.indexAdmin kho dữ liệu.owner kho dữ liệu.user datastore.viewer |
Bộ nhớ đám mây cho Firebase | lưu trữ.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Phân phối ứng dụng Firebase | firebaseappdistro.admin firebaseappdistro.viewer |
Xác thực Firebase | firebaseauth.admin firebaseauth.viewer |
Thử nghiệm A/B của Firebase | firebaseabt.admin firebaseabt.viewer |
Nhắn tin qua đám mây Firebase | firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
Lưu trữ căn cứ hỏa lực | firebasehosting.admin firebasehosting.viewer |
Nhắn tin trong ứng dụng Firebase | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML | firebaseml.admin firebaseml.viewer |
Giám sát hiệu suất Firebase | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Cơ sở dữ liệu thời gian thực của Firebase | firebasedatabase.admin firebasedatabase.viewer |
Quy tắc bảo mật | firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google phân tích | firebaseanalytics.admin firebaseanalytics.viewer |
Các sản phẩm của Google Cloud
Tìm hiểu về những vai trò này trong tài liệu của Google Cloud .
Nếu tiện ích mở rộng của bạn tương tác với... | Chỉ định một trong những vai trò này... |
---|---|
hành động | hành động.Admin hành động.Viewer |
Apigee | apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerQuản trị viên apigee.readOnlyAdmin apigee.synchronizerManager |
Ứng dụng động cơ | 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 |
Đám mây lớn | bigtable.reader bigtable.user bigtable.viewer |
Thanh toán | thanh toán.viewer |
Trò chuyện Hangout | trò chuyện.chủ sở hữu trò chuyện.reader |
Tài sản đám mây | cloudasset.owner cloudasset.viewer |
Hợp nhất dữ liệu đám mây | datafusion.admin datafusion.viewer |
Trình gỡ lỗi đám mây | clouddebugger.agent clouddebugger.user |
Chức năng đám mây | cloudfunctions.invoker cloudfunctions.viewer |
IAP đám mây | iap.admin iap.httpsResourceAccessor iap.settingsQuản trị viên iap.tunnelResourceAccessor |
Đám mây IoT | cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Trình phân tích Stackdriver | cloudprofiler.agent cloudprofiler.user |
Bộ lập lịch đám mây | cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Máy quét bảo mật đám mây | cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Đám mây SQL | cloudsql.client cloudsql.editor cloudsql.viewer |
Dấu vết đám mây | cloudtrace.admin cloudtrace.agent cloudtrace.user |
Dòng dữ liệu | dataflow.developer dataflow.viewer dataflow.worker |
Hộp thoại | hộp thoại.admin hộp thoại.client hộp thoại.reader |
Ngăn chặn mất dữ liệu trên đám mây | dlp.reader dlp.user |
Báo cáo lỗi | errorreporting.user errorreporting.viewer errorreporting.writer |
Sự kiện | sự kiệnarc.publisher sự kiệnarc.eventReceiver |
Kho lưu trữ đám mây | tập tin.editor tập tin.viewer |
Ghi nhật ký | ghi nhật ký.configWriter ghi nhật ký.logWriter ghi nhật ký.privateLogViewer ghi nhật ký.viewer |
Công cụ học máy | ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.OperationOwner ml.viewer |
Giám sát | giám sát.editor giám sát.metricWriter giám sát.viewer |
Sổ tay AI | sổ ghi chép.admin notebook.viewer |
Quán rượu/Phụ | pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Kho lưu trữ bộ nhớ Redis | redis.editor redis.viewer |
Chạy trên đám mây | run.invoker |
Nguồn | nguồn.reader nguồn.writer |
Cờ lê đám mây | cờ lê.databaseAdmin spanner.databaseReader spanner.databaseUser cờ lê.viewer |
Sử dụng dịch vụ | serviceusage.apiKeysMetadataViewer |
Dịch vụ chuyển lưu trữ đám mây | storagetransfer.user storagetransfer.viewer |
Bộ chuyển mã đám mây | bộ chuyển mã.admin bộ chuyển mã.viewer |
AI đỉnh | aiplatform.user |
Khác | nhận dạngtoolkit.admin nhận dạngtoolkit.viewer |