Identity and Access Management (IAM)

เมื่อใช้ไลบรารีของไคลเอ็นต์เซิร์ฟเวอร์สำหรับ 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
datastore.entities.update
beginTransaction datastore.databases.get
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้นของ exists เป็น false datastore.entities.create
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้นของ exists เป็น true datastore.entities.update
commit อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น datastore.entities.create
datastore.entities.update
commit ลบ datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
partitionQuery datastore.entities.get
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
executePipeline (RPC)

โดยมีขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
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
datastore.entities.update
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

หากคำขอ create มีค่า tags คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.createTagBinding

หากต้องการยืนยันว่าตั้งค่าการเชื่อมโยงแท็กสําเร็จหรือไม่โดยการแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
คืนค่า datastore.backups.restoreDatabase
clone datastore.databases.clone

หากคำขอ clone มีค่า tags คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.createTagBinding

หากต้องการยืนยันว่าตั้งค่าการเชื่อมโยงแท็กสําเร็จหรือไม่โดยการแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
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.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์เข้าถึง Cloud Firestore อย่างเต็มรูปแบบ
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์การอ่าน/เขียนข้อมูลในฐานข้อมูล Cloud Firestore ใช้สำหรับนักพัฒนาแอปพลิเคชันและบัญชีบริการ
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.schemas.get
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list

datastore.insights.get
สิทธิ์การอ่านทรัพยากร Cloud Firestore ทั้งหมด
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
มีสิทธิ์เข้าถึงการจัดการการนำเข้าและส่งออกโดยสมบูรณ์
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
สิทธิ์เข้าถึงเพื่อจัดการการดำเนินการแบบกลุ่มโดยสมบูรณ์
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์เข้าถึงเพื่อจัดการคำนิยามของดัชนีโดยสมบูรณ์
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์เข้าถึงการสแกน Key Visualizer โดยสมบูรณ์
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
สิทธิ์การอ่านกำหนดเวลาสำรองข้อมูลในฐานข้อมูล Cloud Firestore
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
สิทธิ์เข้าถึงกำหนดการสำรองข้อมูลในฐานข้อมูล Cloud Firestore โดยสมบูรณ์
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
สิทธิ์การอ่านข้อมูลสำรองในCloud Firestore
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
สิทธิ์เข้าถึงข้อมูลสำรองในตำแหน่ง Cloud Firestore โดยสมบูรณ์
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
ความสามารถในการกู้คืนข้อมูลสำรอง Cloud Firestore ไปยังฐานข้อมูลใหม่ บทบาทนี้ยังช่วยให้สร้างฐานข้อมูลใหม่ได้ด้วย ไม่จำเป็นต้องกู้คืนจากข้อมูลสำรอง
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
ความสามารถในการโคลนCloud Firestoreฐานข้อมูลลงในฐานข้อมูลใหม่ บทบาทนี้ยังให้ความสามารถในการสร้างฐานข้อมูลใหม่ด้วย ไม่จำเป็นต้องโคลน
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.statistics.get
สิทธิ์การอ่านข้อมูลเชิงลึก สถิติ และการสแกน Key Visualizer

บทบาทที่กำหนดเอง

หากบทบาทที่กำหนดไว้ล่วงหน้าไม่ตรงกับข้อกำหนดทางธุรกิจ คุณสามารถกำหนดบทบาทที่กำหนดเองที่มีสิทธิ์ที่คุณระบุได้

บทบาทที่จำเป็นในการสร้างและจัดการแท็ก

หากมีการแสดงแท็กในการดำเนินการสร้างหรือกู้คืน คุณจะต้องมีบทบาทบางอย่าง ดูรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างคู่คีย์-ค่าของแท็กก่อนที่จะเชื่อมโยงกับทรัพยากรฐานข้อมูลได้ที่การสร้างและจัดการแท็ก

ต้องมีสิทธิ์ที่ระบุไว้ต่อไปนี้

ดูแท็ก
  • datastore.databases.listTagBindings
  • datastore.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 นาทีจึงจะมีผล

จัดการ IAM ของ Cloud Firestore

คุณรับและตั้งค่านโยบาย IAM ได้โดยใช้คอนโซล Google Cloud, IAM API หรือเครื่องมือบรรทัดคำสั่ง 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จะซ่อนอยู่ในคอนโซลโดยค่าเริ่มต้น

ขั้นตอนถัดไป