เมื่อใช้ไลบรารีของไคลเอ็นต์ฝั่งเซิร์ฟเวอร์สำหรับ Cloud Firestore คุณจะจัดการ สิทธิ์เข้าถึงทรัพยากรด้วย Identity and Access Management (IAM) ได้ IAM ช่วยให้คุณให้สิทธิ์เข้าถึงที่ละเอียดยิ่งขึ้นแก่ทรัพยากร Google Cloud ที่เฉพาะเจาะจงและ ป้องกันการเข้าถึงทรัพยากรอื่นๆ ที่ไม่ต้องการ หน้านี้อธิบายสิทธิ์และบทบาท IAM สำหรับ Cloud Firestore อ่านคำอธิบายโดยละเอียดของ IAM ได้ในเอกสารประกอบของ IAM
IAM ช่วยให้คุณนำหลักการให้สิทธิ์ขั้นต่ำที่สุดมาใช้ได้ จึงให้สิทธิ์เข้าถึงทรัพยากรเฉพาะที่จำเป็นเท่านั้น
IAM ช่วยให้คุณควบคุมได้ว่าใคร (ผู้ใช้) มีสิทธิ์อะไร (บทบาท)
สำหรับทรัพยากรใดโดยการตั้งค่านโยบาย IAM
นโยบาย IAM จะให้บทบาทอย่างน้อย 1 บทบาทแก่ผู้ใช้ ซึ่งจะทำให้ผู้ใช้มีสิทธิ์บางอย่าง
เช่น คุณสามารถให้datastore.indexAdmin
บทบาทแก่ผู้ใช้ ซึ่งจะช่วยให้ผู้ใช้สร้าง แก้ไข ลบ แสดง หรือดู
ดัชนีได้
สิทธิ์และบทบาท
ส่วนนี้สรุปสิทธิ์และบทบาทที่ Cloud Firestore รองรับ
สิทธิ์ที่จำเป็นสำหรับเมธอด API
ตารางต่อไปนี้แสดงสิทธิ์ที่ผู้โทรต้องมีเพื่อดำเนินการ แต่ละอย่าง
| วิธีการ | สิทธิ์ที่จำเป็น |
|---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น false |
datastore.entities.create |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น true |
datastore.entities.create |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น false |
datastore.entities.create |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น true |
datastore.entities.update |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
commit ลบ |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.getdatastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
executePipeline (RPC)โดยมีขั้นตอนดังนี้ - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
executePipeline (RPC)โดยมีขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้ - documents(...) |
datastore.entities.get
|
executePipeline (RPC)โดยมีขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้ - update(...) |
datastore.entities.update
|
executePipeline (RPC)โดยมีขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้ - delete(...) |
datastore.entities.delete
|
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น false |
datastore.entities.create |
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น true |
datastore.entities.update |
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
write (RPC) ลบ |
datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.schemas.create |
delete |
datastore.schemas.delete |
get |
datastore.schemas.get |
list |
datastore.schemas.list |
projects.databases |
|
create |
datastore.databases.createหากคำขอ
หากต้องการยืนยันว่าตั้งค่าการเชื่อมโยงแท็กสําเร็จหรือไม่โดยการแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| คืนค่า | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneหากคำขอ
หากต้องการยืนยันว่าตั้งค่าการเชื่อมโยงแท็กสําเร็จหรือไม่โดยการแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้
|
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
| รับ | datastore.backupSchedules.get |
| list | datastore.backupSchedules.list |
| สร้าง | datastore.backupSchedules.create |
| อัปเดต | datastore.backupSchedules.update |
| ลบ | datastore.backupSchedules.delete |
projects.locations.backups |
|
| รับ | datastore.backups.get |
| list | datastore.backups.list |
| ลบ | datastore.backups.delete |
บทบาทที่กำหนดไว้ล่วงหน้า
เมื่อใช้ IAM ทุกเมธอด API ใน Cloud Firestore กำหนดให้บัญชีที่ส่งคำขอ API ต้องมีสิทธิ์ที่เหมาะสม ในการใช้ทรัพยากร โดยจะมีการให้สิทธิ์โดยการตั้งค่านโยบายที่ให้ บทบาทแก่ผู้ใช้ กลุ่ม หรือบัญชีบริการ นอกเหนือจากบทบาทพื้นฐาน เจ้าของ ผู้แก้ไข และผู้ดู คุณยังมอบบทบาท Cloud Firestore ให้กับผู้ใช้โปรเจ็กต์ได้ด้วย
ตารางต่อไปนี้แสดงบทบาท Cloud Firestore IAM คุณสามารถมอบหมายบทบาทหลายบทบาทให้กับผู้ใช้ กลุ่ม หรือบัญชีบริการได้
| บทบาท | สิทธิ์ | คำอธิบาย |
|---|---|---|
roles/datastore.owner |
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์เข้าถึง Cloud Firestore อย่างเต็มรูปแบบ |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์การอ่าน/เขียนข้อมูลในฐานข้อมูล Cloud Firestore มีไว้สำหรับนักพัฒนาแอปพลิเคชันและบัญชีบริการ |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
สิทธิ์การอ่านทรัพยากร Cloud Firestore ทั้งหมด |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
มีสิทธิ์เข้าถึงการจัดการการนำเข้าและส่งออกโดยสมบูรณ์ |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
สิทธิ์เข้าถึงแบบเต็มเพื่อจัดการการดำเนินการแบบกลุ่ม |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์เข้าถึงเพื่อจัดการคำนิยามของดัชนีโดยสมบูรณ์ |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์เข้าถึงการสแกน Key Visualizer โดยสมบูรณ์ |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
สิทธิ์การอ่านกำหนดเวลาสำรองข้อมูลในฐานข้อมูล Cloud Firestore |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
สิทธิ์เข้าถึงกำหนดการสำรองข้อมูลในฐานข้อมูล Cloud Firestore โดยสมบูรณ์ |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
สิทธิ์เข้าถึงแบบอ่านเพื่อดูข้อมูลสำรองในCloud Firestore |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
สิทธิ์เข้าถึงข้อมูลสำรองในตำแหน่ง Cloud Firestore อย่างเต็มรูปแบบ |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
ความสามารถในการกู้คืนข้อมูลสำรอง Cloud Firestore ลงในฐานข้อมูลใหม่ บทบาทนี้ยังช่วยให้สร้างฐานข้อมูลใหม่ได้ด้วย โดยไม่จำเป็นต้องกู้คืนจากข้อมูลสำรอง |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
ความสามารถในการโคลนฐานข้อมูล Cloud Firestore ลงในฐานข้อมูลใหม่ บทบาทนี้ยังช่วยให้สร้างฐานข้อมูลใหม่ได้ด้วย ไม่จำเป็นต้องโคลน |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
สิทธิ์การอ่านข้อมูลเชิงลึก สถิติ และการสแกน Key Visualizer |
บทบาทที่กำหนดเอง
หากบทบาทที่กำหนดไว้ล่วงหน้าไม่ตรงกับข้อกำหนดทางธุรกิจ คุณสามารถกำหนดบทบาทที่กำหนดเองของคุณเองด้วยสิทธิ์ที่คุณระบุได้
บทบาทที่จำเป็นในการสร้างและจัดการแท็ก
หากมีการแสดงแท็กในการดำเนินการสร้างหรือกู้คืน คุณจะต้องมีบทบาทบางอย่าง ดูรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างคู่คีย์-ค่าของแท็กก่อนที่จะเชื่อมโยงกับทรัพยากรฐานข้อมูลได้ที่การสร้างและการจัดการแท็ก
ต้องมีสิทธิ์ที่ระบุไว้ต่อไปนี้
ดูแท็ก
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
จัดการแท็กในทรัพยากร
คุณต้องมีสิทธิ์ต่อไปนี้สำหรับทรัพยากรฐานข้อมูลที่คุณแนบค่าแท็ก
datastore.databases.createTagBinding
สิทธิ์
ตารางต่อไปนี้แสดงสิทธิ์ที่ Cloud Firestore รองรับ
| ชื่อสิทธิ์ของฐานข้อมูล | คำอธิบาย | |
|---|---|---|
datastore.databases.get |
เริ่มหรือย้อนกลับธุรกรรม | |
datastore.databases.import |
นำเข้าเอนทิตีไปยังฐานข้อมูล | |
datastore.databases.export |
ส่งออกเอนทิตีจากฐานข้อมูล | |
datastore.databases.bulkDelete |
ลบเอนทิตีออกจากฐานข้อมูลหลายรายการพร้อมกัน | |
datastore.databases.getMetadata |
อ่านข้อมูลเมตาจากฐานข้อมูล | |
datastore.databases.list |
แสดงรายการฐานข้อมูลในโปรเจ็กต์ | |
datastore.databases.create |
สร้างฐานข้อมูล | |
datastore.databases.update |
อัปเดตฐานข้อมูล | |
datastore.databases.delete |
ลบฐานข้อมูล | |
datastore.databases.clone |
โคลนฐานข้อมูล | |
datastore.databases.createTagBinding |
สร้างการเชื่อมโยงแท็กสำหรับฐานข้อมูล | |
datastore.databases.deleteTagBinding |
ลบการเชื่อมโยงแท็กสำหรับฐานข้อมูล | |
datastore.databases.listTagBindings |
แสดงรายการการเชื่อมโยงแท็กทั้งหมดสำหรับฐานข้อมูล | |
datastore.databases.listEffectiveTagBindings |
แสดงรายการการเชื่อมโยงแท็กที่มีประสิทธิภาพสำหรับฐานข้อมูล | |
| ชื่อสิทธิ์ของเอนทิตี | คำอธิบาย | |
datastore.entities.create |
สร้างเอกสาร | |
datastore.entities.delete |
ลบเอกสาร | |
datastore.entities.get |
อ่านเอกสาร | |
datastore.entities.list |
แสดงรายการชื่อเอกสารในโปรเจ็กต์ (ต้องมี datastore.entities.get เพื่อเข้าถึงข้อมูลเอกสาร) |
|
datastore.entities.update |
อัปเดตเอกสาร | |
| ชื่อสิทธิ์ดัชนี | คำอธิบาย | |
datastore.schemas.create |
สร้างดัชนี | |
datastore.schemas.delete |
ลบดัชนี | |
datastore.schemas.get |
อ่านข้อมูลเมตาจากดัชนี | |
datastore.schemas.list |
แสดงรายการดัชนีในโปรเจ็กต์ | |
datastore.schemas.update |
อัปเดตดัชนี | |
| ชื่อสิทธิ์การดำเนินการ | คำอธิบาย | |
datastore.operations.cancel |
ยกเลิกการดำเนินการที่ใช้เวลานาน | |
datastore.operations.delete |
ลบการดำเนินการที่ใช้เวลานาน | |
datastore.operations.get |
รับสถานะล่าสุดของการดำเนินการที่ใช้เวลานาน | |
datastore.operations.list |
แสดงรายการการดำเนินการที่ใช้เวลานาน | |
| ชื่อสิทธิ์ของโปรเจ็กต์ | คำอธิบาย | |
resourcemanager.projects.get |
เรียกดูทรัพยากรในโปรเจ็กต์ | |
resourcemanager.projects.list |
แสดงรายการโปรเจ็กต์ที่คุณเป็นเจ้าของ | |
| ชื่อสิทธิ์เข้าถึงตำแหน่ง | คำอธิบาย | |
datastore.locations.get |
ดูรายละเอียดเกี่ยวกับตำแหน่งฐานข้อมูล ต้องสร้าง ฐานข้อมูลใหม่ | |
datastore.locations.list |
แสดงรายการตำแหน่งฐานข้อมูลที่ใช้ได้ ต้องสร้าง ฐานข้อมูลใหม่ | |
| ชื่อสิทธิ์ของ Key Visualizer | คำอธิบาย | |
datastore.keyVisualizerScans.get |
ดูรายละเอียดเกี่ยวกับการสแกน Key Visualizer | |
datastore.keyVisualizerScans.list |
แสดงรายการการสแกน Key Visualizer ที่พร้อมใช้งาน | |
| ชื่อสิทธิ์กำหนดการสำรองข้อมูล | คำอธิบาย | |
datastore.backupSchedules.get |
ดูรายละเอียดเกี่ยวกับกำหนดการสำรองข้อมูล | |
datastore.backupSchedules.list |
แสดงรายการกำหนดเวลาสำรองข้อมูลที่มี | |
datastore.backupSchedules.create |
สร้างกำหนดเวลาสำรอง | |
datastore.backupSchedules.update |
อัปเดตกำหนดการสำรองข้อมูล | |
datastore.backupSchedules.delete |
ลบกำหนดการสำรองข้อมูล | |
| ชื่อสิทธิ์การสำรองข้อมูล | คำอธิบาย | |
datastore.backups.get |
ดูรายละเอียดเกี่ยวกับข้อมูลสำรอง | |
datastore.backups.list |
แสดงรายการข้อมูลสำรองที่มี | |
datastore.backups.delete |
ลบข้อมูลสำรอง | |
datastore.backups.restoreDatabase |
กู้คืนฐานข้อมูลจากข้อมูลสำรอง | |
| ชื่อสิทธิ์ของข้อมูลเชิงลึก | คำอธิบาย | |
datastore.insights.get |
ดูข้อมูลเชิงลึกของทรัพยากร |
เวลาในการตอบสนองของการเปลี่ยนบทบาท
Cloud Firestore จะแคชสิทธิ์ IAM เป็นเวลา 5 นาที ดังนั้นการเปลี่ยนแปลงบทบาทจึงใช้เวลาสูงสุด 5 นาทีจึงจะมีผล
จัดการ Cloud Firestore IAM
คุณรับและตั้งค่านโยบาย IAM ได้โดยใช้คอนโซล Google Cloud
API ของ IAM หรือ
gcloudเครื่องมือบรรทัดคำสั่ง ดูรายละเอียดได้ที่หัวข้อการให้ การเปลี่ยนแปลง และการเพิกถอนสิทธิ์เข้าถึงสำหรับสมาชิกในโปรเจ็กต์
กำหนดค่าสิทธิ์การเข้าถึงแบบมีเงื่อนไข
คุณสามารถใช้เงื่อนไข IAM เพื่อ กำหนดและบังคับใช้การควบคุมการเข้าถึงแบบมีเงื่อนไข
ตัวอย่างเช่น เงื่อนไขต่อไปนี้จะกำหนดdatastore.user
บทบาทให้กับผู้ใช้จนถึงวันที่ที่ระบุ
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
ดูวิธีกำหนดเงื่อนไข IAM สำหรับการเข้าถึงชั่วคราวได้ที่กำหนดค่าการเข้าถึงชั่วคราว
ดูวิธีกำหนดค่าเงื่อนไข IAM สำหรับสิทธิ์เข้าถึงฐานข้อมูลอย่างน้อย 1 รายการได้ที่กำหนดค่าเงื่อนไขการเข้าถึงฐานข้อมูล
การขึ้นต่อกันของกฎความปลอดภัยกับ IAM
Cloud Firestore Security Rules สำหรับ ไคลเอ็นต์บนอุปกรณ์เคลื่อนที่/เว็บจะขึ้นอยู่กับบัญชีบริการต่อไปนี้ และการเชื่อมโยง IAM
| บัญชีบริการ | บทบาท IAM |
|---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase จะตั้งค่าบัญชีบริการนี้ให้คุณโดยอัตโนมัติ หากคุณนำบทบาท firebaserules.system ออกจากบัญชีบริการนี้ กฎความปลอดภัยจะปฏิเสธคำขอทั้งหมด หากต้องการกู้คืนการเชื่อมโยง IAM นี้
ให้ใช้คำสั่ง gcloud CLI ต่อไปนี้
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
หากต้องการดู project_id และ project_number ให้ไปที่ การระบุโปรเจ็กต์
ใช้ Google Cloud CLI แทนคอนโซล Google Cloud
เนื่องจากบทบาท firebaserules.system จะซ่อนอยู่ในคอนโซลโดยค่าเริ่มต้น
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ IAM
- มอบบทบาท IAM
- ดูข้อมูลเกี่ยวกับการตรวจสอบสิทธิ์