গ্রাহক-পরিচালিত এনক্রিপশন কী (CMEK) ব্যবহার করুন

এই পৃষ্ঠায় Cloud Firestore জন্য গ্রাহক-পরিচালিত এনক্রিপশন কী (CMEK) সম্পর্কিত কাজগুলি কীভাবে সম্পাদন করতে হয় তা বর্ণনা করা হয়েছে। সাধারণভাবে CMEK সম্পর্কে আরও তথ্যের জন্য, কখন এবং কেন এটি সক্ষম করতে হবে তা সহ, ক্লাউড KMS ডকুমেন্টেশন দেখুন।

তোমার CMEK চাবি প্রস্তুত করো।

CMEK-সুরক্ষিত Cloud Firestore ডাটাবেস তৈরি করার আগে, আপনাকে নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করতে হবে:

  1. Cloud Firestore CMEK বৈশিষ্ট্যটিতে অ্যাক্সেসের অনুরোধ করুন
  2. একটি Cloud Firestore পরিষেবা এজেন্ট তৈরি করুন (অথবা পুনরুদ্ধার করুন)
  3. একটি CMEK কী তৈরি করুন
  4. সেই কী-এর জন্য IAM সেটিংস কনফিগার করুন

প্রতিটি প্রকল্পের জন্য এই পদক্ষেপগুলি সম্পূর্ণ করুন যেখানে CMEK-সুরক্ষিত Cloud Firestore ডাটাবেস থাকবে। যদি আপনি পরে একটি নতুন CMEK কী তৈরি করেন, তাহলে আপনাকে সেই কীটির জন্য IAM সেটিংস কনফিগার করতে হবে।

অ্যাক্সেসের অনুরোধ করুন

Cloud Firestore সার্ভিস এজেন্ট তৈরি করার আগে, এই ফর্মটি পূরণ করে CMEK বৈশিষ্ট্যটিতে অ্যাক্সেসের অনুরোধ করুন।

একটি Cloud Firestore পরিষেবা এজেন্ট তৈরি করুন

CMEK কী তৈরি করার আগে, আপনার অবশ্যই একটি Cloud Firestore পরিষেবা এজেন্ট থাকতে হবে, যা এক ধরণের গুগল-পরিচালিত পরিষেবা অ্যাকাউন্ট যা Cloud Firestore কী অ্যাক্সেস করতে ব্যবহার করে।

Cloud Firestore আপনার পক্ষ থেকে CMEK কী অ্যাক্সেস করার জন্য যে সার্ভিস এজেন্ট ব্যবহার করে, সেটি তৈরি করতে সার্ভিসেস আইডেন্টিটি ক্রিয়েট কমান্ডটি চালান। এই কমান্ডটি যদি সার্ভিস অ্যাকাউন্টটি ইতিমধ্যেই বিদ্যমান না থাকে, তাহলে এটি তৈরি করে, তারপর এটি প্রদর্শন করে।

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

একটি কী তৈরি করুন

আপনি ক্লাউড কেএমএসে সরাসরি তৈরি একটি কী অথবা ক্লাউড এক্সটার্নাল কী ম্যানেজারের মাধ্যমে উপলব্ধ একটি বহিরাগতভাবে পরিচালিত কী ব্যবহার করতে পারেন।

ক্লাউড KMS কী-এর অবস্থান অবশ্যই Cloud Firestore ডাটাবেসের অবস্থানের সাথে একই হতে হবে যেখানে এটি ব্যবহার করা হবে।

  • আঞ্চলিক ডাটাবেস অবস্থানের জন্য, কী রিং, কী এবং ডাটাবেসের জন্য একই অবস্থানের নাম ব্যবহার করুন কারণ অবস্থানের নামগুলিতে এক-থেকে-এক ম্যাপিং থাকে।

    উদাহরণস্বরূপ, যদি আপনি us-west1 তে একটি CMEK-সুরক্ষিত ডাটাবেস তৈরি করতে চান, তাহলে us-west1 তে একটি কী রিং এবং কী তৈরি করুন।

  • মাল্টি-রিজিওন ডাটাবেস অবস্থানের জন্য, KMS মাল্টি-রিজিওন অবস্থানের অবস্থানের নাম ব্যবহার করুন:

    • Cloud Firestore nam5 মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড KMS us মাল্টি-রিজিওন লোকেশন ব্যবহার করুন।
    • Cloud Firestore eur3 মাল্টি-রিজিওন লোকেশনের জন্য ক্লাউড KMS europe মাল্টি-রিজিওন লোকেশন ব্যবহার করুন।

