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

Để 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.

  1. 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.

  2. 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.adminfirebasenotifications.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à projects/${project_id} .

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

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 FirestoreCloud 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