เพื่อให้ส่วนขยายดำเนินการตามที่ระบุ 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 ที่ระบุ เมื่อทริกเกอร์ ส่วนขยายจะอัปเดตอีเมลบัญชีผู้ใช้ (การโต้ตอบกับ 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}
) และที่เก็บข้อมูลของ Storage ( projects/{project_id}/buckets/{bucket_id}
)
บทบาทที่ได้รับการสนับสนุนสำหรับส่วนขยาย
ตารางต่อไปนี้แสดงรายการบทบาท IAM ที่รองรับสำหรับการโต้ตอบกับผลิตภัณฑ์ Firebase บทบาทส่วนใหญ่ในตารางนี้คือ บทบาทระดับผลิตภัณฑ์ของ Firebase แต่บางส่วนได้รับการจัดการโดยตรงโดย Google Cloud (โดยเฉพาะ Cloud Firestore และ Cloud Storage )
ผลิตภัณฑ์ Firebase
หากส่วนขยายของคุณโต้ตอบกับ... | มอบหมายหนึ่งในบทบาทเหล่านี้... |
---|---|
คลาวด์ไฟร์สโตร์ | datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
ที่เก็บข้อมูลบนคลาวด์สำหรับ Firebase | ที่เก็บข้อมูลผู้ดูแลระบบ storage.objectAdmin storage.objectCreator ที่เก็บข้อมูล objectViewer |
การเผยแพร่แอป Firebase | firebaseappdistro.admin firebaseappdistro.viewer |
การรับรองความถูกต้องของ Firebase | firebaseauth.admin firebaseauth.viewer |
การทดสอบ A/B ของ Firebase | firebaseabt.admin firebaseabt.viewer |
การส่งข้อความบนคลาวด์ของ Firebase | firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
โฮสติ้งไฟร์เบส | firebasehosting.admin firebasehosting.viewer |
การส่งข้อความในแอป Firebase | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML | firebaseml.admin firebaseml.viewer |
การตรวจสอบประสิทธิภาพ Firebase | firebasePerformance.ผู้ดู firebasePerformance.reader firebasePerformance.writer |
ฐานข้อมูลเรียลไทม์ Firebase | firebasedatabase.admin firebasedatabase.viewer |
กฎความปลอดภัย | firebaserules.viewer firebaserules.ผู้พัฒนา firebaserules.deployer |
Google Analytics | firebaseanalytics.admin firebaseanalytics.viewer |
ผลิตภัณฑ์กูเกิลคลาวด์
เรียนรู้เกี่ยวกับบทบาทเหล่านี้ใน เอกสารประกอบของ Google Cloud
หากส่วนขยายของคุณโต้ตอบกับ... | มอบหมายหนึ่งในบทบาทเหล่านี้... |
---|---|
การดำเนินการ | การดำเนินการผู้ดูแลระบบ การกระทำ Viewer |
อาปีจี | apigee.analyticsAgent apigee.analyticsบรรณาธิการ apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
แอพเอ็นจิ้น | appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
ออโต้เอ็มแอล | automl.บรรณาธิการ automl.ทำนาย automl.viewer |
BigQuery | bigquery.connectionผู้ดูแลระบบ bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
คลาวด์บิ๊กเทเบิล | bigtable.reader bigtable.user bigtable.viewer |
การเรียกเก็บเงิน | การเรียกเก็บเงินผู้ดู |
แชทแฮงเอาท์ | แชท.เจ้าของ แชท.รีดเดอร์ |
สินทรัพย์คลาวด์ | cloudasset.owner cloudasset.viewer |
ฟิวชั่นข้อมูลบนคลาวด์ | datafusion.admin datafusion.viewer |
ดีบักเกอร์บนคลาวด์ | clouddebugger.ตัวแทน clouddebugger.user |
ฟังก์ชั่นคลาวด์ | cloudfunctions.inviver cloudfunctions.viewer |
คลาวด์ไอเอพี | iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
ไอโอทีบนคลาวด์ | cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
ตัวสร้างโปรไฟล์ Stackdriver | cloudprofiler.ตัวแทน cloudprofiler.user |
ตัวกำหนดเวลาคลาวด์ | cloudcheduler.admin cloudcheduler.jobRunner cloudcheduler.viewer |
เครื่องสแกนความปลอดภัยบนคลาวด์ | cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
คลาวด์ SQL | cloudsql.client cloudsql.editor cloudsql.viewer |
คลาวด์เทรซ | cloudtrace.admin cloudtrace.ตัวแทน cloudtrace.user |
กระแสข้อมูล | dataflow.ผู้พัฒนา dataflow.viewer dataflow.ผู้ปฏิบัติงาน |
ไดอะล็อกโฟลว์ | ไดอะล็อกโฟลว์.ผู้ดูแลระบบ ไดอะล็อกโฟลว์.ไคลเอนต์ ไดอะล็อกโฟลว์.reader |
การป้องกันข้อมูลสูญหายบนคลาวด์ | dlp.reader dlp.ผู้ใช้ |
การรายงานข้อผิดพลาด | errorreporting.user errorreporting.viewer errorreporting.writer |
อีเวนทาร์ค | eventarc.ผู้เผยแพร่ eventarc.eventReceiver |
คลาวด์ไฟล์สโตร์ | ไฟล์.บรรณาธิการ ไฟล์.viewer |
การบันทึก | logging.configWriter logging.logWriter logging.privateLogViewer logging.ผู้ดู |
เอ็นจิ้นการเรียนรู้ของเครื่อง | ml.ผู้พัฒนา ml.jobOwner ml.modelOwner ml.modelUser ml.การดำเนินงานเจ้าของ ml.ผู้ดู |
การตรวจสอบ | การตรวจสอบ.บรรณาธิการ การตรวจสอบ metricWriter การตรวจสอบผู้ชม |
โน้ตบุ๊ค AI | โน๊ตบุ๊ค.ผู้ดูแลระบบ โน๊ตบุ๊ค โปรแกรมดู |
ผับ/ซับ | pubsub.editor pubsub.ผู้เผยแพร่ pubsub.subscriber pubsub.viewer |
หน่วยความจำ Redis | redis.editor redis.viewer |
คลาวด์รัน | run.inviver |
แหล่งที่มา | ที่มา.reader ที่มา.writer |
คลาวด์สแปนเนอร์ | spanner.databaseAdmin spanner.databaseReader spanner.databaseUser ประแจ.viewer |
การใช้บริการ | serviceusage.apiKeysMetadataViewer |
บริการถ่ายโอนที่เก็บข้อมูลบนคลาวด์ | storagetransfer.user storagetransfer.viewer |
ตัวแปลงสัญญาณบนคลาวด์ | transcoder.admin ทรานส์โคเดอร์.วิวเวอร์ |
เวอร์เท็กซ์ เอไอ | aiplatform.user |
อื่น | Identitytoolkit.admin Identitytoolkit.viewer |