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 นาทีจึงจะมีผล

จัดการ 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 จะซ่อนอยู่ในคอนโซลโดยค่าเริ่มต้น

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