เริ่มต้นใช้งานกฎความปลอดภัยของ Cloud Firestore

ด้วย Cloud Firestore Security Rules คุณสามารถมุ่งเน้นไปที่การสร้างประสบการณ์ของผู้ใช้ที่ยอดเยี่ยมโดยไม่ต้องจัดการโครงสร้างพื้นฐานหรือเขียนโค้ดการตรวจสอบสิทธิ์และรหัสการให้สิทธิ์ฝั่งเซิร์ฟเวอร์

กฎความปลอดภัยช่วยให้คุณควบคุมการเข้าถึงและตรวจสอบข้อมูลในรูปแบบที่เรียบง่ายแต่สื่อความหมาย หากต้องการสร้างระบบการเข้าถึงตามผู้ใช้และตามบทบาทที่ช่วยรักษาความปลอดภัยของข้อมูลผู้ใช้ คุณต้องใช้ การตรวจสอบสิทธิ์ของ Firebase กับ Cloud Firestore Security Rules

กฎความปลอดภัยเวอร์ชัน 2

ตั้งแต่เดือนพฤษภาคม 2019 เป็นต้นมา กฎความปลอดภัยของ Cloud Firestore เวอร์ชัน 2 พร้อมให้บริการแล้ว กฎเวอร์ชัน 2 เปลี่ยนลักษณะการทำงานของ ไวลด์การ์ด แบบเรียกซ้ำ {name=**} คุณต้องใช้เวอร์ชัน 2 หากวางแผนที่จะ ใช้ การค้นหากลุ่มคอลเล็กชัน คุณต้องเลือกใช้ เวอร์ชัน 2 โดยทำให้ rules_version = '2'; เป็นบรรทัดแรกในกฎความปลอดภัย ดังนี้

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

การเขียนกฎ

คุณจะต้องเขียนและจัดการ Cloud Firestore Security Rules ที่ปรับให้เหมาะกับโมเดลข้อมูลที่คุณ สร้างขึ้นสำหรับฐานข้อมูลเริ่มต้นและฐานข้อมูลเพิ่มเติมแต่ละรายการในโปรเจ็กต์

Cloud Firestore Security Rules ทั้งหมดประกอบด้วยคำสั่ง match ซึ่งระบุเอกสารใน ฐานข้อมูล และนิพจน์ allow ซึ่งควบคุมการเข้าถึงเอกสารเหล่านั้น ดังนี้

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

ระบบจะประเมินคำขอฐานข้อมูลทุกรายการจากไลบรารีของไคลเอ็นต์อุปกรณ์เคลื่อนที่/เว็บของ Cloud Firestore ตามกฎความปลอดภัย ก่อนที่จะอ่านหรือเขียนข้อมูลใดๆ หากกฎปฏิเสธการเข้าถึงเส้นทางเอกสารที่ระบุไว้ คำขอทั้งหมดจะไม่สำเร็จ

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

ต้องมีการตรวจสอบสิทธิ์

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

ปฏิเสธทั้งหมด

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

อนุญาตทั้งหมด

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

เส้นทาง {document=**} ที่ใช้ในตัวอย่างข้างต้นจะตรงกับเอกสารใดก็ได้ในฐานข้อมูลทั้งหมด โปรดดูคำแนะนำในการจัดโครงสร้างกฎความปลอดภัยเพื่อ เรียนรู้วิธีจับคู่เส้นทางข้อมูลที่เฉพาะเจาะจงและทำงานกับข้อมูลแบบลำดับชั้น

การทดสอบกฎ

Cloud Firestore มีเครื่องมือจำลองกฎที่คุณใช้ทดสอบ ชุดกฎได้ คุณสามารถเข้าถึงเครื่องมือจำลองได้จากคอนโซล Firebase ในแท็บ ฐานข้อมูลและพื้นที่เก็บข้อมูล > Firestore > กฎ

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

การทำให้กฎใช้งานได้

คุณต้องทำให้กฎความปลอดภัยใช้งานได้ก่อนจึงจะเริ่มใช้ Cloud Firestore จากแอปบนอุปกรณ์เคลื่อนที่ได้ คุณสามารถทำให้กฎใช้งานได้ในคอนโซล Firebase, คอนโซล Google Cloud, ใช้ Firebase CLI หรือใช้ Cloud Firestore Management REST API

