এই পৃষ্ঠায় 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.iam.gserviceaccount.com
একটি চাবি তৈরি করুন
আপনি সরাসরি ক্লাউড কেএমএস-এ তৈরি করা একটি কী অথবা ক্লাউড এক্সটার্নাল কী ম্যানেজার-এর মাধ্যমে উপলব্ধ করা একটি বাহ্যিকভাবে পরিচালিত কী ব্যবহার করতে পারেন।
ক্লাউড কেএমএস কী-এর অবস্থান অবশ্যই সেই Cloud Firestore ডাটাবেসের অবস্থানের সাথে একই হতে হবে যার সাথে এটি ব্যবহার করা হবে।
আঞ্চলিক ডেটাবেস অবস্থানগুলির জন্য, কী রিং, কী এবং ডেটাবেসের জন্য একই অবস্থানের নাম ব্যবহার করুন, কারণ অবস্থানের নামগুলির মধ্যে একটি এক-এক সম্পর্ক রয়েছে।
উদাহরণস্বরূপ, আপনি যদি
us-west1এ একটি CMEK-সুরক্ষিত ডেটাবেস তৈরি করতে চান, তাহলে একটি কী রিং তৈরি করুন এবংus-west1টাইপ করুন।একাধিক-অঞ্চল ডাটাবেস অবস্থানের জন্য, KMS একাধিক-অঞ্চল অবস্থানের নামটি ব্যবহার করুন:
- Cloud Firestore
nam5মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড KMSusমাল্টি-রিজিওন লোকেশন ব্যবহার করুন। - Cloud Firestore
eur3মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড কেএমএসeuropeমাল্টি-রিজিওন লোকেশন ব্যবহার করুন।
- Cloud Firestore
যে 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.iam.gserviceaccount.com
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 \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
FIRESTORE_DATABASE_LOCATIONযেখানে ডেটাবেসের জন্য Cloud Firestore অবস্থান উল্লেখ থাকবে। -
DATABASE_IDহলো ডাটাবেসের একটি আইডি। KMS_KEY_NAMEএ কী-টির জন্য আপনার নির্ধারিত নামটি দিন। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_IDআপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT
REST API
HTTP অনুরোধ:
পোস্ট https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
অনুরোধের মূল অংশে cmek_config.kms_key_name ফিল্ডে CMEK কনফিগার করুন।
একটি ক্লাউড কেএমএস কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করুন। শুধুমাত্র এই ডেটাবেসের একই অবস্থানে থাকা একটি কী অনুমোদিত।
এই মানটি ক্লাউড KMS কী রিসোর্স আইডি হবে এবং এর ফরম্যাটটি projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
অন্যান্য ফিল্ড সম্পর্কে আরও তথ্যের জন্য, database create পৃষ্ঠাটি দেখুন।
অনুরোধের উদাহরণ:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
ফায়ারবেস সিএলআই
একটি CMEK-সক্ষম ডাটাবেস তৈরি করতে, KMS Key Name ফিল্ডটি ব্যবহার করুন। যদি আপনি --kms-key-name প্যারামিটারটি নির্দিষ্ট না করেন, তাহলে Cloud Firestore ডিফল্টরূপে একটি নন-CMEK ডাটাবেস তৈরি করে।
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
DATABASE_IDএর সাথে আপনার ডাটাবেসের আইডি যুক্ত করুন। - আপনার ডেটাবেসের অবস্থান সহ
LOCATION -
KMS_PROJECT, যে প্রজেক্টটিতে আপনার CMEK কী রয়েছে। -
KMS_LOCATIONএ সেই অবস্থানটি উল্লেখ করুন যেখানে আপনার CMEK কী এবং কী রিং রয়েছে। - আপনার CMEK কী রিং-এর আইডি সহ
KMS_KEYRING_ID - আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT
Firebase CLI ব্যবহার করে নিশ্চিত করুন যে আপনার Cloud Firestore ডেটাবেসটি সুরক্ষিত আছে:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
প্রতিক্রিয়া বার্তায় নিম্নলিখিত CMEK তথ্য প্রদর্শিত হয়:
- KMS কী নেম ফিল্ডটি সম্পূর্ণ কী রিসোর্স নামটি প্রদান করে, যা আপনার Cloud Firestore CMEK ডেটাবেস এনক্রিপ্ট করতে ব্যবহৃত হয়।
- ‘অ্যাক্টিভ কী ভার্সনস’ ফিল্ডটি এই CMEK ডেটাবেস দ্বারা বর্তমানে ব্যবহৃত সমস্ত কী ভার্সনের একটি তালিকা প্রদান করে। কী রোটেশনের সময়, আপনার একাধিক সক্রিয় কী ভার্সন থাকতে পারে।
টেরাফর্ম
CMEK-সক্ষম ডাটাবেস তৈরি করতে, google_firestore_database রিসোর্সটি ব্যবহার করুন। আরও তথ্য এবং উদাহরণের জন্য, google_firestore_database দেখুন।
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
- আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT -
DATABASE_IDহলো ডাটাবেসের একটি আইডি। -
FIRESTORE_DATABASE_LOCATIONযেখানে ডেটাবেসের জন্য Cloud Firestore অবস্থান উল্লেখ থাকবে। -
DATABASE_TYPEসাথে Native mode-এর জন্যFIRESTORE_NATIVEঅথবা Datastore mode-এর জন্যDATASTORE_MODE। KMS_KEY_NAMEসাথে কী-টির জন্য আপনার নির্ধারিত নামটি যুক্ত করুন। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID
একটি 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_IDD \
--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) কী-এর সম্পূর্ণ রিসোর্স আইডি-তে সেট করুন। শুধুমাত্র এই ডেটাবেসের একই অবস্থানে থাকা কী-ই অনুমোদিত।
এই মানটি ক্লাউড 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"
—----------------------------------------- Response —--------------------------------------------
{
"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"
]
},
……
}
একটি কী নিষ্ক্রিয় করুন
ডাটাবেসের সাথে যুক্ত কোনো কী নিষ্ক্রিয় করতে, নিম্নলিখিতগুলি সম্পন্ন করুন:
- একটি ডাটাবেসের জন্য ব্যবহৃত প্রধান সংস্করণগুলি দেখুন ।
- ব্যবহৃত এই প্রধান সংস্করণগুলি নিষ্ক্রিয় করুন ।
- পরিবর্তনটি কার্যকর হওয়া পর্যন্ত অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য আছে কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে ৩ ঘণ্টা পর্যন্ত সময় লাগতে পারে।
যখন ডাটাবেসে ব্যবহৃত কোনো কী নিষ্ক্রিয় করা হয়, তখন একটি FAILED_PRECONDITION এক্সেপশন পাওয়ার সম্ভাবনা থাকে, যার সাথে এরর মেসেজে অতিরিক্ত বিবরণও থাকবে, যেমন:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
একটি চাবি সক্রিয় করুন
ডাটাবেসের সাথে যুক্ত কোনো কী পুনরায় সক্রিয় করতে, নিম্নলিখিতগুলি সম্পন্ন করুন:
- একটি ডাটাবেসের জন্য ব্যবহৃত প্রধান সংস্করণগুলি দেখুন
- ব্যবহৃত এই মূল সংস্করণগুলি সক্রিয় করুন
- পরিবর্তনটি কার্যকর হওয়া পর্যন্ত অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য আছে কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে ৩ ঘণ্টা পর্যন্ত সময় লাগতে পারে।
একটি ক্লাউড কেএমএস কী-এর জন্য অডিট লগ দেখুন
ক্লাউড কেএমএস ডেটা অ্যাক্সেস অডিট লগ চালু করার আগে, আপনার ক্লাউড অডিট লগ সম্পর্কে পরিচিত থাকা উচিত।
ক্লাউড কেএমএস ডেটা অ্যাক্সেস অডিট লগ আপনাকে দেখায় যে কখন 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.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" 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.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"- 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/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
নীতিমালা কার্যকর হওয়ার পর, আপনি যদি শর্তটি লঙ্ঘন করেন, তাহলে আপনি একটি 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." } ] } ] } }
এরপর কী?
,এই পৃষ্ঠায় 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.iam.gserviceaccount.com
একটি চাবি তৈরি করুন
আপনি সরাসরি ক্লাউড কেএমএস-এ তৈরি করা একটি কী অথবা ক্লাউড এক্সটার্নাল কী ম্যানেজার-এর মাধ্যমে উপলব্ধ করা একটি বাহ্যিকভাবে পরিচালিত কী ব্যবহার করতে পারেন।
ক্লাউড কেএমএস কী-এর অবস্থান অবশ্যই সেই Cloud Firestore ডাটাবেসের অবস্থানের সাথে একই হতে হবে যার সাথে এটি ব্যবহার করা হবে।
আঞ্চলিক ডেটাবেস অবস্থানগুলির জন্য, কী রিং, কী এবং ডেটাবেসের জন্য একই অবস্থানের নাম ব্যবহার করুন, কারণ অবস্থানের নামগুলির মধ্যে একটি এক-এক সম্পর্ক রয়েছে।
উদাহরণস্বরূপ, আপনি যদি
us-west1এ একটি CMEK-সুরক্ষিত ডেটাবেস তৈরি করতে চান, তাহলে একটি কী রিং তৈরি করুন এবংus-west1টাইপ করুন।একাধিক-অঞ্চল ডাটাবেস অবস্থানের জন্য, KMS একাধিক-অঞ্চল অবস্থানের নামটি ব্যবহার করুন:
- Cloud Firestore
nam5মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড KMSusমাল্টি-রিজিওন লোকেশন ব্যবহার করুন। - Cloud Firestore
eur3মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড কেএমএসeuropeমাল্টি-রিজিওন লোকেশন ব্যবহার করুন।
- Cloud Firestore
যে 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.iam.gserviceaccount.com
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 \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
FIRESTORE_DATABASE_LOCATIONযেখানে ডেটাবেসের জন্য Cloud Firestore অবস্থান উল্লেখ থাকবে। -
DATABASE_IDহলো ডাটাবেসের একটি আইডি। KMS_KEY_NAMEএ কী-টির জন্য আপনার নির্ধারিত নামটি দিন। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_IDআপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT
REST API
HTTP অনুরোধ:
পোস্ট https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
অনুরোধের মূল অংশে cmek_config.kms_key_name ফিল্ডে CMEK কনফিগার করুন।
একটি ক্লাউড কেএমএস কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করুন। শুধুমাত্র এই ডেটাবেসের একই অবস্থানে থাকা একটি কী অনুমোদিত।
এই মানটি ক্লাউড KMS কী রিসোর্স আইডি হবে এবং এর ফরম্যাটটি projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
অন্যান্য ফিল্ড সম্পর্কে আরও তথ্যের জন্য, database create পৃষ্ঠাটি দেখুন।
অনুরোধের উদাহরণ:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
ফায়ারবেস সিএলআই
একটি CMEK-সক্ষম ডাটাবেস তৈরি করতে, KMS Key Name ফিল্ডটি ব্যবহার করুন। যদি আপনি --kms-key-name প্যারামিটারটি নির্দিষ্ট না করেন, তাহলে Cloud Firestore ডিফল্টরূপে একটি নন-CMEK ডাটাবেস তৈরি করে।
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
DATABASE_IDএর সাথে আপনার ডাটাবেসের আইডি যুক্ত করুন। - আপনার ডেটাবেসের অবস্থান সহ
LOCATION -
KMS_PROJECT, যে প্রজেক্টটিতে আপনার CMEK কী রয়েছে। -
KMS_LOCATIONএ সেই অবস্থানটি উল্লেখ করুন যেখানে আপনার CMEK কী এবং কী রিং রয়েছে। - আপনার CMEK কী রিং-এর আইডি সহ
KMS_KEYRING_ID - আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT
Firebase CLI ব্যবহার করে নিশ্চিত করুন যে আপনার Cloud Firestore ডেটাবেসটি সুরক্ষিত আছে:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
প্রতিক্রিয়া বার্তায় নিম্নলিখিত CMEK তথ্য প্রদর্শিত হয়:
- KMS কী নেম ফিল্ডটি সম্পূর্ণ কী রিসোর্স নামটি প্রদান করে, যা আপনার Cloud Firestore CMEK ডেটাবেস এনক্রিপ্ট করতে ব্যবহৃত হয়।
- ‘অ্যাক্টিভ কী ভার্সনস’ ফিল্ডটি এই CMEK ডেটাবেস দ্বারা বর্তমানে ব্যবহৃত সমস্ত কী ভার্সনের একটি তালিকা প্রদান করে। কী রোটেশনের সময়, আপনার একাধিক সক্রিয় কী ভার্সন থাকতে পারে।
টেরাফর্ম
CMEK-সক্ষম ডাটাবেস তৈরি করতে, google_firestore_database রিসোর্সটি ব্যবহার করুন। আরও তথ্য এবং উদাহরণের জন্য, google_firestore_database দেখুন।
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
- আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহারযোগ্য প্রজেক্ট
FIRESTORE_PROJECT -
DATABASE_IDহলো ডাটাবেসের একটি আইডি। -
FIRESTORE_DATABASE_LOCATIONযেখানে ডেটাবেসের জন্য Cloud Firestore অবস্থান উল্লেখ থাকবে। -
DATABASE_TYPEসাথে Native mode-এর জন্যFIRESTORE_NATIVEঅথবা Datastore mode-এর জন্যDATASTORE_MODE। KMS_KEY_NAMEসাথে কী-টির জন্য আপনার নির্ধারিত নামটি যুক্ত করুন। কী-টির জন্য সম্পূর্ণ রিসোর্স নামটি নিম্নলিখিত বিন্যাসে ব্যবহার করুন:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID
একটি 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_IDD \
--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
This is also the default behavior if --encryption-type is unspecified.
ফায়ারবেস সিএলআই
Clone a CMEK-protected database to CMEK encryption
To clone to CMEK encryption, run the firebase firestore:databases:clone command with the optional encryption-type and kms-key-name flags to configure the encryption type for the cloned database. If you don't specify the encryption type, the cloned database will use the same encryption configuration as the source database.
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME
Replace KMS_KEY_NAME with the name that you assigned to the key. Use the full resource name for the key in the following format:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Clone a CMEK-protected database to default encryption
To clone to Google's default encryption (non-CMEK), set the encryption-type flag in the following way:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
Clone a CMEK-protected database to the same encryption type as the source database
To clone to the same encryption type as the source database, set the encryption-type flag in the following way:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
This is also the default behavior if --encryption-type is unspecified.
View the key in use
gcloud
You can use the databases describe gcloud CLI command to confirm database CMEK configuration:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
You should see CMEK information in the cmekConfig field in the response similar to the following:
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
The response includes the following information:
-
kmsKeyName: the full key resource name of the key that's used to encrypt your CMEK-protected database. -
activeKeyVersion: a list of all key versions currently in use by the CMEK-protected database. During key rotation , you can have multiple active key versions. Both the old key version and new key version need to be available during key rotation. Don't disable the old key version until it no longer appears in theactiveKeyVersionfield.
REST API
HTTP request:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
In the request body configure CMEK in the cmek_config.kms_key_name field. Set to the full resource ID of a Cloud KMS key. Only a key in the same location as this database is allowed.
This value should be the Cloud KMS key resource ID in the format of projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
For more information about other fields, see the database create page .
Example request and response:
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"
—----------------------------------------- Response —--------------------------------------------
{
"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"
]
},
……
}
Disable a key
To disable a key associated with a database, complete the following:
- View the key versions in use for a database .
- Disable these key versions in use .
- Wait for the change to take effect and check if the data is no longer accessible. Changes typically take effect within minutes, but can take up to 3 hours.
When a key used by a database is disabled, expect to receive a FAILED_PRECONDITION exception with additional details in the error message, for example:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
Enable a key
To re-enable a key associated with a database, complete the following:
- View the key versions in use for a database
- Enable these key versions in use
- Wait for the change to take effect and check if the data is no longer accessible. Changes typically take effect within minutes, but can take up to 3 hours.
View audit logs for a Cloud KMS key
Before you enable Cloud KMS Data Access audit logs, you should be familiar with Cloud Audit Logs .
Cloud KMS Data Access audit logs show you when Cloud Firestore or any other products that are configured to use your CMEK key make encrypt/decrypt calls to Cloud KMS. Cloud Firestore does not issue an encrypt/decrypt call on every data request, but instead maintains a poller that checks the key periodically. The polling results appear in the audit logs.
You can set up and interact with the audit logs in the Google Cloud console :
Make sure that logging is enabled for the Cloud KMS API in your project.
Go to Cloud Logging in the Google Cloud console.
Limit the log entries to your Cloud KMS key by adding the following lines to the Query builder:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATIONReplace the following:
-
KMS_KEYwith the name of the CMEK key -
KMS_KEYRINGwith the KMS key ring that contains the key -
KMS_LOCATIONwith the location of the key and key ring
The log shows a couple log entries about every five minutes per database. The log entries look similar to these examples:
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.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" 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.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"-
See Understanding audit logs for details about interpreting audit logs.
Configure a CMEK organization policy
To specify encryption compliance requirements for Cloud Firestore databases in your organization, use a CMEK organization policy constraint .
Require CMEK protection
Configure constraints/gcp.restrictNonCmekServices to require CMEK for Cloud Firestore database creation. Set the constraint to deny and add firestore.googleapis.com to the deny list, for example:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
Replace FIRESTORE_PROJECT with the project to restrict.
To learn more about configuring organization policies, see Creating and editing policies .
After the policy takes effect, you receive a FAILED_PRECONDITION exception and error message if you try to create a non-CMEK database under the affected project. For example, an exception looks like:
{ "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." } ]
Limit the use of keys for CMEK
To limit which Cloud KMS keys are used for CMEK protection, configure the constraints/gcp.restrictCmekCryptoKeyProjects constraint.
As a list constraint, the accepted values are resource hierarchy indicators (for example, projects/PROJECT_ID , under:folders/FOLDER_ID , and under:organizations/ORGANIZATION_ID ). Use this constraint by configuring a list of resource hierarchy indicators and setting the constraint to Allow . This configuration restricts supported services so that CMEK keys can be chosen only from the listed projects, folders, and organizations. Requests to create CMEK-protected resources in configured services don't succeed without a Cloud Firestore key from one of the allowed resources.
The following example allows only keys from the ALLOWED_KEY_PROJECT_ID for CMEK-protected databases in the specified project:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
After the policy takes effect, you receive a FAILED_PRECONDITION exception and an error message if you violate the constraint. An exception looks like the following:
{ "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." } ] } ] } }