為擴充功能設定適當存取權

為了讓擴充功能執行指定動作,Firebase 會透過服務帳戶,授予已安裝擴充功能的每個執行個體對專案及其資料的有限存取權。

什麼是服務帳戶?

服務帳戶是特殊的 Google 使用者帳戶,代表可對 Google 服務發出已授權 API 呼叫的非人類使用者。

在安裝擴充功能時,Firebase 會為專案中的擴充功能建立服務帳戶。每個已安裝的擴充功能例項都有自己的服務帳戶。如果解除安裝擴充功能執行個體,Firebase 會刪除該擴充功能的服務帳戶。

為擴充功能建立的服務帳戶格式如下:

ext-extension-instance-id@project-id.iam.gserviceaccount.com

Firebase 會將特定角色 (權限組合) 指派給擴充功能的服務帳戶,藉此限制擴充功能對專案及其資料的存取權。建構擴充功能時,您必須判斷擴充功能需要哪些角色才能運作,然後在 extension.yaml 檔案中列出這些角色,以及擴充功能需要這些角色的原因 (請參閱本頁底部的範例)。

決定擴充功能需要哪些角色

建構擴充功能時,您可以決定擴充功能運作所需的存取層級。

在安裝期間,Firebase CLI 會提示使用者接受每個角色授予的存取層級。如果擴充功能要求的角色多於實際需要的角色,使用者可能不太可能安裝。

  1. 判斷擴充功能是否與產品互動:

    • 如果你的擴充功能與產品「互動」,你必須授予擴充功能存取該產品的權限。

      舉例來說,如果擴充功能會將資料寫入 Realtime Database 執行個體,擴充功能就需要 Realtime Database 角色 (尤其是 firebasedatabase.admin)。

    • 如果擴充功能只是監聽產品觸發事件,則擴充功能不需要與該產品相關聯的角色。

      舉例來說,如果你的擴充功能會在寫入 Realtime Database 執行個體時「觸發」 (但不會將任何內容寫入資料庫),則擴充功能「不需要」Realtime Database 角色。

  2. 確定擴充功能與哪些產品互動後,您需要決定該互動需要哪些角色。部分產品會根據執行的動作或動作組合提供不同的角色。

    舉例來說,假設您的擴充功能與 Cloud Storage 值區互動。storage.objectCreator 角色可讓擴充功能在 Cloud Storage 值區中「建立」物件,但該角色不允許擴充功能查看、刪除或覆寫物件。如要讓擴充功能執行這些額外動作,您必須改為指派 storage.objectAdmin 角色。

請參閱本頁底部的部分,查看可指派至擴充功能服務帳戶的所有支援角色。如要瞭解各個角色的說明和授予的權限,請參閱 Firebase 說明文件Google Cloud 說明文件。您也可以在 Google Cloud 控制台的「IAM & Admin」(身分與存取權管理) 面板中查詢角色。

如何為擴充功能指派角色

extension.yaml 檔案的 roles 區段中,列出擴充功能運作所需的 IAM 角色。

以下是監聽指定 Firebase Realtime Database 路徑的擴充功能範例。觸發時,擴充功能會更新使用者帳戶電子郵件 (與 Firebase Authentication 互動) 並傳送通知 (與 Firebase Cloud Messaging 互動)。請注意以下事項:

  • 即使擴充功能是從 Realtime Database 事件觸發,系統也不會列出 firebasedatabase.admin 角色 (因為監聽不屬於互動)。
  • 由於擴充功能會與 AuthenticationCloud Messaging 互動,因此擴充功能需要角色才能存取這些產品 (分別為 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

...

extension.yaml 檔案中,使用下列欄位將角色指派給擴充功能的服務帳戶:

欄位 類型 說明
role
(必要)
字串 擴充功能執行所需的 IAM 角色名稱
reason
(必要)
字串

簡要說明擴充功能需要角色授予的存取權的原因

請務必提供足夠的詳細資料,讓使用者瞭解擴充功能如何使用角色。

resource
(選填)
字串

要新增至哪個資源的 IAM 政策。如果省略,則預設為 projects/${project_id}

支援的值為 projects/*projects/*/buckets/*

縮小角色範圍

擴充功能應遵循最小權限原則,只要求存取所需資源的權限。您可以使用 role.resource 欄位限制擴充功能的存取範圍。舉例來說,如果外掛程式需要將物件寫入 Cloud Storage 值區,您可以使用下列角色:

roles:
  - role: storage.objectCreator
    reason: Needed in order to write
    resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}

如此一來,擴充功能就只會存取所需的值區,而不存取相同專案中的其他項目。

這個欄位支援專案 (projects/{project_id}) 和 Storage 值區 (projects/{project_id}/buckets/{bucket_id})。

擴充功能支援的角色

下表列出可用於與 Firebase 產品互動的支援 IAM 角色。這份表格中的角色大多是 Firebase 產品層級角色,但部分角色則由 Google Cloud 直接管理 (具體來說,就是 Cloud FirestoreCloud Storage)。

Firebase 產品

如果你的擴充功能與... 指派其中一個角色...
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
安全性規則 firebaserules.viewer
firebaserules.developer
firebaserules.deployer
Google Analytics firebaseanalytics.admin
firebaseanalytics.viewer

Google Cloud 產品

如要瞭解這些角色,請參閱 Google Cloud 說明文件

如果擴充功能與以下項目互動: 指派其中一個角色...
動作 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
計費功能 billing.viewer
Hangouts Chat chat.owner
chat.reader
雲端資產 cloudasset.owner
cloudasset.viewer
Cloud Data Fusion datafusion.admin
datafusion.viewer
Cloud Debugger 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
Cloud Security Scanner 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
記錄 logging.configWriter
logging.logWriter
logging.privateLogViewer
logging.viewer
Machine Learning Engine ml.developer
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.operationOwner
ml.viewer
監控 monitoring.editor
monitoring.metricWriter
monitoring.viewer
AI Notebooks notebooks.admin
notebooks.viewer
Pub/Sub pubsub.editor
pubsub.publisher
pubsub.subscriber
pubsub.viewer
Memorystore Redis redis.editor
redis.viewer
Cloud Run run.invoker
來源 source.reader
source.writer
Cloud Spanner spanner.databaseAdmin
spanner.databaseReader
spanner.databaseUser
spanner.viewer
服務使用情形 serviceusage.apiKeysMetadataViewer
Cloud Storage 移轉服務 storagetransfer.user
storagetransfer.viewer
Cloud Transcoder transcoder.admin
transcoder.viewer
Vertex AI aiplatform.user
其他 identitytoolkit.admin
identitytoolkit.viewer