การอัปเดต Cloud Firestore Security Rules อาจใช้เวลาถึง 1 นาทีจึงจะมีผลกับคําค้นหาและ Listener ใหม่ อย่างไรก็ตาม การเผยแพร่การเปลี่ยนแปลงอย่างเต็มรูปแบบและส่งผลต่อ Listener ที่ใช้งานอยู่อาจใช้เวลาถึง 10 นาที

ใช้คอนโซล Firebase

หากต้องการตั้งค่าและทำให้ชุดกฎชุดแรกใช้งานได้สำหรับฐานข้อมูลเริ่มต้นในโปรเจ็กต์ ให้ไปที่แท็บฐานข้อมูลและพื้นที่จัดเก็บ > Firestore > กฎ ในคอนโซล Firebase

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

เขียนกฎในเอดิเตอร์ออนไลน์ แล้วคลิกเผยแพร่

ใช้คอนโซล Google Cloud

คุณสามารถจัดการและทำให้ Cloud Firestore Security Rules ใช้งานได้โดยตรงใน คอนโซล Google Cloud เอดิเตอร์กฎพร้อมใช้งานสำหรับ Firestore ในโหมด Native ทั้งในรุ่น Standard และ Enterprise

สิทธิ์ที่จำเป็น

หากต้องการจัดการและทำให้กฎความปลอดภัยใช้งานได้ในคอนโซล Google Cloud คุณต้องมีสิทธิ์ IAM ต่อไปนี้

  • firebaserules.releases.create
  • firebaserules.releases.delete
  • firebaserules.releases.update
  • firebaserules.rulesets.create
  • firebaserules.rulesets.delete
  • firebaserules.rulesets.list
  • firebaserules.rulesets.test (จำเป็นต้องใช้เครื่องมือจำลองกฎ)

วิธีทำให้กฎใช้งานได้ในคอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
  2. คลิกรหัสของฐานข้อมูลที่ต้องการจัดการ
  3. ในเมนูการนำทาง ให้คลิกความปลอดภัย
  4. คลิกแท็บกฎของ Firestore
  5. ดูกฎในเอดิเตอร์กฎ หากต้องการแก้ไข ให้คลิกชุดกฎใหม่ หรือ โคลนชุดกฎ แล้วแก้ไขกฎ
  6. คลิกเผยแพร่ เพื่อทำให้การเปลี่ยนแปลงใช้งานได้

นอกจากนี้ คุณยังดูชุดกฎก่อนหน้าในไทม์ไลน์ รวมถึงโคลนหรือกู้คืนชุดกฎเหล่านั้นได้ด้วย

ใช้ Firebase CLI

คุณยังทำให้กฎใช้งานได้โดยใช้ Firebase CLI ได้ด้วย การใช้ CLI ช่วยให้คุณควบคุมเวอร์ชันของกฎด้วยโค้ดแอปพลิเคชันและทำให้กฎใช้งานได้เป็นส่วนหนึ่งของกระบวนการทำให้ใช้งานได้ที่มีอยู่

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

// Edit the generated .rules file to your desired security rules
// ...

// Deploy rules for all configured databases
firebase deploy --only firestore

ปรับปรุงความปลอดภัยสำหรับ Cloud Storage

แอปของคุณจะได้รับประโยชน์จากฟีเจอร์ฐานข้อมูลที่มีประสิทธิภาพของ Cloud Firestore รวมถึงฟีเจอร์การจัดเก็บและการจัดการไฟล์ของ Cloud Storage เมื่อใช้ ร่วมกัน ผลิตภัณฑ์เหล่านี้ยังช่วยเสริมความปลอดภัยของแอปด้วย เนื่องจาก Cloud Firestore สามารถบันทึกข้อกำหนดการให้สิทธิ์ที่กฎความปลอดภัยของ Firebase ใช้ได้ กับทั้ง 2 ผลิตภัณฑ์ ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำสำหรับCloud Storage

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