যে Google Cloud প্রজেক্টে আপনি আপনার কীগুলি পরিচালনা করতে চান, সেখানে নিম্নলিখিতগুলি সম্পূর্ণ করুন:

  1. ক্লাউড KMS API সক্ষম করুন

  2. নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে একটি চাবির রিং এবং একটি চাবি তৈরি করুন:

কীটির জন্য IAM সেটিংস কনফিগার করুন

কনসোল

আপনার পরিষেবা এজেন্টকে ক্লাউড KMS ভূমিকা প্রদান করতে, নিম্নলিখিতগুলি করুন। আপনি যদি কম গ্র্যানুলারিটি চান তবে কী বা কী-রিং স্তরেও অনুমতি প্রদান করতে পারবেন।

  1. গুগল ক্লাউড কনসোলে, IAM পৃষ্ঠায় যান।

    IAM পৃষ্ঠায় যান।

  2. যোগ করুন ক্লিক করুন।

  3. আপনার Cloud Firestore পরিষেবা এজেন্টের ইমেল-ফর্ম্যাট করা আইডি লিখুন।

  4. ক্লাউড কেএমএস ক্রিপ্টোকি এনক্রিপ্টার/ডিক্রিপ্টার ভূমিকা নির্বাচন করুন।

  5. সংরক্ষণ করুন ক্লিক করুন।

জিক্লাউড

আপনার পরিষেবা এজেন্টকে 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 কী রিং সহ, যাতে চাবিটি থাকে
  • 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-সুরক্ষিত ডাটাবেস তৈরি করতে পারেন। Google ডিফল্ট এনক্রিপশন দ্বারা সুরক্ষিত বিদ্যমান Cloud Firestore ডাটাবেসগুলিকে CMEK ব্যবহারে রূপান্তর করা যাবে না।

আপনি যখন একটি CMEK-সক্ষম ডাটাবেস তৈরি করবেন তখনই আপনি একটি এনক্রিপশন ধরণ এবং কী নির্বাচন করতে পারবেন।

কনসোল

  1. গুগল ক্লাউড কনসোলে, ডাটাবেস পৃষ্ঠায় যান।

    ডাটাবেস পৃষ্ঠায় যান।

  2. ডাটাবেস তৈরি করুন ক্লিক করুন।

  3. আপনার ডাটাবেস মোড নির্বাচন করুন। চালিয়ে যান ক্লিক করুন।

  4. আপনার ডাটাবেস কনফিগার করুন পৃষ্ঠায়, একটি ডাটাবেস আইডি লিখুন।

  5. একটি অবস্থান নির্বাচন করুন।

  6. এনক্রিপশন বিকল্পগুলি দেখান ক্লিক করুন, এবং তারপর ক্লাউড KMS কী নির্বাচন করুন।

  7. ডাটাবেসের জন্য যে CMEK কীটি ব্যবহার করতে চান তার জন্য রিসোর্সের নাম নির্বাচন করুন বা লিখুন।

  8. কীগুলির তালিকা বর্তমান Google Cloud প্রকল্প এবং আপনার নির্বাচিত ডাটাবেস অবস্থানের মধ্যে সীমাবদ্ধ। অন্য কোনও Google Cloud প্রকল্প থেকে কী ব্যবহার করতে, "প্রকল্প পরিবর্তন করুন" বা "ম্যানুয়ালি কী প্রবেশ করুন" এ ক্লিক করুন।

  9. যদি আপনাকে Cloud Firestore পরিষেবা অ্যাকাউন্টের জন্য কী অনুমতি দেওয়ার জন্য অনুরোধ করা হয়, তাহলে Grant এ ক্লিক করুন। একটি CMEK ডাটাবেস তৈরি করতে, আপনার Cloud Firestore পরিষেবা অ্যাকাউন্টকে cloudkms.cryptoKeyEncrypterDecrypter ভূমিকা প্রদান করতে হবে।

  10. মোবাইল এবং ওয়েব ক্লায়েন্টদের জন্য নিরাপত্তা নিয়ম নির্বাচন করুন।

  11. ডাটাবেস তৈরি করুন ক্লিক করুন।

