এই পৃষ্ঠায় Cloud Firestore জন্য কাস্টমার-ম্যানেজড এনক্রিপশন কী (CMEK) সম্পর্কিত কাজগুলো কীভাবে সম্পাদন করতে হয় তা বর্ণনা করা হয়েছে। সাধারণভাবে CMEK সম্পর্কে আরও তথ্যের জন্য, যার মধ্যে কখন এবং কেন এটি সক্রিয় করতে হবে তাও অন্তর্ভুক্ত, ক্লাউড KMS ডকুমেন্টেশন দেখুন।
আপনার CMEK কীগুলি প্রস্তুত করুন
CMEK-সুরক্ষিত Cloud Firestore ডেটাবেস তৈরি করার আগে, আপনাকে অবশ্যই নিম্নলিখিত ধাপগুলি সম্পন্ন করতে হবে:
- Cloud Firestore CMEK ফিচারে অ্যাক্সেসের জন্য অনুরোধ করুন ।
- একটি Cloud Firestore পরিষেবা এজেন্ট তৈরি (বা পুনরুদ্ধার) করুন ।
- একটি CMEK কী তৈরি করুন ।
- ওই কী-টির জন্য IAM সেটিংস কনফিগার করুন ।
যেসব প্রোজেক্টে CMEK-সুরক্ষিত Cloud Firestore ডেটাবেস থাকবে, সেগুলোর প্রতিটির জন্য এই ধাপগুলো সম্পূর্ণ করুন। আপনি যদি পরবর্তীতে একটি নতুন CMEK কী তৈরি করেন, তবে আপনাকে অবশ্যই সেই কী-টির জন্য IAM সেটিংস কনফিগার করতে হবে।
অ্যাক্সেসের জন্য অনুরোধ করুন
Cloud Firestore সার্ভিস এজেন্ট তৈরি করার আগে, অ্যাক্সেস অনুরোধ ফর্মটি পূরণ করে CMEK ফিচারের জন্য অ্যাক্সেসের অনুরোধ করুন।
একটি Cloud Firestore পরিষেবা এজেন্ট তৈরি করুন
CMEK কী তৈরি করার আগে, আপনার অবশ্যই একটি Cloud Firestore সার্ভিস এজেন্ট থাকতে হবে, যা হলো এক ধরনের গুগল-পরিচালিত সার্ভিস অ্যাকাউন্ট এবং Cloud Firestore এই কী-টি অ্যাক্সেস করার জন্য এটি ব্যবহার করে।
আপনার পক্ষ থেকে CMEK কী অ্যাক্সেস করার জন্য Cloud Firestore যে সার্ভিস এজেন্টটি ব্যবহার করে, সেটি তৈরি করতে ` services identity create` কমান্ডটি চালান। এই কমান্ডটি সার্ভিস অ্যাকাউন্টটি আগে থেকে বিদ্যমান না থাকলে তা তৈরি করে এবং তারপর প্রদর্শন করে।
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
আপনার Cloud Firestore ডেটাবেসগুলোর জন্য যে প্রজেক্টটি ব্যবহার করার পরিকল্পনা করছেন, তার নাম দিয়ে FIRESTORE_PROJECT প্রতিস্থাপন করুন।
এই কমান্ডটি সার্ভিস এজেন্ট আইডি প্রদর্শন করে, যা একটি ইমেল ঠিকানার মতো বিন্যাসে থাকে। আউটপুট ইমেল স্ট্রিংটি লিখে রাখুন, কারণ আপনি এটি পরবর্তী ধাপে ব্যবহার করবেন।
Service identity created:
service-xxx@gcp-sa-firestore.
একটি চাবি তৈরি করুন
আপনি সরাসরি ক্লাউড কেএমএস-এ তৈরি করা একটি কী অথবা ক্লাউড এক্সটার্নাল কী ম্যানেজার-এর মাধ্যমে উপলব্ধ করা একটি বাহ্যিকভাবে পরিচালিত কী ব্যবহার করতে পারেন।
ক্লাউড কেএমএস কী-এর অবস্থান অবশ্যই সেই Cloud Firestore ডাটাবেসের অবস্থানের সাথে একই হতে হবে যার সাথে এটি ব্যবহার করা হবে।
আঞ্চলিক ডেটাবেস অবস্থানগুলির জন্য, কী রিং, কী এবং ডেটাবেসের জন্য একই অবস্থানের নাম ব্যবহার করুন, কারণ অবস্থানের নামগুলির মধ্যে একটি এক-এক সম্পর্ক রয়েছে।
উদাহরণস্বরূপ, আপনি যদি
us-west1এ একটি CMEK-সুরক্ষিত ডেটাবেস তৈরি করতে চান, তাহলে একটি কী রিং তৈরি করুন এবংus-west1টাইপ করুন।একাধিক-অঞ্চল ডাটাবেস অবস্থানের জন্য, KMS একাধিক-অঞ্চল অবস্থানের নামটি ব্যবহার করুন:
Cloud Firestore
nam5মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড KMSusমাল্টি-রিজিওন লোকেশন ব্যবহার করুন।Cloud Firestore
eur3মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড কেএমএসeuropeমাল্টি-রিজিওন লোকেশন ব্যবহার করুন।
যে Google Cloud প্রজেক্টে আপনি আপনার কীগুলো পরিচালনা করতে চান, সেখানে নিম্নলিখিতগুলি সম্পন্ন করুন:
নিম্নলিখিত বিকল্পগুলির মধ্যে যেকোনো একটি ব্যবহার করে একটি কী রিং এবং একটি চাবি তৈরি করুন:
- ক্লাউড কেএমএস-এ সরাসরি কী-রিং এবং চাবি তৈরি করুন ।
- একটি বাহ্যিকভাবে পরিচালিত কী ব্যবহার করুন। এক্সটার্নাল কী-টি তৈরি করুন এবং তারপরে ক্লাউড কেএমএস (Cloud KMS)-এর মাধ্যমে কী-টি উপলব্ধ করার জন্য একটি ক্লাউড ইকেএম (Cloud EKM) কী তৈরি করুন ।
কী-এর জন্য IAM সেটিংস কনফিগার করুন
কনসোল
আপনার সার্ভিস এজেন্টকে একটি ক্লাউড কেএমএস রোল প্রদান করতে, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন। আপনি যদি আরও সূক্ষ্ম নিয়ন্ত্রণ চান, তবে কী (key) বা কী-রিং (key-ring) স্তরেও অনুমতি প্রদান করতে পারেন।
গুগল ক্লাউড কনসোলে, IAM পৃষ্ঠায় যান।
যোগ করুন-এ ক্লিক করুন।
আপনার Cloud Firestore সার্ভিস এজেন্টের জন্য ইমেল ফরম্যাটে আইডিটি প্রবেশ করান।
ক্লাউড কেএমএস ক্রিপ্টো-কী এনক্রিপ্টার/ডিক্রিপ্টার রোলটি নির্বাচন করুন।
সংরক্ষণ করুন- এ ক্লিক করুন।
জিক্লাউড
আপনার সার্ভিস এজেন্টকে cloudkms.cryptoKeyEncrypterDecrypter রোলটি প্রদান করুন:
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
KMS_KEY, যে নামটি আপনি কী-টির জন্য নির্ধারণ করেছেন -
KMS_KEYRING, যেটিতে চাবিটি থাকে -
KMS_LOCATIONসেই অঞ্চলের সাথে যেখানে কী রিংটি রয়েছে -
SERVICE_AGENT_EMAILহলো সেই সার্ভিস এজেন্টের ইমেল-ফরম্যাটেড শনাক্তকারী, যাকে আপনি অ্যাক্সেস প্রদান করছেন। -
KMS_PROJECTসেই প্রকল্পের সাথে যা চাবি ধারণ করে
টার্মিনালে নিম্নলিখিতের অনুরূপ একটি প্রতিক্রিয়া প্রদর্শিত হওয়া উচিত:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
একটি CMEK-সক্ষম ডাটাবেস তৈরি করুন
আপনার CMEK কীগুলি তৈরি এবং কনফিগার করার পরে, আপনি একটি CMEK-সুরক্ষিত ডেটাবেস তৈরি করতে পারবেন। বিদ্যমান Cloud Firestore ডেটাবেস, যেগুলি গুগলের ডিফল্ট এনক্রিপশন দ্বারা সুরক্ষিত, সেগুলিকে CMEK ব্যবহার করার জন্য রূপান্তর করা যাবে না।
আপনি শুধুমাত্র একটি CMEK-সক্ষম ডেটাবেস তৈরি করার সময়ই এনক্রিপশনের ধরন এবং কী বেছে নিতে পারবেন।
কনসোল
গুগল ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।
ফায়ারস্টোর ডেটাবেস তৈরি করুন -এ ক্লিক করুন।
একটি ডাটাবেস আইডি প্রবেশ করান।
এন্টারপ্রাইজ সংস্করণ নির্বাচন করুন।
আপনার ডেটাবেসের জন্য একটি অবস্থান নির্বাচন করুন।
‘Show Encryption Options’-এ ক্লিক করুন এবং তারপরে ‘Cloud KMS key’ নির্বাচন করুন।
ডাটাবেসের জন্য আপনি যে CMEK কী ব্যবহার করতে চান, তার রিসোর্স নামটি নির্বাচন করুন বা প্রবেশ করান।
কী-গুলির তালিকা আপনার নির্বাচিত বর্তমান Google Cloud প্রজেক্ট এবং ডেটাবেস লোকেশনের মধ্যেই সীমাবদ্ধ। অন্য কোনো Google Cloud প্রজেক্টের কী ব্যবহার করতে, ‘সুইচ প্রজেক্ট’ বা ‘এন্টার কী ম্যানুয়ালি’-তে ক্লিক করুন।
Cloud Firestore সার্ভিস অ্যাকাউন্টে কী পারমিশন দেওয়ার জন্য অনুরোধ করা হলে, 'Grant' এ ক্লিক করুন। একটি CMEK ডাটাবেস তৈরি করতে, আপনার Cloud Firestore সার্ভিস অ্যাকাউন্টকে অবশ্যই
cloudkms.cryptoKeyEncrypterDecrypterরোলটি প্রদান করতে হবে।মোবাইল ও ওয়েব ক্লায়েন্টদের জন্য নিরাপত্তা নিয়মাবলী নির্বাচন করুন।
ডেটাবেস তৈরি করুন- এ ক্লিক করুন।
ডাটাবেস তৈরি করার পরে, আপনি ডাটাবেসের বিবরণ দেখে ডাটাবেসটি CMEK-সক্ষম কিনা তা যাচাই করতে পারেন:
- যদি আপনার ডাটাবেস CMEK দ্বারা সুরক্ষিত থাকে, তাহলে ‘এনক্রিপশন টাইপ’ ফিল্ডটি ‘কাস্টমার-ম্যানেজড’ হিসেবে দেখায় এবং ‘এনক্রিপশন কী’ ফিল্ডে এই ডাটাবেসটিকে সুরক্ষিত করতে ব্যবহৃত সংশ্লিষ্ট ক্লাউড KMS ও কী-এর সংস্করণটি তালিকাভুক্ত থাকে।
- যদি আপনার ডাটাবেস CMEK দ্বারা সুরক্ষিত না থাকে, তাহলে এনক্রিপশন টাইপ ফিল্ডটি গুগল-পরিচালিত (Google-managed ) হিসেবে দেখাবে।
জিক্লাউড
Google Cloud CLI ব্যবহার করে CMEK-সক্ষম ডেটাবেস তৈরি করার আগে, সর্বশেষ সংস্করণটি ইনস্টল করুন এবং gcloud CLI অনুমোদন দিন। আরও তথ্যের জন্য, “ gcloud CLI ইনস্টল করুন” দেখুন।
gcloud firestore databases create \
--location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--edition=enterprise \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
FIRESTORE_DATABASE_LOCATION, যেখানে ডেটাবেসের অবস্থান উল্লেখ থাকবে। -
DATABASE_IDহলো ডাটাবেসের একটি আইডি। KMS_KEY_NAMEএ কী-টির জন্য আপনার নির্ধারিত নামটি দিন। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_IDআপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT
একটি CMEK-সুরক্ষিত ডাটাবেস অ্যাক্সেস করুন
CMEK-সুরক্ষিত ডেটাবেসে পাঠানো সমস্ত রিড, রাইট এবং কোয়েরি অপারেশন গুগলের ডিফল্ট এনক্রিপ্টেড ডেটাবেসের মতোই কাজ করবে। উদাহরণস্বরূপ, প্রতিটি অনুরোধের জন্য আপনাকে কোনো কী (key) প্রদান করতে হবে না।
CMEK-সুরক্ষিত ডাটাবেস পুনরুদ্ধার করুন
ব্যাকআপ থেকে CMEK-সুরক্ষিত ডেটাবেস পুনরুদ্ধার করার আগে:
- আপনি ডাটাবেসটি CMEK এনক্রিপশনে, গুগলের ডিফল্ট এনক্রিপশনে (নন-CMEK), নাকি ব্যাকআপের মতো একই এনক্রিপশনে পুনরুদ্ধার করতে চান, তা স্থির করুন।
ব্যাকআপ এনক্রিপ্ট করতে ব্যবহৃত কী (প্রাথমিক সংস্করণ) এবং কী সংস্করণটি প্রস্তুত করুন। কী এবং কী সংস্করণ উভয়ই সক্রিয় করুন।
জিক্লাউড
একটি CMEK-সুরক্ষিত ডাটাবেসকে CMEK এনক্রিপশনে পুনরুদ্ধার করুন
CMEK এনক্রিপশনে রিস্টোর করতে, রিস্টোর করা ডাটাবেসের জন্য এনক্রিপশনের ধরন কনফিগার করতে ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ সহ gcloud firestore databases restore কমান্ডটি চালান। আপনি যদি এনক্রিপশনের ধরন নির্দিষ্ট না করেন, তাহলে রিস্টোর করা ডাটাবেসটি ব্যাকআপের মতোই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।
gcloud firestore databases restore \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME জায়গায় কী-টির জন্য আপনার নির্ধারিত নামটি বসান। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:
projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID
CMEK-সুরক্ষিত ডাটাবেসকে ডিফল্ট এনক্রিপশনে পুনরুদ্ধার করুন
Google-এর ডিফল্ট এনক্রিপশন (নন-CMEK) পুনরুদ্ধার করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
gcloud firestore databases restore \
--encryption-type=google-default-encryption
একটি CMEK-সুরক্ষিত ডাটাবেসকে ব্যাকআপের মতো একই এনক্রিপশন টাইপে পুনরুদ্ধার করুন।
ব্যাকআপের মতো একই এনক্রিপশন টাইপে পুনরুদ্ধার করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
gcloud firestore databases restore --encryption-type=use-source-encryption
ফায়ারবেস সিএলআই
একটি CMEK-সুরক্ষিত ডাটাবেসকে CMEK এনক্রিপশনে পুনরুদ্ধার করুন
CMEK এনক্রিপশনে পুনরুদ্ধার করতে, ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ ব্যবহার করুন। আপনি যদি এনক্রিপশনের ধরন নির্দিষ্ট না করেন, তাহলে পুনরুদ্ধার করা ডাটাবেসটি ব্যাকআপের মতোই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
DATABASE_IDএর সাথে আপনার ডাটাবেসের আইডি যুক্ত করুন। - আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT -
FIRESTORE_LOCATIONএ আপনার Cloud Firestore ডেটাবেসের অবস্থান উল্লেখ করুন। -
BACKUP_IDহলো আপনার ব্যাকআপের আইডি। -
KMS_PROJECT, যে প্রজেক্টটিতে আপনার CMEK কী রয়েছে। -
KMS_LOCATIONএ সেই অবস্থানটি উল্লেখ করুন যেখানে আপনার CMEK কী এবং কী রিং রয়েছে। - আপনার CMEK কী রিং-এর আইডি সহ
KMS_KEYRING_ID
আপনার পুনরুদ্ধার করা Cloud Firestore ডেটাবেসটি CMEK-এনক্রিপ্টেড কিনা তা নিশ্চিত করুন:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
CMEK-সুরক্ষিত ডাটাবেসকে ডিফল্ট এনক্রিপশনে পুনরুদ্ধার করুন
Google-এর ডিফল্ট এনক্রিপশন (নন-CMEK) পুনরুদ্ধার করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
DATABASE_IDএর সাথে আপনার ডাটাবেসের আইডি যুক্ত করুন। - আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT -
FIRESTORE_LOCATIONএ আপনার Cloud Firestore ডেটাবেসের অবস্থান উল্লেখ করুন। -
BACKUP_IDহলো আপনার ব্যাকআপের আইডি।
একটি CMEK-সুরক্ষিত ডাটাবেসকে ব্যাকআপের মতো একই এনক্রিপশন টাইপে পুনরুদ্ধার করুন।
ব্যাকআপের মতো একই এনক্রিপশন টাইপে পুনরুদ্ধার করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
DATABASE_IDএর সাথে আপনার ডাটাবেসের আইডি যুক্ত করুন। - আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT -
FIRESTORE_LOCATIONএ আপনার Cloud Firestore ডেটাবেসের অবস্থান উল্লেখ করুন। -
BACKUP_IDহলো আপনার ব্যাকআপের আইডি।
একটি CMEK-সুরক্ষিত ডেটাবেস ক্লোন করুন
CMEK-সুরক্ষিত ডেটাবেস ক্লোন করার আগে:
- আপনি ডেটাবেসটি CMEK এনক্রিপশনে, গুগলের ডিফল্ট এনক্রিপশনে (নন-CMEK), নাকি সোর্স ডেটাবেসের মতোই এনক্রিপশনে ক্লোন করতে চান, তা স্থির করুন।
উৎস ডাটাবেস এনক্রিপ্ট করতে ব্যবহৃত কী (প্রাথমিক সংস্করণ) এবং কী সংস্করণটি প্রস্তুত করুন। কী এবং কী সংস্করণ উভয়ই সক্রিয় করুন।
জিক্লাউড
একটি CMEK-সুরক্ষিত ডেটাবেসকে CMEK এনক্রিপশনে ক্লোন করুন
CMEK এনক্রিপশনে ক্লোন করতে, gcloud firestore databases clone কমান্ডটি চালান এবং ক্লোন করা ডেটাবেসের জন্য এনক্রিপশনের ধরন কনফিগার করতে ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগগুলো ব্যবহার করুন। যদি আপনি এনক্রিপশনের ধরন নির্দিষ্ট না করেন, তাহলে ক্লোন করা ডেটাবেসটি সোর্স ডেটাবেসের মতোই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।
gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME জায়গায় কী-টির জন্য আপনার নির্ধারিত নামটি বসান। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
একটি CMEK-সুরক্ষিত ডেটাবেসকে ডিফল্ট এনক্রিপশনে ক্লোন করুন।
Google-এর ডিফল্ট এনক্রিপশনে (নন-CMEK) ক্লোন করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
gcloud firestore databases clone \
--encryption-type=google-default-encryption
একটি CMEK-সুরক্ষিত ডেটাবেসকে উৎস ডেটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করুন।
সোর্স ডাটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
gcloud firestore databases clone \
--encryption-type=use-source-encryption
--encryption-type নির্দিষ্ট না করা থাকলেও এটিই ডিফল্ট আচরণ।
ফায়ারবেস সিএলআই
একটি CMEK-সুরক্ষিত ডেটাবেসকে CMEK এনক্রিপশনে ক্লোন করুন
CMEK এনক্রিপশনে ক্লোন করতে, ` firebase firestore:databases:clone কমান্ডটি চালান এবং ক্লোন করা ডাটাবেসের জন্য এনক্রিপশনের ধরন কনফিগার করতে ঐচ্ছিক encryption-type ও kms-key-name ফ্ল্যাগগুলো ব্যবহার করুন। যদি আপনি এনক্রিপশনের ধরন নির্দিষ্ট না করেন, তাহলে ক্লোন করা ডাটাবেসটি সোর্স ডাটাবেসের মতোই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME জায়গায় কী-টির জন্য আপনার নির্ধারিত নামটি বসান। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
একটি CMEK-সুরক্ষিত ডেটাবেসকে ডিফল্ট এনক্রিপশনে ক্লোন করুন।
Google-এর ডিফল্ট এনক্রিপশনে (নন-CMEK) ক্লোন করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
একটি CMEK-সুরক্ষিত ডেটাবেসকে উৎস ডেটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করুন।
সোর্স ডাটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগটি সেট করুন:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
--encryption-type নির্দিষ্ট না করা থাকলেও এটিই ডিফল্ট আচরণ।
ব্যবহৃত চাবিটি দেখুন
জিক্লাউড
ডাটাবেস CMEK কনফিগারেশন নিশ্চিত করতে আপনি `databases describe gcloud CLI কমান্ডটি ব্যবহার করতে পারেন:
gcloud firestore databases describe \
--database=DATABASE_ID \
--project=FIRESTORE_PROJECT
রেসপন্সের cmekConfig ফিল্ডে আপনি নিম্নলিখিতের অনুরূপ CMEK তথ্য দেখতে পাবেন:
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
উত্তরে নিম্নলিখিত তথ্য অন্তর্ভুক্ত রয়েছে:
-
kmsKeyName: আপনার CMEK-সুরক্ষিত ডেটাবেস এনক্রিপ্ট করতে ব্যবহৃত কী-টির সম্পূর্ণ কী রিসোর্স নাম। -
activeKeyVersion: CMEK-সুরক্ষিত ডেটাবেস দ্বারা ব্যবহৃত সমস্ত কী ভার্সনের একটি তালিকা। কী রোটেশনের সময়, আপনার একাধিক সক্রিয় কী ভার্সন থাকতে পারে। কী রোটেশনের সময় পুরানো এবং নতুন উভয় কী ভার্সনই উপলব্ধ থাকা প্রয়োজন। পুরানো কী ভার্সনটিactiveKeyVersionফিল্ডে আর প্রদর্শিত না হওয়া পর্যন্ত সেটিকে নিষ্ক্রিয় করবেন না।
REST API
HTTP অনুরোধ:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
অনুরোধের মূল অংশে cmek_config.kms_key_name ফিল্ডে CMEK কনফিগার করুন। এটিকে একটি ক্লাউড কেএমএস (Cloud KMS) কী-এর সম্পূর্ণ রিসোর্স আইডি-তে সেট করুন। শুধুমাত্র এই ডেটাবেসের একই অবস্থানে থাকা কী-ই অনুমোদিত।
এই মানটি cloud KMS কী রিসোর্স আইডি হওয়া উচিত projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} ফরম্যাটে থাকবে।
অন্যান্য ফিল্ডগুলির আরও বিশদ বিবরণের জন্য, database create পৃষ্ঠাটি দেখুন।
অনুরোধের উদাহরণ:
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
উদাহরণ উত্তর:
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
...
}
একটি কী নিষ্ক্রিয় করুন
ডাটাবেসের সাথে যুক্ত কোনো কী নিষ্ক্রিয় করতে, নিম্নলিখিতগুলি সম্পন্ন করুন:
- একটি ডাটাবেসের জন্য ব্যবহৃত প্রধান সংস্করণগুলি দেখুন
- ঐ কী সংস্করণগুলি নিষ্ক্রিয় করুন
- পরিবর্তনটি কার্যকর হওয়া পর্যন্ত অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য আছে কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে ৩ ঘণ্টা পর্যন্ত সময় লাগতে পারে।
যখন ডাটাবেসে ব্যবহৃত কোনো কী নিষ্ক্রিয় করা হয়, তখন একটি INVALID_ARGUMENT এক্সেপশন পাওয়ার সম্ভাবনা থাকে এবং এরর মেসেজে অতিরিক্ত বিবরণও থাকে, যেমন:
{
"error": {
"code": 400,
"message": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"detail": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED."
}
]
}
}
একটি চাবি সক্রিয় করুন
ডাটাবেসের সাথে যুক্ত কোনো কী পুনরায় সক্রিয় করতে, নিম্নলিখিতগুলি সম্পন্ন করুন:
- একটি ডাটাবেসের জন্য ব্যবহৃত প্রধান সংস্করণগুলি দেখুন
- ঐ মূল সংস্করণগুলি সক্রিয় করুন
- পরিবর্তনটি কার্যকর হওয়া পর্যন্ত অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য আছে কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে ৩ ঘণ্টা পর্যন্ত সময় লাগতে পারে।
একটি ক্লাউড কেএমএস কী-এর জন্য অডিট লগ দেখুন
ক্লাউড কেএমএস ডেটা অ্যাক্সেস অডিট লগ চালু করার আগে, আপনার ক্লাউড অডিট লগ সম্পর্কে পরিচিত থাকা উচিত।
ক্লাউড কেএমএস ডেটা অ্যাক্সেস অডিট লগ আপনাকে দেখায় যে কখন Cloud Firestore বা আপনার সিএমইকে (CMEK) কী ব্যবহার করার জন্য কনফিগার করা অন্য কোনো প্রোডাক্ট ক্লাউড কেএমএস-এ এনক্রিপ্ট বা ডিক্রিপ্ট কল করে। Cloud Firestore প্রতিটি ডেটা রিকোয়েস্টের জন্য এনক্রিপ্ট বা ডিক্রিপ্ট কল করে না, বরং এটি একটি পোলার পরিচালনা করে যা পর্যায়ক্রমে কী-টি পরীক্ষা করে। এই পোলিংয়ের ফলাফল অডিট লগে দেখা যায়।
আপনি গুগল ক্লাউড কনসোলে অডিট লগগুলি সেট আপ করতে এবং সেগুলির সাথে ইন্টারঅ্যাক্ট করতে পারেন:
আপনার প্রজেক্টে ক্লাউড কেএমএস এপিআই (Cloud KMS API)-এর জন্য লগিং চালু আছে কিনা , তা নিশ্চিত করুন।
গুগল ক্লাউড কনসোলে Cloud Logging -এ যান।
কোয়েরি বিল্ডারে নিম্নলিখিত লাইনগুলো যোগ করে আপনার ক্লাউড কেএমএস কী-তে লগ এন্ট্রি সীমিত করুন:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATIONনিম্নলিখিতগুলি প্রতিস্থাপন করুন:
- CMEK কী-এর নাম সহ
KMS_KEY -
KMS_KEYRING, যেটিতে চাবিটি থাকে -
KMS_LOCATIONযেখানে চাবি এবং চাবির রিং-এর অবস্থান রয়েছে
লগটিতে প্রতি পাঁচ মিনিট অন্তর প্রতিটি ডেটাবেসের জন্য কয়েকটি লগ এন্ট্রি দেখা যায়। লগ এন্ট্রিগুলো এই উদাহরণগুলোর মতো দেখতে:
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore. audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore." Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore. audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore."- CMEK কী-এর নাম সহ
অডিট লগ ব্যাখ্যা করার বিষয়ে বিস্তারিত জানতে ‘অডিট লগ বোঝা’ দেখুন।
একটি CMEK সংস্থা নীতি কনফিগার করুন
আপনার প্রতিষ্ঠানে Cloud Firestore ডেটাবেসগুলির জন্য এনক্রিপশন কমপ্লায়েন্সের প্রয়োজনীয়তা নির্দিষ্ট করতে, একটি CMEK অর্গানাইজেশন পলিসি কনস্ট্রেইন্ট ব্যবহার করুন।
CMEK সুরক্ষা প্রয়োজন
Cloud Firestore ডাটাবেস তৈরির জন্য CMEK বাধ্যতামূলক করতে constraints/gcp.restrictNonCmekServices কনফিগার করুন। কনস্ট্রেইন্টটি deny হিসেবে সেট করুন এবং ডিনাই লিস্টে firestore.googleapis.com যোগ করুন, উদাহরণস্বরূপ:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
FIRESTORE_PROJECT পরিবর্তে যে প্রজেক্টটি সীমাবদ্ধ করতে চান, সেটির নাম লিখুন।
প্রতিষ্ঠানের নীতিমালা নির্ধারণ সম্পর্কে আরও জানতে, ‘নীতিমালা তৈরি ও সম্পাদনা’ দেখুন।
নীতিমালাটি কার্যকর হওয়ার পর, আপনি যদি প্রভাবিত প্রজেক্টের অধীনে একটি নন-CMEK ডেটাবেস তৈরি করার চেষ্টা করেন, তাহলে একটি FAILED_PRECONDITION এক্সেপশন এবং এরর মেসেজ পাবেন। উদাহরণস্বরূপ, একটি এক্সেপশন দেখতে এইরকম:
{
"error": {
"code": 400,
"message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/gcp.restrictNonCmekServices",
"subject": "orgpolicy:projects/FIRESTORE_PROJECT",
"description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
}
]
CMEK-এর জন্য কী-এর ব্যবহার সীমিত করুন
CMEK সুরক্ষার জন্য কোন ক্লাউড KMS কী ব্যবহার করা হবে তা সীমিত করতে, constraints/gcp.restrictCmekCryptoKeyProjects কনস্ট্রেইন্টটি কনফিগার করুন।
একটি তালিকা সীমাবদ্ধতা হিসাবে, গৃহীত মানগুলি হলো রিসোর্স হায়ারার্কি ইন্ডিকেটর (উদাহরণস্বরূপ, projects/PROJECT_ID , under:folders/FOLDER_ID , এবং under:organizations/ORGANIZATION_ID )। রিসোর্স হায়ারার্কি ইন্ডিকেটরগুলির একটি তালিকা কনফিগার করে এবং সীমাবদ্ধতাটিকে ' Allow' (অনুমতি দিন) এ সেট করে এই সীমাবদ্ধতাটি ব্যবহার করুন। এই কনফিগারেশনটি সমর্থিত পরিষেবাগুলিকে সীমাবদ্ধ করে, যাতে CMEK কীগুলি শুধুমাত্র তালিকাভুক্ত প্রজেক্ট, ফোল্ডার এবং অর্গানাইজেশনগুলি থেকে বেছে নেওয়া যায়। অনুমোদিত রিসোর্সগুলির মধ্যে একটি থেকে Cloud Firestore কী ছাড়া কনফিগার করা পরিষেবাগুলিতে CMEK-সুরক্ষিত রিসোর্স তৈরির অনুরোধ সফল হয় না।
নিম্নলিখিত উদাহরণটি নির্দিষ্ট প্রজেক্টের CMEK-সুরক্ষিত ডেটাবেসগুলির জন্য শুধুমাত্র ALLOWED_KEY_PROJECT_ID থেকে কী-গুলিকে অনুমতি দেয়:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>
নীতিমালা কার্যকর হওয়ার পর, আপনি যদি শর্তটি লঙ্ঘন করেন, তাহলে আপনি একটি FAILED_PRECONDITION এক্সেপশন এবং একটি এরর মেসেজ পাবেন। একটি এক্সেপশন দেখতে নিচের মতো হয়:
{
"error": {
"code": 400,
"message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/gcp.restrictCmekCryptoKeyProjects",
"subject": "orgpolicy:projects/FIRESTORE_PROJECT",
"description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
}
]
}
]
}
}