為擴展設定適當的存取權限

為了讓擴充功能執行其指定的操作,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 儲存桶互動。 storage.objectCreator角色將允許擴充功能在 Cloud Storage 儲存桶中建立對象,但該角色不允許擴充功能檢視、刪除或覆寫對象。要讓擴充功能能夠執行這些附加操作,您需要指派storage.objectAdmin角色。

請參閱本頁底部的部分,查看您可以為擴充功能的服務帳戶指派的所有支援的角色。若要了解每個角色的描述和授予的權限,請造訪Firebase 文件Google Cloud 文件。您也可以在 Google Cloud 控制台的IAM 和管理面板中找到角色。

如何為分機分配角色

extension.yaml檔案的roles部分中列出您的擴充功能運行所需的 IAM 角色。

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

  • 即使擴充功能從即時資料庫事件觸發,也不會列出firebasedatabase.admin角色(偵聽不被視為互動)。
  • 由於擴充功能與身份驗證和雲端訊息傳遞交互,因此擴充功能需要角色來存取這些產品(分別為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} ) 和儲存桶 ( projects/{project_id}/buckets/{bucket_id} )。

擴展支援的角色

下表列出了支援與 Firebase 產品互動的 IAM 角色。此表中的大多數角色都是Firebase 產品級角色,但有些角色直接由 Google Cloud 管理(具體來說, Cloud FirestoreCloud Storage )。

Firebase 產品

如果您的擴充功能與...交互分配這些角色之一...
雲端Firestore資料儲存.importExportAdmin
資料儲存.indexAdmin
資料儲存.擁有者
資料儲存.用戶
資料儲存檢視器
Firebase 雲端儲存儲存管理
儲存.objectAdmin
儲存.objectCreator
儲存.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 機器學習firebaseml.admin
firebaseml.viewer
Firebase 效能監控firebaseperformance.viewer
firebaseperformance.reader
firebaseperformance.writer
Firebase 即時資料庫firebaseddatabase.admin
firebaseddatabase.viewer
安全規則firebaserules.viewer
firebaserules.developer
firebaserules.deployer
Google分析firebaseanalytics.admin
firebaseanalytics.viewer

谷歌雲端產品

Google Cloud 文件中了解這些角色。

如果您的擴充功能與...交互分配這些角色之一...
行動操作.管理員
動作.檢視器
阿皮吉apigee.analyticsAgent
apigee.analyticsEditor
apigee.analyticsViewer
apigee.apiCreator
apigee.deployer
apigee.developerAdmin
apigee.readOnlyAdmin
apigee.synchronizerManager
應用引擎appengine.appAdmin
appengine.appViewer
appengine.codeViewer
appengine.deployer
appengine.serviceAdmin
自動機器學習自動編輯器
自動預測器
自動檢視器
大查詢bigquery.connectionAdmin
bigquery.connectionUser
bigquery.dataEditor
bigquery.dataOwner
bigquery.dataViewer
bigquery.jobUser
bigquery.metadataViewer
bigquery.readSessionUser
bigquery.user
雲大表大表閱讀器
大表用戶
大表檢視器
計費計費檢視器
圓環聊聊天所有者
聊天閱讀器
雲端資產雲端資產所有者
雲端資產檢視器
雲端資料融合資料融合管理
數據融合檢視器
雲端偵錯工具雲端調試器代理
雲端調試器.user
雲端功能cloudfunctions.invoker
雲函數.viewer
雲端應用程式內購買iap.admin
iap.httpsResourceAccessor
iap.settingsAdmin
iap.tunnelResourceAccessor
雲端物聯網cloudiot.deviceController
雲端編輯器
cloudiot.provisioner
雲端檢視器
Stackdriver 分析器雲端分析器代理
雲端分析器.用戶
雲端調度器雲端調度程式.admin
雲端調度器.jobRunner
雲端調度檢視器
雲端安全掃描器雲端安全掃描器.editor
雲端安全掃描器.runner
雲端安全掃描器.viewer
雲端SQL雲端SQL客戶端
cloudsql.editor
雲端SQL檢視器
雲蹤跡雲端追蹤.admin
雲端追蹤代理
雲端追蹤.用戶
資料流資料流開發者
資料流檢視器
資料流工作者
對話流對話方塊串流管理
對話流客戶端
對話流閱讀器
雲端資料遺失防護dlp閱讀器
dlp用戶
錯誤報告錯誤報告.用戶
錯誤報告檢視器
錯誤回報.writer
事件弧eventarc.publisher
eventarc.eventReceiver
雲端檔案儲存文件編輯器
文件檢視器
記錄日誌記錄.configWriter
日誌記錄.logWriter
日誌記錄.privateLogViewer
日誌檢視器
機器學習引擎ml.developer
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.操作所有者
毫升檢視器
監控監控.編輯器
監控.metricWriter
監控檢視器
人工智慧筆記本筆記本管理
筆記本檢視器
發布/訂閱pubsub.編輯器
pubsub.publisher
pubsub.訂閱者
pubsub.viewer
記憶體存儲Redis Redis編輯器
redis檢視器
雲跑運行呼叫者
來源原始碼閱讀器
源作者
雲端扳手spanner.databaseAdmin
spanner.databaseReader
資料庫用戶
扳手查看器
服務使用情況serviceusage.apiKeysMetadataViewer
雲端儲存傳輸服務儲存傳輸.用戶
儲存傳輸檢視器
雲端轉碼器轉碼器管理
轉碼器檢視器
頂點人工智慧aiplatform.user
其他身份工具包.admin
身份工具包檢視器