ডাটাবেস তৈরি হয়ে গেলে, আপনি ডাটাবেসের বিবরণ দেখে যাচাই করতে পারেন যে ডাটাবেসটি CMEK-সক্ষম:

  • যদি আপনার ডাটাবেস CMEK দ্বারা সুরক্ষিত থাকে, তাহলে এনক্রিপশন টাইপ ফিল্ডটি গ্রাহক-পরিচালিত হিসাবে দেখানো হবে এবং এনক্রিপশন কী ফিল্ডটি সংশ্লিষ্ট ক্লাউড KMS এবং এই ডাটাবেসটি সুরক্ষিত করার জন্য ব্যবহৃত কী সংস্করণটি তালিকাভুক্ত করবে।
  • যদি আপনার ডাটাবেস CMEK দ্বারা সুরক্ষিত না থাকে, তাহলে Encryption type ক্ষেত্রটি Google-managed হিসাবে প্রদর্শিত হবে।

জিক্লাউড

Google Cloud CLI দিয়ে সিএমইকে-সক্ষম ডাটাবেস তৈরি করার আগে, সর্বশেষ সংস্করণটি ইনস্টল করুন এবং gcloud CLI অনুমোদন করুন। আরও তথ্যের জন্য, জিক্লাউড সিএলআই ইনস্টল করুন দেখুন।

gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
      --database=DATABASE_ID \
      --kms-key-name=KMS_KEY_NAME \
      --project=FIRESTORE_PROJECT

নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

  • ডাটাবেসের জন্য Cloud Firestore অবস্থান সহ 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

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} ফর্ম্যাটে ক্লাউড KMS কী রিসোর্স আইডি হওয়া উচিত।

অন্যান্য ক্ষেত্র সম্পর্কে আরও তথ্যের জন্য, 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
  • আপনার CMEK কী ধারণকারী প্রকল্পের সাথে KMS_PROJECT
  • KMS_LOCATION যেখানে আপনার CMEK কী এবং কীরিং আছে সেই অবস্থানটি রয়েছে
  • আপনার CMEK কীরিং এর আইডি সহ KMS_KEYRING_ID
  • আপনার Cloud Firestore ডাটাবেসের জন্য ব্যবহারযোগ্য প্রকল্পের সাথে FIRESTORE_PROJECT

নিশ্চিত করুন যে আপনার Cloud Firestore ডাটাবেস Firebase CLI দ্বারা সুরক্ষিত:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

প্রতিক্রিয়া বার্তায় নিম্নলিখিত CMEK তথ্য প্রদর্শিত হবে:

  • KMS Key Name ফিল্ডটি আপনার 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
  • ডাটাবেসের জন্য Cloud Firestore অবস্থান সহ FIRESTORE_DATABASE_LOCATION
  • DATABASE_TYPE নেটিভ মোডের জন্য FIRESTORE_NATIVE অথবা ডেটাস্টোর মোডের জন্য DATASTORE_MODE সহ।
  • KMS_KEY_NAME আপনার দ্বারা নির্ধারিত নাম সহ। কীটির জন্য সম্পূর্ণ রিসোর্স নামটি এই ফর্ম্যাটে ব্যবহার করুন:

    projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID

একটি CMEK-সুরক্ষিত ডাটাবেস অ্যাক্সেস করুন

CMEK-সুরক্ষিত ডাটাবেসে পাঠানো সমস্ত পঠন, লেখা এবং কোয়েরি অপারেশনগুলি Google ডিফল্ট এনক্রিপ্ট করা ডাটাবেসের মতোই কাজ করবে। উদাহরণস্বরূপ, প্রতিটি অনুরোধের জন্য আপনাকে একটি কী প্রদান করতে হবে না।

একটি CMEK-সুরক্ষিত ডাটাবেস পুনরুদ্ধার করুন

