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

為了讓擴充功能執行指定動作,Firebase 會授予每個執行個體 的已安裝擴充功能透過 「服務帳戶」

什麼是服務帳戶?

服務帳戶 為特殊的 Google 使用者帳戶,代表非真人使用者 可以對 Google 服務進行授權的 API 呼叫

安裝擴充功能時,Firebase 會建立一個服務帳戶, 設定憑證每個安裝的擴充功能執行個體都有專屬的執行個體 新建立的服務帳戶如果解除安裝擴充功能執行個體,Firebase 會刪除 服務的服務帳戶

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

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

Firebase 會藉由指派角色,限制擴充功能存取專案及其資料 特定角色 (權限組合) 新增至擴充功能的服務帳戶建立擴充功能時 決定擴充功能需要哪些角色才能執行 角色,以及擴充功能在extension.yaml中需要這些角色的原因 檔案 (請參閱本頁底部的範例)。

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

建立擴充功能時,您可以決定擴充功能 則必須正常運作。

在安裝期間,Firebase CLI 會提示使用者接受 授予每個角色的權限如果您的擴充功能要求的角色超過要求 使用者安裝該應用程式的可能性就會降低

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

    • 如果你的擴充功能與產品互動,你必須 就能存取擴充功能

      舉例來說,如果你的擴充功能會將資料寫入即時資料庫執行個體, 你的擴充功能就需要有即時資料庫角色 firebasedatabase.admin).

    • 如果您的擴充功能只是監聽觸發事件, 產品,則不需要擴充功能相關聯的角色 或利用該產品進行交流

      舉例來說,假設擴充功能在寫入即時資料庫時「觸發」 執行個體 (但不會將任何內容寫入資料庫),然後 擴充功能「不需要」即時資料庫角色。

  2. 決定額外資訊與哪些產品互動後, 請決定該次互動需要什麼角色。只有部分通知 視行動或動作組合而定 執行任務

    舉例來說,假設您的擴充功能與 Cloud Storage 互動 Cloud Storage 也提供目錄同步處理功能 方便您同步處理 VM 目錄與值區storage.objectCreator 角色可讓擴充功能 在 Cloud Storage 值區中「建立」物件,但該角色不允許 檢視、刪除或覆寫物件。如何啟用擴充功能 就必須指派 請改為使用「storage.objectAdmin」角色。

請參閱本頁底部的章節 支援的角色:您可以指派擴充功能服務 讓他們使用服務帳戶如要瞭解每個角色的說明和授予的權限,請造訪 Firebase 說明文件Google Cloud 說明文件。 您也可以在 Google Cloud 控制台的 身分與存取權管理與管理控制台

如何為擴充功能指派角色

在「roles」區段中列出擴充功能所需的 IAM 角色 。extension.yaml

下方的例子是監聽指定 Firebase 即時資料庫路徑。觸發時,擴充功能會更新使用者帳戶 電子郵件 (與 Firebase 驗證功能互動),並傳送通知 (互動) Firebase 雲端通訊)。請留意以下事項:

  • 即使擴充功能會從即時資料庫事件「觸發」, 「firebasedatabase.admin」角色未列在清單中 (聆聽不會視為 interaction)。
  • 由於這個擴充功能與「驗證」和「雲端通訊」互動, 擴充功能需要角色,才能存取這些產品 (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 Firestore Cloud 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 應用程式發布 firebaseappdistro.admin
firebaseappdistro.viewer
Firebase 驗證 firebaseauth.admin
firebaseauth.viewer
Firebase A/B 測試 firebaseabt.admin
firebaseabt.viewer
Firebase 雲端通訊 firebasenotifications.admin
firebasenotifications.viewer
Firebase Crashlytics firebasecrashlytics.admin
firebasecrashlytics.viewer
Firebase 託管 firebasehosting.admin
firebasehosting.viewer
Firebase 應用程式內通訊 firebaseinappmessaging.admin
firebaseinappmessaging.viewer
Firebase ML firebaseml.admin
firebaseml.viewer
Firebase Performance Monitoring firebaseperformance.viewer
firebaseperformance.Reader
firebaseperformance.writer
Firebase 即時資料庫 firebasedatabase.admin
firebasedatabase.viewer
安全性規則 firebaserules.viewer
firebaserules.developer
firebaserules.deployer
Google Analytics firebaseanalytics.admin
firebaseanalytics.viewer

Google Cloud 產品

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

如果你的擴充功能與... 指派下列其中一個角色...
動作 actions.管理
actions.Viewer
Apigee apigee.analyticsAgent
apigee.analyticsEditor
apigee.analyticsViewer
apigee.apiCreator
apigee.deployer
apigee.developerAdmin
apigee.readOnlyAdmin
apigee.syncrManager
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.readSession 使用者
bigquery.user
Cloud Bigtable bigtable.Reader
bigtable.user
bigtable.viewer
計費功能 billing.viewer
Hangouts 即時通訊 Chat.owner
Chat.讀取工具
雲端資產 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 Notebook.admin
Notebook.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.admin
Transr.viewer
Vertex AI aiplatform.user
其他 Identitytoolkit.admin
Identitytoolkit.viewer