Firebase จะมอบสิทธิ์เข้าถึงแบบจํากัดแก่อินสแตนซ์ของส่วนขยายที่ติดตั้งแต่ละรายการสําหรับให้ดําเนินการตามที่ระบุผ่านบัญชีบริการ เพื่อให้ส่วนขยายทําการได้
บัญชีบริการคืออะไร
บัญชีบริการเป็นบัญชีผู้ใช้ Google ประเภทพิเศษ บัญชีดังกล่าวจะเป็นตัวแทนผู้ใช้ที่ไม่ใช่มนุษย์ ซึ่งสามารถเรียก API ที่ได้รับอนุญาตไปยังบริการของ Google
ในระหว่างการติดตั้งส่วนขยาย Firebase จะสร้างบัญชีบริการสำหรับส่วนขยายในโปรเจ็กต์ อินสแตนซ์ที่ติดตั้งไว้แต่ละรายการของส่วนขยายจะมีบัญชีบริการเป็นของตัวเอง หากมีการถอนการติดตั้งอินสแตนซ์ส่วนขยาย Firebase จะลบบัญชีบริการของส่วนขยายนั้น
บัญชีบริการที่สร้างขึ้นสำหรับส่วนขยายจะอยู่ในรูปแบบต่อไปนี้
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase จะจํากัดการเข้าถึงโปรเจ็กต์และข้อมูลของส่วนขยายด้วยการกำหนดบทบาท (กลุ่มสิทธิ์) ที่เฉพาะเจาะจงให้กับบัญชีบริการของส่วนขยาย เมื่อสร้างส่วนขยาย คุณจะต้องกำหนดบทบาทให้ส่วนขยายของคุณทำงาน จากนั้นแสดงรายชื่อบทบาทเหล่านี้และเหตุผลที่ส่วนขยายของคุณจำเป็นต้องใช้บทบาทเหล่านี้ในไฟล์ extension.yaml
(ดูตัวอย่างที่ด้านล่างของหน้านี้)
พิจารณาว่าส่วนขยายของคุณต้องใช้บทบาทใด
เมื่อคุณสร้างส่วนขยาย คุณจะกำหนดระดับการเข้าถึงที่ส่วนขยายของคุณต้องใช้ในการดำเนินการ
ในระหว่างการติดตั้ง Firebase CLI จะแจ้งให้ผู้ใช้ยอมรับระดับการเข้าถึงที่ได้รับจากบทบาทแต่ละบทบาท หากส่วนขยายของคุณขอบทบาทมากกว่าที่จำเป็นจริงๆ ผู้ใช้ก็มีแนวโน้มที่จะติดตั้งน้อยกว่า
พิจารณาว่าส่วนขยายโต้ตอบกับผลิตภัณฑ์หรือไม่ โดยทำดังนี้
หากส่วนขยายโต้ตอบกับผลิตภัณฑ์ คุณจะต้องให้สิทธิ์เข้าถึงผลิตภัณฑ์นั้นแก่ส่วนขยาย
ตัวอย่างเช่น หากส่วนขยายเขียนข้อมูลลงในอินสแตนซ์ Realtime Database ส่วนขยายจะต้องมีบทบาท Realtime Database (โดยเฉพาะ
firebasedatabase.admin
)หากส่วนขยายเพียงแค่รอเหตุการณ์เรียกให้แสดงจากผลิตภัณฑ์ ส่วนขยายไม่จําเป็นต้องมีบทบาทที่เชื่อมโยงกับผลิตภัณฑ์นั้น
ตัวอย่างเช่น หากส่วนขยายทริกเกอร์เมื่อมีการเขียนลงในอินสแตนซ์ Realtime Database (แต่ไม่ได้เขียนข้อมูลลงในฐานข้อมูล) ส่วนขยายไม่ต้องใช้บทบาท Realtime Database
หลังจากที่คุณระบุผลิตภัณฑ์แล้วว่าส่วนขยายของคุณโต้ตอบด้วยผลิตภัณฑ์ใด คุณจะต้องตัดสินใจว่าจะมีบทบาทใดสำหรับการโต้ตอบนั้น ผลิตภัณฑ์บางอย่างมีบทบาทที่แตกต่างกันขึ้นอยู่กับการกระทำหรือชุดการดำเนินการที่เกิดขึ้น
ตัวอย่างเช่น สมมติว่าชิ้นงานของคุณโต้ตอบกับCloud Storage ที่เก็บข้อมูล บทบาท
storage.objectCreator
จะอนุญาตให้ส่วนขยายสร้างออบเจ็กต์ในที่เก็บข้อมูล Cloud Storage แต่จะไม่อนุญาตให้ส่วนขยายดู ลบ หรือเขียนทับออบเจ็กต์ หากต้องการเปิดใช้ส่วนขยายเพื่อดําเนินการเพิ่มเติมเหล่านั้น คุณต้องกําหนดบทบาทstorage.objectAdmin
แทน
โปรดดูส่วนด้านล่างของหน้านี้เพื่อดูบทบาทที่รองรับทั้งหมดที่คุณอาจกำหนดให้กับบัญชีบริการของส่วนขยาย ดูคำอธิบายและสิทธิ์ของบทบาทแต่ละบทบาทได้ที่เอกสารประกอบของ Firebase หรือเอกสารประกอบของ Google Cloud คุณยังค้นหาบทบาทได้ในแผง IAM และผู้ดูแลระบบของคอนโซล Google Cloud อีกด้วย
วิธีมอบหมายบทบาทให้กับส่วนขยาย
ระบุบทบาท IAM ที่จำเป็นต่อการทำงานของส่วนขยายในส่วน roles
ของไฟล์ extension.yaml
ต่อไปนี้คือตัวอย่างของส่วนขยายที่คอยฟังเส้นทาง Firebase Realtime Database ที่ระบุ เมื่อทริกเกอร์ ชิ้นงานจะอัปเดตอีเมลของบัญชีผู้ใช้ (การโต้ตอบกับ Firebase Authentication) และส่งการแจ้งเตือน (การโต้ตอบกับ Firebase Cloud Messaging) โปรดสังเกตสิ่งต่อไปนี้
- แม้ว่าส่วนขยายทริกเกอร์จากเหตุการณ์ Realtime Database จะไม่มีบทบาท
firebasedatabase.admin
อยู่ในรายการ (การฟังไม่ถือว่าเป็นการโต้ตอบ) - เนื่องจากส่วนขยายโต้ตอบกับ Authentication และ Cloud Messaging ส่วนขยายจึงต้องมีบทบาทในการเข้าถึงผลิตภัณฑ์เหล่านั้น (
firebaseauth.admin
และfirebasenotifications.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 ของทรัพยากรที่ควรเพิ่มบทบาทนี้ หากไม่ระบุ ค่าเริ่มต้นจะเป็น
ค่าที่รองรับคือ |
ลดขอบเขตของบทบาท
ส่วนขยายควรเป็นไปตามหลักของสิทธิ์ขั้นต่ำและขอสิทธิ์เข้าถึงทรัพยากรที่จำเป็นเท่านั้น
คุณจำกัดขอบเขตการเข้าถึงของส่วนขยายได้โดยใช้ช่อง 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}
)
บทบาทที่รองรับสำหรับส่วนขยาย
ตารางต่อไปนี้แสดงบทบาท IAM ที่รองรับสำหรับการโต้ตอบกับผลิตภัณฑ์ Firebase บทบาทส่วนใหญ่ในตารางนี้เป็นบทบาทระดับผลิตภัณฑ์ 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 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.synsuchzerManager |
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 |
Cloud Asset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
โปรแกรมแก้ไขข้อบกพร่องบนคลาวด์ |
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 |
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 |
ตัวแปลงรหัสระบบคลาวด์ |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
อื่นๆ |
Identity Toolkit.admin identitytoolkit.viewer |