ব্যাকআপ থেকে CMEK-সুরক্ষিত ডাটাবেস পুনরুদ্ধার করার আগে:

  • আপনি ডাটাবেসটি CMEK এনক্রিপশনে, Google-এর ডিফল্ট এনক্রিপশনে (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-সুরক্ষিত ডাটাবেস ডিফল্ট এনক্রিপশনে পুনরুদ্ধার করুন

গুগলের ডিফল্ট এনক্রিপশন (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
  • আপনার Cloud Firestore ডাটাবেসের অবস্থান সহ FIRESTORE_LOCATION
  • আপনার ব্যাকআপের আইডি সহ BACKUP_ID
  • আপনার CMEK কী ধারণকারী প্রকল্পের সাথে KMS_PROJECT
  • KMS_LOCATION যেখানে আপনার CMEK কী এবং কীরিং আছে সেই অবস্থানটি রয়েছে
  • আপনার CMEK কীরিং এর আইডি সহ KMS_KEYRING_ID

নিশ্চিত করুন যে আপনার পুনরুদ্ধার করা Cloud Firestore ডাটাবেসটি CMEK-এনক্রিপ্ট করা আছে:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

একটি CMEK-সুরক্ষিত ডাটাবেস ডিফল্ট এনক্রিপশনে পুনরুদ্ধার করুন

গুগলের ডিফল্ট এনক্রিপশন (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
  • আপনার Cloud Firestore ডাটাবেসের অবস্থান সহ FIRESTORE_LOCATION
  • আপনার ব্যাকআপের আইডি সহ 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
  • আপনার Cloud Firestore ডাটাবেসের অবস্থান সহ FIRESTORE_LOCATION
  • আপনার ব্যাকআপের আইডি সহ BACKUP_ID

একটি CMEK-সুরক্ষিত ডাটাবেস ক্লোন করুন

CMEK-সুরক্ষিত ডাটাবেস ক্লোন করার আগে:

  • আপনি ডাটাবেসটি CMEK এনক্রিপশনে, Google-এর ডিফল্ট এনক্রিপশনে (CMEK নয়), নাকি সোর্স ডাটাবেসের মতো একই এনক্রিপশনে ক্লোন করতে চান তা নির্ধারণ করুন।
  • সোর্স ডাটাবেস এনক্রিপ্ট করার জন্য ব্যবহৃত কী (প্রাথমিক-সংস্করণ) এবং কী সংস্করণটি প্রস্তুত করুন। কী এবং কী সংস্করণ উভয়ই সক্ষম করুন।

জিক্লাউড

CMEK-সুরক্ষিত ডাটাবেসকে CMEK এনক্রিপশনে ক্লোন করুন

CMEK এনক্রিপশনে ক্লোন করতে, ক্লোন করা ডাটাবেসের জন্য এনক্রিপশন টাইপ কনফিগার করতে ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ সহ gcloud alpha firestore databases clone কমান্ডটি চালান। যদি আপনি এনক্রিপশন টাইপ নির্দিষ্ট না করেন, তাহলে ক্লোন করা ডাটাবেস সোর্স ডাটাবেসের মতো একই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।

gcloud alpha 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-সুরক্ষিত ডাটাবেসকে ডিফল্ট এনক্রিপশনে ক্লোন করুন

গুগলের ডিফল্ট এনক্রিপশনে (CMEK নয়) ক্লোন করতে, encryption-type ফ্ল্যাগটি নিম্নলিখিত উপায়ে সেট করুন:

gcloud alpha firestore databases clone \
--encryption-type=google-default-encryption

সোর্স ডাটাবেসের মতো একই এনক্রিপশন টাইপের একটি CMEK-সুরক্ষিত ডাটাবেস ক্লোন করুন।

সোর্স ডাটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করতে, নিম্নলিখিত পদ্ধতিতে encryption-type ফ্ল্যাগ সেট করুন:

gcloud alpha firestore databases clone \
--encryption-type=use-source-encryption

ব্যবহৃত কীটি দেখুন

জিক্লাউড

ডাটাবেস 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 কনফিগার করুন। একটি ক্লাউড KMS কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করুন। এই ডাটাবেসের মতো একই স্থানে শুধুমাত্র একটি কী অনুমোদিত।

এই মানটি projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} ফর্ম্যাটে ক্লাউড KMS কী রিসোর্স আইডি হওয়া উচিত।

অন্যান্য ক্ষেত্র সম্পর্কে আরও তথ্যের জন্য, 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"
    ]
  },
  ……
}

একটি কী অক্ষম করুন

ডাটাবেসের সাথে সম্পর্কিত একটি কী নিষ্ক্রিয় করতে, নিম্নলিখিতগুলি সম্পূর্ণ করুন:

  1. ডাটাবেসের জন্য ব্যবহৃত মূল সংস্করণগুলি দেখুন
  2. ব্যবহৃত এই কী সংস্করণগুলি অক্ষম করুন
  3. পরিবর্তনটি কার্যকর হওয়ার জন্য অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে 3 ঘন্টা পর্যন্ত সময় লাগতে পারে।

যখন একটি ডাটাবেস দ্বারা ব্যবহৃত একটি কী অক্ষম করা হয়, তখন ত্রুটি বার্তায় অতিরিক্ত বিবরণ সহ একটি 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)"
      }
    ]
  }
}

একটি কী সক্রিয় করুন

