पहचान और ऐक्सेस मैनेजमेंट (आईएएम)

Cloud Firestore के लिए सर्वर क्लाइंट लाइब्रेरी का इस्तेमाल करने पर, पहचान और ऐक्सेस मैनेजमेंट (आईएएम) की मदद से अपने संसाधनों का ऐक्सेस मैनेज किया जा सकता है. IAM की मदद से, Google Cloud के चुनिंदा संसाधनों को बेहतर तरीके से ऐक्सेस किया जा सकता है. साथ ही, अन्य संसाधनों को अनचाहे ऐक्सेस से बचाया जा सकता है. इस पेज पर, Cloud Firestore के लिए IAM अनुमतियों और भूमिकाओं के बारे में बताया गया है. IAM के बारे में ज़्यादा जानकारी के लिए, IAM का दस्तावेज़ पढ़ें.

आईएएम की मदद से, कम से कम अधिकारों के सुरक्षा सिद्धांत को अपनाया जा सकता है. इससे, अपने संसाधनों का सिर्फ़ ज़रूरी ऐक्सेस दिया जा सकता है.

IAM की मदद से, IAM नीतियां सेट करके यह कंट्रोल किया जा सकता है कि किस (उपयोगकर्ता) के पास कौनसी (भूमिका) अनुमति है और किन संसाधनों के लिए है. IAM नीतियां, किसी उपयोगकर्ता को एक या उससे ज़्यादा भूमिकाएं असाइन करती हैं. इससे उपयोगकर्ता को कुछ अनुमतियां मिलती हैं. उदाहरण के लिए, किसी उपयोगकर्ता को datastore.indexAdminकी भूमिका दी जा सकती है. इससे उपयोगकर्ता, इंडेक्स बना सकता है, उनमें बदलाव कर सकता है, उन्हें मिटा सकता है, उनकी सूची बना सकता है या उन्हें देख सकता है.

अनुमतियां और भूमिकाएं

इस सेक्शन में, उन अनुमतियों और भूमिकाओं के बारे में खास जानकारी दी गई है जो Cloud Firestore के साथ काम करती हैं.

एपीआई के तरीकों के लिए ज़रूरी अनुमतियां

यहां दी गई टेबल में, उन अनुमतियों के बारे में बताया गया है जो कॉलर के पास हर कार्रवाई को पूरा करने के लिए होनी चाहिए:

तरीका ज़रूरी अनुमतियां
projects.databases.documents
batchGet datastore.entities.get
batchWrite अपडेट करें या exists precondition को false पर सेट करके बदलें datastore.entities.create
batchWrite अपडेट करें या exists precondition को true पर सेट करके बदलें datastore.entities.create
batchWrite अपडेट करना या बदलना, जिसमें कोई प्रीकंडिशन न हो datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
commit अपडेट करें या exists precondition को false पर सेट करके बदलें datastore.entities.create
commit अपडेट करें या exists precondition को 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
write (RPC) अपडेट करें या exists precondition को false पर सेट करके बदलें datastore.entities.create
write (RPC) अपडेट करें या exists precondition को 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
सूची datastore.backupSchedules.list
बनाएं datastore.backupSchedules.create
अपडेट करें datastore.backupSchedules.update
मिटाएं datastore.backupSchedules.delete
projects.locations.backups
पाएं datastore.backups.get
सूची datastore.backups.list
मिटाएं datastore.backups.delete

पहले से तय की गई भूमिकाएं

IAM की मदद से, Cloud Firestore में मौजूद हर एपीआई तरीके के लिए यह ज़रूरी है कि एपीआई अनुरोध करने वाले खाते के पास संसाधन का इस्तेमाल करने की ज़रूरी अनुमतियां हों. अनुमतियां देने के लिए, ऐसी नीतियां सेट की जाती हैं जो किसी उपयोगकर्ता, ग्रुप या सेवा खाते को भूमिकाएं असाइन करती हैं. प्राइमरी भूमिकाओं, मालिक, एडिटर, और दर्शक के अलावा, अपने प्रोजेक्ट के उपयोगकर्ताओं को 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, आईएएम की अनुमतियों को पांच मिनट के लिए कैश मेमोरी में सेव करता है. इसलिए, भूमिका में किए गए बदलाव को लागू होने में पांच मिनट लग सकते हैं.

Cloud Firestore के लिए IAM को मैनेज करना

Google Cloud Console, IAM API या gcloud कमांड-लाइन टूल का इस्तेमाल करके, IAM नीतियां पाई और सेट की जा सकती हैं. ज़्यादा जानकारी के लिए, प्रोजेक्ट के सदस्यों को ऐक्सेस देना, ऐक्सेस में बदलाव करना, और ऐक्सेस वापस लेना लेख पढ़ें.

शर्त के हिसाब से ऐक्सेस करने की अनुमतियां कॉन्फ़िगर करना

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 की शर्तें कॉन्फ़िगर करने का तरीका जानने के लिए, डेटाबेस ऐक्सेस करने की शर्तें कॉन्फ़िगर करना लेख पढ़ें.

आईएएम पर सुरक्षा के नियम की निर्भरता

मोबाइल/वेब क्लाइंट के लिए Cloud Firestore Security Rules, सेवा खाते और आईएएम बाइंडिंग पर निर्भर करता है:

सेवा खाता IAM भूमिका
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

Firebase आपके लिए यह सेवा खाता अपने-आप सेट अप कर देता है. अगर इस सेवा खाते से firebaserules.system की भूमिका हटा दी जाती है, तो सुरक्षा से जुड़े नियमों के तहत सभी अनुरोध अस्वीकार कर दिए जाएंगे. इस आईएएम बाइंडिंग को वापस लाने के लिए, 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 Console के बजाय Google Cloud CLI का इस्तेमाल करें, क्योंकि firebaserules.system की भूमिका, कंसोल में डिफ़ॉल्ट रूप से छिपी होती है.

आगे क्या करना है