কোনো এক্সটেনশনকে তার নির্দিষ্ট কাজগুলো সম্পাদন করানোর জন্য, Firebase একটি সার্ভিস অ্যাকাউন্টের মাধ্যমে ইনস্টল করা এক্সটেনশনের প্রতিটি ইনস্ট্যান্সকে প্রজেক্ট এবং এর ডেটাতে সীমিত অ্যাক্সেস প্রদান করে।
সার্ভিস অ্যাকাউন্ট বলতে কী বোঝায়?
সার্ভিস অ্যাকাউন্ট হলো এক বিশেষ ধরনের গুগল ইউজার অ্যাকাউন্ট। এটি এমন একজন অ-মানব ব্যবহারকারীকে প্রতিনিধিত্ব করে, যিনি গুগল পরিষেবাগুলিতে অনুমোদিত এপিআই (API) কল করতে পারেন।
একটি এক্সটেনশন ইনস্টল করার সময়, ফায়ারবেস প্রজেক্টে এক্সটেনশনটির জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করে। এক্সটেনশনের প্রতিটি ইনস্টল করা ইনস্ট্যান্সের নিজস্ব সার্ভিস অ্যাকাউন্ট থাকে। যদি কোনো এক্সটেনশন ইনস্ট্যান্স আনইনস্টল করা হয়, ফায়ারবেস এক্সটেনশনটির সার্ভিস অ্যাকাউন্টটি মুছে দেয়।
এক্সটেনশনগুলির জন্য তৈরি পরিষেবা অ্যাকাউন্টগুলি নিম্নলিখিত বিন্যাসে থাকে:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
ফায়ারবেস একটি এক্সটেনশনের সার্ভিস অ্যাকাউন্টে নির্দিষ্ট রোল (অনুমতির সমষ্টি) বরাদ্দ করার মাধ্যমে একটি প্রজেক্ট এবং এর ডেটাতে এক্সটেনশনটির অ্যাক্সেস সীমিত করে। যখন আপনি একটি এক্সটেনশন বিল্ড করেন, তখন আপনি নির্ধারণ করেন যে আপনার এক্সটেনশনটি চালানোর জন্য কোন কোন রোলের প্রয়োজন, তারপর আপনি এই রোলগুলো এবং আপনার এক্সটেনশনের জন্য এই রোলগুলো কেন প্রয়োজন তার কারণ আপনার extension.yaml ফাইলে তালিকাভুক্ত করেন (এই পৃষ্ঠার নীচে উদাহরণ দেখুন)।
আপনার এক্সটেনশনের জন্য কোন ভূমিকাগুলো প্রয়োজন তা নির্ধারণ করুন
যখন আপনি আপনার এক্সটেনশন তৈরি করেন, তখন আপনি নির্ধারণ করেন যে এক্সটেনশনটি কাজ করার জন্য কী ধরনের অ্যাক্সেসের প্রয়োজন হবে।
ইনস্টলেশনের সময়, Firebase CLI ব্যবহারকারীকে প্রতিটি রোলের জন্য প্রদত্ত অ্যাক্সেস লেভেল গ্রহণ করতে অনুরোধ করে। যদি আপনার এক্সটেনশনটি প্রয়োজনের চেয়ে বেশি রোলের অনুরোধ করে, তাহলে ব্যবহারকারীরা এটি ইনস্টল করতে আগ্রহী নাও হতে পারেন।
আপনার এক্সটেনশনটি কোনো পণ্যের সাথে ইন্টারঅ্যাক্ট করে কিনা তা নির্ধারণ করুন:
যদি আপনার এক্সটেনশন কোনো পণ্যের সাথে ইন্টারঅ্যাক্ট করে , তাহলে আপনাকে আপনার এক্সটেনশনকে সেই পণ্যটিতে অ্যাক্সেস দিতে হবে।
উদাহরণস্বরূপ, যদি আপনার এক্সটেনশন কোনো Realtime Database ইনস্ট্যান্সে ডেটা লেখে , তাহলে আপনার এক্সটেনশনটির একটি Realtime Database রোল (বিশেষত,
firebasedatabase.admin) প্রয়োজন হবে।যদি আপনার এক্সটেনশনটি শুধু কোনো প্রোডাক্টের ট্রিগারিং ইভেন্টের জন্য অপেক্ষা করে , তাহলে আপনার এক্সটেনশনটির সাথে সেই প্রোডাক্টের কোনো রোল যুক্ত করার প্রয়োজন নেই ।
উদাহরণস্বরূপ, যদি আপনার এক্সটেনশনটি কোনো Realtime Database ইনস্ট্যান্সে লেখার প্রয়োজনে ট্রিগার হয় (কিন্তু ডেটাবেসে কিছু না লেখে), তাহলে আপনার এক্সটেনশনটির কোনো Realtime Database রোলের প্রয়োজন নেই ।
আপনার এক্সটেনশনটি কোন কোন প্রোডাক্টের সাথে ইন্টারঅ্যাক্ট করবে তা নির্ধারণ করার পর, সেই নির্দিষ্ট ইন্টারঅ্যাকশনের জন্য কোন ভূমিকা প্রয়োজন তা আপনাকে ঠিক করতে হবে। কিছু প্রোডাক্ট সম্পাদিত কাজ বা কাজগুলোর ওপর নির্ভর করে বিভিন্ন ভূমিকা প্রদান করে থাকে।
উদাহরণস্বরূপ, ধরুন আপনার এক্সটেনশনটি একটি Cloud Storage বাকেটের সাথে ইন্টারঅ্যাক্ট করে।
storage.objectCreatorরোলটি এক্সটেনশনটিকে একটি Cloud Storage বাকেটে অবজেক্ট তৈরি করার অনুমতি দেবে, কিন্তু সেই রোলটি এক্সটেনশনটিকে অবজেক্ট দেখা, মুছে ফেলা বা ওভাররাইট করার অনুমতি দেবে না। এক্সটেনশনটিকে এই অতিরিক্ত কাজগুলো করার সুযোগ দিতে, আপনাকে এর পরিবর্তেstorage.objectAdminরোলটি অ্যাসাইন করতে হবে।
আপনার এক্সটেনশনের সার্ভিস অ্যাকাউন্টে আপনি যে সমস্ত সমর্থিত রোল বরাদ্দ করতে পারেন, তা দেখতে এই পৃষ্ঠার নীচের অংশটি দেখুন। প্রতিটি রোলের বিবরণ এবং প্রদত্ত অনুমতি সম্পর্কে জানতে, Firebase ডকুমেন্টেশন বা Google Cloud ডকুমেন্টেশন দেখুন। এছাড়াও আপনি Google Cloud কনসোলের IAM ও অ্যাডমিন প্যানেলে রোলগুলি খুঁজে দেখতে পারেন।
একটি এক্সটেনশনে কীভাবে ভূমিকা নির্ধারণ করবেন
আপনার এক্সটেনশনটি পরিচালনার জন্য প্রয়োজনীয় IAM রোলগুলো আপনার extension.yaml ফাইলের roles সেকশনে তালিকাভুক্ত করুন।
এখানে এমন একটি এক্সটেনশনের উদাহরণ দেওয়া হলো যা একটি নির্দিষ্ট Firebase Realtime Database পাথে সাড়া দেয়। এটি সক্রিয় হলে, এক্সটেনশনটি ব্যবহারকারীর অ্যাকাউন্টের ইমেল আপডেট করে ( Firebase Authentication সাথে মিথস্ক্রিয়া) এবং একটি নোটিফিকেশন পাঠায় ( Firebase Cloud Messaging সাথে মিথস্ক্রিয়া)। নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
- যদিও এক্সটেনশনটি একটি Realtime Database ইভেন্ট থেকে ট্রিগার হয় ,
firebasedatabase.adminরোলটি তালিকাভুক্ত নয় (listening-কে একটি ইন্টারঅ্যাকশন হিসেবে বিবেচনা করা হয় না)। - যেহেতু এক্সটেনশনটি Authentication এবং Cloud Messaging সাথে কাজ করে , তাই ঐ প্রোডাক্টগুলো অ্যাক্সেস করার জন্য এক্সটেনশনটির রোলের প্রয়োজন হয় (যথাক্রমে
firebaseauth.adminএবংfirebasenotifications.admin)।
# extension.yaml
...
# Roles assigned to the extension's service account by Firebase during installation
roles:
- role: firebaseauth.admin
reason: Required to update the email address of the user account
- role: firebasenotifications.admin
reason: Required to send a notification that the email address has been updated
...
আপনার extension.yaml ফাইলে, একটি এক্সটেনশনের সার্ভিস অ্যাকাউন্টে ভূমিকা (role) নির্ধারণ করতে নিম্নলিখিত ফিল্ডগুলি ব্যবহার করুন:
| মাঠ | প্রকার | বর্ণনা |
|---|---|---|
role(প্রয়োজনীয়) | স্ট্রিং | এক্সটেনশনটি পরিচালনার জন্য প্রয়োজনীয় IAM রোলের নাম |
reason(প্রয়োজনীয়) | স্ট্রিং | এক্সটেনশনটির কেন রোল দ্বারা প্রদত্ত অ্যাক্সেস প্রয়োজন, তার কারণের সংক্ষিপ্ত বিবরণ। পর্যাপ্ত বিবরণ প্রদান করুন যাতে একজন ব্যবহারকারী বুঝতে পারেন যে এক্সটেনশনটি কীভাবে ভূমিকাটি ব্যবহার করে। |
resource(ঐচ্ছিক) | স্ট্রিং | এই রোলটি কোন রিসোর্সের IAM পলিসিতে যোগ করা হবে। এটি বাদ দিলে, ডিফল্ট হিসেবে সমর্থিত মানগুলো হলো |
ভূমিকার পরিধি হ্রাস করুন
এক্সটেনশনগুলোর ন্যূনতম বিশেষাধিকারের নীতি অনুসরণ করা উচিত এবং শুধুমাত্র তাদের প্রয়োজনীয় রিসোর্সগুলোর জন্যই অ্যাক্সেসের অনুরোধ করা উচিত। আপনি role.resource ফিল্ডটি ব্যবহার করে একটি এক্সটেনশনের অ্যাক্সেসের পরিধি সীমিত করতে পারেন। উদাহরণস্বরূপ, যদি আপনার এক্সটেনশনের একটি ক্লাউড স্টোরেজ বাকেটে অবজেক্ট লেখার প্রয়োজন হয়, তাহলে আপনি নিম্নলিখিত রোলটি ব্যবহার করতে পারেন:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
এর ফলে এক্সটেনশনটি শুধুমাত্র তার প্রয়োজনীয় বাকেটটি অ্যাক্সেস করতে পারে, এবং একই প্রোজেক্টের অন্য কোনো বাকেট অ্যাক্সেস করতে পারে না।
এই ফিল্ডটি প্রজেক্ট ( projects/{project_id} ) এবং স্টোরেজ বাকেট ( projects/{project_id}/buckets/{bucket_id} ) সমর্থন করে।
এক্সটেনশনের জন্য সমর্থিত ভূমিকা
নিচের সারণিতে ফায়ারবেস প্রোডাক্টগুলোর সাথে ইন্টারঅ্যাক্ট করার জন্য সমর্থিত IAM রোলগুলোর তালিকা দেওয়া হলো। এই সারণির বেশিরভাগ রোলই ফায়ারবেস প্রোডাক্ট-লেভেলের রোল , তবে কিছু রোল সরাসরি গুগল ক্লাউড দ্বারা পরিচালিত হয় (বিশেষত, Cloud Firestore এবং Cloud Storage )।
ফায়ারবেস পণ্য
| যদি আপনার এক্সটেনশনটি... এর সাথে ইন্টারঅ্যাক্ট করে। | এই ভূমিকাগুলোর মধ্যে একটি অর্পণ করুন... |
|---|---|
| Cloud Firestore | ডেটাস্টোর.ইম্পোর্টএক্সপোর্টঅ্যাডমিন ডেটাস্টোর.ইনডেক্সঅ্যাডমিন ডেটাস্টোর.মালিক ডেটাস্টোর.ব্যবহারকারী ডেটাস্টোর.ভিউয়ার |
| Cloud Storage for Firebase | স্টোরেজ.অ্যাডমিন স্টোরেজ.অবজেক্টঅ্যাডমিন স্টোরেজ.অবজেক্টক্রিয়েটর স্টোরেজ.অবজেক্টভিউয়ার |
| Firebase App Distribution | firebaseappdistro.admin firebaseappdistro.viewer |
| Firebase Authentication | firebaseauth.admin firebaseauth.viewer |
| Firebase A/B Testing | firebaseabt.admin firebaseabt.viewer |
| Firebase Cloud Messaging | firebasenotifications.admin firebasenotifications.viewer |
| Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
| Firebase Hosting | firebasehosting.admin firebasehosting.viewer |
| Firebase In-App Messaging | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
| Firebase ML | firebaseml.admin firebaseml.viewer |
| Firebase Performance Monitoring | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
| Firebase Realtime Database | ফায়ারবেসডেটাবেস.অ্যাডমিন ফায়ারবেসডেটাবেস.ভিউয়ার |
| নিরাপত্তা নিয়ম | firebaserules.viewer firebaserules.developer firebaserules.deployer |
| Google Analytics | firebaseanalytics.admin firebaseanalytics.viewer |
গুগল ক্লাউড পণ্য
গুগল ক্লাউড ডকুমেন্টেশনে এই ভূমিকাগুলো সম্পর্কে জানুন।
| যদি আপনার এক্সটেনশনটি... এর সাথে ইন্টারঅ্যাক্ট করে। | এই ভূমিকাগুলোর মধ্যে একটি অর্পণ করুন... |
|---|---|
| কর্ম | ক্রিয়া। অ্যাডমিন ক্রিয়া। দর্শক |
| অ্যাপিজি | apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
| App Engine | অ্যাপইঞ্জিন.অ্যাপঅ্যাডমিন অ্যাপইঞ্জিন.অ্যাপভিউয়ার অ্যাপইঞ্জিন.কোডভিউয়ার অ্যাপইঞ্জিন.ডিপ্লয়ার অ্যাপইঞ্জিন.সার্ভিসঅ্যাডমিন |
| অটোএমএল | অটোএমএল.এডিটর অটোএমএল.প্রেডিক্টর অটোএমএল.ভিউয়ার |
| বিগকোয়েরি | bigquery.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
| ক্লাউড বিগটেবিল | বড় টেবিল.রিডার bigtable.user bigtable.viewer |
| বিলিং | বিলিং.ভিউয়ার |
| হ্যাংআউট চ্যাট | চ্যাট.মালিক চ্যাট.রিডার |
| ক্লাউড অ্যাসেট | ক্লাউডঅ্যাসেট.মালিক ক্লাউডঅ্যাসেট.ভিউয়ার |
| ক্লাউড ডেটা ফিউশন | ডেটাফিউশন.অ্যাডমিন ডেটাফিউশন.ভিউয়ার |
| ক্লাউড ডিবাগার | ক্লাউডডিবাগার.এজেন্ট ক্লাউডডিবাগার.ব্যবহারকারী |
| ক্লাউড ফাংশন | cloudfunctions.invoker cloudfunctions.viewer |
| ক্লাউড আইএপি | আইএপি.অ্যাডমিন iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
| ক্লাউড আইওটি | cloudiot.deviceController ক্লাউডিওটি.এডিটর ক্লাউডিওটি.প্রোভিশনার ক্লাউডিওটি.ভিউয়ার |
| স্ট্যাকড্রাইভার প্রোফাইলার | ক্লাউডপ্রোফাইলার.এজেন্ট ক্লাউডপ্রোফাইলার.ব্যবহারকারী |
| Cloud Scheduler | ক্লাউডশিডিউলার.অ্যাডমিন ক্লাউডশিডিউলার.জবরানার ক্লাউডশিডিউলার.ভিউয়ার |
| ক্লাউড নিরাপত্তা স্ক্যানার | ক্লাউডসিকিউরিটিস্ক্যানার.এডিটর ক্লাউডসিকিউরিটিস্ক্যানার.রানার ক্লাউডসিকিউরিটিস্ক্যানার.ভিউয়ার |
| ক্লাউড এসকিউএল | ক্লাউডএসকিউএল.ক্লায়েন্ট ক্লাউডএসকিউএল.এডিটর cloudsql.viewer |
| ক্লাউড ট্রেস | ক্লাউডট্রেস.অ্যাডমিন ক্লাউডট্রেস.এজেন্ট ক্লাউডট্রেস.ব্যবহারকারী |
| ডেটাফ্লো | ডেটাফ্লো.ডেভেলপার ডেটাফ্লো.ভিউয়ার ডেটাফ্লো.কর্মী |
| ডায়ালগফ্লো | ডায়ালগফ্লো.অ্যাডমিন ডায়ালগফ্লো.ক্লায়েন্ট ডায়ালগফ্লো.রিডার |
| ক্লাউড ডেটা ক্ষতি প্রতিরোধ | dlp.reader dlp.user |
| ত্রুটি প্রতিবেদন | ত্রুটি প্রতিবেদনকারী ব্যবহারকারী ত্রুটি প্রতিবেদন.দর্শক ত্রুটি প্রতিবেদনকারী.লেখক |
| ইভেন্টার্ক | ইভেন্টআর্ক.প্রকাশক ইভেন্টআর্ক.ইভেন্টরিসিভার |
| ক্লাউড ফাইলস্টোর | ফাইল.সম্পাদক ফাইল.ভিউয়ার |
| লগিং | লগিং.কনফিগরাইটার লগিং.লগরাইটার লগিং.প্রাইভেটলগভিউয়ার লগিং.ভিউয়ার |
| মেশিন লার্নিং ইঞ্জিন | ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
| পর্যবেক্ষণ | পর্যবেক্ষণ সম্পাদক মনিটরিং.মেট্রিকরাইটার পর্যবেক্ষণ.দর্শক |
| এআই নোটবুক | নোটবুকস.অ্যাডমিন নোটবুকস.ভিউয়ার |
| Pub/Sub | পাবসাব.সম্পাদক পাবসাব.প্রকাশক পাবসাব.সাবস্ক্রাইবার পাবসাব.ভিউয়ার |
| মেমোরিস্টোর রেডিস | রেডিস.এডিটর redis.viewer |
| ক্লাউড রান | রান.ইনভোকার |
| উৎস | উৎস.পাঠক উৎস.লেখক |
| ক্লাউড স্প্যানার | স্প্যানার.ডাটাবেসঅ্যাডমিন স্প্যানার.ডাটাবেসরিডার স্প্যানার.ডাটাবেসব্যবহারকারী স্প্যানার.ভিউয়ার |
| পরিষেবা ব্যবহার | পরিষেবা ব্যবহার.apiKeysMetadataViewer |
| ক্লাউড স্টোরেজ স্থানান্তর পরিষেবা | স্টোরেজট্রান্সফার.ব্যবহারকারী স্টোরেজট্রান্সফার.ভিউয়ার |
| ক্লাউড ট্রান্সকোডার | ট্রান্সকোডার.অ্যাডমিন ট্রান্সকোডার.ভিউয়ার |
| ভার্টেক্স এআই | এআইপ্ল্যাটফর্ম.ব্যবহারকারী |
| অন্যান্য | আইডেন্টিটিটুলকিট.অ্যাডমিন আইডেন্টিটিটুলকিট.ভিউয়ার |