ডাটাবেসের সাথে সম্পর্কিত একটি কী পুনরায় সক্রিয় করতে, নিম্নলিখিতগুলি সম্পূর্ণ করুন:

  1. ডাটাবেসের জন্য ব্যবহৃত মূল সংস্করণগুলি দেখুন
  2. ব্যবহৃত এই কী ভার্সনগুলি সক্ষম করুন
  3. পরিবর্তনটি কার্যকর হওয়ার জন্য অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে 3 ঘন্টা পর্যন্ত সময় লাগতে পারে।

ক্লাউড KMS কী-এর জন্য অডিট লগ দেখুন

ক্লাউড কেএমএস ডেটা অ্যাক্সেস অডিট লগ সক্ষম করার আগে, আপনার ক্লাউড অডিট লগের সাথে পরিচিত হওয়া উচিত।

ক্লাউড কেএমএস ডেটা অ্যাক্সেস অডিট লগগুলি আপনাকে দেখায় যে Cloud Firestore বা আপনার সিএমইকে কী ব্যবহারের জন্য কনফিগার করা অন্য কোনও পণ্য কখন ক্লাউড কেএমএসে এনক্রিপ্ট/ডিক্রিপ্ট কল করে। Cloud Firestore প্রতিটি ডেটা অনুরোধে এনক্রিপ্ট/ডিক্রিপ্ট কল জারি করে না, বরং একটি পোলার বজায় রাখে যা পর্যায়ক্রমে কীটি পরীক্ষা করে। পোলিং ফলাফল অডিট লগে প্রদর্শিত হয়।

আপনি গুগল ক্লাউড কনসোলে অডিট লগ সেট আপ করতে এবং ইন্টারঅ্যাক্ট করতে পারেন:

  1. আপনার প্রোজেক্টে ক্লাউড KMS API-এর জন্য লগিং সক্ষম আছে কিনা তা নিশ্চিত করুন।

  2. গুগল ক্লাউড কনসোলে Cloud Logging -এ যান।

    Cloud Logging এ যান

  3. কোয়েরি বিল্ডারে নিম্নলিখিত লাইনগুলি যোগ করে আপনার ক্লাউড KMS কী-তে লগ এন্ট্রি সীমাবদ্ধ করুন:

    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 কী রিং সহ, যাতে চাবিটি থাকে
    • চাবি এবং চাবির রিংয়ের অবস্থান সহ 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 প্রতিষ্ঠান নীতি কনফিগার করুন

আপনার প্রতিষ্ঠানের Cloud Firestore ডাটাবেসের জন্য এনক্রিপশন সম্মতির প্রয়োজনীয়তা নির্দিষ্ট করতে, একটি CMEK প্রতিষ্ঠানের নীতি সীমাবদ্ধতা ব্যবহার করুন।

CMEK সুরক্ষা প্রয়োজন

Cloud Firestore ডাটাবেস তৈরির জন্য CMEK প্রয়োজন করতে constraints/gcp.restrictNonCmekServices কনফিগার করুন। constraints কে deny এ সেট করুন এবং firestore.googleapis.com deny তালিকায় যোগ করুন, উদাহরণস্বরূপ:

 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 constraints কনফিগার করুন।

তালিকার সীমাবদ্ধতা হিসেবে, গৃহীত মানগুলি হল রিসোর্স হায়ারার্কি সূচক (উদাহরণস্বরূপ, projects/PROJECT_ID , under:folders/FOLDER_ID , এবং under:organizations/ORGANIZATION_ID )। রিসোর্স হায়ারার্কি সূচকগুলির একটি তালিকা কনফিগার করে এবং সীমাবদ্ধতাটিকে Allow এ সেট করে এই সীমাবদ্ধতাটি ব্যবহার করুন। এই কনফিগারেশনটি সমর্থিত পরিষেবাগুলিকে সীমাবদ্ধ করে যাতে CMEK কীগুলি শুধুমাত্র তালিকাভুক্ত প্রকল্প, ফোল্ডার এবং সংস্থাগুলি থেকে বেছে নেওয়া যায়। কনফিগার করা পরিষেবাগুলিতে CMEK-সুরক্ষিত রিসোর্স তৈরির অনুরোধ অনুমোদিত রিসোর্সগুলির একটি থেকে Cloud Firestore কী ছাড়া সফল হয় না।

নিম্নলিখিত উদাহরণটি নির্দিষ্ট প্রকল্পে 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."
          }
        ]
      }
    ]
  }
}

এরপর কি?